Merge branch 'master' into greenkeeper/react-addons-test-utils-15.4.1
This commit is contained in:
Коммит
44f696b624
Двоичный файл не отображается.
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="54px" height="37px" viewBox="0 0 54 37" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Group 36</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round">
|
||||
<g id="Group-40" transform="translate(-23.000000, -23.000000)" stroke="#FFFFFF" stroke-width="6">
|
||||
<g id="Group-36" transform="translate(26.000000, 26.000000)">
|
||||
<path d="M0,15.4285714 C0,15.4285714 10.8,0 24,0 C37.1142857,0 48,15.4285714 48,15.4285714 C48,15.4285714 37.0285714,30.8571429 24,30.8571429 C10.8857143,30.8571429 0,15.4285714 0,15.4285714 Z" id="Shape"></path>
|
||||
<ellipse id="Oval" cx="24" cy="15.4285714" rx="8.57142857" ry="8.57142857"></ellipse>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 1.0 KiB |
Двоичные данные
assets/sketch files/AMO - V1.sketch
Двоичные данные
assets/sketch files/AMO - V1.sketch
Двоичный файл не отображается.
|
@ -124,6 +124,9 @@ module.exports = function karmaConf(conf) {
|
|||
files: [
|
||||
'test-runner.js',
|
||||
],
|
||||
mochaReporter: {
|
||||
showDiff: true,
|
||||
},
|
||||
preprocessors: {
|
||||
'test-runner.js': ['webpack', 'sourcemap'],
|
||||
},
|
||||
|
|
|
@ -4,7 +4,7 @@ msgstr ""
|
|||
"Project-Id-Version: amo\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2016-11-10 09:55+0000\n"
|
||||
"PO-Revision-Date: 2016-11-22 13:09+0000\n"
|
||||
"PO-Revision-Date: 2016-11-28 10:11+0000\n"
|
||||
"Last-Translator: :stoyan <stoyan@gmx.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: bg\n"
|
||||
|
@ -16,219 +16,219 @@ msgstr ""
|
|||
|
||||
#: src/amo/components/AddonDetail.js:49
|
||||
msgid "%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s"
|
||||
msgstr ""
|
||||
msgstr "%(addonName)s %(startSpan)sот %(authorList)s%(endSpan)s"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:74
|
||||
msgid "Extension Metadata"
|
||||
msgstr ""
|
||||
msgstr "Метаданни за разширението"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:81
|
||||
msgid "Screenshots"
|
||||
msgstr ""
|
||||
msgstr "Снимки на екрана"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:88
|
||||
msgid "About this extension"
|
||||
msgstr ""
|
||||
msgstr "Относно добавката"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:96
|
||||
msgid "Rate your experience"
|
||||
msgstr ""
|
||||
msgstr "Дайте оценка"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:19
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
msgstr "Категория"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:24
|
||||
msgid "Used by"
|
||||
msgstr ""
|
||||
msgstr "Ползвател"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:29
|
||||
msgid "Sentiment"
|
||||
msgstr ""
|
||||
msgstr "Мнение"
|
||||
|
||||
#: src/amo/components/AddonReview.js:109
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "Назад"
|
||||
|
||||
#: src/amo/components/AddonReview.js:113
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
msgstr "Изпращане"
|
||||
|
||||
#: src/amo/components/AddonReview.js:41
|
||||
msgid "Please enter some text"
|
||||
msgstr ""
|
||||
msgstr "Моля, въведете текст"
|
||||
|
||||
#: src/amo/components/AddonReview.js:90
|
||||
msgid "Write a review"
|
||||
msgstr ""
|
||||
msgstr "Писане на отзив"
|
||||
|
||||
#: src/amo/components/AddonReview.js:92
|
||||
msgid "Tell the world why you think this extension is fantastic!"
|
||||
msgstr ""
|
||||
msgstr "Разкажете на света защо смятате, че това разширение е чудесно!"
|
||||
|
||||
#: src/amo/components/Footer.js:27
|
||||
msgid "Privacy policy"
|
||||
msgstr ""
|
||||
msgstr "Политика на поверителност"
|
||||
|
||||
#: src/amo/components/Footer.js:33
|
||||
msgid "Legal notices"
|
||||
msgstr ""
|
||||
msgstr "Правни бележки"
|
||||
|
||||
#: src/amo/components/Footer.js:39
|
||||
msgid "View desktop site"
|
||||
msgstr ""
|
||||
msgstr "Настолна версия"
|
||||
|
||||
#: src/amo/components/LanguagePicker.js:20
|
||||
msgid "Browse in your language"
|
||||
msgstr ""
|
||||
msgstr "Четете на своя език"
|
||||
|
||||
#: src/amo/components/MastHead.js:29
|
||||
msgid "Firefox Add-ons"
|
||||
msgstr ""
|
||||
msgstr "Добавки за Firefox"
|
||||
|
||||
#: src/amo/components/OverallRating.js:45
|
||||
msgid "How are you enjoying your experience with %(addonName)s?"
|
||||
msgstr ""
|
||||
msgstr "До каква степен ви харесва %(addonName)s?"
|
||||
|
||||
#: src/amo/components/ScreenShots.js:28
|
||||
msgid "screenshot %(imageNumber)s of %(totalImages)s"
|
||||
msgstr ""
|
||||
msgstr "снимка %(imageNumber)s от %(totalImages)s"
|
||||
|
||||
#: src/amo/components/SearchResult.js:23
|
||||
msgid "Average rating: %(rating)s out of 5"
|
||||
msgstr ""
|
||||
msgstr "Средна оценка: %(rating)s от 5"
|
||||
|
||||
#: src/amo/components/SearchResult.js:29
|
||||
msgid "No ratings"
|
||||
msgstr ""
|
||||
msgstr "Без оценка"
|
||||
|
||||
#: src/amo/components/SearchResult.js:43
|
||||
msgid "%(users)s user"
|
||||
msgid_plural "%(users)s users"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%(users)s потребител"
|
||||
msgstr[1] "%(users)s потребителя"
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log out"
|
||||
msgstr ""
|
||||
msgstr "Изход"
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log in/Sign up"
|
||||
msgstr ""
|
||||
msgstr "Вход/Регистрация"
|
||||
|
||||
#: src/amo/containers/App.js:51
|
||||
msgid "Add-ons for Firefox"
|
||||
msgstr ""
|
||||
msgstr "Добавки за Firefox"
|
||||
|
||||
#: src/amo/containers/Home.js:18
|
||||
msgid "What do you want Firefox to do?"
|
||||
msgstr ""
|
||||
msgstr "Какво бихте желали Firefox да направи?"
|
||||
|
||||
#: src/amo/containers/Home.js:20
|
||||
msgid "Block ads"
|
||||
msgstr ""
|
||||
msgstr "Блокиране на реклами"
|
||||
|
||||
#: src/amo/containers/Home.js:21
|
||||
msgid "Screenshot"
|
||||
msgstr ""
|
||||
msgstr "Снимка на екрана"
|
||||
|
||||
#: src/amo/containers/Home.js:22
|
||||
msgid "Save stuff"
|
||||
msgstr ""
|
||||
msgstr "Запазване на неща"
|
||||
|
||||
#: src/amo/containers/Home.js:23
|
||||
msgid "Shop online"
|
||||
msgstr ""
|
||||
msgstr "Пазаруване он-лайн"
|
||||
|
||||
#: src/amo/containers/Home.js:24
|
||||
msgid "Be social"
|
||||
msgstr ""
|
||||
msgstr "Бъде социален"
|
||||
|
||||
#: src/amo/containers/Home.js:25
|
||||
msgid "Share stuff"
|
||||
msgstr ""
|
||||
msgstr "Споделя неща"
|
||||
|
||||
#: src/amo/containers/Home.js:28
|
||||
msgid "Browse all extensions"
|
||||
msgstr ""
|
||||
msgstr "Преглед на всички разширения"
|
||||
|
||||
#: src/amo/containers/Home.js:31
|
||||
msgid "How do you want Firefox to look?"
|
||||
msgstr ""
|
||||
msgstr "Как бихте желали Firefox да изглежда?"
|
||||
|
||||
#: src/amo/containers/Home.js:33
|
||||
msgid "Wild"
|
||||
msgstr ""
|
||||
msgstr "Див"
|
||||
|
||||
#: src/amo/containers/Home.js:34
|
||||
msgid "Abstract"
|
||||
msgstr ""
|
||||
msgstr "Абстрактен"
|
||||
|
||||
#: src/amo/containers/Home.js:35
|
||||
msgid "Fashionable"
|
||||
msgstr ""
|
||||
msgstr "Модерен"
|
||||
|
||||
#: src/amo/containers/Home.js:36
|
||||
msgid "Scenic"
|
||||
msgstr ""
|
||||
msgstr "Жовиписен"
|
||||
|
||||
#: src/amo/containers/Home.js:37
|
||||
msgid "Sporty"
|
||||
msgstr ""
|
||||
msgstr "Спортен"
|
||||
|
||||
#: src/amo/containers/Home.js:38
|
||||
msgid "Mystical"
|
||||
msgstr ""
|
||||
msgstr "Мистичен"
|
||||
|
||||
#: src/amo/containers/Home.js:41
|
||||
msgid "Browse all themes"
|
||||
msgstr ""
|
||||
msgstr "Преглед на всички теми"
|
||||
|
||||
#: src/core/components/InstallButton/index.js:49
|
||||
msgid "Downloading %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Изтегляне на %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:52
|
||||
msgid "Installing %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Инсталиране на %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:56
|
||||
msgid "%(name)s is installed and enabled. Click to uninstall."
|
||||
msgstr ""
|
||||
msgstr "%(name)s е инсталирана и включена. Натиснете за премахване."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:59
|
||||
msgid "%(name)s is disabled. Click to enable."
|
||||
msgstr ""
|
||||
msgstr "%(name)s е изключена. Натиснете за включване."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:62
|
||||
msgid "Uninstalling %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Премахване на %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:65
|
||||
msgid "%(name)s is uninstalled. Click to install."
|
||||
msgstr ""
|
||||
msgstr "%(name)s е премахната. Натиснете за инсталиране."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:68
|
||||
msgid "Install state for %(name)s is unknown."
|
||||
msgstr ""
|
||||
msgstr "Състоянието на инсталацията на %(name)s е неизвестно."
|
||||
|
||||
#: src/core/components/Paginate/index.js:102
|
||||
msgid "Previous"
|
||||
msgstr ""
|
||||
msgstr "Предишна"
|
||||
|
||||
#: src/core/components/Paginate/index.js:104
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
msgstr "Следваща"
|
||||
|
||||
#: src/core/components/Paginate/index.js:97
|
||||
msgid "Page %(currentPage)s of %(totalPages)s"
|
||||
msgstr ""
|
||||
msgstr "Страница %(currentPage)s от %(totalPages)s"
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:40
|
||||
msgid "Your search for \"%(query)s\" returned %(count)s result."
|
||||
msgid_plural "Your search for \"%(query)s\" returned %(count)s results."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Търсенето ви за „%(query)s“ върна %(count)s резултат."
|
||||
msgstr[1] "Търсенето ви за „%(query)s“ върна %(count)s резултата."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:56
|
||||
msgid "Searching..."
|
||||
|
@ -236,8 +236,8 @@ msgstr "Търсене…"
|
|||
|
||||
#: src/core/components/Search/SearchResults.js:59
|
||||
msgid "No results were found for \"%(query)s\"."
|
||||
msgstr ""
|
||||
msgstr "Не бяха намерени резултати за „%(query)s“."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:61
|
||||
msgid "Please supply a valid search"
|
||||
msgstr ""
|
||||
msgstr "Въведете термин"
|
||||
|
|
|
@ -4,7 +4,7 @@ msgstr ""
|
|||
"Project-Id-Version: amo\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2016-11-10 09:55+0000\n"
|
||||
"PO-Revision-Date: 2016-11-21 17:25+0000\n"
|
||||
"PO-Revision-Date: 2016-12-02 12:40+0000\n"
|
||||
"Last-Translator: Tomáš Zelina <zelitomas@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: cs\n"
|
||||
|
@ -44,7 +44,7 @@ msgstr "Používá"
|
|||
|
||||
#: src/amo/components/AddonMeta.js:29
|
||||
msgid "Sentiment"
|
||||
msgstr ""
|
||||
msgstr "Sentimentálně"
|
||||
|
||||
#: src/amo/components/AddonReview.js:109
|
||||
msgid "Back"
|
||||
|
@ -131,7 +131,7 @@ msgstr "Blokovat reklamy"
|
|||
|
||||
#: src/amo/containers/Home.js:21
|
||||
msgid "Screenshot"
|
||||
msgstr ""
|
||||
msgstr "Snímek obrazovky"
|
||||
|
||||
#: src/amo/containers/Home.js:22
|
||||
msgid "Save stuff"
|
||||
|
@ -203,7 +203,7 @@ msgstr "Doplněk %(name)s je zakázán. Klepněte pro povolení."
|
|||
|
||||
#: src/core/components/InstallButton/index.js:62
|
||||
msgid "Uninstalling %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Odinstalace doplňku %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:65
|
||||
msgid "%(name)s is uninstalled. Click to install."
|
||||
|
|
|
@ -1,241 +1,243 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: amo\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2016-11-10 09:55+0000\n"
|
||||
"PO-Revision-Date: 2016-11-10 09:55+0000\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"PO-Revision-Date: 2016-12-11 14:51+0000\n"
|
||||
"Last-Translator: Jim Spentzos <jamesspentzos@hotmail.com>\n"
|
||||
"Language-Team: none\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: Pontoon\n"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:49
|
||||
msgid "%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s"
|
||||
msgstr ""
|
||||
msgstr "%(addonName)s %(startSpan)s από %(authorList)s%(endSpan)s"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:74
|
||||
msgid "Extension Metadata"
|
||||
msgstr ""
|
||||
msgstr "Μεταδεδομένα επέκτασης"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:81
|
||||
msgid "Screenshots"
|
||||
msgstr ""
|
||||
msgstr "Στιγμιότυπα"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:88
|
||||
msgid "About this extension"
|
||||
msgstr ""
|
||||
msgstr "Σχετικά με την επέκταση"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:96
|
||||
msgid "Rate your experience"
|
||||
msgstr ""
|
||||
msgstr "Αξιολογήστε την εμπειρία σας"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:19
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
msgstr "Κατηγορία"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:24
|
||||
msgid "Used by"
|
||||
msgstr ""
|
||||
msgstr "Χρήση από"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:29
|
||||
msgid "Sentiment"
|
||||
msgstr ""
|
||||
msgstr "Αίσθηση"
|
||||
|
||||
#: src/amo/components/AddonReview.js:109
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "Πίσω"
|
||||
|
||||
#: src/amo/components/AddonReview.js:113
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
msgstr "Υποβολή"
|
||||
|
||||
#: src/amo/components/AddonReview.js:41
|
||||
msgid "Please enter some text"
|
||||
msgstr ""
|
||||
msgstr "Παρακαλώ εισάγετε κείμενο"
|
||||
|
||||
#: src/amo/components/AddonReview.js:90
|
||||
msgid "Write a review"
|
||||
msgstr ""
|
||||
msgstr "Γράψτε μια κριτική"
|
||||
|
||||
#: src/amo/components/AddonReview.js:92
|
||||
msgid "Tell the world why you think this extension is fantastic!"
|
||||
msgstr ""
|
||||
msgstr "Πείτε στον κόσμο γιατί θεωρείτε ότι αυτή η επέκταση είναι φανταστική!"
|
||||
|
||||
#: src/amo/components/Footer.js:27
|
||||
msgid "Privacy policy"
|
||||
msgstr ""
|
||||
msgstr "Πολιτική απορρήτου"
|
||||
|
||||
#: src/amo/components/Footer.js:33
|
||||
msgid "Legal notices"
|
||||
msgstr ""
|
||||
msgstr "Νομικές σημειώσεις"
|
||||
|
||||
#: src/amo/components/Footer.js:39
|
||||
msgid "View desktop site"
|
||||
msgstr ""
|
||||
msgstr "Προβολή ιστοσελίδας για υπολογιστές"
|
||||
|
||||
#: src/amo/components/LanguagePicker.js:20
|
||||
msgid "Browse in your language"
|
||||
msgstr ""
|
||||
msgstr "Περιήγηση στη γλώσσα σας"
|
||||
|
||||
#: src/amo/components/MastHead.js:29
|
||||
msgid "Firefox Add-ons"
|
||||
msgstr ""
|
||||
msgstr "Πρόσθετα Firefox"
|
||||
|
||||
#: src/amo/components/OverallRating.js:45
|
||||
msgid "How are you enjoying your experience with %(addonName)s?"
|
||||
msgstr ""
|
||||
msgstr "Απολαμβάνετε την εμπειρία σας με το %(addonName)s;"
|
||||
|
||||
#: src/amo/components/ScreenShots.js:28
|
||||
msgid "screenshot %(imageNumber)s of %(totalImages)s"
|
||||
msgstr ""
|
||||
msgstr "Στιγμιότυπο %(imageNumber)s από %(totalImages)s"
|
||||
|
||||
#: src/amo/components/SearchResult.js:23
|
||||
msgid "Average rating: %(rating)s out of 5"
|
||||
msgstr ""
|
||||
msgstr "Μέση βαθμολογία: %(rating)s από 5"
|
||||
|
||||
#: src/amo/components/SearchResult.js:29
|
||||
msgid "No ratings"
|
||||
msgstr ""
|
||||
msgstr "Καμία κριτική"
|
||||
|
||||
#: src/amo/components/SearchResult.js:43
|
||||
msgid "%(users)s user"
|
||||
msgid_plural "%(users)s users"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%(users)s χρήστης"
|
||||
msgstr[1] "%(users)s χρήστες"
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log out"
|
||||
msgstr ""
|
||||
msgstr "Αποσύνδεση"
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log in/Sign up"
|
||||
msgstr ""
|
||||
msgstr "Σύνδεση/Εγγραφή"
|
||||
|
||||
#: src/amo/containers/App.js:51
|
||||
msgid "Add-ons for Firefox"
|
||||
msgstr ""
|
||||
msgstr "Πρόσθετα για το Firefox"
|
||||
|
||||
#: src/amo/containers/Home.js:18
|
||||
msgid "What do you want Firefox to do?"
|
||||
msgstr ""
|
||||
msgstr "Τι θέλετε να κάνει το Firefox;"
|
||||
|
||||
#: src/amo/containers/Home.js:20
|
||||
msgid "Block ads"
|
||||
msgstr ""
|
||||
msgstr "Αποκλεισμός διαφημίσεων"
|
||||
|
||||
#: src/amo/containers/Home.js:21
|
||||
msgid "Screenshot"
|
||||
msgstr ""
|
||||
msgstr "Στιγμιότυπο οθόνης"
|
||||
|
||||
#: src/amo/containers/Home.js:22
|
||||
msgid "Save stuff"
|
||||
msgstr ""
|
||||
msgstr "Αποθήκευση στοιχείων"
|
||||
|
||||
#: src/amo/containers/Home.js:23
|
||||
msgid "Shop online"
|
||||
msgstr ""
|
||||
msgstr "Διαδικτυακές αγορές"
|
||||
|
||||
#: src/amo/containers/Home.js:24
|
||||
msgid "Be social"
|
||||
msgstr ""
|
||||
msgstr "Κοινωνικοποίηση"
|
||||
|
||||
#: src/amo/containers/Home.js:25
|
||||
msgid "Share stuff"
|
||||
msgstr ""
|
||||
msgstr "Κοινή χρήση στοιχείων"
|
||||
|
||||
#: src/amo/containers/Home.js:28
|
||||
msgid "Browse all extensions"
|
||||
msgstr ""
|
||||
msgstr "Περιήγηση σε όλες τις επεκτάσεις"
|
||||
|
||||
#: src/amo/containers/Home.js:31
|
||||
msgid "How do you want Firefox to look?"
|
||||
msgstr ""
|
||||
msgstr "Τι εμφάνιση θέλετε να έχει το Firefox;"
|
||||
|
||||
#: src/amo/containers/Home.js:33
|
||||
msgid "Wild"
|
||||
msgstr ""
|
||||
msgstr "Άγρια"
|
||||
|
||||
#: src/amo/containers/Home.js:34
|
||||
msgid "Abstract"
|
||||
msgstr ""
|
||||
msgstr "Αφηρημένη"
|
||||
|
||||
#: src/amo/containers/Home.js:35
|
||||
msgid "Fashionable"
|
||||
msgstr ""
|
||||
msgstr "Μοδάτη"
|
||||
|
||||
#: src/amo/containers/Home.js:36
|
||||
msgid "Scenic"
|
||||
msgstr ""
|
||||
msgstr "Σκηνική"
|
||||
|
||||
#: src/amo/containers/Home.js:37
|
||||
msgid "Sporty"
|
||||
msgstr ""
|
||||
msgstr "Αθλητική"
|
||||
|
||||
#: src/amo/containers/Home.js:38
|
||||
msgid "Mystical"
|
||||
msgstr ""
|
||||
msgstr "Μυστική"
|
||||
|
||||
#: src/amo/containers/Home.js:41
|
||||
msgid "Browse all themes"
|
||||
msgstr ""
|
||||
msgstr "Περιήγηση σε όλα τα θέματα"
|
||||
|
||||
#: src/core/components/InstallButton/index.js:49
|
||||
msgid "Downloading %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Γίνεται λήψη του %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:52
|
||||
msgid "Installing %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Γίνεται εγκατάσταση του %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:56
|
||||
msgid "%(name)s is installed and enabled. Click to uninstall."
|
||||
msgstr ""
|
||||
msgstr "Το %(name)s έχει εγκατασταθεί και ενεργοποιηθεί. Κάντε κλικ για απεγκατάσταση."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:59
|
||||
msgid "%(name)s is disabled. Click to enable."
|
||||
msgstr ""
|
||||
msgstr "Το %(name)s έχει απενεργοποιηθεί. Κάντε κλικ για ενεργοποίηση."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:62
|
||||
msgid "Uninstalling %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Γίνεται απεγκατάσταση του %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:65
|
||||
msgid "%(name)s is uninstalled. Click to install."
|
||||
msgstr ""
|
||||
msgstr "Το %(name)s έχει απεγκατασταθεί. Κάντε κλικ για εγκατάσταση."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:68
|
||||
msgid "Install state for %(name)s is unknown."
|
||||
msgstr ""
|
||||
msgstr "Η κατάσταση εγκατάστασης για το %(name)s είναι άγνωστη."
|
||||
|
||||
#: src/core/components/Paginate/index.js:102
|
||||
msgid "Previous"
|
||||
msgstr ""
|
||||
msgstr "Προηγούμενη"
|
||||
|
||||
#: src/core/components/Paginate/index.js:104
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
msgstr "Επόμενη"
|
||||
|
||||
#: src/core/components/Paginate/index.js:97
|
||||
msgid "Page %(currentPage)s of %(totalPages)s"
|
||||
msgstr ""
|
||||
msgstr "Σελίδα %(currentPage)s από %(totalPages)s"
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:40
|
||||
msgid "Your search for \"%(query)s\" returned %(count)s result."
|
||||
msgid_plural "Your search for \"%(query)s\" returned %(count)s results."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Η αναζήτησή σας για το \"%(query)s\" είχε %(count)s αποτέλεσμα."
|
||||
msgstr[1] "Η αναζήτησή σας για το \"%(query)s\" είχε %(count)s αποτελέσματα."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:56
|
||||
msgid "Searching..."
|
||||
msgstr ""
|
||||
msgstr "Αναζήτηση..."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:59
|
||||
msgid "No results were found for \"%(query)s\"."
|
||||
msgstr ""
|
||||
msgstr "Δεν βρέθηκε κανένα αποτέλεσμα για το \"%(query)s\"."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:61
|
||||
msgid "Please supply a valid search"
|
||||
msgstr ""
|
||||
msgstr "Παρακαλώ κάντε μια έγκυρη αναζήτηση"
|
||||
|
|
|
@ -4,7 +4,7 @@ msgstr ""
|
|||
"Project-Id-Version: disco\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2016-11-01 10:47+0000\n"
|
||||
"PO-Revision-Date: 2016-11-15 13:01+0000\n"
|
||||
"PO-Revision-Date: 2016-12-11 14:54+0000\n"
|
||||
"Last-Translator: Jim Spentzos <jamesspentzos@hotmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: el\n"
|
||||
|
@ -16,23 +16,23 @@ msgstr ""
|
|||
|
||||
#: src/core/components/InstallButton/index.js:49
|
||||
msgid "Downloading %(name)s."
|
||||
msgstr "Λήψη %(name)s."
|
||||
msgstr "Γίνεται λήψη του %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:52
|
||||
msgid "Installing %(name)s."
|
||||
msgstr "Εγκατάσταση %(name)s."
|
||||
msgstr "Γίνεται εγκατάσταση του %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:56
|
||||
msgid "%(name)s is installed and enabled. Click to uninstall."
|
||||
msgstr "Το %(name)s είναι εγκατεστημένο και ενεργοποιημένο. Κάντε κλικ για απεγκατάσταση."
|
||||
msgstr "Το %(name)s έχει εγκατασταθεί και ενεργοποιηθεί. Κάντε κλικ για απεγκατάσταση."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:59
|
||||
msgid "%(name)s is disabled. Click to enable."
|
||||
msgstr "Το %(name)s είναι απενεργοποιημένο. Κάντε κλικ για ενεργοποίηση."
|
||||
msgstr "Το %(name)s έχει απεγκατασταθεί. Κάντε κλικ για ενεργοποίηση."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:62
|
||||
msgid "Uninstalling %(name)s."
|
||||
msgstr "Απεγκατάσταση %(name)s."
|
||||
msgstr "Γίνεται απεγκατάσταση του %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:65
|
||||
msgid "%(name)s is uninstalled. Click to install."
|
||||
|
@ -84,7 +84,7 @@ msgstr "Το πρόσθετό σας είναι έτοιμο"
|
|||
|
||||
#: src/disco/components/Addon.js:302 src/disco/components/InfoDialog.js:31
|
||||
msgid "Now you can access %(name)s from the toolbar."
|
||||
msgstr "Μπορείτε πλέον να έχετε πρόσβαση στο %(name)s από τη γραμμή εργαλείων."
|
||||
msgstr "Έχετε πλέον πρόσβαση στο %(name)s από τη γραμμή εργαλείων."
|
||||
|
||||
#: src/disco/components/Addon.js:304 src/disco/components/InfoDialog.js:36
|
||||
msgid "OK!"
|
||||
|
|
|
@ -4,8 +4,8 @@ msgstr ""
|
|||
"Project-Id-Version: amo\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2016-11-10 09:55+0000\n"
|
||||
"PO-Revision-Date: 2016-11-10 14:40+0000\n"
|
||||
"Last-Translator: avelper <avelper@mozilla-hispano.org>\n"
|
||||
"PO-Revision-Date: 2016-11-28 19:49+0000\n"
|
||||
"Last-Translator: Inma Barrios <inma.barrios@mozilla-hispano.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
@ -227,8 +227,8 @@ msgstr "Página %(currentPage)s de %(totalPages)s"
|
|||
#: src/core/components/Search/SearchResults.js:40
|
||||
msgid "Your search for \"%(query)s\" returned %(count)s result."
|
||||
msgid_plural "Your search for \"%(query)s\" returned %(count)s results."
|
||||
msgstr[0] "Tu búsqueda \"%(query)s\" obtuvo %(count)s resultados."
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Tu búsqueda \"%(query)s\" obtuvo %(count)s resultado."
|
||||
msgstr[1] "Tu búsqueda \"%(query)s\" obtuvo %(count)s resultados."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:56
|
||||
msgid "Searching..."
|
||||
|
|
|
@ -1,44 +1,46 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: amo\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2016-11-10 09:55+0000\n"
|
||||
"PO-Revision-Date: 2016-11-10 09:55+0000\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"PO-Revision-Date: 2016-12-13 14:07+0000\n"
|
||||
"Last-Translator: Romi Hardiyanto <romihardiyanto@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: id\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"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Pontoon\n"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:49
|
||||
msgid "%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s"
|
||||
msgstr ""
|
||||
msgstr "%(addonName)s %(startSpan)soleh %(authorList)s %(endSpan)s"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:74
|
||||
msgid "Extension Metadata"
|
||||
msgstr ""
|
||||
msgstr "Metadata Ekstensi"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:81
|
||||
msgid "Screenshots"
|
||||
msgstr ""
|
||||
msgstr "Tangkapan Layar"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:88
|
||||
msgid "About this extension"
|
||||
msgstr ""
|
||||
msgstr "Tentang ekstensi ini"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:96
|
||||
msgid "Rate your experience"
|
||||
msgstr ""
|
||||
msgstr "Beri peringkat"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:19
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
msgstr "Kategori"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:24
|
||||
msgid "Used by"
|
||||
msgstr ""
|
||||
msgstr "Digunakan oleh"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:29
|
||||
msgid "Sentiment"
|
||||
|
@ -46,43 +48,43 @@ msgstr ""
|
|||
|
||||
#: src/amo/components/AddonReview.js:109
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "Kembali"
|
||||
|
||||
#: src/amo/components/AddonReview.js:113
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
msgstr "Kirim"
|
||||
|
||||
#: src/amo/components/AddonReview.js:41
|
||||
msgid "Please enter some text"
|
||||
msgstr ""
|
||||
msgstr "Silakan masukkan teks"
|
||||
|
||||
#: src/amo/components/AddonReview.js:90
|
||||
msgid "Write a review"
|
||||
msgstr ""
|
||||
msgstr "Tulis ulasan"
|
||||
|
||||
#: src/amo/components/AddonReview.js:92
|
||||
msgid "Tell the world why you think this extension is fantastic!"
|
||||
msgstr ""
|
||||
msgstr "Katakan pada dunia mengapa ekstensi ini luar biasa!"
|
||||
|
||||
#: src/amo/components/Footer.js:27
|
||||
msgid "Privacy policy"
|
||||
msgstr ""
|
||||
msgstr "Kebijakan privasi"
|
||||
|
||||
#: src/amo/components/Footer.js:33
|
||||
msgid "Legal notices"
|
||||
msgstr ""
|
||||
msgstr "Pernyataan hukum"
|
||||
|
||||
#: src/amo/components/Footer.js:39
|
||||
msgid "View desktop site"
|
||||
msgstr ""
|
||||
msgstr "Lihat situs desktop"
|
||||
|
||||
#: src/amo/components/LanguagePicker.js:20
|
||||
msgid "Browse in your language"
|
||||
msgstr ""
|
||||
msgstr "Jelajahi dalam bahasa Anda"
|
||||
|
||||
#: src/amo/components/MastHead.js:29
|
||||
msgid "Firefox Add-ons"
|
||||
msgstr ""
|
||||
msgstr "Pengaya Firefox"
|
||||
|
||||
#: src/amo/components/OverallRating.js:45
|
||||
msgid "How are you enjoying your experience with %(addonName)s?"
|
||||
|
@ -104,7 +106,6 @@ msgstr ""
|
|||
msgid "%(users)s user"
|
||||
msgid_plural "%(users)s users"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log out"
|
||||
|
@ -112,11 +113,11 @@ msgstr ""
|
|||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log in/Sign up"
|
||||
msgstr ""
|
||||
msgstr "Masuk/Daftar"
|
||||
|
||||
#: src/amo/containers/App.js:51
|
||||
msgid "Add-ons for Firefox"
|
||||
msgstr ""
|
||||
msgstr "Pengaya untuk Firefox"
|
||||
|
||||
#: src/amo/containers/Home.js:18
|
||||
msgid "What do you want Firefox to do?"
|
||||
|
@ -124,11 +125,11 @@ msgstr ""
|
|||
|
||||
#: src/amo/containers/Home.js:20
|
||||
msgid "Block ads"
|
||||
msgstr ""
|
||||
msgstr "Blokir iklan"
|
||||
|
||||
#: src/amo/containers/Home.js:21
|
||||
msgid "Screenshot"
|
||||
msgstr ""
|
||||
msgstr "Tangkapan layar"
|
||||
|
||||
#: src/amo/containers/Home.js:22
|
||||
msgid "Save stuff"
|
||||
|
@ -136,19 +137,19 @@ msgstr ""
|
|||
|
||||
#: src/amo/containers/Home.js:23
|
||||
msgid "Shop online"
|
||||
msgstr ""
|
||||
msgstr "Belanja daring"
|
||||
|
||||
#: src/amo/containers/Home.js:24
|
||||
msgid "Be social"
|
||||
msgstr ""
|
||||
msgstr "Sosial"
|
||||
|
||||
#: src/amo/containers/Home.js:25
|
||||
msgid "Share stuff"
|
||||
msgstr ""
|
||||
msgstr "Berbagi"
|
||||
|
||||
#: src/amo/containers/Home.js:28
|
||||
msgid "Browse all extensions"
|
||||
msgstr ""
|
||||
msgstr "Jelajahi semua ekstensi"
|
||||
|
||||
#: src/amo/containers/Home.js:31
|
||||
msgid "How do you want Firefox to look?"
|
||||
|
@ -226,7 +227,6 @@ msgstr ""
|
|||
msgid "Your search for \"%(query)s\" returned %(count)s result."
|
||||
msgid_plural "Your search for \"%(query)s\" returned %(count)s results."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:56
|
||||
msgid "Searching..."
|
||||
|
|
|
@ -4,7 +4,7 @@ msgstr ""
|
|||
"Project-Id-Version: amo\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2016-11-10 09:55+0000\n"
|
||||
"PO-Revision-Date: 2016-11-22 20:04+0000\n"
|
||||
"PO-Revision-Date: 2016-11-24 12:11+0000\n"
|
||||
"Last-Translator: Slimane Amiri <slimane.amiri@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: kab\n"
|
||||
|
@ -20,7 +20,7 @@ msgstr "%(addonName)s %(startSpan)ssɣuṛ %(authorList)s%(endSpan)s"
|
|||
|
||||
#: src/amo/components/AddonDetail.js:74
|
||||
msgid "Extension Metadata"
|
||||
msgstr ""
|
||||
msgstr "Asiɣzef aɣefisefka"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:81
|
||||
msgid "Screenshots"
|
||||
|
@ -40,23 +40,23 @@ msgstr "Taggayt"
|
|||
|
||||
#: src/amo/components/AddonMeta.js:24
|
||||
msgid "Used by"
|
||||
msgstr ""
|
||||
msgstr "Ittwaqdec sɣur"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:29
|
||||
msgid "Sentiment"
|
||||
msgstr ""
|
||||
msgstr "Aḥulfu"
|
||||
|
||||
#: src/amo/components/AddonReview.js:109
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "Uɣal ɣer deffir"
|
||||
|
||||
#: src/amo/components/AddonReview.js:113
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
msgstr "Azen"
|
||||
|
||||
#: src/amo/components/AddonReview.js:41
|
||||
msgid "Please enter some text"
|
||||
msgstr ""
|
||||
msgstr "Ttxilek sekcem kra n weḍris"
|
||||
|
||||
#: src/amo/components/AddonReview.js:90
|
||||
msgid "Write a review"
|
||||
|
@ -64,11 +64,11 @@ msgstr ""
|
|||
|
||||
#: src/amo/components/AddonReview.js:92
|
||||
msgid "Tell the world why you think this extension is fantastic!"
|
||||
msgstr ""
|
||||
msgstr "Ini-d i medden ayɣer asiɣzef-agi ifaz!"
|
||||
|
||||
#: src/amo/components/Footer.js:27
|
||||
msgid "Privacy policy"
|
||||
msgstr ""
|
||||
msgstr "Tasertit n tbaḍnit"
|
||||
|
||||
#: src/amo/components/Footer.js:33
|
||||
msgid "Legal notices"
|
||||
|
@ -76,15 +76,15 @@ msgstr ""
|
|||
|
||||
#: src/amo/components/Footer.js:39
|
||||
msgid "View desktop site"
|
||||
msgstr ""
|
||||
msgstr "Sken asmel afellaru"
|
||||
|
||||
#: src/amo/components/LanguagePicker.js:20
|
||||
msgid "Browse in your language"
|
||||
msgstr ""
|
||||
msgstr "Inig s tutlayt-ik"
|
||||
|
||||
#: src/amo/components/MastHead.js:29
|
||||
msgid "Firefox Add-ons"
|
||||
msgstr ""
|
||||
msgstr "Izegrar Firefox"
|
||||
|
||||
#: src/amo/components/OverallRating.js:45
|
||||
msgid "How are you enjoying your experience with %(addonName)s?"
|
||||
|
@ -105,24 +105,24 @@ msgstr ""
|
|||
#: src/amo/components/SearchResult.js:43
|
||||
msgid "%(users)s user"
|
||||
msgid_plural "%(users)s users"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%(users)s aseqdac"
|
||||
msgstr[1] "%(users)s iseqdacen"
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log out"
|
||||
msgstr ""
|
||||
msgstr "Tufɣa"
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log in/Sign up"
|
||||
msgstr ""
|
||||
msgstr "Kcem//Sign"
|
||||
|
||||
#: src/amo/containers/App.js:51
|
||||
msgid "Add-ons for Firefox"
|
||||
msgstr ""
|
||||
msgstr "Izegrar i Firefox"
|
||||
|
||||
#: src/amo/containers/Home.js:18
|
||||
msgid "What do you want Firefox to do?"
|
||||
msgstr ""
|
||||
msgstr "D acu tebɣiḍ ad ixdem Fairefox ?"
|
||||
|
||||
#: src/amo/containers/Home.js:20
|
||||
msgid "Block ads"
|
||||
|
@ -130,7 +130,7 @@ msgstr ""
|
|||
|
||||
#: src/amo/containers/Home.js:21
|
||||
msgid "Screenshot"
|
||||
msgstr ""
|
||||
msgstr "Tuṭṭfa n ugdil"
|
||||
|
||||
#: src/amo/containers/Home.js:22
|
||||
msgid "Save stuff"
|
||||
|
@ -138,7 +138,7 @@ msgstr ""
|
|||
|
||||
#: src/amo/containers/Home.js:23
|
||||
msgid "Shop online"
|
||||
msgstr ""
|
||||
msgstr "Tiɣin s srid"
|
||||
|
||||
#: src/amo/containers/Home.js:24
|
||||
msgid "Be social"
|
||||
|
@ -150,11 +150,11 @@ msgstr ""
|
|||
|
||||
#: src/amo/containers/Home.js:28
|
||||
msgid "Browse all extensions"
|
||||
msgstr ""
|
||||
msgstr "Inig akk isiɣzaf"
|
||||
|
||||
#: src/amo/containers/Home.js:31
|
||||
msgid "How do you want Firefox to look?"
|
||||
msgstr ""
|
||||
msgstr "amek tebɣiḍ Firefox ad iban?"
|
||||
|
||||
#: src/amo/containers/Home.js:33
|
||||
msgid "Wild"
|
||||
|
@ -182,62 +182,62 @@ msgstr ""
|
|||
|
||||
#: src/amo/containers/Home.js:41
|
||||
msgid "Browse all themes"
|
||||
msgstr ""
|
||||
msgstr "Inig ɣer akk isental"
|
||||
|
||||
#: src/core/components/InstallButton/index.js:49
|
||||
msgid "Downloading %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Assali n %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:52
|
||||
msgid "Installing %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Asbed n %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:56
|
||||
msgid "%(name)s is installed and enabled. Click to uninstall."
|
||||
msgstr ""
|
||||
msgstr "%(name)s ittwasbed u yttwarmed . senned i wakken ad tekseḍ-t."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:59
|
||||
msgid "%(name)s is disabled. Click to enable."
|
||||
msgstr ""
|
||||
msgstr "%(name)s ittwarurmed.Senned i wakken ad ittwarmed."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:62
|
||||
msgid "Uninstalling %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Asbed n %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:65
|
||||
msgid "%(name)s is uninstalled. Click to install."
|
||||
msgstr ""
|
||||
msgstr "%(name)s ittwakkes. Senned i wakken ad tesbdeḍ-t"
|
||||
|
||||
#: src/core/components/InstallButton/index.js:68
|
||||
msgid "Install state for %(name)s is unknown."
|
||||
msgstr ""
|
||||
msgstr "Addad n usebdi n %(name)s d arussin."
|
||||
|
||||
#: src/core/components/Paginate/index.js:102
|
||||
msgid "Previous"
|
||||
msgstr ""
|
||||
msgstr "Azewwar"
|
||||
|
||||
#: src/core/components/Paginate/index.js:104
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
msgstr "Ddu ɣer zdat"
|
||||
|
||||
#: src/core/components/Paginate/index.js:97
|
||||
msgid "Page %(currentPage)s of %(totalPages)s"
|
||||
msgstr ""
|
||||
msgstr "Asebter %(currentPage)s seg %(totalPages)s"
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:40
|
||||
msgid "Your search for \"%(query)s\" returned %(count)s result."
|
||||
msgid_plural "Your search for \"%(query)s\" returned %(count)s results."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Anadi inek %(query)s yufa-d tifin-agi %(count)s"
|
||||
msgstr[1] "Anadi-inek %(query)s yufa-d tiifin-agi %(count)s."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:56
|
||||
msgid "Searching..."
|
||||
msgstr ""
|
||||
msgstr "Anadi..."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:59
|
||||
msgid "No results were found for \"%(query)s\"."
|
||||
msgstr ""
|
||||
msgstr "Ulac tiffin i \"%(query)s\"."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:61
|
||||
msgid "Please supply a valid search"
|
||||
msgstr ""
|
||||
msgstr "Ttxilek sekcem anadi ameɣtu"
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: amo\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2016-11-10 09:55+0000\n"
|
||||
"PO-Revision-Date: 2016-11-10 09:55+0000\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"PO-Revision-Date: 2016-11-29 01:35+0000\n"
|
||||
"Last-Translator: Hyeonseok Shin <hyeonseok@gmail.com>\n"
|
||||
"Language-Team: none\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: Pontoon\n"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:49
|
||||
msgid "%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s"
|
||||
|
@ -18,15 +20,15 @@ msgstr ""
|
|||
|
||||
#: src/amo/components/AddonDetail.js:74
|
||||
msgid "Extension Metadata"
|
||||
msgstr ""
|
||||
msgstr "확장 메타 데이터"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:81
|
||||
msgid "Screenshots"
|
||||
msgstr ""
|
||||
msgstr "스크린샷"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:88
|
||||
msgid "About this extension"
|
||||
msgstr ""
|
||||
msgstr "이 확장 기능에 대해"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:96
|
||||
msgid "Rate your experience"
|
||||
|
@ -34,7 +36,7 @@ msgstr ""
|
|||
|
||||
#: src/amo/components/AddonMeta.js:19
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
msgstr "카테고리"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:24
|
||||
msgid "Used by"
|
||||
|
@ -46,31 +48,31 @@ msgstr ""
|
|||
|
||||
#: src/amo/components/AddonReview.js:109
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "뒤로가기"
|
||||
|
||||
#: src/amo/components/AddonReview.js:113
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
msgstr "제출"
|
||||
|
||||
#: src/amo/components/AddonReview.js:41
|
||||
msgid "Please enter some text"
|
||||
msgstr ""
|
||||
msgstr "텍스트를 입력 해 주시기 바랍니다"
|
||||
|
||||
#: src/amo/components/AddonReview.js:90
|
||||
msgid "Write a review"
|
||||
msgstr ""
|
||||
msgstr "리뷰 작성"
|
||||
|
||||
#: src/amo/components/AddonReview.js:92
|
||||
msgid "Tell the world why you think this extension is fantastic!"
|
||||
msgstr ""
|
||||
msgstr "이 확장 기능이 왜 환상적이라 생각하는지 세상에 알려주세요!"
|
||||
|
||||
#: src/amo/components/Footer.js:27
|
||||
msgid "Privacy policy"
|
||||
msgstr ""
|
||||
msgstr "개인정보 보호정책"
|
||||
|
||||
#: src/amo/components/Footer.js:33
|
||||
msgid "Legal notices"
|
||||
msgstr ""
|
||||
msgstr "법적 고지 사항"
|
||||
|
||||
#: src/amo/components/Footer.js:39
|
||||
msgid "View desktop site"
|
||||
|
@ -78,11 +80,11 @@ msgstr ""
|
|||
|
||||
#: src/amo/components/LanguagePicker.js:20
|
||||
msgid "Browse in your language"
|
||||
msgstr ""
|
||||
msgstr "내 언어로 검색"
|
||||
|
||||
#: src/amo/components/MastHead.js:29
|
||||
msgid "Firefox Add-ons"
|
||||
msgstr ""
|
||||
msgstr "Firefox 부가 기능"
|
||||
|
||||
#: src/amo/components/OverallRating.js:45
|
||||
msgid "How are you enjoying your experience with %(addonName)s?"
|
||||
|
@ -90,15 +92,15 @@ msgstr ""
|
|||
|
||||
#: src/amo/components/ScreenShots.js:28
|
||||
msgid "screenshot %(imageNumber)s of %(totalImages)s"
|
||||
msgstr ""
|
||||
msgstr "스크린샷 %(totalImages)s 개 중 %(imageNumber)s 번 째"
|
||||
|
||||
#: src/amo/components/SearchResult.js:23
|
||||
msgid "Average rating: %(rating)s out of 5"
|
||||
msgstr ""
|
||||
msgstr "평균 점수: 5 점 중 %(rating)s"
|
||||
|
||||
#: src/amo/components/SearchResult.js:29
|
||||
msgid "No ratings"
|
||||
msgstr ""
|
||||
msgstr "평가 없음"
|
||||
|
||||
#: src/amo/components/SearchResult.js:43
|
||||
msgid "%(users)s user"
|
||||
|
@ -107,15 +109,15 @@ msgstr[0] ""
|
|||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log out"
|
||||
msgstr ""
|
||||
msgstr "로그아웃"
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log in/Sign up"
|
||||
msgstr ""
|
||||
msgstr "로그인/가입하기"
|
||||
|
||||
#: src/amo/containers/App.js:51
|
||||
msgid "Add-ons for Firefox"
|
||||
msgstr ""
|
||||
msgstr "Firefox 부가 기능"
|
||||
|
||||
#: src/amo/containers/Home.js:18
|
||||
msgid "What do you want Firefox to do?"
|
||||
|
@ -123,19 +125,19 @@ msgstr ""
|
|||
|
||||
#: src/amo/containers/Home.js:20
|
||||
msgid "Block ads"
|
||||
msgstr ""
|
||||
msgstr "광고 차단"
|
||||
|
||||
#: src/amo/containers/Home.js:21
|
||||
msgid "Screenshot"
|
||||
msgstr ""
|
||||
msgstr "스크린샷"
|
||||
|
||||
#: src/amo/containers/Home.js:22
|
||||
msgid "Save stuff"
|
||||
msgstr ""
|
||||
msgstr "저장하기"
|
||||
|
||||
#: src/amo/containers/Home.js:23
|
||||
msgid "Shop online"
|
||||
msgstr ""
|
||||
msgstr "온라인 쇼핑"
|
||||
|
||||
#: src/amo/containers/Home.js:24
|
||||
msgid "Be social"
|
||||
|
@ -143,15 +145,15 @@ msgstr ""
|
|||
|
||||
#: src/amo/containers/Home.js:25
|
||||
msgid "Share stuff"
|
||||
msgstr ""
|
||||
msgstr "공유하기"
|
||||
|
||||
#: src/amo/containers/Home.js:28
|
||||
msgid "Browse all extensions"
|
||||
msgstr ""
|
||||
msgstr "모든 확장 기능 탐색하기"
|
||||
|
||||
#: src/amo/containers/Home.js:31
|
||||
msgid "How do you want Firefox to look?"
|
||||
msgstr ""
|
||||
msgstr "파이어폭스가 어떻게 보여지길 바라십니까?"
|
||||
|
||||
#: src/amo/containers/Home.js:33
|
||||
msgid "Wild"
|
||||
|
@ -179,61 +181,61 @@ msgstr ""
|
|||
|
||||
#: src/amo/containers/Home.js:41
|
||||
msgid "Browse all themes"
|
||||
msgstr ""
|
||||
msgstr "모든 테마 탐색하기"
|
||||
|
||||
#: src/core/components/InstallButton/index.js:49
|
||||
msgid "Downloading %(name)s."
|
||||
msgstr ""
|
||||
msgstr "%(name)s를 다운로드하는 중입니다."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:52
|
||||
msgid "Installing %(name)s."
|
||||
msgstr ""
|
||||
msgstr "%(name)s를 설치하는 중입니다."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:56
|
||||
msgid "%(name)s is installed and enabled. Click to uninstall."
|
||||
msgstr ""
|
||||
msgstr "%(name)s가 설치되었고 활성화되었습니다. 제거하려면 클릭하세요."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:59
|
||||
msgid "%(name)s is disabled. Click to enable."
|
||||
msgstr ""
|
||||
msgstr "%(name)s가 비활성되었습니다. 활성화하려면 클릭하세요."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:62
|
||||
msgid "Uninstalling %(name)s."
|
||||
msgstr ""
|
||||
msgstr "%(name)s를 제거하는중입니다."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:65
|
||||
msgid "%(name)s is uninstalled. Click to install."
|
||||
msgstr ""
|
||||
msgstr "%(name)s가 제거되었습니다. 설치하시려면 클릭하세요."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:68
|
||||
msgid "Install state for %(name)s is unknown."
|
||||
msgstr ""
|
||||
msgstr "%(name)s의 설치 상태를 알 수 없습니다."
|
||||
|
||||
#: src/core/components/Paginate/index.js:102
|
||||
msgid "Previous"
|
||||
msgstr ""
|
||||
msgstr "이전"
|
||||
|
||||
#: src/core/components/Paginate/index.js:104
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
msgstr "다음"
|
||||
|
||||
#: src/core/components/Paginate/index.js:97
|
||||
msgid "Page %(currentPage)s of %(totalPages)s"
|
||||
msgstr ""
|
||||
msgstr "%(totalPages)s 페이지 중 %(currentPage)s 번째 페이지"
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:40
|
||||
msgid "Your search for \"%(query)s\" returned %(count)s result."
|
||||
msgid_plural "Your search for \"%(query)s\" returned %(count)s results."
|
||||
msgstr[0] ""
|
||||
msgstr[0] "\"%(query)s\"에 대한 검색결과가 %(count)s개 있습니다."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:56
|
||||
msgid "Searching..."
|
||||
msgstr ""
|
||||
msgstr "검색중..."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:59
|
||||
msgid "No results were found for \"%(query)s\"."
|
||||
msgstr ""
|
||||
msgstr "\"%(query)s\"에 대한 검색 결과가 없습니다."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:61
|
||||
msgid "Please supply a valid search"
|
||||
msgstr ""
|
||||
msgstr "유효한 검색어를 입력해 주세요"
|
||||
|
|
|
@ -4,7 +4,7 @@ msgstr ""
|
|||
"Project-Id-Version: disco\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2016-11-01 10:47+0000\n"
|
||||
"PO-Revision-Date: 2016-11-06 01:30+0000\n"
|
||||
"PO-Revision-Date: 2016-11-29 01:30+0000\n"
|
||||
"Last-Translator: Hyeonseok Shin <hyeonseok@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ko\n"
|
||||
|
@ -16,35 +16,35 @@ msgstr ""
|
|||
|
||||
#: src/core/components/InstallButton/index.js:49
|
||||
msgid "Downloading %(name)s."
|
||||
msgstr ""
|
||||
msgstr "%(name)s를 다운로드 중입니다."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:52
|
||||
msgid "Installing %(name)s."
|
||||
msgstr ""
|
||||
msgstr "%(name)s를 설치 중입니다."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:56
|
||||
msgid "%(name)s is installed and enabled. Click to uninstall."
|
||||
msgstr ""
|
||||
msgstr "%(name)s가 설치되었고 활성화되었습니다. 제거하려면 클릭하세요."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:59
|
||||
msgid "%(name)s is disabled. Click to enable."
|
||||
msgstr ""
|
||||
msgstr "%(name)s가 비활성화되었습니다. 활성화 하려면 클릭하세요."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:62
|
||||
msgid "Uninstalling %(name)s."
|
||||
msgstr ""
|
||||
msgstr "%(name)s를 제거하는 중입니다."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:65
|
||||
msgid "%(name)s is uninstalled. Click to install."
|
||||
msgstr ""
|
||||
msgstr "%(name)s가 제거되었습니다. 설치하려면 클릭하세요."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:68
|
||||
msgid "Install state for %(name)s is unknown."
|
||||
msgstr ""
|
||||
msgstr "%(name)s의 설치 상태를 알 수 없습니다."
|
||||
|
||||
#: src/disco/components/Addon.js:128
|
||||
msgid "Hover to preview or click to install %(name)s"
|
||||
msgstr ""
|
||||
msgstr "마우스를 올려서 %(name)s를 미리보거나 클릭해서 설치"
|
||||
|
||||
#: src/disco/components/Addon.js:138
|
||||
msgid "Hover over the image to preview"
|
||||
|
@ -52,11 +52,11 @@ msgstr "마우스 올려서 미리보기"
|
|||
|
||||
#: src/disco/components/Addon.js:153
|
||||
msgid "Installation failed. Please try again."
|
||||
msgstr ""
|
||||
msgstr "설치하지 못했습니다. 다시 시도해 주세요."
|
||||
|
||||
#: src/disco/components/Addon.js:155
|
||||
msgid "Download failed. Please check your connection."
|
||||
msgstr ""
|
||||
msgstr "다운로드에 실패했습니다. 접속 상태를 확인 해 주세요."
|
||||
|
||||
#: src/disco/components/Addon.js:157
|
||||
msgid "An unexpected error occurred during installation."
|
||||
|
@ -72,23 +72,23 @@ msgstr "예상치 못 한 오류가 발생하였습니다."
|
|||
|
||||
#: src/disco/components/Addon.js:170
|
||||
msgid "This add-on will be uninstalled after you restart Firefox."
|
||||
msgstr ""
|
||||
msgstr "이 부가 기능은 Firefox를 재시작한 후에 제거될 것입니다."
|
||||
|
||||
#: src/disco/components/Addon.js:172
|
||||
msgid "Please restart Firefox to use this add-on."
|
||||
msgstr ""
|
||||
msgstr "이 부가 기능을 사용하려면 Firefox를 재시작 해주십시오."
|
||||
|
||||
#: src/disco/components/Addon.js:300 src/disco/components/InfoDialog.js:29
|
||||
msgid "Your add-on is ready"
|
||||
msgstr ""
|
||||
msgstr "부가 기능 준비됨"
|
||||
|
||||
#: src/disco/components/Addon.js:302 src/disco/components/InfoDialog.js:31
|
||||
msgid "Now you can access %(name)s from the toolbar."
|
||||
msgstr ""
|
||||
msgstr "이제 도구 모음에서 %(name)s를 접근할 수 있습니다."
|
||||
|
||||
#: src/disco/components/Addon.js:304 src/disco/components/InfoDialog.js:36
|
||||
msgid "OK!"
|
||||
msgstr ""
|
||||
msgstr "좋습니다!"
|
||||
|
||||
#: src/disco/components/Addon.js:98
|
||||
msgid "Close"
|
||||
|
|
|
@ -1,243 +1,245 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: amo\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2016-11-10 09:55+0000\n"
|
||||
"PO-Revision-Date: 2016-11-10 09:55+0000\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"PO-Revision-Date: 2016-11-25 21:20+0000\n"
|
||||
"Last-Translator: Juraj Cigáň <kusavica@gmail.com>\n"
|
||||
"Language-Team: none\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) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Pontoon\n"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:49
|
||||
msgid "%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s"
|
||||
msgstr ""
|
||||
msgstr "%(addonName)s %(startSpan)s od %(authorList)s%(endSpan)s"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:74
|
||||
msgid "Extension Metadata"
|
||||
msgstr ""
|
||||
msgstr "Metadáta rozšírenia"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:81
|
||||
msgid "Screenshots"
|
||||
msgstr ""
|
||||
msgstr "Snímky obrazovky"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:88
|
||||
msgid "About this extension"
|
||||
msgstr ""
|
||||
msgstr "O tomto rozšírení"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:96
|
||||
msgid "Rate your experience"
|
||||
msgstr ""
|
||||
msgstr "Ohodnoťte svoju skúsenosť"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:19
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
msgstr "Kategória"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:24
|
||||
msgid "Used by"
|
||||
msgstr ""
|
||||
msgstr "Používa"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:29
|
||||
msgid "Sentiment"
|
||||
msgstr ""
|
||||
msgstr "Sentiment"
|
||||
|
||||
#: src/amo/components/AddonReview.js:109
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "Naspäť"
|
||||
|
||||
#: src/amo/components/AddonReview.js:113
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
msgstr "Odoslať"
|
||||
|
||||
#: src/amo/components/AddonReview.js:41
|
||||
msgid "Please enter some text"
|
||||
msgstr ""
|
||||
msgstr "Zadajte, prosím, nejaký text"
|
||||
|
||||
#: src/amo/components/AddonReview.js:90
|
||||
msgid "Write a review"
|
||||
msgstr ""
|
||||
msgstr "Napísať recenziu"
|
||||
|
||||
#: src/amo/components/AddonReview.js:92
|
||||
msgid "Tell the world why you think this extension is fantastic!"
|
||||
msgstr ""
|
||||
msgstr "Povedzte svetu, prečo si myslíte, že je toto rozšírenie úžasné!"
|
||||
|
||||
#: src/amo/components/Footer.js:27
|
||||
msgid "Privacy policy"
|
||||
msgstr ""
|
||||
msgstr "Zásady ochrany súkromia"
|
||||
|
||||
#: src/amo/components/Footer.js:33
|
||||
msgid "Legal notices"
|
||||
msgstr ""
|
||||
msgstr "Právne informácie"
|
||||
|
||||
#: src/amo/components/Footer.js:39
|
||||
msgid "View desktop site"
|
||||
msgstr ""
|
||||
msgstr "Zobraziť verziu stránky pre počítače"
|
||||
|
||||
#: src/amo/components/LanguagePicker.js:20
|
||||
msgid "Browse in your language"
|
||||
msgstr ""
|
||||
msgstr "Prehliadanie vo vašom jazyku"
|
||||
|
||||
#: src/amo/components/MastHead.js:29
|
||||
msgid "Firefox Add-ons"
|
||||
msgstr ""
|
||||
msgstr "Doplnky pre Firefox"
|
||||
|
||||
#: src/amo/components/OverallRating.js:45
|
||||
msgid "How are you enjoying your experience with %(addonName)s?"
|
||||
msgstr ""
|
||||
msgstr "Ako si užívate používanie doplnku %(addonName)s?"
|
||||
|
||||
#: src/amo/components/ScreenShots.js:28
|
||||
msgid "screenshot %(imageNumber)s of %(totalImages)s"
|
||||
msgstr ""
|
||||
msgstr "snímka obrazovky %(imageNumber)s z %(totalImages)s"
|
||||
|
||||
#: src/amo/components/SearchResult.js:23
|
||||
msgid "Average rating: %(rating)s out of 5"
|
||||
msgstr ""
|
||||
msgstr "Priemerné hodnotenie %(rating)s z 5"
|
||||
|
||||
#: src/amo/components/SearchResult.js:29
|
||||
msgid "No ratings"
|
||||
msgstr ""
|
||||
msgstr "Žiadne hodnotenie"
|
||||
|
||||
#: src/amo/components/SearchResult.js:43
|
||||
msgid "%(users)s user"
|
||||
msgid_plural "%(users)s users"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[0] "%(users)s používateľ"
|
||||
msgstr[1] "%(users)s používatelia"
|
||||
msgstr[2] "%(users)s používateľov"
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log out"
|
||||
msgstr ""
|
||||
msgstr "Odhlásiť sa"
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log in/Sign up"
|
||||
msgstr ""
|
||||
msgstr "Prihlásiť sa/Zaregistrovať sa"
|
||||
|
||||
#: src/amo/containers/App.js:51
|
||||
msgid "Add-ons for Firefox"
|
||||
msgstr ""
|
||||
msgstr "Doplnky pre Firefox"
|
||||
|
||||
#: src/amo/containers/Home.js:18
|
||||
msgid "What do you want Firefox to do?"
|
||||
msgstr ""
|
||||
msgstr "Čo chcete, aby váš Firefox dokázal?"
|
||||
|
||||
#: src/amo/containers/Home.js:20
|
||||
msgid "Block ads"
|
||||
msgstr ""
|
||||
msgstr "Blokovať reklamy"
|
||||
|
||||
#: src/amo/containers/Home.js:21
|
||||
msgid "Screenshot"
|
||||
msgstr ""
|
||||
msgstr "Vytvárať snímky obrazovky"
|
||||
|
||||
#: src/amo/containers/Home.js:22
|
||||
msgid "Save stuff"
|
||||
msgstr ""
|
||||
msgstr "Ukladať veci"
|
||||
|
||||
#: src/amo/containers/Home.js:23
|
||||
msgid "Shop online"
|
||||
msgstr ""
|
||||
msgstr "Nakupovať online"
|
||||
|
||||
#: src/amo/containers/Home.js:24
|
||||
msgid "Be social"
|
||||
msgstr ""
|
||||
msgstr "Byť aktívny na sociálnych sieťach"
|
||||
|
||||
#: src/amo/containers/Home.js:25
|
||||
msgid "Share stuff"
|
||||
msgstr ""
|
||||
msgstr "Zdielať veci"
|
||||
|
||||
#: src/amo/containers/Home.js:28
|
||||
msgid "Browse all extensions"
|
||||
msgstr ""
|
||||
msgstr "Prehliadať všetky rozšírenia"
|
||||
|
||||
#: src/amo/containers/Home.js:31
|
||||
msgid "How do you want Firefox to look?"
|
||||
msgstr ""
|
||||
msgstr "Ako chcete, aby váš Firefox vyzeral?"
|
||||
|
||||
#: src/amo/containers/Home.js:33
|
||||
msgid "Wild"
|
||||
msgstr ""
|
||||
msgstr "Divoko"
|
||||
|
||||
#: src/amo/containers/Home.js:34
|
||||
msgid "Abstract"
|
||||
msgstr ""
|
||||
msgstr "Abstraktne"
|
||||
|
||||
#: src/amo/containers/Home.js:35
|
||||
msgid "Fashionable"
|
||||
msgstr ""
|
||||
msgstr "Módne"
|
||||
|
||||
#: src/amo/containers/Home.js:36
|
||||
msgid "Scenic"
|
||||
msgstr ""
|
||||
msgstr "Malebne"
|
||||
|
||||
#: src/amo/containers/Home.js:37
|
||||
msgid "Sporty"
|
||||
msgstr ""
|
||||
msgstr "Športovo"
|
||||
|
||||
#: src/amo/containers/Home.js:38
|
||||
msgid "Mystical"
|
||||
msgstr ""
|
||||
msgstr "Tajomne"
|
||||
|
||||
#: src/amo/containers/Home.js:41
|
||||
msgid "Browse all themes"
|
||||
msgstr ""
|
||||
msgstr "Prehliadať všetky témy vzhľadu"
|
||||
|
||||
#: src/core/components/InstallButton/index.js:49
|
||||
msgid "Downloading %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Preberanie doplnku %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:52
|
||||
msgid "Installing %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Inštalovanie doplnku %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:56
|
||||
msgid "%(name)s is installed and enabled. Click to uninstall."
|
||||
msgstr ""
|
||||
msgstr "Doplnok %(name)s je nainštalovaný a povolený. Kliknutím ho odinštalujete."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:59
|
||||
msgid "%(name)s is disabled. Click to enable."
|
||||
msgstr ""
|
||||
msgstr "Doplnok %(name)s je zakázaný. Kliknutím ho povolíte."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:62
|
||||
msgid "Uninstalling %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Odinštalovanie doplnku %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:65
|
||||
msgid "%(name)s is uninstalled. Click to install."
|
||||
msgstr ""
|
||||
msgstr "Doplnok %(name)s bol odinštalovaný. Kliknutím ho nainštalujete."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:68
|
||||
msgid "Install state for %(name)s is unknown."
|
||||
msgstr ""
|
||||
msgstr "Stav inštalácie doplnku %(name)s nie je známy."
|
||||
|
||||
#: src/core/components/Paginate/index.js:102
|
||||
msgid "Previous"
|
||||
msgstr ""
|
||||
msgstr "Predchádzajúca"
|
||||
|
||||
#: src/core/components/Paginate/index.js:104
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
msgstr "Ďalšia"
|
||||
|
||||
#: src/core/components/Paginate/index.js:97
|
||||
msgid "Page %(currentPage)s of %(totalPages)s"
|
||||
msgstr ""
|
||||
msgstr "Stránka %(currentPage)s z %(totalPages)s"
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:40
|
||||
msgid "Your search for \"%(query)s\" returned %(count)s result."
|
||||
msgid_plural "Your search for \"%(query)s\" returned %(count)s results."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[0] "Pre vyhľadávaný výraz \"%(query)s\" bol nájdený %(count)s výsledok."
|
||||
msgstr[1] "Pre vyhľadávaný výraz \"%(query)s\" boli nájdené %(count)s výsledky."
|
||||
msgstr[2] "Pre vyhľadávaný výraz \"%(query)s\" bol nájdených %(count)s výsledkov."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:56
|
||||
msgid "Searching..."
|
||||
msgstr ""
|
||||
msgstr "Vyhľadáva sa…"
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:59
|
||||
msgid "No results were found for \"%(query)s\"."
|
||||
msgstr ""
|
||||
msgstr "Pre vyhľadávaný výraz \"%(query)s\" nebol nájdený žiadny výsledok."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:61
|
||||
msgid "Please supply a valid search"
|
||||
msgstr ""
|
||||
msgstr "Prosím, zadajte platný výraz vyhľadávania"
|
||||
|
|
|
@ -1,241 +1,243 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: amo\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2016-11-10 09:55+0000\n"
|
||||
"PO-Revision-Date: 2016-11-10 09:55+0000\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"PO-Revision-Date: 2016-11-23 08:23+0000\n"
|
||||
"Last-Translator: Besnik Bleta <besnik@programeshqip.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: sq\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"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pontoon\n"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:49
|
||||
msgid "%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s"
|
||||
msgstr ""
|
||||
msgstr "%(addonName)s %(startSpan)snga %(authorList)s%(endSpan)s"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:74
|
||||
msgid "Extension Metadata"
|
||||
msgstr ""
|
||||
msgstr "Tejtëdhëna Zgjerimi"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:81
|
||||
msgid "Screenshots"
|
||||
msgstr ""
|
||||
msgstr "Foto ekrani"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:88
|
||||
msgid "About this extension"
|
||||
msgstr ""
|
||||
msgstr "Rreth këtij zgjerimi:"
|
||||
|
||||
#: src/amo/components/AddonDetail.js:96
|
||||
msgid "Rate your experience"
|
||||
msgstr ""
|
||||
msgstr "Vlerësoni rastin tuaj"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:19
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
msgstr "Kategori"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:24
|
||||
msgid "Used by"
|
||||
msgstr ""
|
||||
msgstr "Përdorur nga"
|
||||
|
||||
#: src/amo/components/AddonMeta.js:29
|
||||
msgid "Sentiment"
|
||||
msgstr ""
|
||||
msgstr "Ndjenjë"
|
||||
|
||||
#: src/amo/components/AddonReview.js:109
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "Mbrapsht"
|
||||
|
||||
#: src/amo/components/AddonReview.js:113
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
msgstr "Parashtroje"
|
||||
|
||||
#: src/amo/components/AddonReview.js:41
|
||||
msgid "Please enter some text"
|
||||
msgstr ""
|
||||
msgstr "Ju lutemi, jepni ca tekst"
|
||||
|
||||
#: src/amo/components/AddonReview.js:90
|
||||
msgid "Write a review"
|
||||
msgstr ""
|
||||
msgstr "Shkruani një shqyrtim"
|
||||
|
||||
#: src/amo/components/AddonReview.js:92
|
||||
msgid "Tell the world why you think this extension is fantastic!"
|
||||
msgstr ""
|
||||
msgstr "Tregojini botës pse mendoni se ky zgjerim është fantastik!"
|
||||
|
||||
#: src/amo/components/Footer.js:27
|
||||
msgid "Privacy policy"
|
||||
msgstr ""
|
||||
msgstr "Rregulla privatësie"
|
||||
|
||||
#: src/amo/components/Footer.js:33
|
||||
msgid "Legal notices"
|
||||
msgstr ""
|
||||
msgstr "Shënime ligjore"
|
||||
|
||||
#: src/amo/components/Footer.js:39
|
||||
msgid "View desktop site"
|
||||
msgstr ""
|
||||
msgstr "Shihni sajtin për desktop"
|
||||
|
||||
#: src/amo/components/LanguagePicker.js:20
|
||||
msgid "Browse in your language"
|
||||
msgstr ""
|
||||
msgstr "Shfletoni në gjuhën tuaj"
|
||||
|
||||
#: src/amo/components/MastHead.js:29
|
||||
msgid "Firefox Add-ons"
|
||||
msgstr ""
|
||||
msgstr "Shtesa Firefox-i"
|
||||
|
||||
#: src/amo/components/OverallRating.js:45
|
||||
msgid "How are you enjoying your experience with %(addonName)s?"
|
||||
msgstr ""
|
||||
msgstr "A po ju pëlqen %(addonName)s?"
|
||||
|
||||
#: src/amo/components/ScreenShots.js:28
|
||||
msgid "screenshot %(imageNumber)s of %(totalImages)s"
|
||||
msgstr ""
|
||||
msgstr "fotoja e %(imageNumber)s-të e ekrani nga %(totalImages)s gjithsej"
|
||||
|
||||
#: src/amo/components/SearchResult.js:23
|
||||
msgid "Average rating: %(rating)s out of 5"
|
||||
msgstr ""
|
||||
msgstr "Vlerësimi mesatar: %(rating)s nga 5"
|
||||
|
||||
#: src/amo/components/SearchResult.js:29
|
||||
msgid "No ratings"
|
||||
msgstr ""
|
||||
msgstr "Pa vlerësime"
|
||||
|
||||
#: src/amo/components/SearchResult.js:43
|
||||
msgid "%(users)s user"
|
||||
msgid_plural "%(users)s users"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%(users)s përdorues"
|
||||
msgstr[1] "%(users)s përdorues"
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log out"
|
||||
msgstr ""
|
||||
msgstr "Dilni"
|
||||
|
||||
#: src/amo/containers/App.js:39
|
||||
msgid "Log in/Sign up"
|
||||
msgstr ""
|
||||
msgstr "Hyni/Regjistrohuni"
|
||||
|
||||
#: src/amo/containers/App.js:51
|
||||
msgid "Add-ons for Firefox"
|
||||
msgstr ""
|
||||
msgstr "Shtesa për Firefox-in"
|
||||
|
||||
#: src/amo/containers/Home.js:18
|
||||
msgid "What do you want Firefox to do?"
|
||||
msgstr ""
|
||||
msgstr "Çfarë doni të bëjë Firefox-i?"
|
||||
|
||||
#: src/amo/containers/Home.js:20
|
||||
msgid "Block ads"
|
||||
msgstr ""
|
||||
msgstr "Bllokoni reklama"
|
||||
|
||||
#: src/amo/containers/Home.js:21
|
||||
msgid "Screenshot"
|
||||
msgstr ""
|
||||
msgstr "Foto ekrani"
|
||||
|
||||
#: src/amo/containers/Home.js:22
|
||||
msgid "Save stuff"
|
||||
msgstr ""
|
||||
msgstr "Ruani gjëra"
|
||||
|
||||
#: src/amo/containers/Home.js:23
|
||||
msgid "Shop online"
|
||||
msgstr ""
|
||||
msgstr "Blini në Internet"
|
||||
|
||||
#: src/amo/containers/Home.js:24
|
||||
msgid "Be social"
|
||||
msgstr ""
|
||||
msgstr "Jini shoqëror"
|
||||
|
||||
#: src/amo/containers/Home.js:25
|
||||
msgid "Share stuff"
|
||||
msgstr ""
|
||||
msgstr "Ndani gjëra me të tjerët"
|
||||
|
||||
#: src/amo/containers/Home.js:28
|
||||
msgid "Browse all extensions"
|
||||
msgstr ""
|
||||
msgstr "Shfletojini krejt zgjerimet"
|
||||
|
||||
#: src/amo/containers/Home.js:31
|
||||
msgid "How do you want Firefox to look?"
|
||||
msgstr ""
|
||||
msgstr "Si dëshironi të duket Firefox-i?"
|
||||
|
||||
#: src/amo/containers/Home.js:33
|
||||
msgid "Wild"
|
||||
msgstr ""
|
||||
msgstr "Wild"
|
||||
|
||||
#: src/amo/containers/Home.js:34
|
||||
msgid "Abstract"
|
||||
msgstr ""
|
||||
msgstr "Abstrakte"
|
||||
|
||||
#: src/amo/containers/Home.js:35
|
||||
msgid "Fashionable"
|
||||
msgstr ""
|
||||
msgstr "E modës"
|
||||
|
||||
#: src/amo/containers/Home.js:36
|
||||
msgid "Scenic"
|
||||
msgstr ""
|
||||
msgstr "Skenike"
|
||||
|
||||
#: src/amo/containers/Home.js:37
|
||||
msgid "Sporty"
|
||||
msgstr ""
|
||||
msgstr "Sportive"
|
||||
|
||||
#: src/amo/containers/Home.js:38
|
||||
msgid "Mystical"
|
||||
msgstr ""
|
||||
msgstr "Mistik"
|
||||
|
||||
#: src/amo/containers/Home.js:41
|
||||
msgid "Browse all themes"
|
||||
msgstr ""
|
||||
msgstr "Shfletoni krejt temat"
|
||||
|
||||
#: src/core/components/InstallButton/index.js:49
|
||||
msgid "Downloading %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Shkarkim i %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:52
|
||||
msgid "Installing %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Instalim i %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:56
|
||||
msgid "%(name)s is installed and enabled. Click to uninstall."
|
||||
msgstr ""
|
||||
msgstr "%(name)s është e instaluar dhe e aktivizuar. Klikoni që të çinstalohet."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:59
|
||||
msgid "%(name)s is disabled. Click to enable."
|
||||
msgstr ""
|
||||
msgstr "%(name)s është çaktivizuar. Klikoni që të aktivizohet."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:62
|
||||
msgid "Uninstalling %(name)s."
|
||||
msgstr ""
|
||||
msgstr "Çinstalim i %(name)s."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:65
|
||||
msgid "%(name)s is uninstalled. Click to install."
|
||||
msgstr ""
|
||||
msgstr "%(name)s është e çinstaluar. Klikoni që të instalohet."
|
||||
|
||||
#: src/core/components/InstallButton/index.js:68
|
||||
msgid "Install state for %(name)s is unknown."
|
||||
msgstr ""
|
||||
msgstr "Gjendja e instalimit për %(name)s është e panjohur."
|
||||
|
||||
#: src/core/components/Paginate/index.js:102
|
||||
msgid "Previous"
|
||||
msgstr ""
|
||||
msgstr "I mëparshmi"
|
||||
|
||||
#: src/core/components/Paginate/index.js:104
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
msgstr "Pasuesi"
|
||||
|
||||
#: src/core/components/Paginate/index.js:97
|
||||
msgid "Page %(currentPage)s of %(totalPages)s"
|
||||
msgstr ""
|
||||
msgstr "Faqja %(currentPage)s nga %(totalPages)s"
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:40
|
||||
msgid "Your search for \"%(query)s\" returned %(count)s result."
|
||||
msgid_plural "Your search for \"%(query)s\" returned %(count)s results."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Kërkimi juaj për \"%(query)s\" dha %(count)s përfundim."
|
||||
msgstr[1] "Kërkimi juaj për \"%(query)s\" dha %(count)s përfundime."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:56
|
||||
msgid "Searching..."
|
||||
msgstr ""
|
||||
msgstr "Po kërkohet…"
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:59
|
||||
msgid "No results were found for \"%(query)s\"."
|
||||
msgstr ""
|
||||
msgstr "S’u gjetën përfundime për \"%(query)s\"."
|
||||
|
||||
#: src/core/components/Search/SearchResults.js:61
|
||||
msgid "Please supply a valid search"
|
||||
msgstr ""
|
||||
msgstr "Ju lutemi, jepni një kërkim të vlefshëm"
|
||||
|
|
37
package.json
37
package.json
|
@ -154,7 +154,7 @@
|
|||
"homepage": "https://github.com/mozillla/addons-frontend#readme",
|
||||
"dependencies": {
|
||||
"babel-plugin-dedent": "2.0.0",
|
||||
"babel-polyfill": "6.16.0",
|
||||
"babel-polyfill": "6.20.0",
|
||||
"base64url": "2.0.0",
|
||||
"better-npm-run": "0.0.13",
|
||||
"bunyan": "1.8.5",
|
||||
|
@ -162,6 +162,7 @@
|
|||
"classnames": "2.2.5",
|
||||
"common-tags": "^1.4.0",
|
||||
"config": "1.24.0",
|
||||
"deep-eql": "2.0.1",
|
||||
"dompurify": "0.8.4",
|
||||
"express": "4.14.0",
|
||||
"extract-text-webpack-plugin": "1.0.1",
|
||||
|
@ -171,15 +172,15 @@
|
|||
"jsdom": "9.8.3",
|
||||
"mozilla-tabzilla": "0.5.1",
|
||||
"normalize.css": "5.0.0",
|
||||
"normalizr": "2.2.1",
|
||||
"normalizr": "2.3.0",
|
||||
"piping": "0.3.2",
|
||||
"react": "15.3.2",
|
||||
"react-addons-css-transition-group": "15.3.2",
|
||||
"react-cookie": "0.4.8",
|
||||
"react-dom": "15.3.2",
|
||||
"react-helmet": "3.2.2",
|
||||
"react-addons-css-transition-group": "15.4.1",
|
||||
"react-cookie": "1.0.4",
|
||||
"react-dom": "15.4.1",
|
||||
"react-helmet": "3.2.3",
|
||||
"react-onclickoutside": "5.7.1",
|
||||
"react-redux": "4.4.6",
|
||||
"react-redux": "5.0.0",
|
||||
"react-router": "2.8.1",
|
||||
"react-router-scroll": "0.4.1",
|
||||
"redux": "3.6.0",
|
||||
|
@ -191,11 +192,11 @@
|
|||
"webpack-isomorphic-tools": "2.6.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "6.5.3",
|
||||
"babel-core": "6.18.2",
|
||||
"autoprefixer": "6.5.4",
|
||||
"babel-core": "6.20.0",
|
||||
"babel-eslint": "7.1.0",
|
||||
"babel-gettext-extractor": "git+https://github.com/muffinresearch/babel-gettext-extractor.git#ecd85dea4553247a3cb579da817df29f381df5b9",
|
||||
"babel-loader": "6.2.7",
|
||||
"babel-loader": "6.2.9",
|
||||
"babel-plugin-istanbul": "3.0.0",
|
||||
"babel-plugin-react-transform": "2.0.2",
|
||||
"babel-plugin-transform-class-properties": "6.18.0",
|
||||
|
@ -211,14 +212,14 @@
|
|||
"cheerio": "0.22.0",
|
||||
"concurrently": "3.1.0",
|
||||
"csp-parse": "0.0.2",
|
||||
"css-loader": "0.25.0",
|
||||
"css-loader": "0.26.1",
|
||||
"deepcopy": "0.6.3",
|
||||
"eslint": "3.10.2",
|
||||
"eslint": "3.12.1",
|
||||
"eslint-config-airbnb": "13.0.0",
|
||||
"eslint-plugin-import": "2.2.0",
|
||||
"eslint-plugin-jsx-a11y": "2.2.3",
|
||||
"eslint-plugin-react": "6.7.1",
|
||||
"fetch-mock": "5.5.0",
|
||||
"eslint-plugin-react": "6.8.0",
|
||||
"fetch-mock": "5.6.0",
|
||||
"file-loader": "0.9.0",
|
||||
"glob": "7.1.1",
|
||||
"json-loader": "0.5.4",
|
||||
|
@ -232,10 +233,10 @@
|
|||
"karma-sinon": "1.0.5",
|
||||
"karma-sourcemap-loader": "0.3.7",
|
||||
"karma-webpack": "1.8.0",
|
||||
"mocha": "3.1.2",
|
||||
"node-sass": "3.13.0",
|
||||
"mocha": "3.2.0",
|
||||
"node-sass": "3.13.1",
|
||||
"po2json": "0.4.5",
|
||||
"postcss-loader": "1.1.1",
|
||||
"postcss-loader": "1.2.1",
|
||||
"react-addons-test-utils": "15.4.1",
|
||||
"react-hot-loader": "1.3.0",
|
||||
"react-transform-hmr": "1.0.4",
|
||||
|
@ -253,7 +254,7 @@
|
|||
"supertest": "2.0.1",
|
||||
"supertest-as-promised": "4.0.2",
|
||||
"svg-url-loader": "1.1.0",
|
||||
"webpack": "1.13.3",
|
||||
"webpack": "1.14.0",
|
||||
"webpack-dev-middleware": "1.8.4",
|
||||
"webpack-dev-server": "1.16.2",
|
||||
"webpack-hot-middleware": "2.13.2"
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
.AddonsCard-list {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
import React, { PropTypes } from 'react';
|
||||
|
||||
import SearchResult from 'admin/components/SearchResult';
|
||||
import Card from 'ui/components/Card';
|
||||
|
||||
import './AddonsCard.scss';
|
||||
|
||||
|
||||
export default class AddonsCard extends React.Component {
|
||||
static propTypes = {
|
||||
addons: PropTypes.array.isRequired,
|
||||
children: PropTypes.node,
|
||||
footer: PropTypes.node,
|
||||
header: PropTypes.node,
|
||||
}
|
||||
|
||||
render() {
|
||||
const { addons, children, footer, header } = this.props;
|
||||
|
||||
return (
|
||||
<Card header={header} footer={footer} className="AddonsCard"
|
||||
ref={(ref) => { this.cardContainer = ref; }}>
|
||||
{children}
|
||||
{addons && addons.length ? (
|
||||
<ul className="AddonsCard-list">
|
||||
{addons.map((addon) => (
|
||||
<SearchResult addon={addon} key={addon.slug} />
|
||||
))}
|
||||
</ul>
|
||||
) : null}
|
||||
</Card>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -3,7 +3,7 @@ import React, { PropTypes } from 'react';
|
|||
import Paginate from 'core/components/Paginate';
|
||||
import { convertFiltersToQueryParams } from 'core/searchUtils';
|
||||
import { gettext as _ } from 'core/utils';
|
||||
import SearchResults from 'core/components/Search/SearchResults';
|
||||
import SearchResults from 'admin/components/SearchResults';
|
||||
|
||||
import SearchForm from './SearchForm';
|
||||
import AdminSearchResult from './SearchResult';
|
||||
|
|
|
@ -37,40 +37,40 @@ ResultLink.propTypes = {
|
|||
|
||||
export default class AdminSearchResult extends React.Component {
|
||||
static propTypes = {
|
||||
result: PropTypes.object.isRequired,
|
||||
addon: PropTypes.object.isRequired,
|
||||
}
|
||||
|
||||
render() {
|
||||
const { result } = this.props;
|
||||
const { addon } = this.props;
|
||||
return (
|
||||
<li className="SearchResult">
|
||||
<div>
|
||||
<img className="SearchResult-icon" src={result.icon_url} alt="Icon" />
|
||||
<img className="SearchResult-icon" src={addon.icon_url} alt="Icon" />
|
||||
</div>
|
||||
<section className="SearchResult-main">
|
||||
<h2 className="SearchResult-heading">
|
||||
<Link to={`/search/addons/${result.slug}`} className="SearchResult-name"
|
||||
<Link to={`/search/addons/${addon.slug}`} className="SearchResult-name"
|
||||
ref={(el) => { this.name = el; }}>
|
||||
{result.name}
|
||||
{addon.name}
|
||||
</Link>
|
||||
</h2>
|
||||
<div className="SearchResult-info" ref={(el) => { this.guid = el; }}>
|
||||
{result.guid}
|
||||
{addon.guid}
|
||||
</div>
|
||||
<span className="SearchResult-info" ref={(el) => { this.type = el; }}>
|
||||
{result.type}
|
||||
{addon.type}
|
||||
</span>
|
||||
<span className="SearchResult-info" ref={(el) => { this.status = el; }}>
|
||||
{result.status}
|
||||
{addon.status}
|
||||
</span>
|
||||
<span className="SearchResult-info" ref={(el) => { this.fileCount = el; }}>
|
||||
{fileCountText(result.current_version)}
|
||||
{fileCountText(addon.current_version)}
|
||||
</span>
|
||||
</section>
|
||||
<section className="SearchResult-actions">
|
||||
<ResultLink href={result.url} start>Listing</ResultLink>
|
||||
<ResultLink href={result.edit_url} middle>Edit</ResultLink>
|
||||
<ResultLink href={result.review_url} end>Editors</ResultLink>
|
||||
<ResultLink href={addon.url} start>Listing</ResultLink>
|
||||
<ResultLink href={addon.edit_url} middle>Edit</ResultLink>
|
||||
<ResultLink href={addon.review_url} end>Editors</ResultLink>
|
||||
</section>
|
||||
</li>
|
||||
);
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
import React, { PropTypes } from 'react';
|
||||
|
||||
import AddonsCard from 'admin/components/AddonsCard';
|
||||
import translate from 'core/i18n/translate';
|
||||
|
||||
|
||||
class SearchResults extends React.Component {
|
||||
static propTypes = {
|
||||
count: PropTypes.number,
|
||||
filters: PropTypes.object,
|
||||
hasSearchParams: PropTypes.bool,
|
||||
i18n: PropTypes.object.isRequired,
|
||||
loading: PropTypes.bool,
|
||||
results: PropTypes.arrayOf(PropTypes.object),
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
count: 0,
|
||||
filters: {},
|
||||
hasSearchParams: false,
|
||||
results: [],
|
||||
}
|
||||
|
||||
render() {
|
||||
const {
|
||||
count, hasSearchParams, filters, i18n, loading, results,
|
||||
} = this.props;
|
||||
const { query } = filters;
|
||||
|
||||
let messageText;
|
||||
|
||||
if (hasSearchParams && loading) {
|
||||
messageText = i18n.gettext('Searching...');
|
||||
} else if (!loading && count === 0) {
|
||||
if (query) {
|
||||
messageText = i18n.sprintf(
|
||||
i18n.gettext('No results were found for "%(query)s".'), { query });
|
||||
} else if (hasSearchParams) {
|
||||
// TODO: Add the extension type, if available, so it says
|
||||
// "no extensions" found that match your search or something.
|
||||
messageText = i18n.gettext('No results were found.');
|
||||
} else {
|
||||
messageText = i18n.gettext(
|
||||
'Please enter a search term to search Mozilla Add-ons.');
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div ref={(ref) => { this.container = ref; }} className="SearchResults">
|
||||
<AddonsCard addons={results}>
|
||||
{messageText ? (
|
||||
<p ref={(ref) => { this.message = ref; }}
|
||||
className="SearchResults-message">
|
||||
{messageText}
|
||||
</p>
|
||||
) : null}
|
||||
</AddonsCard>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default translate({ withRef: true })(SearchResults);
|
|
@ -2,13 +2,15 @@ import { SET_REVIEW } from 'amo/constants';
|
|||
|
||||
export const setReview = (review, reviewOverrides = {}) => ({
|
||||
type: SET_REVIEW,
|
||||
data: {
|
||||
id: review.id,
|
||||
payload: {
|
||||
addonId: review.addon.id,
|
||||
rating: review.rating,
|
||||
versionId: review.version.id,
|
||||
addonSlug: review.addon.slug,
|
||||
body: review.body,
|
||||
id: review.id,
|
||||
isLatest: review.is_latest,
|
||||
rating: review.rating,
|
||||
userId: review.user.id,
|
||||
versionId: review.version.id,
|
||||
...reviewOverrides,
|
||||
},
|
||||
});
|
||||
|
|
|
@ -5,7 +5,13 @@ import log from 'core/logger';
|
|||
* POST/PATCH an add-on review using the API.
|
||||
*/
|
||||
export function submitReview({
|
||||
rating, apiState, addonSlug, versionId, body, reviewId,
|
||||
rating,
|
||||
apiState,
|
||||
addonSlug,
|
||||
versionId,
|
||||
body,
|
||||
reviewId,
|
||||
...apiCallParams
|
||||
}) {
|
||||
const data = { rating, version: versionId, body };
|
||||
if (reviewId) {
|
||||
|
@ -30,6 +36,7 @@ export function submitReview({
|
|||
method,
|
||||
auth: true,
|
||||
state: apiState,
|
||||
...apiCallParams,
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,15 +1,19 @@
|
|||
/* eslint-disable react/no-danger */
|
||||
import React, { PropTypes } from 'react';
|
||||
import { compose } from 'redux';
|
||||
|
||||
import AddonMeta from 'amo/components/AddonMeta';
|
||||
import AddonMoreInfo from 'amo/components/AddonMoreInfo';
|
||||
import InstallButton from 'core/components/InstallButton';
|
||||
import DefaultOverallRating from 'amo/components/OverallRating';
|
||||
import ScreenShots from 'amo/components/ScreenShots';
|
||||
import translate from 'core/i18n/translate';
|
||||
import { isAllowedOrigin, nl2br, sanitizeHTML } from 'core/utils';
|
||||
import 'amo/css/AddonDetail.scss';
|
||||
import fallbackIcon from 'amo/img/icons/default-64.png';
|
||||
import InstallButton from 'core/components/InstallButton';
|
||||
import { THEME_TYPE } from 'core/constants';
|
||||
import { withInstallHelpers } from 'core/installAddon';
|
||||
import { isAllowedOrigin, nl2br, sanitizeHTML } from 'core/utils';
|
||||
import translate from 'core/i18n/translate';
|
||||
import ShowMoreCard from 'ui/components/ShowMoreCard';
|
||||
|
||||
|
||||
export const allowedDescriptionTags = [
|
||||
|
@ -28,17 +32,64 @@ export const allowedDescriptionTags = [
|
|||
'ul',
|
||||
];
|
||||
|
||||
class AddonDetail extends React.Component {
|
||||
export class AddonDetailBase extends React.Component {
|
||||
static propTypes = {
|
||||
OverallRating: PropTypes.element,
|
||||
addon: PropTypes.object.isRequired,
|
||||
getBrowserThemeData: PropTypes.func.isRequired,
|
||||
i18n: PropTypes.object.isRequired,
|
||||
previewTheme: PropTypes.func.isRequired,
|
||||
resetPreviewTheme: PropTypes.func.isRequired,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
OverallRating: DefaultOverallRating,
|
||||
}
|
||||
|
||||
onTouchStart = (event) => {
|
||||
// We preventDefault so that the image long-press menu doesn't appear.
|
||||
// This unfortunately prevents scrolling :(
|
||||
event.preventDefault();
|
||||
this.props.previewTheme(event.currentTarget);
|
||||
}
|
||||
|
||||
onTouchEnd = (event) => {
|
||||
this.props.resetPreviewTheme(event.currentTarget);
|
||||
}
|
||||
|
||||
headerImage() {
|
||||
const { addon, getBrowserThemeData, i18n } = this.props;
|
||||
const { previewURL, type } = addon;
|
||||
const iconUrl = isAllowedOrigin(addon.icon_url) ? addon.icon_url :
|
||||
fallbackIcon;
|
||||
|
||||
if (type === THEME_TYPE) {
|
||||
const label = i18n.gettext('Press to preview');
|
||||
return (
|
||||
<div
|
||||
className="AddonDetail-theme-header"
|
||||
id="AddonDetail-theme-header"
|
||||
data-browsertheme={getBrowserThemeData()}
|
||||
onTouchStart={this.onTouchStart}
|
||||
onTouchEnd={this.onTouchEnd}
|
||||
>
|
||||
<label className="AddonDetail-theme-header-label" htmlFor="AddonDetail-theme-header">
|
||||
{label}
|
||||
</label>
|
||||
<img
|
||||
alt={label}
|
||||
className="AddonDetail-theme-header-image"
|
||||
src={previewURL} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<div className="AddonDetail-icon">
|
||||
<img alt="" src={iconUrl} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
render() {
|
||||
const { OverallRating, addon, i18n } = this.props;
|
||||
|
||||
|
@ -54,22 +105,17 @@ class AddonDetail extends React.Component {
|
|||
endSpan: '</span>',
|
||||
});
|
||||
|
||||
const iconUrl = isAllowedOrigin(addon.icon_url) ? addon.icon_url :
|
||||
fallbackIcon;
|
||||
|
||||
// eslint-disable react/no-danger
|
||||
return (
|
||||
<div className="AddonDetail">
|
||||
<header>
|
||||
<div className="icon">
|
||||
<img alt="" src={iconUrl} />
|
||||
</div>
|
||||
<header className="AddonDetail-header">
|
||||
{this.headerImage()}
|
||||
<div className="title">
|
||||
<h1 dangerouslySetInnerHTML={sanitizeHTML(title, ['a', 'span'])} />
|
||||
<InstallButton slug={addon.slug} />
|
||||
</div>
|
||||
<div className="description">
|
||||
<p dangerouslySetInnerHTML={sanitizeHTML(addon.summary)} />
|
||||
<InstallButton {...this.props} />
|
||||
</div>
|
||||
<p className="AddonDetail-summary"
|
||||
dangerouslySetInnerHTML={sanitizeHTML(addon.summary)} />
|
||||
</header>
|
||||
|
||||
<section className="addon-metadata">
|
||||
|
@ -88,13 +134,15 @@ class AddonDetail extends React.Component {
|
|||
|
||||
<hr />
|
||||
|
||||
<section className="about">
|
||||
<h2>{i18n.gettext('About this extension')}</h2>
|
||||
<div dangerouslySetInnerHTML={sanitizeHTML(nl2br(addon.description),
|
||||
allowedDescriptionTags)} />
|
||||
</section>
|
||||
|
||||
<hr />
|
||||
<ShowMoreCard header={i18n.sprintf(
|
||||
i18n.gettext('About this %(addonType)s'), { addonType: addon.type }
|
||||
)} className="AddonDescription">
|
||||
<div className="AddonDescription-contents"
|
||||
ref={(ref) => { this.addonDescription = ref; }}
|
||||
dangerouslySetInnerHTML={
|
||||
sanitizeHTML(nl2br(addon.description), allowedDescriptionTags)
|
||||
} />
|
||||
</ShowMoreCard>
|
||||
|
||||
<section className="overall-rating">
|
||||
<h2>{i18n.gettext('Rate your experience')}</h2>
|
||||
|
@ -107,7 +155,11 @@ class AddonDetail extends React.Component {
|
|||
<AddonMoreInfo addon={addon} />
|
||||
</div>
|
||||
);
|
||||
// eslint-enable react/no-danger
|
||||
}
|
||||
}
|
||||
|
||||
export default translate({ withRef: true })(AddonDetail);
|
||||
export default compose(
|
||||
translate({ withRef: true }),
|
||||
withInstallHelpers({ src: 'dp-btn-primary' }),
|
||||
)(AddonDetailBase);
|
||||
|
|
|
@ -3,6 +3,7 @@ import { compose } from 'redux';
|
|||
|
||||
import Link from 'amo/components/Link';
|
||||
import translate from 'core/i18n/translate';
|
||||
import Card from 'ui/components/Card';
|
||||
|
||||
import './AddonMoreInfo.scss';
|
||||
|
||||
|
@ -16,14 +17,8 @@ export class AddonMoreInfoBase extends React.Component {
|
|||
render() {
|
||||
const { addon, i18n } = this.props;
|
||||
|
||||
// TODO: Use the addonType for the privacy text, so it reads
|
||||
// "for this extension", "for this theme", etc.
|
||||
return (
|
||||
<section className="AddonMoreInfo">
|
||||
<h2 className="AddonMoreInfo-header">
|
||||
{i18n.gettext('More information')}
|
||||
</h2>
|
||||
|
||||
<Card className="AddonMoreInfo" header={i18n.gettext('More information')}>
|
||||
<dl className="AddonMoreInfo-contents">
|
||||
{addon.homepage ? <dt>{i18n.gettext('Website')}</dt> : null}
|
||||
{addon.homepage ? (
|
||||
|
@ -62,7 +57,7 @@ export class AddonMoreInfoBase extends React.Component {
|
|||
</dd>
|
||||
) : null}
|
||||
</dl>
|
||||
</section>
|
||||
</Card>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,22 +1,13 @@
|
|||
@import "~core/css/inc/mixins";
|
||||
@import "~core/css/inc/vars";
|
||||
|
||||
.AddonMoreInfo-header {
|
||||
@include addonSection();
|
||||
|
||||
border-top-left-radius: $border-radius-default;
|
||||
border-top-right-radius: $border-radius-default;
|
||||
font-size: $font-size-default;
|
||||
margin-bottom: 1px;
|
||||
text-align: center;
|
||||
.AddonMoreInfo {
|
||||
padding: $padding-page;
|
||||
}
|
||||
|
||||
.AddonMoreInfo-contents {
|
||||
@include addonSection();
|
||||
|
||||
border-bottom-left-radius: $border-radius-default;
|
||||
border-bottom-right-radius: $border-radius-default;
|
||||
font-size: $font-size-s;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
|
|
|
@ -21,12 +21,6 @@ export class AddonReviewBase extends React.Component {
|
|||
updateReviewText: PropTypes.func,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
// TODO: move this to mapDispatchToProps once we need to pass dispatch()
|
||||
// to callApi()
|
||||
updateReviewText: (...params) => submitReview(...params),
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = { errorMessage: null };
|
||||
|
@ -100,8 +94,6 @@ export class AddonReviewBase extends React.Component {
|
|||
);
|
||||
}
|
||||
|
||||
// TODO: I guess we should load the existing review text so it
|
||||
// can be edited? That flow needs more thought.
|
||||
return (
|
||||
<div className="AddonReview">
|
||||
<h2 className="AddonReview-header">{i18n.gettext('Write a review')}</h2>
|
||||
|
@ -112,7 +104,9 @@ export class AddonReviewBase extends React.Component {
|
|||
className="AddonReview-textarea"
|
||||
ref={(ref) => { this.reviewTextarea = ref; }}
|
||||
name="review"
|
||||
placeholder={placeholder} />
|
||||
placeholder={placeholder}>
|
||||
{review.body}
|
||||
</textarea>
|
||||
<div className="AddonReview-button-row">
|
||||
<button className="AddonReview-button AddonReview-back-button"
|
||||
onClick={this.goBackToAddonDetail}
|
||||
|
@ -134,6 +128,13 @@ export const mapStateToProps = (state) => ({
|
|||
apiState: state.api,
|
||||
});
|
||||
|
||||
export const mapDispatchToProps = (dispatch) => ({
|
||||
updateReviewText(...params) {
|
||||
return submitReview(...params)
|
||||
.then((review) => dispatch(setReview(review)));
|
||||
},
|
||||
});
|
||||
|
||||
export function loadAddonReview(
|
||||
{ store: { dispatch }, params: { slug, reviewId } }
|
||||
) {
|
||||
|
@ -147,13 +148,9 @@ export function loadAddonReview(
|
|||
}));
|
||||
})
|
||||
.then((review) => {
|
||||
dispatch(setReview(review));
|
||||
const reviewData = {
|
||||
rating: review.rating,
|
||||
addonSlug: slug,
|
||||
id: review.id,
|
||||
};
|
||||
return reviewData;
|
||||
const action = setReview(review);
|
||||
dispatch(action);
|
||||
return action.payload;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -164,6 +161,6 @@ export default compose(
|
|||
promise: loadAddonReview,
|
||||
}]),
|
||||
withRouter,
|
||||
connect(mapStateToProps),
|
||||
connect(mapStateToProps, mapDispatchToProps),
|
||||
translate({ withRef: true }),
|
||||
)(AddonReviewBase);
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
.AddonsCard-list {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
import React, { PropTypes } from 'react';
|
||||
|
||||
import SearchResult from 'amo/components/SearchResult';
|
||||
import Card from 'ui/components/Card';
|
||||
|
||||
import './AddonsCard.scss';
|
||||
|
||||
|
||||
export default class AddonsCard extends React.Component {
|
||||
static propTypes = {
|
||||
addons: PropTypes.array.isRequired,
|
||||
children: PropTypes.node,
|
||||
footer: PropTypes.node,
|
||||
header: PropTypes.node,
|
||||
}
|
||||
|
||||
render() {
|
||||
const { addons, children, footer, header } = this.props;
|
||||
|
||||
return (
|
||||
<Card header={header} footer={footer} className="AddonsCard"
|
||||
ref={(ref) => { this.cardContainer = ref; }}>
|
||||
{children}
|
||||
{addons && addons.length ? (
|
||||
<ul className="AddonsCard-list">
|
||||
{addons.map((addon) => (
|
||||
<SearchResult addon={addon} key={addon.slug} />
|
||||
))}
|
||||
</ul>
|
||||
) : null}
|
||||
</Card>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -50,7 +50,7 @@ export class CategoriesBase extends React.Component {
|
|||
{Object.values(categories).map((category) => (
|
||||
<li className="Categories-list-item">
|
||||
<Link className="Categories-link"
|
||||
to={`/${addonType}s/categories/${category.slug}/`}>
|
||||
to={`/${addonType}s/${category.slug}/`}>
|
||||
{category.name}
|
||||
</Link>
|
||||
</li>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
@import "~core/css/inc/vars";
|
||||
|
||||
$selector-padding: 8px;
|
||||
$selector-padding: 10px;
|
||||
|
||||
.LanguagePicker-header {
|
||||
margin: 0 0 5px;
|
||||
|
@ -9,14 +9,25 @@ $selector-padding: 8px;
|
|||
.LanguagePicker-selector {
|
||||
appearance: none;
|
||||
background:
|
||||
rgba(255, 255, 255, 0.25) url('../img/icons/triangle-down.svg')
|
||||
url('../img/icons/globe.svg') no-repeat #{$selector-padding} 50%,
|
||||
$base-color url('../img/icons/triangle-down.svg')
|
||||
no-repeat calc(100% - #{$selector-padding}) 50%;
|
||||
background-size: 20px 20px, 15px 15px;
|
||||
border: 0;
|
||||
border-radius: $border-radius-default;
|
||||
color: #fff;
|
||||
color: $link-color;
|
||||
display: block;
|
||||
font-size: $font-size-s;
|
||||
line-height: 1;
|
||||
padding: $selector-padding $selector-padding #{$selector-padding - 1};
|
||||
padding: $selector-padding $selector-padding #{$selector-padding - 1} #{$selector-padding * 3};
|
||||
width: 100%;
|
||||
|
||||
[dir=rtl] & {
|
||||
background:
|
||||
url('../img/icons/globe.svg') no-repeat calc(100% - #{$selector-padding}) 50%,
|
||||
$base-color url('../img/icons/triangle-down.svg')
|
||||
no-repeat #{$selector-padding} 50%;
|
||||
background-size: 20px 20px, 15px 15px;
|
||||
padding: $selector-padding #{$selector-padding * 3} #{$selector-padding - 1} $selector-padding;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import { compose } from 'redux';
|
|||
import { withRouter } from 'react-router';
|
||||
import classNames from 'classnames';
|
||||
|
||||
import { withErrorHandling } from 'core/errorHandler';
|
||||
import { setReview } from 'amo/actions/reviews';
|
||||
import { getLatestUserReview, submitReview } from 'amo/api';
|
||||
import translate from 'core/i18n/translate';
|
||||
|
@ -15,6 +16,7 @@ import 'amo/css/OverallRating.scss';
|
|||
export class OverallRatingBase extends React.Component {
|
||||
static propTypes = {
|
||||
addon: PropTypes.object.isRequired,
|
||||
errorHandler: PropTypes.func.isRequired,
|
||||
apiState: PropTypes.object,
|
||||
i18n: PropTypes.object.isRequired,
|
||||
loadSavedReview: PropTypes.func.isRequired,
|
||||
|
@ -42,6 +44,7 @@ export class OverallRatingBase extends React.Component {
|
|||
const { userReview, userId, version } = this.props;
|
||||
|
||||
const params = {
|
||||
errorHandler: this.props.errorHandler,
|
||||
rating: parseInt(button.value, 10),
|
||||
apiState: this.props.apiState,
|
||||
addonId: this.props.addon.id,
|
||||
|
@ -171,6 +174,7 @@ export const OverallRatingWithI18n = compose(
|
|||
)(OverallRatingBase);
|
||||
|
||||
export default compose(
|
||||
withErrorHandling({ name: 'OverallRating' }),
|
||||
withRouter,
|
||||
connect(mapStateToProps, mapDispatchToProps),
|
||||
)(OverallRatingWithI18n);
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import React, { PropTypes } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { compose } from 'redux';
|
||||
|
||||
import { loadEntities } from 'core/actions';
|
||||
import { fetchAddon } from 'core/api';
|
||||
import { gettext as _ } from 'core/utils';
|
||||
import translate from 'core/i18n/translate';
|
||||
import SearchInput from 'ui/components/SearchInput';
|
||||
|
||||
import 'core/css/inc/lib.scss';
|
||||
|
@ -13,9 +14,11 @@ import './SearchForm.scss';
|
|||
export class SearchFormBase extends React.Component {
|
||||
static propTypes = {
|
||||
api: PropTypes.object.isRequired,
|
||||
i18n: PropTypes.object.isRequired,
|
||||
pathname: PropTypes.string.isRequired,
|
||||
query: PropTypes.string.isRequired,
|
||||
}
|
||||
|
||||
static contextTypes = {
|
||||
router: PropTypes.object,
|
||||
}
|
||||
|
@ -28,24 +31,27 @@ export class SearchFormBase extends React.Component {
|
|||
|
||||
handleSearch = (e) => {
|
||||
e.preventDefault();
|
||||
this.searchQuery.input.blur();
|
||||
this.goToSearch(this.searchQuery.value);
|
||||
}
|
||||
|
||||
render() {
|
||||
const { api, pathname, query } = this.props;
|
||||
const { api, i18n, pathname, query } = this.props;
|
||||
return (
|
||||
<form method="GET" action={`/${api.lang}/${api.clientApp}${pathname}`}
|
||||
onSubmit={this.handleSearch} className="SearchForm-form"
|
||||
ref={(ref) => { this.form = ref; }}>
|
||||
<label className="visually-hidden" htmlFor="q">{_('Search')}</label>
|
||||
<label className="visually-hidden" htmlFor="q">
|
||||
{i18n.gettext('Search')}
|
||||
</label>
|
||||
<SearchInput
|
||||
ref={(ref) => { this.searchQuery = ref; }} type="search" name="q"
|
||||
placeholder={_('Search extensions and themes')}
|
||||
placeholder={i18n.gettext('Search extensions and themes')}
|
||||
defaultValue={query} className="SearchForm-query" />
|
||||
<button className="visually-hidden" type="submit" title="Enter"
|
||||
ref={(ref) => { this.submitButton = ref; }}
|
||||
onClick={this.handleSearch}>
|
||||
{_('Search')}
|
||||
{i18n.gettext('Search')}
|
||||
</button>
|
||||
</form>
|
||||
);
|
||||
|
@ -68,4 +74,7 @@ export function mapDispatchToProps(dispatch) {
|
|||
};
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(SearchFormBase);
|
||||
export default compose(
|
||||
connect(mapStateToProps, mapDispatchToProps),
|
||||
translate({ withRef: true }),
|
||||
)(SearchFormBase);
|
||||
|
|
|
@ -2,11 +2,13 @@ import React, { PropTypes } from 'react';
|
|||
|
||||
import Link from 'amo/components/Link';
|
||||
import Paginate from 'core/components/Paginate';
|
||||
import SearchResults from 'core/components/Search/SearchResults';
|
||||
import SearchResults from 'amo/components/SearchResults';
|
||||
import { convertFiltersToQueryParams } from 'core/searchUtils';
|
||||
|
||||
import SearchResult from './SearchResult';
|
||||
|
||||
import './SearchPage.scss';
|
||||
|
||||
|
||||
export default class SearchPage extends React.Component {
|
||||
static propTypes = {
|
||||
|
@ -17,6 +19,8 @@ export default class SearchPage extends React.Component {
|
|||
hasSearchParams: PropTypes.bool.isRequired,
|
||||
loading: PropTypes.bool.isRequired,
|
||||
page: PropTypes.number,
|
||||
pathname: PropTypes.string,
|
||||
queryParams: PropTypes.object,
|
||||
results: PropTypes.array,
|
||||
}
|
||||
|
||||
|
@ -24,20 +28,23 @@ export default class SearchPage extends React.Component {
|
|||
LinkComponent: Link,
|
||||
ResultComponent: SearchResult,
|
||||
filters: {},
|
||||
pathname: '/search/',
|
||||
}
|
||||
|
||||
render() {
|
||||
const {
|
||||
LinkComponent, ResultComponent, count, filters, hasSearchParams,
|
||||
loading, page, results,
|
||||
loading, page, pathname, results,
|
||||
} = this.props;
|
||||
const paginator = count && hasSearchParams > 0 ?
|
||||
(<Paginate LinkComponent={LinkComponent} count={count} currentPage={page}
|
||||
pathname="/search/" queryParams={convertFiltersToQueryParams(filters)}
|
||||
showPages={0} />) : [];
|
||||
const queryParams = this.props.queryParams ||
|
||||
convertFiltersToQueryParams(filters);
|
||||
const paginator = count && hasSearchParams > 0 ? (
|
||||
<Paginate LinkComponent={LinkComponent} count={count} currentPage={page}
|
||||
pathname={pathname} queryParams={queryParams} showPages={0} />
|
||||
) : [];
|
||||
|
||||
return (
|
||||
<div className="search-page">
|
||||
<div className="SearchPage">
|
||||
<SearchResults ResultComponent={ResultComponent} count={count}
|
||||
hasSearchParams={hasSearchParams} loading={loading} results={results}
|
||||
filters={filters} />
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
@import "~core/css/inc/vars";
|
||||
|
||||
.SearchPage {
|
||||
padding: $padding-page $padding-page 0;
|
||||
}
|
|
@ -9,19 +9,19 @@ import 'core/css/SearchResult.scss';
|
|||
|
||||
export class SearchResultBase extends React.Component {
|
||||
static propTypes = {
|
||||
addon: PropTypes.object.isRequired,
|
||||
i18n: PropTypes.object.isRequired,
|
||||
result: PropTypes.object.isRequired,
|
||||
}
|
||||
|
||||
render() {
|
||||
const { i18n, result } = this.props;
|
||||
const { addon, i18n } = this.props;
|
||||
|
||||
// TODO: Implement a rating component and style the stars.
|
||||
const rating = result.ratings && result.ratings.average ? (
|
||||
const rating = addon.ratings && addon.ratings.average ? (
|
||||
<h3 className="SearchResult-rating">
|
||||
<span className="visually-hidden">{i18n.sprintf(
|
||||
i18n.gettext('Average rating: %(rating)s out of 5'),
|
||||
{ rating: Math.round(result.ratings.average * 2) / 2 }
|
||||
{ rating: Math.round(addon.ratings.average * 2) / 2 }
|
||||
)}</span>
|
||||
</h3>
|
||||
) : (
|
||||
|
@ -31,18 +31,18 @@ export class SearchResultBase extends React.Component {
|
|||
);
|
||||
return (
|
||||
<li className="SearchResult">
|
||||
<Link to={`/addon/${result.slug}/`}
|
||||
<Link to={`/addon/${addon.slug}/`}
|
||||
className="SearchResult-link"
|
||||
ref={(el) => { this.name = el; }}>
|
||||
<section className="SearchResult-main">
|
||||
<img className="SearchResult-icon" src={result.icon_url} alt="" />
|
||||
<h2 className="SearchResult-heading">{result.name}</h2>
|
||||
<img className="SearchResult-icon" src={addon.icon_url} alt="" />
|
||||
<h2 className="SearchResult-heading">{addon.name}</h2>
|
||||
{rating}
|
||||
<h3 className="SearchResult-author">{result.authors[0].name}</h3>
|
||||
<h3 className="SearchResult-author">{addon.authors[0].name}</h3>
|
||||
<h3 className="SearchResult-users">{i18n.sprintf(
|
||||
i18n.ngettext('%(users)s user', '%(users)s users',
|
||||
result.average_daily_users),
|
||||
{ users: result.average_daily_users }
|
||||
addon.average_daily_users),
|
||||
{ users: addon.average_daily_users }
|
||||
)}
|
||||
</h3>
|
||||
</section>
|
||||
|
|
|
@ -1,16 +1,13 @@
|
|||
import classNames from 'classnames';
|
||||
import React, { PropTypes } from 'react';
|
||||
|
||||
import AddonsCard from 'amo/components/AddonsCard';
|
||||
import translate from 'core/i18n/translate';
|
||||
|
||||
import 'core/css/SearchResults.scss';
|
||||
|
||||
import SearchResult from './SearchResult';
|
||||
import './SearchResults.scss';
|
||||
|
||||
|
||||
class SearchResults extends React.Component {
|
||||
static propTypes = {
|
||||
ResultComponent: PropTypes.object.isRequired,
|
||||
count: PropTypes.number,
|
||||
filters: PropTypes.object,
|
||||
hasSearchParams: PropTypes.bool,
|
||||
|
@ -20,7 +17,6 @@ class SearchResults extends React.Component {
|
|||
}
|
||||
|
||||
static defaultProps = {
|
||||
ResultComponent: SearchResult,
|
||||
count: 0,
|
||||
filters: {},
|
||||
hasSearchParams: false,
|
||||
|
@ -29,34 +25,13 @@ class SearchResults extends React.Component {
|
|||
|
||||
render() {
|
||||
const {
|
||||
ResultComponent, count, hasSearchParams, filters, i18n, loading, results,
|
||||
count, hasSearchParams, filters, i18n, loading, results,
|
||||
} = this.props;
|
||||
const { query } = filters;
|
||||
|
||||
let hideMessageText = false;
|
||||
let messageText;
|
||||
let resultHeader;
|
||||
let searchResults;
|
||||
|
||||
if (hasSearchParams && count > 0) {
|
||||
hideMessageText = true;
|
||||
messageText = i18n.sprintf(
|
||||
i18n.ngettext(
|
||||
'Your search for "%(query)s" returned %(count)s result.',
|
||||
'Your search for "%(query)s" returned %(count)s results.',
|
||||
count,
|
||||
),
|
||||
{ query, count }
|
||||
);
|
||||
searchResults = (
|
||||
<ul className="SearchResults-list"
|
||||
ref={(ref) => { this.results = ref; }}>
|
||||
{results.map((result) => (
|
||||
<ResultComponent result={result} key={result.slug} />
|
||||
))}
|
||||
</ul>
|
||||
);
|
||||
} else if (hasSearchParams && loading) {
|
||||
if (hasSearchParams && loading) {
|
||||
messageText = i18n.gettext('Searching...');
|
||||
} else if (!loading && count === 0) {
|
||||
if (query) {
|
||||
|
@ -72,18 +47,16 @@ class SearchResults extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
const message = (
|
||||
(<p ref={(ref) => { this.message = ref; }} className={classNames({
|
||||
'visually-hidden': hideMessageText,
|
||||
'SearchResults-message': !hideMessageText,
|
||||
})}>{messageText}</p>)
|
||||
);
|
||||
|
||||
return (
|
||||
<div ref={(ref) => { this.container = ref; }} className="SearchResults">
|
||||
{resultHeader}
|
||||
{message}
|
||||
{searchResults}
|
||||
<AddonsCard addons={results}>
|
||||
{messageText ? (
|
||||
<p ref={(ref) => { this.message = ref; }}
|
||||
className="SearchResults-message">
|
||||
{messageText}
|
||||
</p>
|
||||
) : null}
|
||||
</AddonsCard>
|
||||
</div>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
@import "~core/css/inc/vars";
|
||||
|
||||
.SearchResults {
|
||||
margin: 0 0 $padding-page;
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/* global window */
|
||||
|
||||
/* global navigator, window */
|
||||
import config from 'config';
|
||||
import React, { PropTypes } from 'react';
|
||||
import Helmet from 'react-helmet';
|
||||
import cookie from 'react-cookie';
|
||||
|
@ -9,6 +9,8 @@ import { compose } from 'redux';
|
|||
import 'core/fonts/fira.scss';
|
||||
import 'amo/css/App.scss';
|
||||
import SearchForm from 'amo/components/SearchForm';
|
||||
import { addChangeListeners } from 'core/addonManager';
|
||||
import { INSTALL_STATE } from 'core/constants';
|
||||
import translate from 'core/i18n/translate';
|
||||
import { startLoginUrl } from 'core/api';
|
||||
import Footer from 'amo/components/Footer';
|
||||
|
@ -19,22 +21,33 @@ export class AppBase extends React.Component {
|
|||
static propTypes = {
|
||||
FooterComponent: PropTypes.node.isRequired,
|
||||
MastHeadComponent: PropTypes.node.isRequired,
|
||||
_addChangeListeners: PropTypes.func,
|
||||
children: PropTypes.node,
|
||||
handleGlobalEvent: PropTypes.func.isRequired,
|
||||
handleLogIn: PropTypes.func.isRequired,
|
||||
i18n: PropTypes.object.isRequired,
|
||||
isAuthenticated: PropTypes.bool,
|
||||
location: PropTypes.object.isRequired,
|
||||
mozAddonManager: PropTypes.object,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
FooterComponent: Footer,
|
||||
MastHeadComponent: MastHead,
|
||||
_addChangeListeners: addChangeListeners,
|
||||
mozAddonManager: config.get('server') ? {} : navigator.mozAddonManager,
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { _addChangeListeners, handleGlobalEvent, mozAddonManager } = this.props;
|
||||
// Use addonManager.addChangeListener to setup and filter events.
|
||||
_addChangeListeners(handleGlobalEvent, mozAddonManager);
|
||||
}
|
||||
|
||||
onViewDesktop = (event, { window_ = window, cookie_ = cookie } = {}) => {
|
||||
event.preventDefault();
|
||||
if (window_ && window_.location) {
|
||||
cookie_.remove('mamo', { path: '/' });
|
||||
cookie_.save('mamo', 'off', { path: '/' });
|
||||
window_.location.reload();
|
||||
}
|
||||
}
|
||||
|
@ -78,7 +91,15 @@ export const setupMapStateToProps = (_window) => (state) => ({
|
|||
},
|
||||
});
|
||||
|
||||
export function mapDispatchToProps(dispatch) {
|
||||
return {
|
||||
handleGlobalEvent(payload) {
|
||||
dispatch({ type: INSTALL_STATE, payload });
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export default compose(
|
||||
connect(setupMapStateToProps()),
|
||||
connect(setupMapStateToProps(), mapDispatchToProps),
|
||||
translate({ withRef: true }),
|
||||
)(AppBase);
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
import deepEqual from 'deep-eql';
|
||||
import { connect } from 'react-redux';
|
||||
import { asyncConnect } from 'redux-connect';
|
||||
import { compose } from 'redux';
|
||||
|
||||
import SearchPage from 'amo/components/SearchPage';
|
||||
import { loadByCategoryIfNeeded, parsePage } from 'core/searchUtils';
|
||||
|
||||
|
||||
export function mapStateToProps(state, ownProps) {
|
||||
const filters = {
|
||||
addonType: ownProps.params.addonType,
|
||||
category: ownProps.params.slug,
|
||||
clientApp: ownProps.params.application,
|
||||
};
|
||||
const pathname = `/${filters.addonType}s/${filters.category}/`;
|
||||
const queryParams = { page: parsePage(ownProps.location.query.page) };
|
||||
|
||||
const filtersMatchState = deepEqual(
|
||||
{ ...state.search.filters, page: parsePage(state.search.page) },
|
||||
{ ...filters, page: queryParams.page },
|
||||
);
|
||||
if (filtersMatchState) {
|
||||
return {
|
||||
hasSearchParams: true,
|
||||
filters,
|
||||
pathname,
|
||||
queryParams,
|
||||
...state.search,
|
||||
};
|
||||
}
|
||||
|
||||
return { hasSearchParams: true, pathname, queryParams };
|
||||
}
|
||||
|
||||
export default compose(
|
||||
asyncConnect([{
|
||||
deferred: true,
|
||||
promise: loadByCategoryIfNeeded,
|
||||
}]),
|
||||
connect(mapStateToProps),
|
||||
)(SearchPage);
|
|
@ -4,25 +4,28 @@ import { asyncConnect } from 'redux-connect';
|
|||
import { connect } from 'react-redux';
|
||||
|
||||
import AddonDetail from 'amo/components/AddonDetail';
|
||||
import translate from 'core/i18n/translate';
|
||||
import { UNKNOWN } from 'core/constants';
|
||||
import { loadAddonIfNeeded } from 'core/utils';
|
||||
|
||||
|
||||
export class DetailPageBase extends React.Component {
|
||||
render() {
|
||||
return (
|
||||
<div className="full-width no-top-padding">
|
||||
<div className="DetailPage">
|
||||
<AddonDetail {...this.props} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function mapStateToProps(state, ownProps) {
|
||||
export function mapStateToProps(state, ownProps) {
|
||||
const { slug } = ownProps.params;
|
||||
const addon = state.addons[slug];
|
||||
const installation = state.installations[addon.guid] || { status: UNKNOWN };
|
||||
return {
|
||||
addon: state.addons[slug],
|
||||
slug,
|
||||
addon,
|
||||
...addon,
|
||||
...installation,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -33,5 +36,4 @@ export default compose(
|
|||
promise: loadAddonIfNeeded,
|
||||
}]),
|
||||
connect(mapStateToProps),
|
||||
translate({ withRef: true }),
|
||||
)(DetailPageBase);
|
||||
|
|
|
@ -16,28 +16,52 @@ export class HomePageBase extends React.Component {
|
|||
return (
|
||||
<div className="HomePage">
|
||||
<h2 className="HomePage-subheading">{i18n.gettext('What do you want Firefox to do?')}</h2>
|
||||
<ul className="HomePage-cat-list">
|
||||
<li className="HomePage-block-ads"><Link to="#block-ads"><span>{i18n.gettext('Block ads')}</span></Link></li>
|
||||
<li className="HomePage-screenshot"><Link to="#screenshot"><span>{i18n.gettext('Screenshot')}</span></Link></li>
|
||||
<li className="HomePage-save-stuff"><Link to="#save-stuff"><span>{i18n.gettext('Save stuff')}</span></Link></li>
|
||||
<li className="HomePage-shop-online"><Link to="#shop-online"><span>{i18n.gettext('Shop online')}</span></Link></li>
|
||||
<li className="HomePage-be-social"><Link to="#share-stuff"><span>{i18n.gettext('Be social')}</span></Link></li>
|
||||
<li className="HomePage-share-stuff"><Link to="#share-stuff"><span>{i18n.gettext('Share stuff')}</span></Link></li>
|
||||
<ul className="HomePage-category-list">
|
||||
<li className="HomePage-category-li HomePage-block-ads">
|
||||
<Link to="#block-ads"><span>{i18n.gettext('Block ads')}</span></Link>
|
||||
</li>
|
||||
<li className="HomePage-category-li HomePage-screenshot">
|
||||
<Link to="#screenshot"><span>{i18n.gettext('Screenshot')}</span></Link>
|
||||
</li>
|
||||
<li className="HomePage-category-li HomePage-save-stuff">
|
||||
<Link to="#save-stuff"><span>{i18n.gettext('Save stuff')}</span></Link>
|
||||
</li>
|
||||
<li className="HomePage-category-li HomePage-shop-online">
|
||||
<Link to="#shop-online"><span>{i18n.gettext('Shop online')}</span></Link>
|
||||
</li>
|
||||
<li className="HomePage-category-li HomePage-be-social">
|
||||
<Link to="#share-stuff"><span>{i18n.gettext('Be social')}</span></Link>
|
||||
</li>
|
||||
<li className="HomePage-category-li HomePage-share-stuff">
|
||||
<Link to="#share-stuff"><span>{i18n.gettext('Share stuff')}</span></Link>
|
||||
</li>
|
||||
</ul>
|
||||
<Link className="HomePage-extensions-link" to="#extensions">
|
||||
<Link className="HomePage-extensions-link" to="/extensions/">
|
||||
{i18n.gettext('Browse all extensions')}
|
||||
</Link>
|
||||
|
||||
<h2 className="HomePage-subheading">{i18n.gettext('How do you want Firefox to look?')}</h2>
|
||||
<ul className="HomePage-cat-list">
|
||||
<li className="HomePage-wild"><Link to="#wild"><span>{i18n.gettext('Wild')}</span></Link></li>
|
||||
<li className="HomePage-abstract"><Link to="#abstract"><span>{i18n.gettext('Abstract')}</span></Link></li>
|
||||
<li className="HomePage-fashionable"><Link to="#fashionable"><span>{i18n.gettext('Fashionable')}</span></Link></li>
|
||||
<li className="HomePage-scenic"><Link to="#scenic"><span>{i18n.gettext('Scenic')}</span></Link></li>
|
||||
<li className="HomePage-sporty"><Link to="#sporty"><span>{i18n.gettext('Sporty')}</span></Link></li>
|
||||
<li className="HomePage-mystical"><Link to="#mystical"><span>{i18n.gettext('Mystical')}</span></Link></li>
|
||||
<ul className="HomePage-category-list">
|
||||
<li className="HomePage-category-li HomePage-wild">
|
||||
<Link to="#wild"><span>{i18n.gettext('Wild')}</span></Link>
|
||||
</li>
|
||||
<li className="HomePage-category-li HomePage-abstract">
|
||||
<Link to="#abstract"><span>{i18n.gettext('Abstract')}</span></Link>
|
||||
</li>
|
||||
<li className="HomePage-category-li HomePage-fashionable">
|
||||
<Link to="#fashionable"><span>{i18n.gettext('Fashionable')}</span></Link>
|
||||
</li>
|
||||
<li className="HomePage-category-li HomePage-scenic">
|
||||
<Link to="#scenic"><span>{i18n.gettext('Scenic')}</span></Link>
|
||||
</li>
|
||||
<li className="HomePage-category-li HomePage-sporty">
|
||||
<Link to="#sporty"><span>{i18n.gettext('Sporty')}</span></Link>
|
||||
</li>
|
||||
<li className="HomePage-category-li HomePage-mystical">
|
||||
<Link to="#mystical"><span>{i18n.gettext('Mystical')}</span></Link>
|
||||
</li>
|
||||
</ul>
|
||||
<Link className="HomePage-themes-link" to="#themes">
|
||||
<Link className="HomePage-themes-link" to="/themes/">
|
||||
{i18n.gettext('Browse all themes')}
|
||||
</Link>
|
||||
</div>
|
||||
|
|
|
@ -11,5 +11,5 @@ export default compose(
|
|||
deferred: true,
|
||||
promise: loadSearchResultsIfNeeded,
|
||||
}]),
|
||||
connect(mapStateToProps)
|
||||
connect(mapStateToProps),
|
||||
)(SearchPage);
|
||||
|
|
|
@ -1,48 +1,21 @@
|
|||
@import "~core/css/inc/mixins";
|
||||
@import "~core/css/inc/vars";
|
||||
|
||||
.AddonDetail {
|
||||
header {
|
||||
background: $masthead-color;
|
||||
color: $header-font-color;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 0 20px;
|
||||
}
|
||||
|
||||
.icon,
|
||||
.AddonDetail-icon,
|
||||
.title,
|
||||
.description,
|
||||
.screenshots,
|
||||
.about,
|
||||
.AddonDetail-summary,
|
||||
.overall-rating {
|
||||
overflow: hidden;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.icon {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
img {
|
||||
background: #fff;
|
||||
border-radius: 5px;
|
||||
display: inline-block;
|
||||
height: 64px;
|
||||
width: 64px;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
background: darken($masthead-color, 3%);
|
||||
|
||||
h1 {
|
||||
margin-top: 0;
|
||||
color: $header-font-color;
|
||||
}
|
||||
}
|
||||
|
||||
.author {
|
||||
display: block;
|
||||
font-size: 20px;
|
||||
|
@ -56,13 +29,65 @@
|
|||
.switch {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
||||
.description {
|
||||
background: darken($masthead-color, 5.5%);
|
||||
font-size: 18px;
|
||||
.AddonDetail-summary {
|
||||
margin-bottom: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
p:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
.AddonDetail-header {
|
||||
background: $masthead-color;
|
||||
color: $header-font-color;
|
||||
|
||||
h1 {
|
||||
margin-top: 0;
|
||||
color: $header-font-color;
|
||||
}
|
||||
}
|
||||
|
||||
$theme-header-horizontal-padding: 10px;
|
||||
|
||||
.AddonDetail-theme-header {
|
||||
line-height: 0;
|
||||
padding: 20px $theme-header-horizontal-padding 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.AddonDetail-theme-header-image {
|
||||
border-radius: 12px;
|
||||
height: 100px;
|
||||
object-fit: cover;
|
||||
object-position: top right;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.AddonDetail-theme-header-label {
|
||||
$label-margin: 12px;
|
||||
|
||||
@include start($theme-header-horizontal-padding + $label-margin);
|
||||
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
border-radius: 8px;
|
||||
bottom: $label-margin;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
line-height: 1;
|
||||
padding: $label-margin;
|
||||
position: absolute;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.AddonDetail-icon {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
img {
|
||||
background: #fff;
|
||||
border-radius: 5px;
|
||||
display: inline-block;
|
||||
height: 64px;
|
||||
width: 64px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,14 +40,7 @@ body {
|
|||
.App-content {
|
||||
background: $accent-color;
|
||||
flex-grow: 1;
|
||||
|
||||
> div {
|
||||
padding: $padding-page;
|
||||
|
||||
&.full-width {
|
||||
padding: 0 0 $padding-page;
|
||||
}
|
||||
}
|
||||
padding: 0 0 $padding-page;
|
||||
}
|
||||
|
||||
h1,
|
||||
|
@ -78,7 +71,7 @@ a:link {
|
|||
@include font-medium();
|
||||
|
||||
font-size: 14px;
|
||||
color: #0568ba;
|
||||
color: $link-color;
|
||||
}
|
||||
|
||||
em {
|
||||
|
|
|
@ -1,52 +1,47 @@
|
|||
@import "~core/css/inc/vars";
|
||||
|
||||
.HomePage {
|
||||
padding: $padding-page;
|
||||
}
|
||||
|
||||
.HomePage-subheading {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.HomePage-cat-list {
|
||||
.HomePage-category-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
overflow: auto;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
li {
|
||||
background-color: #fff;
|
||||
background-size: 50% 50%;
|
||||
border-radius: 6px;
|
||||
display: block;
|
||||
flex-grow: 1;
|
||||
list-style-type: none;
|
||||
margin: 5px;
|
||||
overflow: auto;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
width: 30%;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
display: block;
|
||||
padding-bottom: 100%;
|
||||
}
|
||||
}
|
||||
.HomePage-category-li {
|
||||
background-color: $base-color;
|
||||
background-size: 50% auto;
|
||||
background-position: 50% 35%;
|
||||
background-repeat: no-repeat;
|
||||
border-radius: 6px;
|
||||
display: block;
|
||||
flex-grow: 1;
|
||||
list-style-type: none;
|
||||
margin: 5px;
|
||||
overflow: auto;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
width: 30%;
|
||||
|
||||
a:link {
|
||||
bottom: 0;
|
||||
font-size: 10px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
text-decoration: none;
|
||||
top: 0;
|
||||
padding-top: 70%;
|
||||
display: block;
|
||||
}
|
||||
|
||||
span {
|
||||
bottom: 10px;
|
||||
display: block;
|
||||
left: 0;
|
||||
padding: 0 10px;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
padding: 5px 10px;
|
||||
text-align: center;
|
||||
text-decoration: inherit;
|
||||
}
|
||||
|
@ -60,7 +55,7 @@
|
|||
.HomePage-extensions-link:link,
|
||||
.HomePage-themes-link:link {
|
||||
align-items: center;
|
||||
background: #fff;
|
||||
background: $base-color;
|
||||
border-radius: 6px;
|
||||
display: flex;
|
||||
font-size: 10px;
|
||||
|
@ -97,49 +92,50 @@
|
|||
}
|
||||
|
||||
.HomePage-block-ads {
|
||||
background: url('../img/home/block-ads.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/block-ads.svg');
|
||||
}
|
||||
|
||||
.HomePage-screenshot {
|
||||
background: url('../img/home/screenshot.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/screenshot.svg');
|
||||
}
|
||||
|
||||
.HomePage-save-stuff {
|
||||
background: url('../img/home/save-stuff.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/save-stuff.svg');
|
||||
background-size: 40% auto;
|
||||
}
|
||||
|
||||
.HomePage-shop-online {
|
||||
background: url('../img/home/shop-online.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/shop-online.svg');
|
||||
}
|
||||
|
||||
.HomePage-be-social {
|
||||
background: url('../img/home/be-social.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/be-social.svg');
|
||||
}
|
||||
|
||||
.HomePage-share-stuff {
|
||||
background: url('../img/home/share-stuff.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/share-stuff.svg');
|
||||
}
|
||||
|
||||
.HomePage-wild {
|
||||
background: url('../img/home/wild.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/wild.svg');
|
||||
}
|
||||
|
||||
.HomePage-abstract {
|
||||
background: url('../img/home/abstract.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/abstract.svg');
|
||||
}
|
||||
|
||||
.HomePage-fashionable {
|
||||
background: url('../img/home/fashion.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/fashion.svg');
|
||||
}
|
||||
|
||||
.HomePage-scenic {
|
||||
background: url('../img/home/scenic.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/scenic.svg');
|
||||
}
|
||||
|
||||
.HomePage-sporty {
|
||||
background: url('../img/home/sporty.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/sporty.svg');
|
||||
}
|
||||
|
||||
.HomePage-mystical {
|
||||
background: url('../img/home/mystical.svg') no-repeat 50% 35%;
|
||||
background-image: url('../img/home/mystical.svg');
|
||||
}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
<svg viewBox="61 29 70 70" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Group-31" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(64.000000, 32.000000)">
|
||||
<path d="M54.4,9.14285714 C48.6857143,14.8571429 40.6857143,18.2857143 32,18.2857143 C23.3142857,18.2857143 15.3142857,14.8571429 9.6,9.14285714" id="Shape" stroke="#329AF0" stroke-width="6"></path>
|
||||
<path d="M9.6,54.8571429 C15.3142857,49.1428571 23.3142857,45.7142857 32,45.7142857 C40.6857143,45.7142857 48.6857143,49.1428571 54.4,54.8571429" id="Shape" stroke="#329AF0" stroke-width="6"></path>
|
||||
<path d="M32,0 L32,64" id="Shape" stroke="#329AF0" stroke-width="6"></path>
|
||||
<path d="M0,32 L64,32" id="Shape" stroke="#329AF0" stroke-width="6"></path>
|
||||
<circle id="Oval" stroke="#329AF0" stroke-width="6" cx="32" cy="32" r="32"></circle>
|
||||
<ellipse id="Oval" stroke="#329AF0" stroke-width="6" cx="32" cy="32" rx="18.2857143" ry="32"></ellipse>
|
||||
</g>
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 1.2 KiB |
|
@ -1,6 +1,6 @@
|
|||
<svg width="12px" height="10px" viewBox="952 32 32 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 40.3 (33839) - http://www.bohemiancoding.com/sketch -->
|
||||
<svg viewBox="917 51 39 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<polygon id="Triangle" stroke="none" fill="#FFFFFF" fill-rule="evenodd" transform="translate(968.000000, 46.333333) rotate(180.000000) translate(-968.000000, -46.333333) " points="968 33 984 59.6666667 952 59.6666667"></polygon>
|
||||
<polygon id="Shape-Copy-24" stroke="#329AF0" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" fill="none" transform="translate(936.428571, 66.000000) rotate(-270.000000) translate(-936.428571, -66.000000) " points="925 82 925 50 947.857143 66"></polygon>
|
||||
</svg>
|
||||
|
|
До Ширина: | Высота: | Размер: 527 B После Ширина: | Высота: | Размер: 541 B |
|
@ -17,23 +17,18 @@ function mergeInNewReview(latestReview, oldReviews = {}) {
|
|||
return mergedReviews;
|
||||
}
|
||||
|
||||
export default function reviews(state = initialState, { data, type }) {
|
||||
export default function reviews(state = initialState, { payload, type }) {
|
||||
switch (type) {
|
||||
case SET_REVIEW: {
|
||||
const existingReviews =
|
||||
state[data.userId] ? state[data.userId][data.addonId] : {};
|
||||
const latestReview = {
|
||||
id: data.id,
|
||||
rating: data.rating,
|
||||
versionId: data.versionId,
|
||||
isLatest: data.isLatest,
|
||||
};
|
||||
state[payload.userId] ? state[payload.userId][payload.addonId] : {};
|
||||
const latestReview = payload;
|
||||
return {
|
||||
...state,
|
||||
// This is a map of reviews by user ID, addon ID, and review ID.
|
||||
[data.userId]: {
|
||||
...state[data.userId],
|
||||
[data.addonId]: mergeInNewReview(latestReview, existingReviews),
|
||||
[payload.userId]: {
|
||||
...state[payload.userId],
|
||||
[payload.addonId]: mergeInNewReview(latestReview, existingReviews),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
|
|
@ -6,16 +6,19 @@ import HandleLogin from 'core/containers/HandleLogin';
|
|||
import AddonReview from './components/AddonReview';
|
||||
import App from './containers/App';
|
||||
import CategoryList from './containers/CategoryList';
|
||||
import CategoryPage from './containers/CategoryPage';
|
||||
import Home from './containers/Home';
|
||||
import DetailPage from './containers/DetailPage';
|
||||
import SearchPage from './containers/SearchPage';
|
||||
|
||||
|
||||
export default (
|
||||
<Route path="/:lang/:application" component={App}>
|
||||
<IndexRoute component={Home} />
|
||||
<Route path="addon/:slug/" component={DetailPage} />
|
||||
<Route path="addon/:slug/review/:reviewId/" component={AddonReview} />
|
||||
<Route path=":addonType/categories/" component={CategoryList} />
|
||||
<Route path=":addonType/:slug/" component={CategoryPage} />
|
||||
<Route path="fxa-authenticate" component={HandleLogin} />
|
||||
<Route path="search/" component={SearchPage} />
|
||||
</Route>
|
||||
|
|
|
@ -1,18 +1,28 @@
|
|||
import { createStore as _createStore, combineReducers } from 'redux';
|
||||
import { reducer as reduxAsyncConnect } from 'redux-connect';
|
||||
|
||||
import { middleware } from 'core/store';
|
||||
import reviews from 'amo/reducers/reviews';
|
||||
import addons from 'core/reducers/addons';
|
||||
import api from 'core/reducers/api';
|
||||
import auth from 'core/reducers/authentication';
|
||||
import categories from 'core/reducers/categories';
|
||||
import reviews from 'amo/reducers/reviews';
|
||||
import errors from 'core/reducers/errors';
|
||||
import installations from 'core/reducers/installations';
|
||||
import search from 'core/reducers/search';
|
||||
import { middleware } from 'core/store';
|
||||
|
||||
export default function createStore(initialState = {}) {
|
||||
return _createStore(
|
||||
combineReducers({
|
||||
addons, api, auth, categories, search, reviews, reduxAsyncConnect,
|
||||
addons,
|
||||
api,
|
||||
auth,
|
||||
categories,
|
||||
errors,
|
||||
installations,
|
||||
search,
|
||||
reduxAsyncConnect,
|
||||
reviews,
|
||||
}),
|
||||
initialState,
|
||||
middleware(),
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
import { CLEAR_ERROR, SET_ERROR } from 'core/constants';
|
||||
|
||||
export function setError({ error, id } = {}) {
|
||||
if (!id) {
|
||||
throw new Error('id cannot be empty');
|
||||
}
|
||||
if (!error) {
|
||||
throw new Error('error cannot be empty');
|
||||
}
|
||||
return {
|
||||
type: SET_ERROR,
|
||||
payload: { error, id },
|
||||
};
|
||||
}
|
||||
|
||||
export function clearError(id) {
|
||||
if (!id) {
|
||||
throw new Error('id cannot be empty');
|
||||
}
|
||||
return {
|
||||
type: CLEAR_ERROR,
|
||||
payload: { id },
|
||||
};
|
||||
}
|
|
@ -9,16 +9,23 @@ import {
|
|||
import { addQueryParams } from 'core/utils';
|
||||
|
||||
|
||||
export function hasAddonManager({ navigator } = {}) {
|
||||
return typeof window !== 'undefined' && 'mozAddonManager' in (navigator || window.navigator);
|
||||
}
|
||||
|
||||
export function getAddon(guid, { _mozAddonManager = window.navigator.mozAddonManager } = {}) {
|
||||
// Resolves a promise with the addon on success.
|
||||
return _mozAddonManager.getAddonByID(guid)
|
||||
.then((addon) => {
|
||||
if (!addon) {
|
||||
throw new Error('Addon not found');
|
||||
}
|
||||
log.info('Add-on found', addon);
|
||||
return addon;
|
||||
});
|
||||
if (_mozAddonManager || module.exports.hasAddonManager()) {
|
||||
// Resolves a promise with the addon on success.
|
||||
return _mozAddonManager.getAddonByID(guid)
|
||||
.then((addon) => {
|
||||
if (!addon) {
|
||||
throw new Error('Addon not found');
|
||||
}
|
||||
log.info('Add-on found', addon);
|
||||
return addon;
|
||||
});
|
||||
}
|
||||
return Promise.reject(new Error('Cannot check add-on status'));
|
||||
}
|
||||
|
||||
export function install(
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'isomorphic-fetch';
|
|||
import { Schema, arrayOf, normalize } from 'normalizr';
|
||||
import config from 'config';
|
||||
|
||||
import log from 'core/logger';
|
||||
import { convertFiltersToQueryParams } from 'core/searchUtils';
|
||||
|
||||
|
||||
|
@ -19,10 +20,23 @@ function makeQueryString(query) {
|
|||
return url.format({ query });
|
||||
}
|
||||
|
||||
export function createApiError({ apiURL, response, jsonResponse }) {
|
||||
const apiError = new Error('Error calling API');
|
||||
apiError.response = {
|
||||
apiURL,
|
||||
status: response.status,
|
||||
data: jsonResponse,
|
||||
};
|
||||
return apiError;
|
||||
}
|
||||
|
||||
export function callApi({
|
||||
endpoint, schema, params = {}, auth = false, state = {}, method = 'get',
|
||||
body, credentials,
|
||||
body, credentials, errorHandler,
|
||||
}) {
|
||||
if (errorHandler) {
|
||||
errorHandler.clear();
|
||||
}
|
||||
const queryString = makeQueryString({ ...params, lang: state.lang });
|
||||
const options = {
|
||||
headers: {},
|
||||
|
@ -45,19 +59,29 @@ export function callApi({
|
|||
const apiURL = `${API_BASE}/${endpoint}/${queryString}`;
|
||||
|
||||
return fetch(apiURL, options)
|
||||
.then((response) => {
|
||||
.then((response) => response.json().then(
|
||||
(jsonResponse) => ({ response, jsonResponse }),
|
||||
(error) => {
|
||||
log.warn('Could not parse response as JSON:', error);
|
||||
return response.text().then((textResponse) =>
|
||||
({ response, jsonResponse: { text: textResponse } })
|
||||
);
|
||||
}
|
||||
))
|
||||
.then(({ response, jsonResponse }) => {
|
||||
if (response.ok) {
|
||||
return response.json();
|
||||
return jsonResponse;
|
||||
}
|
||||
|
||||
// If response is not ok we'll throw.
|
||||
// Notes that redux-connect will catch this exception and
|
||||
// pass it up to the state as an error for this api call.
|
||||
const apiError = new Error('Error calling API');
|
||||
apiError.response = {
|
||||
apiURL,
|
||||
status: response.status,
|
||||
};
|
||||
// Note that if callApi is executed by an asyncConnect() handler,
|
||||
// then redux-connect will catch this exception and
|
||||
// dispatch a LOAD_FAIL action which puts the error in state.
|
||||
|
||||
const apiError = createApiError({ apiURL, response, jsonResponse });
|
||||
if (errorHandler) {
|
||||
errorHandler.handle(apiError);
|
||||
}
|
||||
throw apiError;
|
||||
})
|
||||
.then((response) => (schema ? normalize(response, schema) : response));
|
||||
|
|
|
@ -1,126 +1,42 @@
|
|||
import React, { PropTypes } from 'react';
|
||||
import { compose } from 'redux';
|
||||
|
||||
import InstallSwitch from 'core/components/InstallSwitch';
|
||||
import { THEME_TYPE } from 'core/constants';
|
||||
import translate from 'core/i18n/translate';
|
||||
import {
|
||||
DOWNLOADING,
|
||||
DISABLED,
|
||||
ENABLED,
|
||||
ENABLING,
|
||||
INSTALLING,
|
||||
INSTALLED,
|
||||
THEME_TYPE,
|
||||
UNINSTALLED,
|
||||
UNINSTALLING,
|
||||
UNKNOWN,
|
||||
validAddonTypes,
|
||||
validInstallStates as validStates,
|
||||
} from 'core/constants';
|
||||
import { getThemeData } from 'core/themePreview';
|
||||
import Switch from 'ui/components/Switch';
|
||||
import Button from 'ui/components/Button';
|
||||
|
||||
export class InstallButtonBase extends React.Component {
|
||||
static propTypes = {
|
||||
downloadProgress: PropTypes.number,
|
||||
enable: PropTypes.func,
|
||||
guid: PropTypes.string.isRequired,
|
||||
handleChange: PropTypes.func,
|
||||
addon: PropTypes.object.isRequired,
|
||||
hasAddonManager: PropTypes.bool.isRequired,
|
||||
i18n: PropTypes.object.isRequired,
|
||||
install: PropTypes.func.isRequired,
|
||||
installTheme: PropTypes.func.isRequired,
|
||||
installURL: PropTypes.string,
|
||||
name: PropTypes.string.isRequired,
|
||||
slug: PropTypes.string.isRequired,
|
||||
status: PropTypes.oneOf(validStates),
|
||||
type: PropTypes.oneOf(validAddonTypes),
|
||||
uninstall: PropTypes.func.isRequired,
|
||||
status: PropTypes.string.isRequired,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
status: UNKNOWN,
|
||||
downloadProgress: 0,
|
||||
}
|
||||
|
||||
getLabel() {
|
||||
const { i18n, name, status } = this.props;
|
||||
let label;
|
||||
switch (status) {
|
||||
case DOWNLOADING:
|
||||
label = i18n.gettext('Downloading %(name)s.');
|
||||
break;
|
||||
case INSTALLING:
|
||||
label = i18n.gettext('Installing %(name)s.');
|
||||
break;
|
||||
case ENABLED:
|
||||
case INSTALLED:
|
||||
label = i18n.gettext('%(name)s is installed and enabled. Click to uninstall.');
|
||||
break;
|
||||
case DISABLED:
|
||||
label = i18n.gettext('%(name)s is disabled. Click to enable.');
|
||||
break;
|
||||
case UNINSTALLING:
|
||||
label = i18n.gettext('Uninstalling %(name)s.');
|
||||
break;
|
||||
case UNINSTALLED:
|
||||
label = i18n.gettext('%(name)s is uninstalled. Click to install.');
|
||||
break;
|
||||
default:
|
||||
label = i18n.gettext('Install state for %(name)s is unknown.');
|
||||
break;
|
||||
}
|
||||
return i18n.sprintf(label, { name });
|
||||
}
|
||||
|
||||
getDownloadProgress() {
|
||||
const { downloadProgress, status } = this.props;
|
||||
if (status === DOWNLOADING) {
|
||||
return downloadProgress;
|
||||
} else if ([INSTALLING, ENABLING].includes(status)) {
|
||||
return Infinity;
|
||||
} else if (status === UNINSTALLING) {
|
||||
return -Infinity;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
handleClick = (e) => {
|
||||
e.preventDefault();
|
||||
const {
|
||||
guid, enable, install, installURL, name, status, installTheme, type, uninstall,
|
||||
} = this.props;
|
||||
if (type === THEME_TYPE && [UNINSTALLED, DISABLED].includes(status)) {
|
||||
installTheme(this.themeData, guid, name);
|
||||
} else if (status === UNINSTALLED) {
|
||||
install();
|
||||
} else if (status === DISABLED) {
|
||||
enable();
|
||||
} else if ([INSTALLED, ENABLED].includes(status)) {
|
||||
uninstall({ guid, installURL, name, type });
|
||||
}
|
||||
installTheme = (event) => {
|
||||
event.preventDefault();
|
||||
const { addon, status, installTheme } = this.props;
|
||||
installTheme(event.currentTarget, { ...addon, status });
|
||||
}
|
||||
|
||||
render() {
|
||||
const browsertheme = JSON.stringify(getThemeData(this.props));
|
||||
const { handleChange, slug, status } = this.props;
|
||||
|
||||
if (!validStates.includes(status)) {
|
||||
throw new Error('Invalid add-on status');
|
||||
const { addon, hasAddonManager, i18n } = this.props;
|
||||
if (hasAddonManager) {
|
||||
return <InstallSwitch {...this.props} />;
|
||||
} else if (addon.type === THEME_TYPE) {
|
||||
return (
|
||||
<Button data-browsertheme={JSON.stringify(getThemeData(addon))} onClick={this.installTheme}>
|
||||
{i18n.gettext('Install Theme')}
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
|
||||
const isChecked = [INSTALLED, INSTALLING, ENABLING, ENABLED].includes(status);
|
||||
const isDisabled = status === UNKNOWN;
|
||||
const isSuccess = [ENABLED, INSTALLED].includes(status);
|
||||
|
||||
return (
|
||||
<div data-browsertheme={browsertheme} ref={(el) => { this.themeData = el; }}>
|
||||
<Switch
|
||||
checked={isChecked} disabled={isDisabled} progress={this.getDownloadProgress()}
|
||||
name={slug} success={isSuccess} label={this.getLabel()}
|
||||
onChange={handleChange} onClick={this.handleClick}
|
||||
ref={(el) => { this.switchEl = el; }}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
return <Button href={addon.installURL}>{i18n.gettext('Add to Firefox')}</Button>;
|
||||
}
|
||||
}
|
||||
|
||||
export default translate()(InstallButtonBase);
|
||||
export default compose(
|
||||
translate(),
|
||||
)(InstallButtonBase);
|
||||
|
|
|
@ -0,0 +1,127 @@
|
|||
import React, { PropTypes } from 'react';
|
||||
|
||||
import translate from 'core/i18n/translate';
|
||||
import {
|
||||
DOWNLOADING,
|
||||
DISABLED,
|
||||
ENABLED,
|
||||
ENABLING,
|
||||
INSTALLING,
|
||||
INSTALLED,
|
||||
THEME_TYPE,
|
||||
UNINSTALLED,
|
||||
UNINSTALLING,
|
||||
UNKNOWN,
|
||||
validAddonTypes,
|
||||
validInstallStates as validStates,
|
||||
} from 'core/constants';
|
||||
import { getThemeData } from 'core/themePreview';
|
||||
import Switch from 'ui/components/Switch';
|
||||
|
||||
export class InstallSwitchBase extends React.Component {
|
||||
static propTypes = {
|
||||
addon: PropTypes.object.isRequired,
|
||||
downloadProgress: PropTypes.number,
|
||||
enable: PropTypes.func,
|
||||
guid: PropTypes.string.isRequired,
|
||||
handleChange: PropTypes.func,
|
||||
i18n: PropTypes.object.isRequired,
|
||||
install: PropTypes.func.isRequired,
|
||||
installTheme: PropTypes.func.isRequired,
|
||||
installURL: PropTypes.string,
|
||||
name: PropTypes.string.isRequired,
|
||||
slug: PropTypes.string.isRequired,
|
||||
status: PropTypes.oneOf(validStates),
|
||||
type: PropTypes.oneOf(validAddonTypes),
|
||||
uninstall: PropTypes.func.isRequired,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
status: UNKNOWN,
|
||||
downloadProgress: 0,
|
||||
}
|
||||
|
||||
getLabel() {
|
||||
const { i18n, name, status } = this.props;
|
||||
let label;
|
||||
switch (status) {
|
||||
case DOWNLOADING:
|
||||
label = i18n.gettext('Downloading %(name)s.');
|
||||
break;
|
||||
case INSTALLING:
|
||||
label = i18n.gettext('Installing %(name)s.');
|
||||
break;
|
||||
case ENABLED:
|
||||
case INSTALLED:
|
||||
label = i18n.gettext('%(name)s is installed and enabled. Click to uninstall.');
|
||||
break;
|
||||
case DISABLED:
|
||||
label = i18n.gettext('%(name)s is disabled. Click to enable.');
|
||||
break;
|
||||
case UNINSTALLING:
|
||||
label = i18n.gettext('Uninstalling %(name)s.');
|
||||
break;
|
||||
case UNINSTALLED:
|
||||
label = i18n.gettext('%(name)s is uninstalled. Click to install.');
|
||||
break;
|
||||
default:
|
||||
label = i18n.gettext('Install state for %(name)s is unknown.');
|
||||
break;
|
||||
}
|
||||
return i18n.sprintf(label, { name });
|
||||
}
|
||||
|
||||
getDownloadProgress() {
|
||||
const { downloadProgress, status } = this.props;
|
||||
if (status === DOWNLOADING) {
|
||||
return downloadProgress;
|
||||
} else if ([INSTALLING, ENABLING].includes(status)) {
|
||||
return Infinity;
|
||||
} else if (status === UNINSTALLING) {
|
||||
return -Infinity;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
handleClick = (e) => {
|
||||
e.preventDefault();
|
||||
const {
|
||||
addon, guid, enable, install, installURL, name, status, installTheme, type, uninstall,
|
||||
} = this.props;
|
||||
if (type === THEME_TYPE && [UNINSTALLED, DISABLED].includes(status)) {
|
||||
installTheme(this.themeData, { ...addon, status });
|
||||
} else if (status === UNINSTALLED) {
|
||||
install();
|
||||
} else if (status === DISABLED) {
|
||||
enable();
|
||||
} else if ([INSTALLED, ENABLED].includes(status)) {
|
||||
uninstall({ guid, installURL, name, type });
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
const browsertheme = JSON.stringify(getThemeData(this.props));
|
||||
const { handleChange, slug, status } = this.props;
|
||||
|
||||
if (!validStates.includes(status)) {
|
||||
throw new Error(`Invalid add-on status ${status}`);
|
||||
}
|
||||
|
||||
const isChecked = [INSTALLED, INSTALLING, ENABLING, ENABLED].includes(status);
|
||||
const isDisabled = status === UNKNOWN;
|
||||
const isSuccess = [ENABLED, INSTALLED].includes(status);
|
||||
|
||||
return (
|
||||
<div data-browsertheme={browsertheme} ref={(el) => { this.themeData = el; }}>
|
||||
<Switch
|
||||
checked={isChecked} disabled={isDisabled} progress={this.getDownloadProgress()}
|
||||
name={slug} success={isSuccess} label={this.getLabel()}
|
||||
onChange={handleChange} onClick={this.handleClick}
|
||||
ref={(el) => { this.switchEl = el; }}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default translate()(InstallSwitchBase);
|
|
@ -1,28 +0,0 @@
|
|||
import React, { PropTypes } from 'react';
|
||||
import { Link } from 'react-router';
|
||||
|
||||
|
||||
export default class SearchResult extends React.Component {
|
||||
static propTypes = {
|
||||
result: PropTypes.object.isRequired,
|
||||
}
|
||||
|
||||
render() {
|
||||
const { result } = this.props;
|
||||
return (
|
||||
<li className="SearchResult">
|
||||
<Link to={`/addon/${result.slug}/`}
|
||||
className="SearchResult-link"
|
||||
ref={(el) => { this.name = el; }}>
|
||||
<section className="SearchResult-main">
|
||||
<h2 className="SearchResult-heading">
|
||||
<span className="SearchResult-name">
|
||||
{result.name}
|
||||
</span>
|
||||
</h2>
|
||||
</section>
|
||||
</Link>
|
||||
</li>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -47,6 +47,7 @@ export const validAddonTypes = [
|
|||
export const CATEGORIES_GET = 'CATEGORIES_GET';
|
||||
export const CATEGORIES_LOAD = 'CATEGORIES_LOAD';
|
||||
export const CATEGORIES_FAILED = 'CATEGORIES_FAILED';
|
||||
export const CLEAR_ERROR = 'CLEAR_ERROR';
|
||||
export const ENTITIES_LOADED = 'ENTITIES_LOADED';
|
||||
export const LOG_OUT_USER = 'LOG_OUT_USER';
|
||||
export const SEARCH_FAILED = 'SEARCH_FAILED';
|
||||
|
@ -54,6 +55,7 @@ export const SEARCH_LOADED = 'SEARCH_LOADED';
|
|||
export const SEARCH_STARTED = 'SEARCH_STARTED';
|
||||
export const SET_CLIENT_APP = 'SET_CLIENT_APP';
|
||||
export const SET_CURRENT_USER = 'SET_CURRENT_USER';
|
||||
export const SET_ERROR = 'SET_ERROR';
|
||||
export const SET_JWT = 'SET_JWT';
|
||||
export const SET_LANG = 'SET_LANG';
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
@import "~core/css/inc/vars";
|
||||
|
||||
.ErrorHandler-list {
|
||||
text-align: center;
|
||||
background-color: $error-background-color;
|
||||
color: $error-text-color;
|
||||
padding: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
|
@ -22,10 +22,18 @@ $secondary-color: #6a6a6a;
|
|||
color: $text-color-default;
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 10px;
|
||||
padding: 10px 0;
|
||||
text-decoration: none;
|
||||
width: 100%;
|
||||
|
||||
.SearchResult:first-of-type & {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.SearchResult:last-of-type & {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
&:focus,
|
||||
&:hover {
|
||||
.SearchResult-heading {
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
@import "~core/css/inc/vars";
|
||||
|
||||
.SearchResults-list {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.SearchResults-type-header {
|
||||
color: #000;
|
||||
font-size: $font-size-default;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.SearchResults-message {
|
||||
background: $base-color;
|
||||
font-size: $font-size-m;
|
||||
margin: 0;
|
||||
padding: 1em;
|
||||
text-align: center;
|
||||
}
|
|
@ -244,7 +244,6 @@ $color: $text-color-message) {
|
|||
|
||||
@mixin addonSection() {
|
||||
background: $base-color;
|
||||
margin: 0 10px;
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
|
|
@ -13,13 +13,14 @@ $error-background-color: #f00;
|
|||
|
||||
// This is the color used for the MastHead and Footer background and the
|
||||
// basis of the SearchForm and Footer background colors.
|
||||
$masthead-color: #02538b;
|
||||
$masthead-color: #1862ab;
|
||||
$footer-color: #1e1e1e;
|
||||
$accent-color: #ebebeb;
|
||||
|
||||
$button-background-color: #0095dd;
|
||||
|
||||
$base-color: #fff;
|
||||
$link-color: #0568ba;
|
||||
|
||||
$warning: #d63920;
|
||||
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
import React, { PropTypes } from 'react';
|
||||
import { compose } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { clearError, setError } from 'core/actions/errors';
|
||||
import log from 'core/logger';
|
||||
|
||||
import 'core/css/ErrorHandler.scss';
|
||||
|
||||
function generateHandlerId({ name = '' } = {}) {
|
||||
return `${name}-${Math.random().toString(36).substr(2, 9)}`;
|
||||
}
|
||||
|
||||
export class ErrorHandler {
|
||||
constructor({ id, dispatch }) {
|
||||
this.id = id;
|
||||
this.dispatch = dispatch;
|
||||
}
|
||||
|
||||
clear() {
|
||||
log.debug('Clearing last error for ', this.id);
|
||||
this.dispatch(clearError(this.id));
|
||||
}
|
||||
|
||||
handle(error) {
|
||||
const info = { error, id: this.id };
|
||||
log.debug('Dispatching error action', info);
|
||||
this.dispatch(setError(info));
|
||||
}
|
||||
}
|
||||
|
||||
class ErrorHandlerComponent extends React.Component {
|
||||
static propTypes = {
|
||||
dispatch: PropTypes.func,
|
||||
error: PropTypes.object,
|
||||
errorHandlerId: PropTypes.string,
|
||||
WrappedComponent: PropTypes.object,
|
||||
}
|
||||
|
||||
render() {
|
||||
const {
|
||||
WrappedComponent,
|
||||
errorHandlerId,
|
||||
dispatch,
|
||||
error,
|
||||
...props
|
||||
} = this.props;
|
||||
const errorHandler = new ErrorHandler({ id: errorHandlerId, dispatch });
|
||||
const wrappedOutput = (
|
||||
<WrappedComponent errorHandler={errorHandler} {...props} />
|
||||
);
|
||||
|
||||
if (error) {
|
||||
return (
|
||||
<div>
|
||||
<ul className="ErrorHandler-list">
|
||||
{error.messages.map((msg) => <li>{msg}</li>)}
|
||||
</ul>
|
||||
{wrappedOutput}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return wrappedOutput;
|
||||
}
|
||||
}
|
||||
|
||||
export function withErrorHandling({ name, id } = {}) {
|
||||
return (WrappedComponent) => {
|
||||
const mapStateToProps = () => {
|
||||
// Each component instance gets its own error handler ID.
|
||||
let instanceId = id;
|
||||
if (!instanceId) {
|
||||
instanceId = generateHandlerId({ name });
|
||||
log.debug(`Generated error handler ID: ${instanceId}`);
|
||||
}
|
||||
return (state) => ({
|
||||
WrappedComponent,
|
||||
errorHandlerId: instanceId,
|
||||
error: state.errors[instanceId],
|
||||
});
|
||||
};
|
||||
|
||||
return compose(
|
||||
connect(mapStateToProps),
|
||||
)(ErrorHandlerComponent);
|
||||
};
|
||||
}
|
|
@ -1,9 +1,12 @@
|
|||
/* global CustomEvent, document, window */
|
||||
import React, { PropTypes } from 'react';
|
||||
import { compose } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
import { oneLine } from 'common-tags';
|
||||
import config from 'config';
|
||||
|
||||
import log from 'core/logger';
|
||||
import themeAction, { getThemeData } from 'core/themePreview';
|
||||
import tracking, { getAction } from 'core/tracking';
|
||||
import {
|
||||
CLOSE_INFO,
|
||||
|
@ -23,12 +26,27 @@ import {
|
|||
SET_ENABLE_NOT_AVAILABLE,
|
||||
SHOW_INFO,
|
||||
START_DOWNLOAD,
|
||||
THEME_INSTALL,
|
||||
THEME_PREVIEW,
|
||||
THEME_RESET_PREVIEW,
|
||||
THEME_TYPE,
|
||||
UNINSTALL_CATEGORY,
|
||||
UNINSTALLED,
|
||||
UNINSTALLING,
|
||||
UNKNOWN,
|
||||
} from 'core/constants';
|
||||
import * as addonManager from 'core/addonManager';
|
||||
|
||||
export function installTheme(
|
||||
node, addon, { _themeAction = themeAction, _tracking = tracking } = {},
|
||||
) {
|
||||
const { name, status, type } = addon;
|
||||
if (type === THEME_TYPE && [DISABLED, UNINSTALLED, UNKNOWN].includes(status)) {
|
||||
_themeAction(node, THEME_INSTALL);
|
||||
_tracking.sendEvent({ action: 'theme', category: INSTALL_CATEGORY, label: name });
|
||||
}
|
||||
}
|
||||
|
||||
export function makeProgressHandler(dispatch, guid) {
|
||||
return (addonInstall, event) => {
|
||||
if (addonInstall.state === 'STATE_DOWNLOADING') {
|
||||
|
@ -43,7 +61,21 @@ export function makeProgressHandler(dispatch, guid) {
|
|||
};
|
||||
}
|
||||
|
||||
export function makeMapDispatchToProps({ src }) {
|
||||
export function mapStateToProps(state, ownProps) {
|
||||
return {
|
||||
getBrowserThemeData() {
|
||||
return JSON.stringify(getThemeData(ownProps));
|
||||
},
|
||||
previewTheme(node, _themeAction = themeAction) {
|
||||
_themeAction(node, THEME_PREVIEW);
|
||||
},
|
||||
resetPreviewTheme(node, _themeAction = themeAction) {
|
||||
_themeAction(node, THEME_RESET_PREVIEW);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function makeMapDispatchToProps({ WrappedComponent, src }) {
|
||||
return function mapDispatchToProps(
|
||||
dispatch,
|
||||
{
|
||||
|
@ -55,7 +87,7 @@ export function makeMapDispatchToProps({ src }) {
|
|||
} = {},
|
||||
) {
|
||||
if (config.get('server')) {
|
||||
return {};
|
||||
return { WrappedComponent };
|
||||
}
|
||||
|
||||
if (ownProps.type === EXTENSION_TYPE && ownProps.installURL === undefined) {
|
||||
|
@ -98,31 +130,33 @@ export function makeMapDispatchToProps({ src }) {
|
|||
}
|
||||
|
||||
return {
|
||||
WrappedComponent,
|
||||
setCurrentStatus() {
|
||||
const { guid, installURL } = ownProps;
|
||||
const { installURL } = ownProps;
|
||||
const guid = ownProps.guid || (ownProps.addon && ownProps.addon.guid);
|
||||
const payload = { guid, url: installURL };
|
||||
return _addonManager.getAddon(guid)
|
||||
.then((addon) => {
|
||||
const status = addon.isActive && addon.isEnabled ? ENABLED : DISABLED;
|
||||
dispatch({
|
||||
type: INSTALL_STATE,
|
||||
payload: { ...payload, status },
|
||||
.then((addon) => {
|
||||
const status = addon.isActive && addon.isEnabled ? ENABLED : DISABLED;
|
||||
dispatch({
|
||||
type: INSTALL_STATE,
|
||||
payload: { ...payload, status },
|
||||
});
|
||||
}, () => {
|
||||
log.info(`Add-on "${guid}" not found so setting status to UNINSTALLED`);
|
||||
dispatch({
|
||||
type: INSTALL_STATE,
|
||||
payload: { ...payload, status: UNINSTALLED },
|
||||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
log.error(err);
|
||||
// Dispatch a generic error should the success/error functions throw.
|
||||
dispatch({
|
||||
type: INSTALL_STATE,
|
||||
payload: { guid, status: ERROR, error: FATAL_ERROR },
|
||||
});
|
||||
});
|
||||
}, () => {
|
||||
log.info(`Add-on "${guid}" not found so setting status to UNINSTALLED`);
|
||||
dispatch({
|
||||
type: INSTALL_STATE,
|
||||
payload: { ...payload, status: UNINSTALLED },
|
||||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
log.error(err);
|
||||
// Dispatch a generic error should the success/error functions throw.
|
||||
dispatch({
|
||||
type: INSTALL_STATE,
|
||||
payload: { guid, status: ERROR, error: FATAL_ERROR },
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
enable({ _showInfo = showInfo } = {}) {
|
||||
|
@ -188,9 +222,43 @@ export function makeMapDispatchToProps({ src }) {
|
|||
};
|
||||
}
|
||||
|
||||
export class WithInstallHelpers extends React.Component {
|
||||
static propTypes = {
|
||||
WrappedComponent: PropTypes.func.isRequired,
|
||||
hasAddonManager: PropTypes.bool.isRequired,
|
||||
installTheme: PropTypes.func.isRequired,
|
||||
name: PropTypes.string.isRequired,
|
||||
setCurrentStatus: PropTypes.func.isRequired,
|
||||
status: PropTypes.string.isRequired,
|
||||
type: PropTypes.string.isRequired,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
hasAddonManager: addonManager.hasAddonManager(),
|
||||
installTheme,
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { hasAddonManager, setCurrentStatus } = this.props;
|
||||
if (hasAddonManager) {
|
||||
log.info('Setting add-on status');
|
||||
setCurrentStatus();
|
||||
} else {
|
||||
log.info('No addon manager, cannot set add-on status');
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
const { WrappedComponent, ...props } = this.props;
|
||||
return <WrappedComponent {...props} />;
|
||||
}
|
||||
}
|
||||
|
||||
export function withInstallHelpers({ _makeMapDispatchToProps = makeMapDispatchToProps, src }) {
|
||||
if (!src) {
|
||||
throw new Error('src is required for withInstallHelpers');
|
||||
}
|
||||
return (Component) => connect(undefined, _makeMapDispatchToProps({ src }))(Component);
|
||||
return (WrappedComponent) => compose(
|
||||
connect(mapStateToProps, _makeMapDispatchToProps({ WrappedComponent, src })),
|
||||
)(WithInstallHelpers);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
import { CLEAR_ERROR, SET_ERROR } from 'core/constants';
|
||||
import log from 'core/logger';
|
||||
import { gettext } from 'core/utils';
|
||||
|
||||
/*
|
||||
* This inspects an error object and returns an array of messages from it.
|
||||
*
|
||||
* If the error has an API response then messages will be extracted
|
||||
* from it. Otherwise, an array containing a generic error message is returned.
|
||||
*/
|
||||
function getMessagesFromError(error) {
|
||||
let messages = [gettext('An unexpected error occurred')];
|
||||
log.info('Extracting messages from error object:', error);
|
||||
|
||||
if (error && error.response && error.response.data) {
|
||||
const apiMessages = [];
|
||||
|
||||
Object.keys(error.response.data).forEach((key) => {
|
||||
const val = error.response.data[key];
|
||||
val.forEach((msg) => {
|
||||
if (key === 'non_field_errors') {
|
||||
// Add generic messages for the API response.
|
||||
apiMessages.push(msg);
|
||||
} else {
|
||||
// Add field specific error messages.
|
||||
apiMessages.push(`${key}: ${msg}`);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (apiMessages.length) {
|
||||
messages = apiMessages;
|
||||
} else {
|
||||
log.warn('API error response did not contain any messages', error);
|
||||
}
|
||||
}
|
||||
return messages;
|
||||
}
|
||||
|
||||
export const initialState = {};
|
||||
|
||||
export default function errors(state = initialState, action) {
|
||||
switch (action.type) {
|
||||
case CLEAR_ERROR:
|
||||
return {
|
||||
...state,
|
||||
[action.payload.id]: null,
|
||||
};
|
||||
case SET_ERROR:
|
||||
return {
|
||||
...state,
|
||||
[action.payload.id]: {
|
||||
messages: getMessagesFromError(action.payload.error),
|
||||
},
|
||||
};
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
|
@ -1,3 +1,5 @@
|
|||
import deepEqual from 'deep-eql';
|
||||
|
||||
import { search } from 'core/api';
|
||||
import { searchStart, searchLoad, searchFail } from 'core/actions/search';
|
||||
|
||||
|
@ -33,10 +35,9 @@ export function convertQueryParamsToFilters(params) {
|
|||
}, {});
|
||||
}
|
||||
|
||||
export function filtersMatch(filters, otherFilters) {
|
||||
return Object.keys(filters).every((key) => (
|
||||
filters[key] === otherFilters[key]
|
||||
));
|
||||
export function parsePage(page) {
|
||||
const parsed = parseInt(page, 10);
|
||||
return Number.isNaN(parsed) || parsed < 1 ? 1 : parsed;
|
||||
}
|
||||
|
||||
export function mapStateToProps(state, ownProps) {
|
||||
|
@ -54,8 +55,10 @@ export function mapStateToProps(state, ownProps) {
|
|||
typeof param !== 'undefined' && param.length
|
||||
));
|
||||
|
||||
const stateMatchesLocation = filtersMatch(location.query,
|
||||
convertFiltersToQueryParams(state.search.filters));
|
||||
const stateMatchesLocation = deepEqual(
|
||||
{ ...filters, page: parsePage(location.query.page) },
|
||||
{ ...state.search.filters, page: parsePage(state.search.page) },
|
||||
);
|
||||
|
||||
if (hasSearchParams && stateMatchesLocation) {
|
||||
return { hasSearchParams, filters, ...state.search };
|
||||
|
@ -76,13 +79,9 @@ export function performSearch({ dispatch, page, api, auth = false, filters }) {
|
|||
}
|
||||
|
||||
export function isLoaded({ page, state, filters }) {
|
||||
return filtersMatch(filters, state.filters) && state.page === page &&
|
||||
!state.loading;
|
||||
}
|
||||
|
||||
export function parsePage(page) {
|
||||
const parsed = parseInt(page, 10);
|
||||
return Number.isNaN(parsed) || parsed < 1 ? 1 : parsed;
|
||||
return deepEqual(
|
||||
{ ...filters, page }, { ...state.filters, page: state.page }
|
||||
) && !state.loading;
|
||||
}
|
||||
|
||||
export function loadSearchResultsIfNeeded({ store: { dispatch, getState }, location }) {
|
||||
|
@ -92,8 +91,32 @@ export function loadSearchResultsIfNeeded({ store: { dispatch, getState }, locat
|
|||
...location.query,
|
||||
clientApp: state.api.clientApp,
|
||||
});
|
||||
|
||||
if (!isLoaded({ state: state.search, page, filters })) {
|
||||
return performSearch({ dispatch, page, api: state.api, auth: state.auth, filters });
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
export function loadByCategoryIfNeeded(
|
||||
{ store: { dispatch, getState }, location, params }
|
||||
) {
|
||||
const state = getState();
|
||||
const filters = {
|
||||
addonType: params.addonType,
|
||||
category: params.slug,
|
||||
clientApp: params.application,
|
||||
};
|
||||
const page = parsePage(location.query.page);
|
||||
|
||||
if (!isLoaded({ state: state.search, page, filters })) {
|
||||
return performSearch({
|
||||
api: state.api,
|
||||
auth: state.auth,
|
||||
dispatch,
|
||||
filters,
|
||||
page,
|
||||
});
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -9,25 +9,19 @@ import { compose } from 'redux';
|
|||
|
||||
import { sanitizeHTML } from 'core/utils';
|
||||
import translate from 'core/i18n/translate';
|
||||
import themeAction, { getThemeData } from 'core/themePreview';
|
||||
import themeAction from 'core/themePreview';
|
||||
import tracking, { getAction } from 'core/tracking';
|
||||
import InstallButton from 'core/components/InstallButton';
|
||||
import {
|
||||
CLICK_CATEGORY,
|
||||
DISABLED,
|
||||
DOWNLOAD_FAILED,
|
||||
ERROR,
|
||||
EXTENSION_TYPE,
|
||||
FATAL_ERROR,
|
||||
FATAL_INSTALL_ERROR,
|
||||
FATAL_UNINSTALL_ERROR,
|
||||
INSTALL_CATEGORY,
|
||||
INSTALL_FAILED,
|
||||
THEME_INSTALL,
|
||||
THEME_PREVIEW,
|
||||
THEME_RESET_PREVIEW,
|
||||
THEME_TYPE,
|
||||
UNINSTALLED,
|
||||
UNINSTALLING,
|
||||
validAddonTypes,
|
||||
validInstallStates,
|
||||
|
@ -38,19 +32,21 @@ import 'disco/css/Addon.scss';
|
|||
|
||||
export class AddonBase extends React.Component {
|
||||
static propTypes = {
|
||||
addon: PropTypes.object.isRequired,
|
||||
description: PropTypes.string,
|
||||
error: PropTypes.string,
|
||||
guid: PropTypes.string.isRequired,
|
||||
heading: PropTypes.string.isRequired,
|
||||
getBrowserThemeData: PropTypes.func.isRequired,
|
||||
i18n: PropTypes.object.isRequired,
|
||||
iconUrl: PropTypes.string,
|
||||
installTheme: PropTypes.func.isRequired,
|
||||
needsRestart: PropTypes.bool.isRequired,
|
||||
previewTheme: PropTypes.func.isRequired,
|
||||
previewURL: PropTypes.string,
|
||||
name: PropTypes.string.isRequired,
|
||||
resetPreviewTheme: PropTypes.func.isRequired,
|
||||
setCurrentStatus: PropTypes.func.isRequired,
|
||||
status: PropTypes.oneOf(validInstallStates).isRequired,
|
||||
themeAction: PropTypes.func,
|
||||
type: PropTypes.oneOf(validAddonTypes).isRequired,
|
||||
_tracking: PropTypes.object,
|
||||
}
|
||||
|
@ -62,14 +58,6 @@ export class AddonBase extends React.Component {
|
|||
_tracking: tracking,
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.props.setCurrentStatus();
|
||||
}
|
||||
|
||||
getBrowserThemeData() {
|
||||
return JSON.stringify(getThemeData(this.props));
|
||||
}
|
||||
|
||||
getError() {
|
||||
const { error, i18n, status } = this.props;
|
||||
return status === ERROR ? (<div className="notification error" key="error-overlay">
|
||||
|
@ -95,13 +83,13 @@ export class AddonBase extends React.Component {
|
|||
}
|
||||
|
||||
getThemeImage() {
|
||||
const { i18n, name, previewURL } = this.props;
|
||||
const { getBrowserThemeData, i18n, name, previewURL } = this.props;
|
||||
if (this.props.type === THEME_TYPE) {
|
||||
// eslint-disable-next-line jsx-a11y/href-no-hash
|
||||
return (<a href="#" className="theme-image"
|
||||
data-browsertheme={this.getBrowserThemeData()}
|
||||
data-browsertheme={getBrowserThemeData()}
|
||||
onBlur={this.resetPreviewTheme}
|
||||
onClick={this.clickInstallTheme}
|
||||
onClick={this.installTheme}
|
||||
onFocus={this.previewTheme}
|
||||
onMouseOut={this.resetPreviewTheme}
|
||||
onMouseOver={this.previewTheme}>
|
||||
|
@ -127,6 +115,12 @@ export class AddonBase extends React.Component {
|
|||
);
|
||||
}
|
||||
|
||||
installTheme = (event) => {
|
||||
event.preventDefault();
|
||||
const { addon, installTheme } = this.props;
|
||||
installTheme(event.currentTarget, addon);
|
||||
}
|
||||
|
||||
errorMessage() {
|
||||
const { error, i18n } = this.props;
|
||||
switch (error) {
|
||||
|
@ -171,20 +165,12 @@ export class AddonBase extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
clickInstallTheme = (e) => {
|
||||
const { guid, installTheme, name, status, type } = this.props;
|
||||
e.preventDefault();
|
||||
if (type === THEME_TYPE && [UNINSTALLED, DISABLED].includes(status)) {
|
||||
installTheme(e.currentTarget, guid, name);
|
||||
}
|
||||
}
|
||||
|
||||
previewTheme = (e) => {
|
||||
this.props.themeAction(e.currentTarget, THEME_PREVIEW);
|
||||
this.props.previewTheme(e.currentTarget);
|
||||
}
|
||||
|
||||
resetPreviewTheme = (e) => {
|
||||
this.props.themeAction(e.currentTarget, THEME_RESET_PREVIEW);
|
||||
this.props.resetPreviewTheme(e.currentTarget);
|
||||
}
|
||||
|
||||
render() {
|
||||
|
@ -229,16 +215,13 @@ export class AddonBase extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
export function mapStateToProps(state, ownProps, { _tracking = tracking } = {}) {
|
||||
export function mapStateToProps(state, ownProps) {
|
||||
const installation = state.installations[ownProps.guid] || {};
|
||||
const addon = state.addons[ownProps.guid] || {};
|
||||
return {
|
||||
...installation,
|
||||
addon,
|
||||
...addon,
|
||||
installTheme(node, guid, name, _themeAction = themeAction) {
|
||||
_themeAction(node, THEME_INSTALL);
|
||||
_tracking.sendEvent({ action: 'theme', category: INSTALL_CATEGORY, label: name });
|
||||
},
|
||||
...installation,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -119,7 +119,9 @@ export class DiscoPaneBase extends React.Component {
|
|||
</div>
|
||||
</div>
|
||||
</header>
|
||||
{results.map((item) => <AddonComponent {...camelCaseProps(item)} key={item.guid} />)}
|
||||
{results.map((item) => (
|
||||
<AddonComponent addon={item} {...camelCaseProps(item)} key={item.guid} />
|
||||
))}
|
||||
<div className="amo-link">
|
||||
<a href="https://addons.mozilla.org/" target="_blank"
|
||||
rel="noopener noreferrer" onClick={this.showMoreAddons}>
|
||||
|
|
|
@ -5,8 +5,8 @@ import { middleware } from 'core/store';
|
|||
import addons from 'core/reducers/addons';
|
||||
import api from 'core/reducers/api';
|
||||
import infoDialog from 'core/reducers/infoDialog';
|
||||
import installations from 'core/reducers/installations';
|
||||
import discoResults from 'disco/reducers/discoResults';
|
||||
import installations from 'disco/reducers/installations';
|
||||
|
||||
export default function createStore(initialState = {}) {
|
||||
return _createStore(
|
||||
|
|
|
@ -4,178 +4,178 @@
|
|||
"messages": {
|
||||
"": {
|
||||
"domain": "messages",
|
||||
"plural_forms": "nplurals=2; plural=(n!=1);",
|
||||
"plural_forms": "nplurals=2; plural=(n != 1);",
|
||||
"lang": "ast"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s%(startSpan)spor%(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Datos meta d'estensión"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Captures de pantalla"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Tocante a esta estesión"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Valora la to esperiencia"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Estaya"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Usao por"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Sentimientu"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Atrás"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Unviar"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Introduz daqué de testu, por favor"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Escribi una reseña"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"¡Cúnta-y al mundu por qué pienses qu'esta estensión ye fantástica!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Política de privacidá"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Avisos llegales"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Ver sitiu d'escritoriu"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Restola a to llingüa"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Add-ons de Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"¿Cómo tas esfrutando de la to esperiencia con %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"captura de pantalla %(imageNumber)s de %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Valoración media: %(rating)s de 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Nun hai valoraciones"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s usuariu",
|
||||
"%(users)s usuarios"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Zarrar sesión"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Aniciar sesión/Rexistrase"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Add-ons pa Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"¿Qué quies que Firefox faiga?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Bloquiar anuncios"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Capturar pantalla"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Guardar coses"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Mercar en llinia"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Ser social"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Compartir coses"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Restolar toles estensiones"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"¿Cómo quies que seya l'aspeutu de Firefox?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Llocu"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstrautu"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Fashion"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Vistosu"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Deportivu"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Místicu"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Restolar tolos temes"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Baxando %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Instalando %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s instalóse y habilitóse. Primi pa desinstalar."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s deshabilitóse. Primi pa habilitar."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Desinstalando %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s desinstalóse. Primi pa instalar."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Desconozse l'estáu d'instalación pa %(name)s."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Previo"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Siguiente"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Páxina %(currentPage)s de %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"La to gueta pa «%(query)s» devolvió %(count)s resultáu.",
|
||||
"La to gueta pa «%(query)s» devolvió %(count)s resultaos."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Guetando..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Nun s'alcontraron resultaos pa «%(query)s»."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Fai una gueta válida, por favor"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,174 +8,174 @@
|
|||
"lang": "bg"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)sот %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Метаданни за разширението"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Снимки на екрана"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Относно добавката"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Дайте оценка"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Категория"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Ползвател"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Мнение"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Назад"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Изпращане"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Моля, въведете текст"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Писане на отзив"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Разкажете на света защо смятате, че това разширение е чудесно!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Политика на поверителност"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Правни бележки"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Настолна версия"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Четете на своя език"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Добавки за Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"До каква степен ви харесва %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"снимка %(imageNumber)s от %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Средна оценка: %(rating)s от 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Без оценка"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s потребител",
|
||||
"%(users)s потребителя"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Изход"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Вход/Регистрация"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Добавки за Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Какво бихте желали Firefox да направи?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Блокиране на реклами"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Снимка на екрана"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Запазване на неща"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Пазаруване он-лайн"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Бъде социален"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Споделя неща"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Преглед на всички разширения"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Как бихте желали Firefox да изглежда?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Див"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Абстрактен"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Модерен"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Жовиписен"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Спортен"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Мистичен"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Преглед на всички теми"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Изтегляне на %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Инсталиране на %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s е инсталирана и включена. Натиснете за премахване."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s е изключена. Натиснете за включване."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Премахване на %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s е премахната. Натиснете за инсталиране."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Състоянието на инсталацията на %(name)s е неизвестно."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Предишна"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Следваща"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Страница %(currentPage)s от %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Търсенето ви за „%(query)s“ върна %(count)s резултат.",
|
||||
"Търсенето ви за „%(query)s“ върна %(count)s резултата."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Търсене…"
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Не бяха намерени резултати за „%(query)s“."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Въведете термин"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"messages": {
|
||||
"": {
|
||||
"domain": "messages",
|
||||
"plural_forms": "nplurals=2; plural=(n!=1);",
|
||||
"plural_forms": "nplurals=2; plural=(n != 1);",
|
||||
"lang": "bn_BD"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
|
@ -74,7 +74,7 @@
|
|||
""
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s জন ব্যবহারকারী",
|
||||
"%(users)s users"
|
||||
],
|
||||
"Log out": [
|
||||
|
@ -165,7 +165,7 @@
|
|||
""
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"আপনি \"%(query)s\" এর জন্য খোঁজ করেছেন কিন্ত %(count)s এর জন্য ফলাফল দেখাচ্ছে।",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
],
|
||||
"Searching...": [
|
||||
|
|
|
@ -8,176 +8,176 @@
|
|||
"lang": "cs"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)s od %(authorList)s %(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadata rozšíření"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Snímky obrazovky"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"O tomto rozšíření"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Ohodnoťte svou zkušenost"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Kategorie"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Používá"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Sentimentálně"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Zpět"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Odeslat"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Zadejte prosím nějaký text"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Napsat recenzi"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Řekněte celému světu, proč si myslíte, že je tenhle doplněk úžasný!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Zásady ochrany soukromí"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Právní informace"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Zobrazit verzi pro desktop"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Procházet ve vašem jazyce"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Doplňky pro Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Jak si užíváte používání doplňku %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"snímek obrazovky %(imageNumber)s/%(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Průměrné hodnocení: %(rating)s z 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Nehodnoceno"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users",
|
||||
"%(users)s users"
|
||||
"%(users)s uživatel",
|
||||
"%(users)s uživatelé",
|
||||
"%(users)s uživatelů"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Odhlásit se"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Přihlásit se / Zaregistrovat se"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Doplňky pro Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Co chcete, aby váš Firefox uměl?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Blokovat reklamy"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Snímek obrazovky"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Ukládat věci"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Nakupovat online"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Být společenský"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Sdílet věci"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Procházet všechna rozšíření"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Jak chcete, aby váš Firefox vypadal?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Divoce"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstraktně"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Módně"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Malebně"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sportovně"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Tajemně"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Procházet všechny motivy"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Stahování doplňku %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Instalace doplňku %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"Doplněk %(name)s je nainstalován a povolen. Klepněte pro odinstalaci."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"Doplněk %(name)s je zakázán. Klepněte pro povolení."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Odinstalace doplňku %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"Doplněk %(name)s byl odinstalován. Klepněte pro instalaci."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Stav instalace doplňku %(name)s není známý."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Předchozí"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Další"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Stránka %(currentPage)s z %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results.",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Na dotaz \"%(query)s\" byl nalezen %(count)s výsledek.",
|
||||
"Na dotaz \"%(query)s\" byly nalezeny %(count)s výsledky.",
|
||||
"Na dotaz \"%(query)s\" bylo nalezeno %(count)s výsledků."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Vyhledávání…"
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Na dotaz \"%(query)s\" nebyly nalezeny žádné výsledky."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Zadejte prosím platný vyhledávací dotaz"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,174 +8,174 @@
|
|||
"lang": "da"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)s af %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadata for udvidelsen"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Skærmbilleder"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Om denne udvidelse"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Bedøm din oplevelse"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Kategori"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Brugt af"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Indtryk"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Tilbage"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Indsend"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Indtast noget tekst"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Skriv en anmeldelse"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Fortæl verden, hvorfor du synes denne udvidelse er fantastisk!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Privatlivspolitik"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Juridiske betingelser"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Vis desktop-site"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Surf på dit sprog"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Tilføjelser til Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Hvordan er din oplevelse med %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"skærmbillede %(imageNumber)s af %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Gennemsnitlig bedømmelse: %(rating)s ud af 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Ingen bedømmelser"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s bruger",
|
||||
"%(users)s brugere"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Log ud"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Log ind/registrer dig"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Tilføjelser til Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Hvad skal Firefox gøre?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Blokere reklamer"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Skærmbillede"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Gemme ting"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Shoppe online"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Være social"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Dele ting"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Gennemse alle udvidelser"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Hvordan skal Firefox se ud?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Vild"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstrakt"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Moderne"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Malerisk"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sporty"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Mystisk"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Gennemse alle temaer"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Henter %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Installerer %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s er installeret og aktiveret. Klik for at afinstallere."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s er deaktiveret. Klik for at aktivere."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Afinstallerer %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s er afinstalleret. Klik for at installere."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Installationstilstand for %(name)s er ukendt."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Forrige"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Næste"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Side %(currentPage)s af %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Din søgning efter \"%(query)s\" returnerede %(count)s resultat.",
|
||||
"Din søgning efter \"%(query)s\" returnerede %(count)s resultater."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Søger..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Der blev ikke fundet nogen forekomster af \"%(query)s\"."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Angiv en gyldig søgning"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,174 +8,174 @@
|
|||
"lang": "de"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)s von %(authorList)s %(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadaten zur Erweiterung"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Screenshots"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Über diese Erweiterung"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Bewertung Ihres Eindrucks"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Kategorie"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Verwendet von"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Eindruck"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Zurück"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Absenden"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Bitte geben Sie Text ein"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Schreiben Sie eine Bewertung"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Beschreiben Sie, warum Ihnen diese Erweiterung gefällt."
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Datenschutzrichtlinie"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Rechtliche Hinweise"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Desktop-Website anzeigen"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"In Ihrer Sprache ansehen"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Add-ons für Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Wie gefällt Ihnen %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"Screenshot %(imageNumber)s von %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Durchschnittliche Bewertung: %(rating)s von 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Keine Bewertungen"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s Benutzer",
|
||||
"%(users)s Benutzer"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Abmelden"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Anmelden / Registrieren"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Add-ons für Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Was soll Firefox tun?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Werbung blockieren"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Screenshot"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Inhalte speichern"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Online einkaufen"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Sozial sein"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Inhalte teilen"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Alle Erweiterungen durchsehen"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Wie soll Firefox aussehen?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Wild"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstrakt"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Modisch"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Malerisch"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sportlich"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Geheimnisvoll"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Alle Themes durchsehen"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"%(name)s wird heruntergeladen."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"%(name)s wird installiert."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s wurde installiert und aktiviert. Klicken Sie, um es zu deinstallieren."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s wurde deaktiviert. Klicken Sie, um es zu aktivieren."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"%(name)s wird deinstalliert."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s wurde deinstalliert. Klicken Sie, um es zu installieren."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Installationsstatus für %(name)s ist unbekannt."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Vorherige"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Nächste"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Seite %(currentPage)s von %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Ihre Suche nach „%(query)s“ ergab %(count)s Ergebnis.",
|
||||
"Ihre Suche nach „%(query)s“ ergab %(count)s Ergebnisse."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Suche läuft…"
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Ihre Suche nach „%(query)s“ ergab keine Ergebnisse."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Bitte geben Sie einen gültigen Suchbegriff ein."
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,178 +4,182 @@
|
|||
"messages": {
|
||||
"": {
|
||||
"domain": "messages",
|
||||
"plural_forms": "nplurals=2; plural=(n!=1);",
|
||||
"plural_forms": "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);",
|
||||
"lang": "dsb"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)swót %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadaty rozšyrjenja"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Fota wobrazowki"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Wó toś tom rozšyrjenju"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Pógódnośćo swóje dožywjenje"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Kategorija"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Wužyty wót"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Zaśišć"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Slědk"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Wótpósłaś"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Pšosym zapódajśo tekst"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Pišćo pógódnośenje"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Dajśo swětoju k wěsći, cogoždla maśo toś to rozšyrjenje jo fantastiske!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Pšawidła priwatnosći"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Pšawniske pokaze"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Desktopowe websedło pokazaś"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"We wašej rěcy woglědaś"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Dodanki za Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Kak se wam %(addonName)s spódoba?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"foto wobrazowki %(imageNumber)s z %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Pśerězne pógódnośenje: %(rating)s z 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Žedne pógódnośenja"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s wužywaŕ",
|
||||
"%(users)s wužywarja",
|
||||
"%(users)s wužywarje",
|
||||
"%(users)s wužywarjow"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Wótzjawiś"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Pśizjawiś/Registrěrowaś"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Dodanki za Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Co dej Firefox cyniś?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Wabjenje blokěrowaś"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Foto wobrazowki"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Wopśimjeśe składowaś"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Online nakupowaś"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Socialny byś"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Wopśimjeśe źěliś"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Wšykne rozšyrjenja pśeglědowaś"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Kak dej Firefox wuglědaś?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Źiwje"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstraktnje"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Modiski"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Rědnučce"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sportojsce"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Mystiski"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Wšykne drastwy pśeglědowaś"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"%(name)s se ześěgujo."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"%(name)s se instalěrujo."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s jo zainstalěrowany a zmóžnjony. Klikniśo, aby jen wótinstalěrował."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s jo znjemóžnjony. Klikniśo, aby jen zmóžnił."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"%(name)s se wótinstalěrujo."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s jo wótinstalěrowany. Klikniśo, aby jen instalěrował."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Instalaciski status za %(name)s jo njeznaty."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Pjerwjejšne"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Pśiduce"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Bok %(currentPage)s z %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Wašo pytanje za \"%(query)s\" jo %(count)s wuslědk wrośił.",
|
||||
"Wašo pytanje za \"%(query)s\" jo %(count)s wuslědka wrośił.",
|
||||
"Wašo pytanje za \"%(query)s\" jo %(count)s wuslědki wrośił.",
|
||||
"Wašo pytanje za \"%(query)s\" jo %(count)s wuslědkow wrośił."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Pyta se..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Žedne wuslědki za \"%(query)s\" namakane."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Pšosym zapódajśo płaśiwy pytański wuraz"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,19 +8,19 @@
|
|||
"lang": "el"
|
||||
},
|
||||
"Downloading %(name)s.": [
|
||||
"Λήψη %(name)s."
|
||||
"Γίνεται λήψη του %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
"Εγκατάσταση %(name)s."
|
||||
"Γίνεται εγκατάσταση του %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
"Το %(name)s είναι εγκατεστημένο και ενεργοποιημένο. Κάντε κλικ για απεγκατάσταση."
|
||||
"Το %(name)s έχει εγκατασταθεί και ενεργοποιηθεί. Κάντε κλικ για απεγκατάσταση."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
"Το %(name)s είναι απενεργοποιημένο. Κάντε κλικ για ενεργοποίηση."
|
||||
"Το %(name)s έχει απεγκατασταθεί. Κάντε κλικ για ενεργοποίηση."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
"Απεγκατάσταση %(name)s."
|
||||
"Γίνεται απεγκατάσταση του %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
"Το %(name)s έχει απεγκατασταθεί. Κάντε κλικ για εγκατάσταση."
|
||||
|
@ -59,7 +59,7 @@
|
|||
"Το πρόσθετό σας είναι έτοιμο"
|
||||
],
|
||||
"Now you can access %(name)s from the toolbar.": [
|
||||
"Μπορείτε πλέον να έχετε πρόσβαση στο %(name)s από τη γραμμή εργαλείων."
|
||||
"Έχετε πλέον πρόσβαση στο %(name)s από τη γραμμή εργαλείων."
|
||||
],
|
||||
"OK!": [
|
||||
"ΟΚ!"
|
||||
|
@ -84,6 +84,9 @@
|
|||
],
|
||||
"Personalize Your Firefox": [
|
||||
"Εξατομίκευση Firefox"
|
||||
],
|
||||
"There are thousands of free add-ons, created by developers all over\nthe world, that you can install to personalize your Firefox. From fun visual themes\nto powerful tools that make browsing faster and safer, add-ons make your browser yours.\nTo help you get started, here are some we recommend for their stand-out performance\nand functionality.": [
|
||||
"Υπάρχουν χιλιάδες δωρεάν πρόσθετα, που δημιουργούνται από προγραμματιστές απ' όλο τον κόσμο, που μπορείτε να εγκαταστήσετε για να εξατομικεύσετε το Firefox. Από διασκεδαστικά θέματα μέχρι ισχυρά εργαλεία που κάνουν την περιήγηση πιο γρήγορη και ασφαλή, τα πρόσθετα κάνουν το πρόγραμμα περιήγησής σας μοναδικό. Για να σας βοηθήσουμε να ξεκινήσετε, ορίστε μερικά πρόσθετα που προτείνουμε για την ξεχωριστή απόδοση και λειτουργικότητά τους."
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,174 +8,174 @@
|
|||
"lang": "es"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s%(startSpan)s por %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadata de la extensión"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Capturas de pantalla"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Sobre esta extensión"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Califica tu experiencia"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Categoría"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Utilizado por"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Sentimiento"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Atrás"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Enviar"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Por favor, escribe algo"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Escribe un comentario"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"¡Dile al mundo por qué crees que esta extensión es genial!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Política de privacidad"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Aviso legal"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Ver en página de escritorio"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Navega en tu idioma"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Complementos de Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"¿Cuál es tu experiencia con %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"captura de pantalla %(imageNumber)s de %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Valoración media: %(rating)s de 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Sin valoraciones"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"Usuario %(users)s",
|
||||
"Usuarios %(users)s"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Cerrar sesión"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Iniciar sesión / Registrarse"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Complementos para Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"¿Qué quieres que haga Firefox?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Bloquear publicidad"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Captura de pantalla"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Guardar cosas"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Comprar en línea"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Ser sociable"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Compartir cosas"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Ver todas las extensiones"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"¿Qué aspecto quieres que tenga Firefox?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Salvaje"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstracto"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Actual"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Escénico"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Deportivo"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Místico"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Ver todos los temas"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Descargando %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Instalando %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"Se ha instalado %(name)s y está activo. Haz clic para desinstarlo."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"Se ha desactivado %(name)s. Haz clic para activarlo."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Desinstalando %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"Se ha desinstalado %(name)s. Haz clic para instalar."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Se desconoce el estado de instalación de %(name)s."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Anterior"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Siguiente"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Página %(currentPage)s de %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Tu búsqueda \"%(query)s\" obtuvo %(count)s resultado.",
|
||||
"Tu búsqueda \"%(query)s\" obtuvo %(count)s resultados."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Buscando..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"No se encontraron resultados para \"%(query)s\"."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Por favor, introduce una búsqueda válida"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,178 +4,176 @@
|
|||
"messages": {
|
||||
"": {
|
||||
"domain": "messages",
|
||||
"plural_forms": "nplurals=2; plural=(n!=1);",
|
||||
"plural_forms": "nplurals=1; plural=0;",
|
||||
"lang": "fa"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)s از %(authorList)s %(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"فرادادهٔ ضمیمه"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"تصاویر صفحه"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"درباره این ضمیمه"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"به تجربه خود امتیاز بدهید"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"دستهبندی"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"استفاده شده توسط"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"تمایل"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"برگشت"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"ارسال"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"لطفا متنی وارد کنید"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"یک بررسی بنویسید"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"به همه دنیا بگویید که چرا این ضمیمه باحال است!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"سیاستهای حریمخصوصی"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"نکات حقوقی"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"نمایش میزکار وبسایت"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"مرور به زبان شما"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"افزونههای فایرفاکس"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"از تجربه خود در استفاده از %(addonName)s چه فکری میکنید؟"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"تصویر صفحهٔ %(imageNumber)s از %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"میانگین امتیازها: %(rating)s از ۵"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"بدون امتیاز"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s کاربر"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"خروج"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"ورود/ثبتنام"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"افزونههای فایرفاکس"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"میخواهید فایرفاکس برای شما چه کار کند؟"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"مسدود کردن تبلیغات"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"گرفتن عکس از صفحه"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"ذخیره چیزها"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"خرید آنلاین"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"اجتماعی بودن"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"اشتراکگذاری چیزها"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"مرور تمام ضمیمهها"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"میخواهید فایرفاکس چه شکلی باشد؟"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"خشن"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"انتضاعی"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"مُدِ روز"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"خوش منظر"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"ورزشی"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"مرموز"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"مرور تمام تمها"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"در حال دریافت %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"در حال نصب %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s نصب و فعال شده است. برای حذف کلیک کنید."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s غیر فعال است. برای فعالسازی کلیک کنید."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"در حال حذف %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s حذف شد. برای نصب کلیک کنید."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"وضعیت نصب %(name)s نامشخص است."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"قبلی"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"بعدی"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"صفحه %(currentPage)s از %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"جستجو شما برای «%(query)s» تعداد %(count)s نتیجه برگرداند."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"در حال جستجو…"
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"هیچ نتیجهای برای «%(query)s» پیدا نشد."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"لطفا یک متن معتبر برای جستجو وارد کنید"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,28 +8,28 @@
|
|||
"lang": "fa"
|
||||
},
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"در حال دریافت %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"در حال نصب %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s نصب و فعال شده است. برای حذف کلیک کنید."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s غیر فعال شده است. برای فعالسازی کلیک کنید."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"در حال حذف %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s حذف شده. برای نصب کلیک کنید."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"وضعیت نصب برای %(name)s ناشناس است."
|
||||
],
|
||||
"Hover to preview or click to install %(name)s": [
|
||||
""
|
||||
"برای پیشنمایش موس را بر رویاش نگه دارید یا برای نصب %(name)s کلیک کنید"
|
||||
],
|
||||
"Hover over the image to preview": [
|
||||
"برای پیشنمایش بر روی تصویر حرکت کنید"
|
||||
|
@ -40,6 +40,12 @@
|
|||
"Download failed. Please check your connection.": [
|
||||
"دریافت شکست خورد. لطفا اتصال خود را بررسی کنید."
|
||||
],
|
||||
"An unexpected error occurred during installation.": [
|
||||
"یک خطا غیر منتظره در هنگام نصب رُخ داد."
|
||||
],
|
||||
"An unexpected error occurred during uninstallation.": [
|
||||
"یک خطا غیر منتظره در هنگام حذف رُخ داد."
|
||||
],
|
||||
"An unexpected error occurred.": [
|
||||
"یک خطا غیر منتظره رُخ داد."
|
||||
],
|
||||
|
@ -50,13 +56,16 @@
|
|||
"لطفا برای استفاده از این افزودنی فایرفاکس را مجددا راهاندازی کنید."
|
||||
],
|
||||
"Your add-on is ready": [
|
||||
""
|
||||
"افزودنی شما حاضر است"
|
||||
],
|
||||
"Now you can access %(name)s from the toolbar.": [
|
||||
""
|
||||
"حالا شما میتوانید به %(name)s از طریق نوار ابزار دسترسی داشته باشید."
|
||||
],
|
||||
"OK!": [
|
||||
""
|
||||
"باشه!"
|
||||
],
|
||||
"Close": [
|
||||
"بستن"
|
||||
],
|
||||
"Discover Add-ons": [
|
||||
"افزونه کشف کنید"
|
||||
|
@ -75,6 +84,9 @@
|
|||
],
|
||||
"Personalize Your Firefox": [
|
||||
"فایرفاکس خود را شخصی سازی کنید"
|
||||
],
|
||||
"There are thousands of free add-ons, created by developers all over\nthe world, that you can install to personalize your Firefox. From fun visual themes\nto powerful tools that make browsing faster and safer, add-ons make your browser yours.\nTo help you get started, here are some we recommend for their stand-out performance\nand functionality.": [
|
||||
"هزاران افزودنی رایگان وجود دارد که توسط توسعهدهندگانی از سراسر دنیا ساخته شدهاند،\nکه شما میتوانید آنها را نصب کنید و فایرفاکس را برای خود شخصیسازی کنید. از تمهای نمایشی\nجالب تا ابزارهای قدرتمندی که میتوانند مرور اینترنت را سریعتر و امنتر کنند، افزودنیها\nمرورگر را با شما منطبق میکند. برای کمک به شما، اینها تعدادی از مواردی هستند که\nما به دلیل کارایی و کارکردشان به شما توصیه می کنیم."
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,174 +8,174 @@
|
|||
"lang": "fr"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)spar %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Métadonnées de l’extension"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Captures d’écran"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Informations sur cette extension"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Évaluez votre expérience"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Catégorie"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Utilisé par"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Impression"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Retour"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Envoyer"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Veuillez saisir du texte"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Rédigez un avis"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Expliquez publiquement pourquoi vous trouvez cette extension exceptionnelle."
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Confidentialité"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Mentions légales"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Afficher la version pour ordinateur"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Naviguez dans votre langue"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Modules Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Avez-vous apprécié votre usage de %(addonName)s ?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"capture d’écran %(imageNumber)s sur %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Note moyenne : %(rating)s sur 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Aucune note"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s utilisateur",
|
||||
"%(users)s utilisateurs"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Se déconnecter"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Se connecter/S’inscrire"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Modules pour Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Que souhaitez-vous que Firefox soit capable de faire ?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Bloquer les publicités"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Prendre des captures d’écran"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Enregistrer des choses"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Effectuer des achats en ligne"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Communiquer"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Partager des choses"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Parcourir toutes les extensions"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Quelle apparence voulez-vous donner à Firefox ?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Sauvage"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstraite"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Chic"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Pittoresque"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sportive"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Mystique"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Parcourir tous les thèmes"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Téléchargement de %(name)s en cours."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Installation de %(name)s en cours."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s est installé et activé. Cliquez pour le désinstaller."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s est désactivé. Cliquez pour l’activer."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Désinstallation de %(name)s en cours."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s est désinstallé. Cliquez pour l’installer."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"L’état d’installation de %(name)s est inconnu."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Précédent"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Suivant"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Page %(currentPage)s sur %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Votre recherche « %(query)s » a renvoyé %(count)s résultat.",
|
||||
"Votre recherche « %(query)s » a renvoyé %(count)s résultats."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Recherche…"
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Aucun résultat trouvé pour « %(query)s »."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Veuillez saisir une recherche valide"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,178 +4,178 @@
|
|||
"messages": {
|
||||
"": {
|
||||
"domain": "messages",
|
||||
"plural_forms": "nplurals=2; plural=(n!=1);",
|
||||
"lang": "fy"
|
||||
"plural_forms": "nplurals=2; plural=(n != 1);",
|
||||
"lang": "fy_NL"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)s troch %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadata útwreiding"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Skermôfbyldingen"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Oer dizze útwreiding"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Wurdearje jo ûnderfining"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Kategory"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Brûkt troch"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Sentimint"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Tebek"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Yntsjinje"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Fier wat tekst yn"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"In beoardieling skriuwe"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Fertel de wrâld wêrom't jo tinke dat dizze útwreiding bjusterbaarlik is!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Privacybelied"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Juridyske betingsten"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Desktopwebsite besjen"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Sneup yn jo taal"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Firefox-add-ons"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Hoe foldocht jo %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"skermôfdruk %(imageNumber)s fan %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Gemiddelde wurdearring: %(rating)s út 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Gjin wurdearringen"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s brûker",
|
||||
"%(users)s brûkers"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Ofmelde"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Oanmelde/registrearje"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Add-ons foar Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Wat wolle jo dat Firefox docht?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Advertinsjes blokkearje"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Skermôfdruk"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Guod bewarje"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Online winkelje"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Sosjaal wêze"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Guod diele"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Alle útwreidingen besjen"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Hoe wolle jo dat Firefox der út sjocht?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Wyld"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstrakt"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Moadysk"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Skildereftich"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sportyf"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Mystyk"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Alle tema's besjen"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"%(name)s wurdt download."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"%(name)s wurdt ynstallearre."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s is ynstallearre en ynskeakele. Klik om de add-on fuort te smiten."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s is útskeakele. Klik om de add-on yn te skeakeljen."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"%(name)s wurdt fuortsmiten."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s is fuortsmiten. Klik om de add-on te ynstallearjen."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Ynstallaasjesteat foar %(name)s is net bekend."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Foarige"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Folgjende"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Side %(currentPage)s fan %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Jo sykopdracht nei ‘%(query)s’ hat %(count)s resultaat opsmiten.",
|
||||
"Jo sykopdracht nei ‘%(query)s’ hat %(count)s resultaten opsmiten."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Siket…"
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Gjin resultaten fûn foar ‘%(query)s’."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Fier in jildige sykopdracht yn"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,178 +4,182 @@
|
|||
"messages": {
|
||||
"": {
|
||||
"domain": "messages",
|
||||
"plural_forms": "nplurals=2; plural=(n!=1);",
|
||||
"plural_forms": "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);",
|
||||
"lang": "hsb"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)swot %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadaty rozšěrjenja"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Fota wobrazowki"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Wo tutym rozšěrjenju"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Pohódnoćće swoje dožiwjenje"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Kategorija"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Wužity wot"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Zaćišć"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Wróćo"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Wotpósłać"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Prošu zapodajće tekst"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Pisajće pohódnoćenje"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Zdźělće swětej, čehoždla maće tute rozšěrjenja za fantastiske!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Prawidła priwatnosće"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Prawniske pokazy"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Desktopowe websydło pokazać"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"We wašej rěči wobhladać"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Přidatki za Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Kak so wam %(addonName)s spodoba?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"foto wobrazowki %(imageNumber)s z %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Přerězne pohódnoćenje: %(rating)s z 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Žane pohódnoćenja"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s wužiwar",
|
||||
"%(users)s wužiwarjej",
|
||||
"%(users)s wužiwarjo",
|
||||
"%(users)s wužiwarjow"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Wotzjewić"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Přizjewić/Registrować"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Přidatki za Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Što dyrbi Firefox činić?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Wabjenje blokować"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Foto wobrazowki"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Wobsah składować"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Online nakupować"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Socialny być"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Wobsah dźělić"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Wšě rozšěrjenja přepytować"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Kak dyrbi Firefox wupadać?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Dźiwje"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstraktnje"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Modisce"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Molersce"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sportowsce"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Mystisce"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Wšě drasty přepytować"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"%(name)s so sćahuje."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"%(name)s so instaluje."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s je instalowany a zmóžnjeny. Klikńće, zo byšće jón wotinstalował."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s je znjemóžnjeny. Klikńće, zo byšće jón zmóžnił."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"%(name)s so wotinstaluje."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s je wotinstalowany. Klikńće, zo byšće jón instalował."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Instalaciski status za %(name)s je njeznaty."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Předchadne"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Přichodne"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Strona %(currentPage)s z %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Waše pytanje za \"%(query)s\" je %(count)s wuslědk wróćił.",
|
||||
"Waše pytanje za \"%(query)s\" je %(count)s wuslědkaj wróćił.",
|
||||
"Waše pytanje za \"%(query)s\" je %(count)s wuslědki wróćił.",
|
||||
"Waše pytanje za \"%(query)s\" je %(count)s wuslědkow wróćił."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Pyta so..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Žane wuslědki za \"%(query)s\" namakane."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Prošu zapodajće płaćiwy pytanski wuraz"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,174 +8,174 @@
|
|||
"lang": "hu"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)s, készítette: %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Kiterjesztés metaadatai"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Képernyőképek"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"A kiterjesztés névjegye"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Értékelje a tapasztalatait"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Kategória"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Használja"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Érzet"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Vissza"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Elküldés"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Írjon be valamilyen szöveget"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Értékelés írása"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Mondja el a világnak, miért gondolja, hogy ez egy fantasztikus kiegészítő!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Adatvédelmi irányelvek"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Jogi megjegyzések"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Asztali oldal megtekintése"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Tallózás az Ön nyelvén"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Firefox kiegészítők"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Mit tapasztal a(z) %(addonName)s kiegészítővel?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"képernyőkép %(imageNumber)s / %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Átlagos értékelés: %(rating)s / 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Nincsenek értékelések"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s felhasználó",
|
||||
"%(users)s felhasználó"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Kijelentkezés"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Bejelentkezés/Regisztráció"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Kiegészítők a Firefoxhoz"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Mit tegyen a Firefox?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Blokkolja a hirdetéseket"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Készítsen képernyőképet"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Mentsen dolgokat"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Vásároljon online"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Legyen közösségi"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Osszon meg dolgokat"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Összes kiterjesztés tallózása"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Milyen legyen a Firefox kinézete?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Vad"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Absztrakt"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Divatos"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Festői"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sportos"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Misztikus"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Összes téma tallózása"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"%(name)s letöltése."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"%(name)s telepítése."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"A(z) %(name) telepítve van, és engedélyezett. Kattintson az eltávolításhoz."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"A(z) %(name)s le van tiltva. Kattintson az engedélyezéshez."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"%(name)s eltávolítása."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"A(z) %(name)s el lett távolítva. Kattintson a telepítéshez."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"A(z) %(name)s telepítési állapota ismeretlen."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Előző"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Következő"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Oldal %(currentPage)s / %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"A „%(query)s” keresés %(count)s találatot adott.",
|
||||
"A „%(query)s” keresés %(count)s találatot adott."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Keresés…"
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Nincs találat a „%(query)s” keresésre."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Adjon meg egy érvényes keresést"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,174 +8,174 @@
|
|||
"lang": "it"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s%(startSpan)sdi %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadati estensione"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Screenshot"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Informazioni sull’estensione"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Valuta la tua esperienza utente"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Categoria"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Utilizzato da"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Impressione"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Indietro"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Invia"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Scrivi qualcosa"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Scrivi una recensione"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Spiega agli altri utenti i motivi per cui apprezzi questa estensione."
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Informativa sulla privacy"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Note legali"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Visualizza versione desktop"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Visualizza nella lingua preferita"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Componenti aggiuntivi per Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Come valuti la tua esperienza utente con %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"screenshot %(imageNumber)s di %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Media valutazioni: %(rating)s su 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Nessuna valutazione disponibile"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s utente",
|
||||
"%(users)s utenti"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Disconnetti"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Accedi / Registrati"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Componenti aggiuntivi per Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Quali funzioni vuoi aggiungere a Firefox?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Blocco di annunci pubblicitari"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Istantanee schermo"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Salvataggio di contenuti"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Acquisti online"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Integrazione con i social network"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Condivisione di contenuti"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Esplora tutte le estensioni"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Che stile vuoi dare a Firefox?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Naturalistico"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Astratto"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Alla moda"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Paesaggistico"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sportivo"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Mistico"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Esplora tutti i temi"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Download di %(name)s in corso…"
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Installazione di %(name)s in corso…"
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s è installato e attivo. Puoi disinstallarlo con un clic."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s è disattivato. Puoi riattivarlo con un clic."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Disinstallazione di %(name)s in corso."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s è stato disinstallato. Puoi reiinstallarlo con un clic."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Impossibile determinare lo stato di installazione di %(name)s."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Precedente"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Successiva"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Pagina %(currentPage)s di %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"La ricerca di “%(query)s” ha restituito %(count)s risultato.",
|
||||
"La ricerca di “%(query)s” ha restituito %(count)s risultati."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Ricerca in corso…"
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Nessun risultato per “%(query)s”."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Inserisci almeno un termine valido per la ricerca"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,172 +8,172 @@
|
|||
"lang": "ja"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)s(作者: %(authorList)s)%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"拡張機能メタデータ"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"スクリーンショット"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"この拡張機能について"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"あなたの体験を評価"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"カテゴリー"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"使用者:"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"意見"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"戻る"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"送信"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"何か内容を入力してください"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"レビューを書く"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"この拡張機能が素晴らしいと思う理由を他の人にも伝えましょう!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"プライバシーポリシー"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"法的通知"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"デスクトップサイトを見る"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"あなたの言語で表示"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Firefox Add-ons"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"%(addonName)s での体験をどのように楽しんでいますか?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"%(totalImages)s 枚中 %(imageNumber)s 枚目のスクリーンショット"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"平均評価: 5 段階中の %(rating)s"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"評価がありません"
|
||||
],
|
||||
"%(users)s user": [
|
||||
""
|
||||
"%(users)s 人のユーザー"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"ログアウト"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"ログイン・登録"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Add-ons for Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Firefox にどんなことをして欲しいですか?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"広告をブロック"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"スクリーンショット"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"何かの保存"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"オンラインショッピング"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"ソーシャルの活用"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"何かの共有"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"すべての拡張機能を見る"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Firefox をどんなデザインにしたいですか?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"自然"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"抽象的"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"流行"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"風景"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"軽快"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"神秘的"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"すべてのテーマを見る"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"%(name)s をダウンロードしています。"
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"%(name)s をインストールしています。"
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s はインストールされ有効化されました。削除するにはここをクリック。"
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s は無効化されました。有効化するにはここをクリック。"
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"%(name)s を削除しています。"
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s は削除されました。インストールするにはここをクリック。"
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"%(name)s のインストール状態は不明です。"
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"前へ"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"次へ"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"%(totalPages)s ページ中 %(currentPage)s ページ目"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
""
|
||||
"「%(query)s」を検索したところ %(count)s 件の結果が見つかりました。"
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"検索中..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"「%(query)s」の検索結果は見つかりませんでした。"
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"検索語を正しく入力してください"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,62 +4,62 @@
|
|||
"messages": {
|
||||
"": {
|
||||
"domain": "messages",
|
||||
"plural_forms": "nplurals=2; plural=(n!=1);",
|
||||
"plural_forms": "nplurals=2; plural=(n > 1);",
|
||||
"lang": "kab"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)ssɣuṛ %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Asiɣzef aɣefisefka"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Tuṭṭfiwin n wegdil"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Ɣef usiɣzef agi"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Taggayt"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Ittwaqdec sɣur"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Aḥulfu"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Uɣal ɣer deffir"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Azen"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Ttxilek sekcem kra n weḍris"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Ini-d i medden ayɣer asiɣzef-agi ifaz!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Tasertit n tbaḍnit"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Sken asmel afellaru"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Inig s tutlayt-ik"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Izegrar Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
|
@ -74,32 +74,32 @@
|
|||
""
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s aseqdac",
|
||||
"%(users)s iseqdacen"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Tufɣa"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Kcem//Sign"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Izegrar i Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"D acu tebɣiḍ ad ixdem Fairefox ?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Tuṭṭfa n ugdil"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Tiɣin s srid"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
|
@ -108,10 +108,10 @@
|
|||
""
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Inig akk isiɣzaf"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"amek tebɣiḍ Firefox ad iban?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
|
@ -132,50 +132,50 @@
|
|||
""
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Inig ɣer akk isental"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Assali n %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Asbed n %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s ittwasbed u yttwarmed . senned i wakken ad tekseḍ-t."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s ittwarurmed.Senned i wakken ad ittwarmed."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Asbed n %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s ittwakkes. Senned i wakken ad tesbdeḍ-t"
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Addad n usebdi n %(name)s d arussin."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Azewwar"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Ddu ɣer zdat"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Asebter %(currentPage)s seg %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Anadi inek %(query)s yufa-d tifin-agi %(count)s",
|
||||
"Anadi-inek %(query)s yufa-d tiifin-agi %(count)s."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Anadi..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Ulac tiffin i \"%(query)s\"."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Ttxilek sekcem anadi ameɣtu"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,19 +11,19 @@
|
|||
""
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"확장 메타 데이터"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"스크린샷"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"이 확장 기능에 대해"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"카테고리"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
|
@ -32,85 +32,85 @@
|
|||
""
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"뒤로가기"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"제출"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"텍스트를 입력 해 주시기 바랍니다"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"리뷰 작성"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"이 확장 기능이 왜 환상적이라 생각하는지 세상에 알려주세요!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"개인정보 보호정책"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"법적 고지 사항"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"내 언어로 검색"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Firefox 부가 기능"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"스크린샷 %(totalImages)s 개 중 %(imageNumber)s 번 째"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"평균 점수: 5 점 중 %(rating)s"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"평가 없음"
|
||||
],
|
||||
"%(users)s user": [
|
||||
""
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"로그아웃"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"로그인/가입하기"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Firefox 부가 기능"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"광고 차단"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"스크린샷"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"저장하기"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"온라인 쇼핑"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"공유하기"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"모든 확장 기능 탐색하기"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"파이어폭스가 어떻게 보여지길 바라십니까?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
|
@ -131,49 +131,49 @@
|
|||
""
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"모든 테마 탐색하기"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"%(name)s를 다운로드하는 중입니다."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"%(name)s를 설치하는 중입니다."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s가 설치되었고 활성화되었습니다. 제거하려면 클릭하세요."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s가 비활성되었습니다. 활성화하려면 클릭하세요."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"%(name)s를 제거하는중입니다."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s가 제거되었습니다. 설치하시려면 클릭하세요."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"%(name)s의 설치 상태를 알 수 없습니다."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"이전"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"다음"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"%(totalPages)s 페이지 중 %(currentPage)s 번째 페이지"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
""
|
||||
"\"%(query)s\"에 대한 검색결과가 %(count)s개 있습니다."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"검색중..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"\"%(query)s\"에 대한 검색 결과가 없습니다."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"유효한 검색어를 입력해 주세요"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,37 +8,37 @@
|
|||
"lang": "ko"
|
||||
},
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"%(name)s를 다운로드 중입니다."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"%(name)s를 설치 중입니다."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s가 설치되었고 활성화되었습니다. 제거하려면 클릭하세요."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s가 비활성화되었습니다. 활성화 하려면 클릭하세요."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"%(name)s를 제거하는 중입니다."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s가 제거되었습니다. 설치하려면 클릭하세요."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"%(name)s의 설치 상태를 알 수 없습니다."
|
||||
],
|
||||
"Hover to preview or click to install %(name)s": [
|
||||
""
|
||||
"마우스를 올려서 %(name)s를 미리보거나 클릭해서 설치"
|
||||
],
|
||||
"Hover over the image to preview": [
|
||||
"마우스 올려서 미리보기"
|
||||
],
|
||||
"Installation failed. Please try again.": [
|
||||
""
|
||||
"설치하지 못했습니다. 다시 시도해 주세요."
|
||||
],
|
||||
"Download failed. Please check your connection.": [
|
||||
""
|
||||
"다운로드에 실패했습니다. 접속 상태를 확인 해 주세요."
|
||||
],
|
||||
"An unexpected error occurred during installation.": [
|
||||
"설치 중에 예상치 못 한 오류가 발생하였습니다."
|
||||
|
@ -50,19 +50,19 @@
|
|||
"예상치 못 한 오류가 발생하였습니다."
|
||||
],
|
||||
"This add-on will be uninstalled after you restart Firefox.": [
|
||||
""
|
||||
"이 부가 기능은 Firefox를 재시작한 후에 제거될 것입니다."
|
||||
],
|
||||
"Please restart Firefox to use this add-on.": [
|
||||
""
|
||||
"이 부가 기능을 사용하려면 Firefox를 재시작 해주십시오."
|
||||
],
|
||||
"Your add-on is ready": [
|
||||
""
|
||||
"부가 기능 준비됨"
|
||||
],
|
||||
"Now you can access %(name)s from the toolbar.": [
|
||||
""
|
||||
"이제 도구 모음에서 %(name)s를 접근할 수 있습니다."
|
||||
],
|
||||
"OK!": [
|
||||
""
|
||||
"좋습니다!"
|
||||
],
|
||||
"Close": [
|
||||
"닫기"
|
||||
|
|
|
@ -8,174 +8,174 @@
|
|||
"lang": "nl"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)s door %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metagegevens van extensie"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Schermafbeeldingen"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Over deze extensie"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Uw ervaring beoordelen"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Categorie"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Gebruikt door"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Gevoel"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Terug"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Indienen"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Voer tekst in"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Schrijf een beoordeling"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Beschrijf waarom u deze extensie fantastisch vindt!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Privacybeleid"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Juridische kennisgevingen"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Desktopwebsite weergeven"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Bladeren in uw taal"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Add-ons voor Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Hoe beleeft u uw ervaring met %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"schermafbeelding %(imageNumber)s van %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Gemiddelde waardering: %(rating)s van 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Geen waarderingen"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s gebruiker",
|
||||
"%(users)s gebruikers"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Afmelden"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Aanmelden/Registreren"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Add-ons voor Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Wat wilt u dat Firefox doet?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Advertenties blokkeren"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Schermafbeelding"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Dingen opslaan"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Online winkelen"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Sociaal zijn"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Dingen delen"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Door alle extensies bladeren"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Hoe wilt u Firefox eruit laten zien?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Wild"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstract"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Hip"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Schilderachtig"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sportief"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Mystiek"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Door alle thema’s bladeren"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"%(name)s wordt gedownload."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"%(name)s wordt geïnstalleerd."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s is geïnstalleerd en ingeschakeld. Klik om te verwijderen."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s is uitgeschakeld. Klik om in te schakelen."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"%(name)s wordt verwijderd."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s is verwijderd. Klik om te installeren."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Installatiestatus voor %(name)s is onbekend."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Vorige"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Volgende"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Pagina %(currentPage)s van %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Uw zoekopdracht naar ‘%(query)s’ heeft %(count)s resultaat opgeleverd.",
|
||||
"Uw zoekopdracht naar ‘%(query)s’ heeft %(count)s resultaten opgeleverd."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Zoeken..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Geen resultaten voor ‘%(query)s’ gevonden."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Geef een geldige zoekopdracht op"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,176 +8,176 @@
|
|||
"lang": "pl"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)sAutor: %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadane rozszerzenia"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Zrzuty ekranu"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"O tym rozszerzeniu"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Oceń swoje wrażenia"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Kategoria"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Używane przez"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Wrażenia"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Wstecz"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Wyślij"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Proszę wpisać jakiś tekst"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Napisz recenzję"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Powiedz światu, dlaczego to rozszerzenie jest wspaniałe!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Polityka prywatności"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Kwestie prawne"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Wyświetl stronę na komputery"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Przeglądaj w swoim języku"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Dodatki do Firefoksa"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Jak oceniasz swoje wrażenia z rozszerzeniem %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"%(imageNumber)s. zrzut ekranu z %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Średnia ocena: %(rating)s na 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Brak ocen"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users",
|
||||
"%(users)s users"
|
||||
"%(users)s użytkownik",
|
||||
"%(users)s użytkowników",
|
||||
"%(users)s użytkowników"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Wyloguj"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Zaloguj/zarejestruj"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Dodatki do Firefoksa"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Co chcesz dodać do Firefoksa?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Blokowanie reklam"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Zrzuty ekranu"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Zachowywanie rzeczy"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Zakupy w sieci"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Sieci społecznościowe"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Dzielenie się rzeczami"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Wszystkie rozszerzenia"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Jak Firefox ma wyglądać?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Dziko"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstrakcyjnie"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Modnie"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Malowniczo"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sportowo"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Mistycznie"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Wszystkie motywy"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Pobieranie dodatku „%(name)s”."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Instalowanie dodatku „%(name)s”."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"Dodatek „%(name)s” jest zainstalowany i włączony. Kliknij, aby odinstalować."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"Dodatek „%(name)s” jest wyłączony. Kliknij, aby włączyć."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Odinstalowywanie dodatku „%(name)s”."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"Dodatek „%(name)s” jest odinstalowany. Kliknij, aby zainstalować."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Stan instalacji dodatku „%(name)s” jest nieznany."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Wstecz"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Dalej"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"%(currentPage)s. strona z %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results.",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Zapytanie „%(query)s” zwróciło %(count)s wynik.",
|
||||
"Zapytanie „%(query)s” zwróciło %(count)s wyniki.",
|
||||
"Zapytanie „%(query)s” zwróciło %(count)s wyników."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Wyszukiwanie…"
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Brak wyników dla zapytania „%(query)s”."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Proszę podać prawidłowe zapytanie"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,174 +8,174 @@
|
|||
"lang": "pt_BR"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)spor %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadados da extensão"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Capturas de tela"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Sobre esta extensão"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Avalie a sua experiência"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Categoria"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Usado por"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Sentimento"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Voltar"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Enviar"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Por favor, digite algum texto"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Escreva uma análise"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Diga ao mundo porquê que acha que esta extensão é fantástica!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Política de privacidade"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Avisos legais"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Ver site para computadores"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Navegue no seu idioma"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Extensões do Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Como está desfrutando da sua experiência com %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"captura de tela %(imageNumber)s de %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Média de avaliações: %(rating)s de 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Sem avaliações"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s usuário",
|
||||
"%(users)s usuários"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Sair"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Entre / Registre-se"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Extensões para o Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"O que quer que o Firefox faça?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Bloqueie anúncios"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Captura de tela"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Salve coisas"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Compre online"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Seja social"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Compartilhe coisas"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Navegue por todas as extensões"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Como quer que o Firefox se pareça?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Selvagem"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstrato"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Modista"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Cênico"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Desportivo"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Místico"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Navegue por todos os temas"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Baixando %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Instalando %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s está instalado e habilitado. Clique para desinstalar."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s está desabilitado. Clique para habilitar."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Desinstalando %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s está desinstalado. Clique para instalar."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Estado da instalação de %(name)s é desconhecido."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Anterior"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Próximo"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Página %(currentPage)s de %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"A sua pesquisa por \"%(query)s\" retornou %(count)s resultado.",
|
||||
"A sua pesquisa por \"%(query)s\" retornou %(count)s resultados."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Pesquisando..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Nenhum resultado foi encontrados para \"%(query)s\"."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Por favor, forneça uma pesquisa válida"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
"Este complemento será desinstalado depois de reiniciar o Firefox."
|
||||
],
|
||||
"Please restart Firefox to use this add-on.": [
|
||||
"Por favor, reinicie o Firefox para usar este complemento."
|
||||
"Por favor, reinicie o Firefox para usar esta extensão."
|
||||
],
|
||||
"Your add-on is ready": [
|
||||
"O seu complemento está pronto"
|
||||
|
|
|
@ -5,177 +5,177 @@
|
|||
"": {
|
||||
"domain": "messages",
|
||||
"plural_forms": "nplurals=2; plural=(n != 1);",
|
||||
"lang": "pt"
|
||||
"lang": "pt_PT"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)spor %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadados da extensão"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Capturas de ecrã"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Acerca desta extensão"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Avalie a sua experiência"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Categoria"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Utilizado por"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Sentimento"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Retroceder"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Submeter"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Por favor introduza algum texto"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Escreva um comentário"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Diga ao mundo porquê que acha que esta extensão é fantástica!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Política de privacidade"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Avisos legais"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Ver site para computadores"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Navegue no seu idioma"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Extras do Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Como está a desfrutar da sua experiência com %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"captura de ecrã %(imageNumber)s de %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Média de avaliações: %(rating)s de 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Sem avaliações"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s utilizador",
|
||||
"%(users)s utilizadores"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Terminar sessão"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Iniciar sessão/Registar"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Extras para o Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"O que quer que o Firefox faça?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Bloqueie anúncios"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Capture o ecrã"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Guarde coisas"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Compre online"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Seja social"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Partilhe coisas"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Navegar todas as extensões"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Como quer que o Firefox se pareça?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Selvagem"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstrato"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Elegant"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Cênico"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Desportivo"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Místico"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Navegar todos os temas"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"A descarregar %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"A instalar %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s está instalado e ativado. Clique para desinstalar."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s está desativado. Clique para ativar."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"A desinstalar %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s está desinstalado. Clique para instalar."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"O estado de instalação para %(name)s é desconhecido."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Anterior"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Próxima"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Página %(currentPage)s de %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"A sua pesquisa para \"%(query)s\" retornou %(count)s resultado.",
|
||||
"A sua pesquisa para \"%(query)s\" retornou %(count)s resultados."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"A pesquisar..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Nenhuns resultados foram encontrados para \"%(query)s\"."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Por favor forneça uma pesquisa válida"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,176 +8,176 @@
|
|||
"lang": "ru"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)s от %(authorList)s %(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Метаданные расширения"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Скриншоты"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Об этом расширении"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Оцените работу расширения"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Категория"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Используется"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Мнение"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Назад"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Отправить"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Пожалуйста, введите текст"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Написать отзыв"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Расскажите миру, почему вы думаете, что это расширение является фантастическим!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Политика приватности"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Юридические уведомления"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Просмотр сайта для компьютеров"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Открыть на моём языке"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Дополнения Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Как вы оцениваете ваш опыт работы с %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"скриншот %(imageNumber)s из %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Средний рейтинг: %(rating)s из 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Нет оценок"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users",
|
||||
"%(users)s users"
|
||||
"%(users)s пользователь",
|
||||
"%(users)s пользователя",
|
||||
"%(users)s пользователей"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Выйти"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Войти / Зарегистрироваться"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Дополнения для Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Что вы хотите, чтобы сделал Firefox?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Блокировка рекламы"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Скриншоты"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Сохранение материалов"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Покупки онлайн"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Будьте в сети"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Поделиться материалами"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Просмотреть все расширения"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Как бы вы хотели, чтобы выглядел Firefox?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Свобода"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Абстрактные"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Модные"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Украшающие"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Спортивные"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Мистические"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Просмотреть все темы"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Загрузка %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Установка %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s установлено и включено. Щёлкните, чтобы удалить."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s отключено. Щёлкните, чтобы включить."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Удаление %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s удалено. Щёлкните, чтобы установить."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Состояние установки для %(name)s неизвестно."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Назад"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Вперёд"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Страница %(currentPage)s из %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results.",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"По вашему запросу \"%(query)s\" нашёлся %(count)s результат.",
|
||||
"По вашему запросу \"%(query)s\" нашлось %(count)s результата.",
|
||||
"По вашему запросу \"%(query)s\" нашлось %(count)s результатов."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Поиск..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Результатов для \"%(query)s\" не найдено."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Пожалуйста, введите корректный поисковый запрос"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,176 +8,176 @@
|
|||
"lang": "sk"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)s od %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metadáta rozšírenia"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Snímky obrazovky"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"O tomto rozšírení"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Ohodnoťte svoju skúsenosť"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Kategória"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Používa"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Sentiment"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Naspäť"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Odoslať"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Zadajte, prosím, nejaký text"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Napísať recenziu"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Povedzte svetu, prečo si myslíte, že je toto rozšírenie úžasné!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Zásady ochrany súkromia"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Právne informácie"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Zobraziť verziu stránky pre počítače"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Prehliadanie vo vašom jazyku"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Doplnky pre Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Ako si užívate používanie doplnku %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"snímka obrazovky %(imageNumber)s z %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Priemerné hodnotenie %(rating)s z 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Žiadne hodnotenie"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users",
|
||||
"%(users)s users"
|
||||
"%(users)s používateľ",
|
||||
"%(users)s používatelia",
|
||||
"%(users)s používateľov"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Odhlásiť sa"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Prihlásiť sa/Zaregistrovať sa"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Doplnky pre Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Čo chcete, aby váš Firefox dokázal?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Blokovať reklamy"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Vytvárať snímky obrazovky"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Ukladať veci"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Nakupovať online"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Byť aktívny na sociálnych sieťach"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Zdielať veci"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Prehliadať všetky rozšírenia"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Ako chcete, aby váš Firefox vyzeral?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Divoko"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstraktne"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Módne"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Malebne"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Športovo"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Tajomne"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Prehliadať všetky témy vzhľadu"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Preberanie doplnku %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Inštalovanie doplnku %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"Doplnok %(name)s je nainštalovaný a povolený. Kliknutím ho odinštalujete."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"Doplnok %(name)s je zakázaný. Kliknutím ho povolíte."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Odinštalovanie doplnku %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"Doplnok %(name)s bol odinštalovaný. Kliknutím ho nainštalujete."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Stav inštalácie doplnku %(name)s nie je známy."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Predchádzajúca"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Ďalšia"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Stránka %(currentPage)s z %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results.",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Pre vyhľadávaný výraz \"%(query)s\" bol nájdený %(count)s výsledok.",
|
||||
"Pre vyhľadávaný výraz \"%(query)s\" boli nájdené %(count)s výsledky.",
|
||||
"Pre vyhľadávaný výraz \"%(query)s\" bol nájdených %(count)s výsledkov."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Vyhľadáva sa…"
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Pre vyhľadávaný výraz \"%(query)s\" nebol nájdený žiadny výsledok."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Prosím, zadajte platný výraz vyhľadávania"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,178 +8,178 @@
|
|||
"lang": "sl"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)s– %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Metapodatki o razširitvi"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Posnetki zaslona"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"O tej razširitvi"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Ocenite svojo izkušnjo"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Kategorija"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Uporablja"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Občutek"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Nazaj"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Predloži"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Vnesite nekaj besedila"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Napišite oceno"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Pojasnite svetu, zakaj se vam ta razširitev zdi odlična!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Pravilnik o zasebnosti"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Pravna obvestila"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Ogled strani za namizja"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Brskajte v svojem jeziku"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Dodatki za Firefox"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"Kako vam ugaja %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"posnetek zaslona %(imageNumber)s od %(totalImages)s"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Povprečna ocena: %(rating)s od 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Ni ocen"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users",
|
||||
"%(users)s users",
|
||||
"%(users)s users"
|
||||
"%(users)s uporabnik",
|
||||
"%(users)s uporabnika",
|
||||
"%(users)s uporabniki",
|
||||
"%(users)s uporabnikov"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Odjava"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Prijava/Registracija"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Dodatki za Firefox"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Kaj naj Firefox počne?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Zavrača oglase"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Ustvarja posnetke zaslona"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Shranjuje vsebino"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Nakupuje na spletu"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Postane družaben"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Deli vsebino"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Prebrskaj vse razširitve"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Kako naj bo Firefox videti?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Divje"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstraktno"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"Modno"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Slikovito"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Športno"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Mistično"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Prebrskaj vse teme"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Prenašanje %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Nameščanje %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s je nameščen in omogočen. Kliknite za odstranitev."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s je onemogočen. Kliknite, da ga omogočite."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Odstranjevanje %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s je bil odstranjen. Kliknite za namestitev."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Ni znano, ali je %(name)s nameščen ali ne."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"Prejšnja"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Naslednja"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Stran %(currentPage)s od %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results.",
|
||||
"Your search for \"%(query)s\" returned %(count)s results.",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Najden je %(count)s rezultat za \"%(query)s\".",
|
||||
"Najdena sta %(count)s rezultata za \"%(query)s\".",
|
||||
"Najdeni so %(count)s rezultati za \"%(query)s\".",
|
||||
"Najdenih je %(count)s rezultatov za \"%(query)s\"."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Iskanje ..."
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"Ni najdenih rezultatov za \"%(query)s\"."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Vnesite veljavno iskalno poizvedbo"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,178 +4,178 @@
|
|||
"messages": {
|
||||
"": {
|
||||
"domain": "messages",
|
||||
"plural_forms": "nplurals=2; plural=(n!=1);",
|
||||
"plural_forms": "nplurals=2; plural=(n != 1);",
|
||||
"lang": "sq"
|
||||
},
|
||||
"%(addonName)s %(startSpan)sby %(authorList)s%(endSpan)s": [
|
||||
""
|
||||
"%(addonName)s %(startSpan)snga %(authorList)s%(endSpan)s"
|
||||
],
|
||||
"Extension Metadata": [
|
||||
""
|
||||
"Tejtëdhëna Zgjerimi"
|
||||
],
|
||||
"Screenshots": [
|
||||
""
|
||||
"Foto ekrani"
|
||||
],
|
||||
"About this extension": [
|
||||
""
|
||||
"Rreth këtij zgjerimi:"
|
||||
],
|
||||
"Rate your experience": [
|
||||
""
|
||||
"Vlerësoni rastin tuaj"
|
||||
],
|
||||
"Category": [
|
||||
""
|
||||
"Kategori"
|
||||
],
|
||||
"Used by": [
|
||||
""
|
||||
"Përdorur nga"
|
||||
],
|
||||
"Sentiment": [
|
||||
""
|
||||
"Ndjenjë"
|
||||
],
|
||||
"Back": [
|
||||
""
|
||||
"Mbrapsht"
|
||||
],
|
||||
"Submit": [
|
||||
""
|
||||
"Parashtroje"
|
||||
],
|
||||
"Please enter some text": [
|
||||
""
|
||||
"Ju lutemi, jepni ca tekst"
|
||||
],
|
||||
"Write a review": [
|
||||
""
|
||||
"Shkruani një shqyrtim"
|
||||
],
|
||||
"Tell the world why you think this extension is fantastic!": [
|
||||
""
|
||||
"Tregojini botës pse mendoni se ky zgjerim është fantastik!"
|
||||
],
|
||||
"Privacy policy": [
|
||||
""
|
||||
"Rregulla privatësie"
|
||||
],
|
||||
"Legal notices": [
|
||||
""
|
||||
"Shënime ligjore"
|
||||
],
|
||||
"View desktop site": [
|
||||
""
|
||||
"Shihni sajtin për desktop"
|
||||
],
|
||||
"Browse in your language": [
|
||||
""
|
||||
"Shfletoni në gjuhën tuaj"
|
||||
],
|
||||
"Firefox Add-ons": [
|
||||
""
|
||||
"Shtesa Firefox-i"
|
||||
],
|
||||
"How are you enjoying your experience with %(addonName)s?": [
|
||||
""
|
||||
"A po ju pëlqen %(addonName)s?"
|
||||
],
|
||||
"screenshot %(imageNumber)s of %(totalImages)s": [
|
||||
""
|
||||
"fotoja e %(imageNumber)s-të e ekrani nga %(totalImages)s gjithsej"
|
||||
],
|
||||
"Average rating: %(rating)s out of 5": [
|
||||
""
|
||||
"Vlerësimi mesatar: %(rating)s nga 5"
|
||||
],
|
||||
"No ratings": [
|
||||
""
|
||||
"Pa vlerësime"
|
||||
],
|
||||
"%(users)s user": [
|
||||
"",
|
||||
"%(users)s users"
|
||||
"%(users)s përdorues",
|
||||
"%(users)s përdorues"
|
||||
],
|
||||
"Log out": [
|
||||
""
|
||||
"Dilni"
|
||||
],
|
||||
"Log in/Sign up": [
|
||||
""
|
||||
"Hyni/Regjistrohuni"
|
||||
],
|
||||
"Add-ons for Firefox": [
|
||||
""
|
||||
"Shtesa për Firefox-in"
|
||||
],
|
||||
"What do you want Firefox to do?": [
|
||||
""
|
||||
"Çfarë doni të bëjë Firefox-i?"
|
||||
],
|
||||
"Block ads": [
|
||||
""
|
||||
"Bllokoni reklama"
|
||||
],
|
||||
"Screenshot": [
|
||||
""
|
||||
"Foto ekrani"
|
||||
],
|
||||
"Save stuff": [
|
||||
""
|
||||
"Ruani gjëra"
|
||||
],
|
||||
"Shop online": [
|
||||
""
|
||||
"Blini në Internet"
|
||||
],
|
||||
"Be social": [
|
||||
""
|
||||
"Jini shoqëror"
|
||||
],
|
||||
"Share stuff": [
|
||||
""
|
||||
"Ndani gjëra me të tjerët"
|
||||
],
|
||||
"Browse all extensions": [
|
||||
""
|
||||
"Shfletojini krejt zgjerimet"
|
||||
],
|
||||
"How do you want Firefox to look?": [
|
||||
""
|
||||
"Si dëshironi të duket Firefox-i?"
|
||||
],
|
||||
"Wild": [
|
||||
""
|
||||
"Wild"
|
||||
],
|
||||
"Abstract": [
|
||||
""
|
||||
"Abstrakte"
|
||||
],
|
||||
"Fashionable": [
|
||||
""
|
||||
"E modës"
|
||||
],
|
||||
"Scenic": [
|
||||
""
|
||||
"Skenike"
|
||||
],
|
||||
"Sporty": [
|
||||
""
|
||||
"Sportive"
|
||||
],
|
||||
"Mystical": [
|
||||
""
|
||||
"Mistik"
|
||||
],
|
||||
"Browse all themes": [
|
||||
""
|
||||
"Shfletoni krejt temat"
|
||||
],
|
||||
"Downloading %(name)s.": [
|
||||
""
|
||||
"Shkarkim i %(name)s."
|
||||
],
|
||||
"Installing %(name)s.": [
|
||||
""
|
||||
"Instalim i %(name)s."
|
||||
],
|
||||
"%(name)s is installed and enabled. Click to uninstall.": [
|
||||
""
|
||||
"%(name)s është e instaluar dhe e aktivizuar. Klikoni që të çinstalohet."
|
||||
],
|
||||
"%(name)s is disabled. Click to enable.": [
|
||||
""
|
||||
"%(name)s është çaktivizuar. Klikoni që të aktivizohet."
|
||||
],
|
||||
"Uninstalling %(name)s.": [
|
||||
""
|
||||
"Çinstalim i %(name)s."
|
||||
],
|
||||
"%(name)s is uninstalled. Click to install.": [
|
||||
""
|
||||
"%(name)s është e çinstaluar. Klikoni që të instalohet."
|
||||
],
|
||||
"Install state for %(name)s is unknown.": [
|
||||
""
|
||||
"Gjendja e instalimit për %(name)s është e panjohur."
|
||||
],
|
||||
"Previous": [
|
||||
""
|
||||
"I mëparshmi"
|
||||
],
|
||||
"Next": [
|
||||
""
|
||||
"Pasuesi"
|
||||
],
|
||||
"Page %(currentPage)s of %(totalPages)s": [
|
||||
""
|
||||
"Faqja %(currentPage)s nga %(totalPages)s"
|
||||
],
|
||||
"Your search for \"%(query)s\" returned %(count)s result.": [
|
||||
"",
|
||||
"Your search for \"%(query)s\" returned %(count)s results."
|
||||
"Kërkimi juaj për \"%(query)s\" dha %(count)s përfundim.",
|
||||
"Kërkimi juaj për \"%(query)s\" dha %(count)s përfundime."
|
||||
],
|
||||
"Searching...": [
|
||||
""
|
||||
"Po kërkohet…"
|
||||
],
|
||||
"No results were found for \"%(query)s\".": [
|
||||
""
|
||||
"S’u gjetën përfundime për \"%(query)s\"."
|
||||
],
|
||||
"Please supply a valid search": [
|
||||
""
|
||||
"Ju lutemi, jepni një kërkim të vlefshëm"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче