summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'MLEB/Translate')
-rw-r--r--MLEB/Translate/.eslintrc.json9
-rw-r--r--MLEB/Translate/.phpcs.xml1
-rw-r--r--MLEB/Translate/.stylelintrc.json1
-rw-r--r--MLEB/Translate/Autoload.php2
-rw-r--r--MLEB/Translate/MessageCollection.php6
-rw-r--r--MLEB/Translate/MessageGroups.php134
-rw-r--r--MLEB/Translate/RELEASE-NOTES18
-rw-r--r--MLEB/Translate/Resources.php22
-rw-r--r--MLEB/Translate/Translate.php68
-rw-r--r--MLEB/Translate/TranslateEditAddons.php16
-rw-r--r--MLEB/Translate/TranslateHooks.php43
-rw-r--r--MLEB/Translate/TranslateUtils.php70
-rw-r--r--MLEB/Translate/data/plural-gettext.txt2
-rw-r--r--MLEB/Translate/extension-wip.json49
-rw-r--r--MLEB/Translate/ffs/GettextFFS.php2
-rw-r--r--MLEB/Translate/ffs/IniFFS.php2
-rw-r--r--MLEB/Translate/ffs/JavaFFS.php2
-rw-r--r--MLEB/Translate/i18n/api/be-tarask.json9
-rw-r--r--MLEB/Translate/i18n/api/da.json4
-rw-r--r--MLEB/Translate/i18n/api/de.json8
-rw-r--r--MLEB/Translate/i18n/api/es.json7
-rw-r--r--MLEB/Translate/i18n/api/fi.json5
-rw-r--r--MLEB/Translate/i18n/api/hr.json8
-rw-r--r--MLEB/Translate/i18n/api/ja.json7
-rw-r--r--MLEB/Translate/i18n/api/kjp.json8
-rw-r--r--MLEB/Translate/i18n/api/nl.json12
-rw-r--r--MLEB/Translate/i18n/api/pt-br.json7
-rw-r--r--MLEB/Translate/i18n/api/roa-tara.json2
-rw-r--r--MLEB/Translate/i18n/api/sr-el.json4
-rw-r--r--MLEB/Translate/i18n/api/yi.json13
-rw-r--r--MLEB/Translate/i18n/api/yue.json13
-rw-r--r--MLEB/Translate/i18n/core/ace.json5
-rw-r--r--MLEB/Translate/i18n/core/ar.json4
-rw-r--r--MLEB/Translate/i18n/core/avk.json8
-rw-r--r--MLEB/Translate/i18n/core/be-tarask.json2
-rw-r--r--MLEB/Translate/i18n/core/be.json10
-rw-r--r--MLEB/Translate/i18n/core/bg.json2
-rw-r--r--MLEB/Translate/i18n/core/bn.json6
-rw-r--r--MLEB/Translate/i18n/core/ca.json19
-rw-r--r--MLEB/Translate/i18n/core/cs.json2
-rw-r--r--MLEB/Translate/i18n/core/da.json2
-rw-r--r--MLEB/Translate/i18n/core/de-formal.json5
-rw-r--r--MLEB/Translate/i18n/core/de.json3
-rw-r--r--MLEB/Translate/i18n/core/diq.json10
-rw-r--r--MLEB/Translate/i18n/core/el.json4
-rw-r--r--MLEB/Translate/i18n/core/en.json3
-rw-r--r--MLEB/Translate/i18n/core/eo.json7
-rw-r--r--MLEB/Translate/i18n/core/es.json13
-rw-r--r--MLEB/Translate/i18n/core/et.json2
-rw-r--r--MLEB/Translate/i18n/core/fa.json1
-rw-r--r--MLEB/Translate/i18n/core/fi.json4
-rw-r--r--MLEB/Translate/i18n/core/fr.json3
-rw-r--r--MLEB/Translate/i18n/core/he.json3
-rw-r--r--MLEB/Translate/i18n/core/hr.json13
-rw-r--r--MLEB/Translate/i18n/core/hu.json5
-rw-r--r--MLEB/Translate/i18n/core/ia.json2
-rw-r--r--MLEB/Translate/i18n/core/ig.json4
-rw-r--r--MLEB/Translate/i18n/core/it.json2
-rw-r--r--MLEB/Translate/i18n/core/ja.json7
-rw-r--r--MLEB/Translate/i18n/core/kjp.json76
-rw-r--r--MLEB/Translate/i18n/core/km.json2
-rw-r--r--MLEB/Translate/i18n/core/ko.json3
-rw-r--r--MLEB/Translate/i18n/core/lb.json1
-rw-r--r--MLEB/Translate/i18n/core/lv.json2
-rw-r--r--MLEB/Translate/i18n/core/lzz.json6
-rw-r--r--MLEB/Translate/i18n/core/min.json4
-rw-r--r--MLEB/Translate/i18n/core/mk.json5
-rw-r--r--MLEB/Translate/i18n/core/my.json1
-rw-r--r--MLEB/Translate/i18n/core/myv.json3
-rw-r--r--MLEB/Translate/i18n/core/ne.json1
-rw-r--r--MLEB/Translate/i18n/core/nl.json6
-rw-r--r--MLEB/Translate/i18n/core/pl.json13
-rw-r--r--MLEB/Translate/i18n/core/ps.json3
-rw-r--r--MLEB/Translate/i18n/core/pt-br.json5
-rw-r--r--MLEB/Translate/i18n/core/pt.json3
-rw-r--r--MLEB/Translate/i18n/core/qqq.json5
-rw-r--r--MLEB/Translate/i18n/core/roa-tara.json3
-rw-r--r--MLEB/Translate/i18n/core/ru.json18
-rw-r--r--MLEB/Translate/i18n/core/ses.json8
-rw-r--r--MLEB/Translate/i18n/core/shn.json1
-rw-r--r--MLEB/Translate/i18n/core/shy-latn.json3
-rw-r--r--MLEB/Translate/i18n/core/sl.json2
-rw-r--r--MLEB/Translate/i18n/core/sr-ec.json145
-rw-r--r--MLEB/Translate/i18n/core/sr-el.json109
-rw-r--r--MLEB/Translate/i18n/core/sv.json4
-rw-r--r--MLEB/Translate/i18n/core/tcy.json4
-rw-r--r--MLEB/Translate/i18n/core/th.json14
-rw-r--r--MLEB/Translate/i18n/core/tr.json2
-rw-r--r--MLEB/Translate/i18n/core/uk.json4
-rw-r--r--MLEB/Translate/i18n/core/ur.json10
-rw-r--r--MLEB/Translate/i18n/core/uz.json45
-rw-r--r--MLEB/Translate/i18n/core/vi.json14
-rw-r--r--MLEB/Translate/i18n/core/yi.json2
-rw-r--r--MLEB/Translate/i18n/core/yue.json32
-rw-r--r--MLEB/Translate/i18n/core/zh-hans.json4
-rw-r--r--MLEB/Translate/i18n/core/zh-hant.json3
-rw-r--r--MLEB/Translate/i18n/pagetranslation/ar.json2
-rw-r--r--MLEB/Translate/i18n/pagetranslation/avk.json8
-rw-r--r--MLEB/Translate/i18n/pagetranslation/be-tarask.json5
-rw-r--r--MLEB/Translate/i18n/pagetranslation/bg.json1
-rw-r--r--MLEB/Translate/i18n/pagetranslation/cs.json4
-rw-r--r--MLEB/Translate/i18n/pagetranslation/da.json5
-rw-r--r--MLEB/Translate/i18n/pagetranslation/de.json4
-rw-r--r--MLEB/Translate/i18n/pagetranslation/diq.json2
-rw-r--r--MLEB/Translate/i18n/pagetranslation/en.json4
-rw-r--r--MLEB/Translate/i18n/pagetranslation/es.json2
-rw-r--r--MLEB/Translate/i18n/pagetranslation/fa.json2
-rw-r--r--MLEB/Translate/i18n/pagetranslation/fi.json7
-rw-r--r--MLEB/Translate/i18n/pagetranslation/fr.json4
-rw-r--r--MLEB/Translate/i18n/pagetranslation/he.json4
-rw-r--r--MLEB/Translate/i18n/pagetranslation/hr.json31
-rw-r--r--MLEB/Translate/i18n/pagetranslation/ia.json2
-rw-r--r--MLEB/Translate/i18n/pagetranslation/ig.json27
-rw-r--r--MLEB/Translate/i18n/pagetranslation/it.json2
-rw-r--r--MLEB/Translate/i18n/pagetranslation/ja.json15
-rw-r--r--MLEB/Translate/i18n/pagetranslation/kjp.json9
-rw-r--r--MLEB/Translate/i18n/pagetranslation/ko.json3
-rw-r--r--MLEB/Translate/i18n/pagetranslation/lzz.json8
-rw-r--r--MLEB/Translate/i18n/pagetranslation/min.json4
-rw-r--r--MLEB/Translate/i18n/pagetranslation/mk.json2
-rw-r--r--MLEB/Translate/i18n/pagetranslation/pl.json3
-rw-r--r--MLEB/Translate/i18n/pagetranslation/ps.json3
-rw-r--r--MLEB/Translate/i18n/pagetranslation/pt-br.json2
-rw-r--r--MLEB/Translate/i18n/pagetranslation/pt.json2
-rw-r--r--MLEB/Translate/i18n/pagetranslation/qqq.json39
-rw-r--r--MLEB/Translate/i18n/pagetranslation/roa-tara.json2
-rw-r--r--MLEB/Translate/i18n/pagetranslation/ru.json4
-rw-r--r--MLEB/Translate/i18n/pagetranslation/ses.json8
-rw-r--r--MLEB/Translate/i18n/pagetranslation/shy-latn.json8
-rw-r--r--MLEB/Translate/i18n/pagetranslation/sr-ec.json91
-rw-r--r--MLEB/Translate/i18n/pagetranslation/sr-el.json156
-rw-r--r--MLEB/Translate/i18n/pagetranslation/sv.json21
-rw-r--r--MLEB/Translate/i18n/pagetranslation/sw.json6
-rw-r--r--MLEB/Translate/i18n/pagetranslation/tcy.json6
-rw-r--r--MLEB/Translate/i18n/pagetranslation/uk.json7
-rw-r--r--MLEB/Translate/i18n/pagetranslation/yi.json4
-rw-r--r--MLEB/Translate/i18n/pagetranslation/zh-hant.json4
-rw-r--r--MLEB/Translate/i18n/sandbox/da.json5
-rw-r--r--MLEB/Translate/i18n/sandbox/fa.json5
-rw-r--r--MLEB/Translate/i18n/sandbox/fi.json16
-rw-r--r--MLEB/Translate/i18n/sandbox/kjp.json3
-rw-r--r--MLEB/Translate/i18n/sandbox/mk.json2
-rw-r--r--MLEB/Translate/i18n/sandbox/pl.json4
-rw-r--r--MLEB/Translate/i18n/sandbox/ru.json2
-rw-r--r--MLEB/Translate/i18n/sandbox/sr-el.json11
-rw-r--r--MLEB/Translate/i18n/sandbox/sv.json2
-rw-r--r--MLEB/Translate/i18n/sandbox/tcy.json6
-rw-r--r--MLEB/Translate/i18n/sandbox/tr.json8
-rw-r--r--MLEB/Translate/i18n/sandbox/zh-hans.json5
-rw-r--r--MLEB/Translate/i18n/sandbox/zh-hant.json2
-rw-r--r--MLEB/Translate/i18n/search/ca.json2
-rw-r--r--MLEB/Translate/i18n/search/diq.json2
-rw-r--r--MLEB/Translate/i18n/search/eo.json22
-rw-r--r--MLEB/Translate/i18n/search/ja.json1
-rw-r--r--MLEB/Translate/i18n/search/km.json24
-rw-r--r--MLEB/Translate/i18n/search/ko.json7
-rw-r--r--MLEB/Translate/i18n/search/my.json5
-rw-r--r--MLEB/Translate/i18n/search/pt-br.json9
-rw-r--r--MLEB/Translate/i18n/search/sr-ec.json35
-rw-r--r--MLEB/Translate/i18n/search/sr-el.json17
-rw-r--r--MLEB/Translate/insertables/CombinedInsertablesSuggester.php7
-rw-r--r--MLEB/Translate/messagegroups/AggregateMessageGroup.php2
-rw-r--r--MLEB/Translate/messagegroups/FileBasedMessageGroup.php4
-rw-r--r--MLEB/Translate/messagegroups/RecentMessageGroup.php2
-rw-r--r--MLEB/Translate/package.json8
-rw-r--r--MLEB/Translate/resources/css/ext.translate.editor.css1
-rw-r--r--MLEB/Translate/resources/css/ext.translate.groupselector.less1
-rw-r--r--MLEB/Translate/resources/css/ext.translate.loader.css2
-rw-r--r--MLEB/Translate/resources/css/ext.translate.messagetable.less2
-rw-r--r--MLEB/Translate/resources/css/ext.translate.navitoggle.css14
-rw-r--r--MLEB/Translate/resources/css/ext.translate.quickedit.css5
-rw-r--r--MLEB/Translate/resources/css/ext.translate.special.languagestats.css21
-rw-r--r--MLEB/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css1
-rw-r--r--MLEB/Translate/resources/css/ext.translate.special.pagemigration.css1
-rw-r--r--MLEB/Translate/resources/css/ext.translate.statstable.less63
-rw-r--r--MLEB/Translate/resources/js/ext.translate.base.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.dropdownmenu.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.editor.helpers.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.editor.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.editor.shortcuts.js37
-rw-r--r--MLEB/Translate/resources/js/ext.translate.groupselector.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.hooks.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.messagetable.js9
-rw-r--r--MLEB/Translate/resources/js/ext.translate.multiselectautocomplete.js2
-rw-r--r--MLEB/Translate/resources/js/ext.translate.navitoggle.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.pagemode.js6
-rw-r--r--MLEB/Translate/resources/js/ext.translate.pagetranslation.uls.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.parsers.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.proofread.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.recentgroups.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.aggregategroups.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.importtranslations.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.languagestats.js54
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.operatorsuggest.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.pagemigration.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.pagepreparation.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.pagetranslation.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.searchtranslations.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.translate.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.translationstash.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.special.translationstats.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.statsbar.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.storage.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.translationstashstorage.js4
-rw-r--r--MLEB/Translate/resources/js/ext.translate.workflowselector.js4
-rw-r--r--MLEB/Translate/resources/js/jquery.ajaxdispatcher.js4
-rw-r--r--MLEB/Translate/resources/js/jquery.textchange.js4
-rw-r--r--MLEB/Translate/scripts/TranslateStatsOutput.php6
-rw-r--r--MLEB/Translate/scripts/characterEditStats.php4
-rw-r--r--MLEB/Translate/scripts/create-language-models.php2
-rw-r--r--MLEB/Translate/scripts/createCheckIndex.php2
-rw-r--r--MLEB/Translate/scripts/createMessageIndex.php2
-rw-r--r--MLEB/Translate/scripts/expand-groupspec.php2
-rw-r--r--MLEB/Translate/scripts/export.php2
-rw-r--r--MLEB/Translate/scripts/fallbacks-graph.php2
-rw-r--r--MLEB/Translate/scripts/fuzzy.php4
-rw-r--r--MLEB/Translate/scripts/groupStatistics.php4
-rw-r--r--MLEB/Translate/scripts/languageeditstats.php10
-rw-r--r--MLEB/Translate/scripts/magic-export.php2
-rw-r--r--MLEB/Translate/scripts/test-mt.php8
-rw-r--r--MLEB/Translate/scripts/translator-stats.php2
-rw-r--r--MLEB/Translate/specials/SpecialExportTranslations.php6
-rw-r--r--MLEB/Translate/specials/SpecialLanguageStats.php39
-rw-r--r--MLEB/Translate/specials/SpecialMagic.php2
-rw-r--r--MLEB/Translate/specials/SpecialManageGroups.php2
-rw-r--r--MLEB/Translate/specials/SpecialMessageGroupStats.php5
-rw-r--r--MLEB/Translate/specials/SpecialSupportedLanguages.php6
-rw-r--r--MLEB/Translate/specials/SpecialTranslate.php4
-rw-r--r--MLEB/Translate/specials/SpecialTranslations.php2
-rw-r--r--MLEB/Translate/stash/StashedTranslation.php15
-rw-r--r--MLEB/Translate/stash/TranslationStashStorage.php7
-rw-r--r--MLEB/Translate/stringmangler/StringMatcher.php4
-rw-r--r--MLEB/Translate/tag/PageTranslationHooks.php2
-rw-r--r--MLEB/Translate/tag/SpecialPageMigration.php2
-rw-r--r--MLEB/Translate/tag/SpecialPageTranslation.php2
-rw-r--r--MLEB/Translate/tag/SpecialPageTranslationMovePage.php55
-rw-r--r--MLEB/Translate/tag/TPSection.php2
-rw-r--r--MLEB/Translate/tag/TranslatablePage.php20
-rw-r--r--MLEB/Translate/tag/TranslatablePageMoveJob.php2
-rw-r--r--MLEB/Translate/tag/TranslateDeleteJob.php2
-rw-r--r--MLEB/Translate/tag/TranslateMoveJob.php5
-rw-r--r--MLEB/Translate/tag/TranslateRenderJob.php2
-rw-r--r--MLEB/Translate/tag/TranslationsUpdateJob.php2
-rw-r--r--MLEB/Translate/tests/phpunit/HookDocTest.php8
-rw-r--r--MLEB/Translate/tests/phpunit/MessageCollectionTest.php9
-rw-r--r--MLEB/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php4
-rw-r--r--MLEB/Translate/tests/phpunit/MessageGroupsTest.php2
-rw-r--r--MLEB/Translate/tests/phpunit/MessageIndexRebuildJobTest.php2
-rw-r--r--MLEB/Translate/tests/phpunit/MockSuperUser.php24
-rw-r--r--MLEB/Translate/tests/phpunit/PageTranslationTaggingTest.php4
-rw-r--r--MLEB/Translate/tests/phpunit/SolrTTMServerTest.php2
-rw-r--r--MLEB/Translate/tests/phpunit/SpecialPagesTest.php4
-rw-r--r--MLEB/Translate/tests/phpunit/TranslateHooksTest.php4
-rw-r--r--MLEB/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php2
-rw-r--r--MLEB/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php2
-rw-r--r--MLEB/Translate/tests/phpunit/api/ApiTranslationReviewTest.php16
-rw-r--r--MLEB/Translate/tests/phpunit/tag/PageTranslationHooksTest.php4
-rw-r--r--MLEB/Translate/tests/qunit/.eslintrc.json6
-rw-r--r--MLEB/Translate/tests/qunit/ext.translate.parsers.test.js10
-rw-r--r--MLEB/Translate/tests/qunit/ext.translate.special.pagemigration.test.js16
-rw-r--r--MLEB/Translate/translationaids/DocumentationAid.php4
-rw-r--r--MLEB/Translate/ttmserver/TTMServerMessageUpdateJob.php6
-rw-r--r--MLEB/Translate/utils/HTMLJsSelectToInputField.php6
-rw-r--r--MLEB/Translate/utils/MessageGroupCache.php4
-rw-r--r--MLEB/Translate/utils/MessageGroupStatesUpdaterJob.php2
-rw-r--r--MLEB/Translate/utils/MessageGroupStats.php203
-rw-r--r--MLEB/Translate/utils/MessageGroupStatsRebuildJob.php50
-rw-r--r--MLEB/Translate/utils/MessageIndex.php2
-rw-r--r--MLEB/Translate/utils/MessageIndexRebuildJob.php10
-rw-r--r--MLEB/Translate/utils/MessageWebImporter.php2
-rw-r--r--MLEB/Translate/utils/StatsTable.php66
-rw-r--r--MLEB/Translate/utils/TranslateSandboxEmailJob.php2
-rw-r--r--MLEB/Translate/utils/TranslationHelpers.php8
-rw-r--r--MLEB/Translate/webservices/MicrosoftWebService.php119
-rw-r--r--MLEB/Translate/webservices/TranslationQuery.php2
-rw-r--r--MLEB/Translate/webservices/TranslationQueryResponse.php2
-rw-r--r--MLEB/Translate/webservices/TranslationWebService.php12
278 files changed, 2064 insertions, 1138 deletions
diff --git a/MLEB/Translate/.eslintrc.json b/MLEB/Translate/.eslintrc.json
index a449bc1a..51e3d84e 100644
--- a/MLEB/Translate/.eslintrc.json
+++ b/MLEB/Translate/.eslintrc.json
@@ -1,15 +1,16 @@
{
+ "root": true,
"extends": "wikimedia",
"env": {
- "browser": true,
- "jquery": true,
- "qunit": true
+ "browser": true
},
"globals": {
- "mediaWiki": false,
+ "mw": false,
+ "$": false,
"OO": false
},
"rules": {
+ "max-len": 0,
"no-use-before-define": 0
}
}
diff --git a/MLEB/Translate/.phpcs.xml b/MLEB/Translate/.phpcs.xml
index ad07e67b..bc7fd820 100644
--- a/MLEB/Translate/.phpcs.xml
+++ b/MLEB/Translate/.phpcs.xml
@@ -10,7 +10,6 @@
<exclude name="MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName" />
<exclude name="MediaWiki.Usage.ForbiddenFunctions.escapeshellarg" />
<exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" />
- <exclude name="Squiz.Scope.MethodScope.Missing" />
</rule>
<rule ref="Generic.Files.LineLength">
<exclude-pattern>Translate\.alias\.php</exclude-pattern>
diff --git a/MLEB/Translate/.stylelintrc.json b/MLEB/Translate/.stylelintrc.json
index e15d057b..afe8e1c5 100644
--- a/MLEB/Translate/.stylelintrc.json
+++ b/MLEB/Translate/.stylelintrc.json
@@ -3,7 +3,6 @@
"rules": {
"selector-max-id": null,
"declaration-no-important": null,
- "no-duplicate-selectors": null,
"no-descending-specificity": null
}
}
diff --git a/MLEB/Translate/Autoload.php b/MLEB/Translate/Autoload.php
index 7d4bef03..ce5b52a9 100644
--- a/MLEB/Translate/Autoload.php
+++ b/MLEB/Translate/Autoload.php
@@ -70,6 +70,7 @@ $al['MessageGroupCache'] = "$dir/utils/MessageGroupCache.php";
$al['MessageGroupStates'] = "$dir/utils/MessageGroupStates.php";
$al['MessageGroupStatesUpdaterJob'] = "$dir/utils/MessageGroupStatesUpdaterJob.php";
$al['MessageGroupStats'] = "$dir/utils/MessageGroupStats.php";
+$al['MessageGroupStatsRebuildJob'] = "$dir/utils/MessageGroupStatsRebuildJob.php";
$al['MessageHandle'] = "$dir/utils/MessageHandle.php";
$al['MessageIndex'] = "$dir/utils/MessageIndex.php";
$al['MessageIndexRebuildJob'] = "$dir/utils/MessageIndexRebuildJob.php";
@@ -229,7 +230,6 @@ $al['MockFileBasedMessageGroup'] =
"$dir/tests/phpunit/MockFileBasedMessageGroup.php";
$al['MockMessageCollectionForExport'] =
"$dir/tests/phpunit/MockMessageCollectionForExport.php";
-$al['MockSuperUser'] = "$dir/tests/phpunit/MockSuperUser.php";
$al['MockWikiMessageGroup'] = "$dir/tests/phpunit/MockWikiMessageGroup.php";
/**
diff --git a/MLEB/Translate/MessageCollection.php b/MLEB/Translate/MessageCollection.php
index ac065be0..45124b92 100644
--- a/MLEB/Translate/MessageCollection.php
+++ b/MLEB/Translate/MessageCollection.php
@@ -92,7 +92,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
* Construct a new message collection from definitions.
* @param MessageDefinitions $definitions
* @param string $code Language code.
- * @return MessageCollection
+ * @return self
*/
public static function newFromDefinitions( MessageDefinitions $definitions, $code ) {
$collection = new self( $code );
@@ -105,7 +105,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
/**
* Constructs a new empty message collection. Suitable for example for testing.
* @param string $code Language code.
- * @return MessageCollection
+ * @return self
*/
public static function newEmpty( $code ) {
}
@@ -694,7 +694,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
$dbr = TranslateUtils::getSafeReadDB();
- if ( is_callable( [ 'Revision', 'getQueryInfo' ] ) ) {
+ if ( is_callable( Revision::class, 'getQueryInfo' ) ) {
$revQuery = Revision::getQueryInfo( [ 'page', 'text' ] );
} else {
$revQuery = [
diff --git a/MLEB/Translate/MessageGroups.php b/MLEB/Translate/MessageGroups.php
index 92ba97fa..caaf815c 100644
--- a/MLEB/Translate/MessageGroups.php
+++ b/MLEB/Translate/MessageGroups.php
@@ -8,6 +8,7 @@
* @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
* @license GPL-2.0-or-later
*/
+use \MediaWiki\MediaWikiServices;
/**
* Factory class for accessing message groups individually by id or
@@ -26,7 +27,7 @@ class MessageGroups {
protected $groups;
/**
- * @var BagOStuff|null
+ * @var WANObjectCache|null
*/
protected $cache;
@@ -34,25 +35,72 @@ class MessageGroups {
* Initialises the list of groups
*/
protected function init() {
- global $wgAutoloadClasses;
-
if ( is_array( $this->groups ) ) {
return;
}
- $key = wfMemcKey( 'translate-groups' );
- $value = DependencyWrapper::getValueFromCache( $this->getCache(), $key );
+ $value = $this->getCachedGroupDefinitions();
+ $groups = $value['cc'];
- if ( $value === null ) {
- wfDebug( __METHOD__ . "-nocache\n" );
- $groups = $this->loadGroupDefinitions();
- } else {
- wfDebug( __METHOD__ . "-withcache\n" );
- $groups = $value['cc'];
- self::appendAutoloader( $value['autoload'], $wgAutoloadClasses );
+ $this->postInit( $groups );
+ }
+
+ /**
+ * @param bool|string $recache Either "recache" or false
+ * @return array
+ */
+ protected function getCachedGroupDefinitions( $recache = false ) {
+ global $wgAutoloadClasses, $wgVersion;
+
+ $regenerator = function () {
+ global $wgAutoloadClasses;
+
+ $groups = $deps = $autoload = [];
+ // This constructs the list of all groups from multiple different sources.
+ // When possible, a cache dependency is created to automatically recreate
+ // the cache when configuration changes.
+ Hooks::run( 'TranslatePostInitGroups', [ &$groups, &$deps, &$autoload ] );
+ // Register autoloaders for this request, both values modified by reference
+ self::appendAutoloader( $autoload, $wgAutoloadClasses );
+
+ $value = [
+ 'ts' => wfTimestamp( TS_MW ),
+ 'cc' => $groups,
+ 'autoload' => $autoload
+ ];
+ $wrapper = new DependencyWrapper( $value, $deps );
+ $wrapper->initialiseDeps();
+
+ return $wrapper; // save the new value to cache
+ };
+
+ $cache = $this->getCache();
+ /** @var DependencyWrapper $wrapper */
+ $wrapper = $cache->getWithSetCallback(
+ $cache->makeKey( 'translate-groups' ),
+ $cache::TTL_DAY,
+ $regenerator,
+ [
+ 'lockTSE' => 30, // avoid stampedes
+ 'touchedCallback' => function ( $value ) {
+ return ( $value instanceof DependencyWrapper && $value->isExpired() )
+ ? time() // treat value as if it just expired (for "lockTSE")
+ : null;
+ },
+ 'minAsOf' => $recache ? INF : $cache::MIN_TIMESTAMP_NONE, // "miss" on recache
+ ]
+ );
+
+ // B/C for "touchedCallback" param not existing
+ if ( version_compare( $wgVersion, '1.33', '<' ) && $wrapper->isExpired() ) {
+ $wrapper = $regenerator();
+ $cache->set( $cache->makeKey( 'translate-groups' ), $wrapper, $cache::TTL_DAY );
}
- $this->postInit( $groups );
+ $value = $wrapper->getValue();
+ self::appendAutoloader( $value['autoload'], $wgAutoloadClasses );
+
+ return $value;
}
/**
@@ -75,7 +123,9 @@ class MessageGroups {
* @since 2015.04
*/
public function recache() {
- $groups = $this->loadGroupDefinitions();
+ $value = $this->getCachedGroupDefinitions( 'recache' );
+ $groups = $value['cc'];
+
$this->postInit( $groups );
}
@@ -86,7 +136,10 @@ class MessageGroups {
*/
public static function clearCache() {
$self = self::singleton();
- $self->getCache()->delete( wfMemcKey( 'translate-groups' ) );
+
+ $cache = $self->getCache();
+ $cache->delete( $cache->makeKey( 'translate-groups' ), 1 );
+
$self->clearProcessCache();
}
@@ -104,11 +157,11 @@ class MessageGroups {
/**
* Returns a cacher object.
*
- * @return BagOStuff
+ * @return WANObjectCache
*/
protected function getCache() {
if ( $this->cache === null ) {
- return wfGetCache( CACHE_ANYTHING );
+ return MediaWikiServices::getInstance()->getMainWANObjectCache();
} else {
return $this->cache;
}
@@ -117,9 +170,9 @@ class MessageGroups {
/**
* Override cache, for example during tests.
*
- * @param BagOStuff|null $cache
+ * @param WANObjectCache|null $cache
*/
- public function setCache( BagOStuff $cache = null ) {
+ public function setCache( WANObjectCache $cache = null ) {
$this->cache = $cache;
}
@@ -142,35 +195,6 @@ class MessageGroups {
}
/**
- * This constructs the list of all groups from multiple different
- * sources. When possible, a cache dependency is created to automatically
- * recreate the cache when configuration changes.
- * @return array
- */
- protected function loadGroupDefinitions() {
- global $wgAutoloadClasses;
-
- $groups = $deps = $autoload = [];
-
- Hooks::run( 'TranslatePostInitGroups', [ &$groups, &$deps, &$autoload ] );
-
- // Register autoloaders for this request, both values modified by reference
- self::appendAutoloader( $autoload, $wgAutoloadClasses );
-
- $key = wfMemcKey( 'translate-groups' );
- $value = [
- 'ts' => wfTimestamp( TS_MW ),
- 'cc' => $groups,
- 'autoload' => $autoload,
- ];
-
- $wrapper = new DependencyWrapper( $value, $deps );
- $wrapper->storeToCache( $this->getCache(), $key, 60 * 60 * 2 );
-
- return $groups;
- }
-
- /**
* Hook: TranslatePostInitGroups
* @param array &$groups
* @param array &$deps
@@ -273,6 +297,10 @@ class MessageGroups {
public static function getCCGroups( array &$groups, array &$deps, array &$autoload ) {
global $wgTranslateCC;
+ if ( $wgTranslateCC !== [] ) {
+ wfDeprecated( '$wgTranslateCC' );
+ }
+
$deps[] = new GlobalDependency( 'wgTranslateCC' );
$groups += $wgTranslateCC;
@@ -340,6 +368,7 @@ class MessageGroups {
public static function labelExists( $name ) {
$groups = self::loadAggregateGroups();
$labels = array_map( function ( $g ) {
+ /** @var MessageGroup $g */
return $g->getLabel();
}, $groups );
return (bool)in_array( $name, $labels, true );
@@ -387,7 +416,6 @@ class MessageGroups {
/**
* Sets the message group priority.
- * @see MessageGroups::getPriority
*
* @param MessageGroup|string $group Message group
* @param string $priority Priority (empty string to unset)
@@ -538,7 +566,7 @@ class MessageGroups {
/**
* Constructor function.
- * @return MessageGroups
+ * @return self
*/
public static function singleton() {
static $instance;
@@ -739,8 +767,8 @@ class MessageGroups {
/**
* Sorts groups by label value
- * @param string $a
- * @param string $b
+ * @param MessageGroup $a
+ * @param MessageGroup $b
* @return int
*/
public static function groupLabelSort( $a, $b ) {
@@ -818,7 +846,7 @@ class MessageGroups {
/**
* Get all the aggregate messages groups defined in translate_metadata table.
*
- * @return array
+ * @return MessageGroup[]
*/
protected static function loadAggregateGroups() {
$dbw = TranslateUtils::getSafeReadDB();
diff --git a/MLEB/Translate/RELEASE-NOTES b/MLEB/Translate/RELEASE-NOTES
index cadb8699..d51836a9 100644
--- a/MLEB/Translate/RELEASE-NOTES
+++ b/MLEB/Translate/RELEASE-NOTES
@@ -1,11 +1,11 @@
-== Translate 2018.10 ==
-Released at 2018-10-29.
+== Translate 2019.01 ==
+Released at 2019-01-22.
=== Noteworthy changes ===
-* Show regular deletion form for pages that are never marked for translation.
-* Page translation languages can be displayed in the sidebar.
-* Various maintenance and stability updates.
-* Fixed an error that prevented Special:PageMigration from working.
-* TranslationStats' graphs now support high DPI displays using srcset.
-* Database usage optimizations (run update.php!).
-* Many special pages now look more consistent with other pages (OOUI).
+* $wgTranslateCC is deprecated now. It should be replaced by TranslatePostInitGroups hook. (T212836)
+* Updated MicrosoftWebService to new API. (T46679)
+* Added proofreading to (Language|MessageGroup)Stats. The statistics table also has updated styling. (T41279)
+* Fast proofreading is now possible with CTRL+Enter in the proofreading mode.
+* Skipping messages Special:Translate's page mode no longer sometimes marks the translation proofread. (T206748)
+* Translatable subpages are no longer moved when moving parent. This used to break those pages. Now they must be moved manually. (T114592)
+* Message group stats updating was broken in multiple ways. Please report if you still observe stale statistics. (T134252, T208521)
diff --git a/MLEB/Translate/Resources.php b/MLEB/Translate/Resources.php
index 923b8928..25f45ad7 100644
--- a/MLEB/Translate/Resources.php
+++ b/MLEB/Translate/Resources.php
@@ -7,7 +7,7 @@
* @license GPL-2.0-or-later
*/
-global $wgResourceModules;
+global $wgResourceModules, $wgVersion;
$resourcePaths = [
'localBasePath' => __DIR__,
@@ -61,9 +61,9 @@ $wgResourceModules['ext.translate.editor'] = [
'jquery.textchange',
'mediawiki.Uri',
'mediawiki.api',
- 'mediawiki.api.parse',
'mediawiki.jqueryMsg',
'mediawiki.language',
+ 'mediawiki.notify',
'mediawiki.user',
'mediawiki.util',
],
@@ -119,6 +119,11 @@ $wgResourceModules['ext.translate.editor'] = [
],
] + $resourcePaths;
+if ( version_compare( $wgVersion, '1.32', '<' ) ) {
+ // Support: MediaWiki 1.31 and earlier
+ $wgResourceModules['ext.translate.editor']['dependencies'][] = 'mediawiki.api.parse';
+}
+
$wgResourceModules['ext.translate.groupselector'] = [
'styles' => 'resources/css/ext.translate.groupselector.less',
'scripts' => 'resources/js/ext.translate.groupselector.js',
@@ -276,7 +281,6 @@ $wgResourceModules['ext.translate.special.importtranslations'] = [
$wgResourceModules['ext.translate.special.languagestats'] = [
'scripts' => 'resources/js/ext.translate.special.languagestats.js',
- 'styles' => 'resources/css/ext.translate.special.languagestats.css',
'messages' => [
'translate-langstats-collapse',
'translate-langstats-collapseall',
@@ -301,6 +305,7 @@ $wgResourceModules['ext.translate.special.managetranslatorsandbox'] = [
'mediawiki.api',
'mediawiki.jqueryMsg',
'mediawiki.language',
+ 'mediawiki.notify',
],
'messages' => [
'tsb-accept-all-button-label',
@@ -446,7 +451,6 @@ $wgResourceModules['ext.translate.special.translate'] = [
'jquery.uls.data',
'mediawiki.Uri',
'mediawiki.api',
- 'mediawiki.api.parse',
'mediawiki.jqueryMsg',
],
'messages' => [
@@ -459,6 +463,11 @@ $wgResourceModules['ext.translate.special.translate'] = [
],
] + $resourcePaths;
+if ( version_compare( $wgVersion, '1.32', '<' ) ) {
+ // Support: MediaWiki 1.31 and earlier
+ $wgResourceModules['ext.translate.special.translate']['dependencies'][] = 'mediawiki.api.parse';
+}
+
$wgResourceModules['ext.translate.special.translate.styles'] = [
'styles' => 'resources/css/ext.translate.special.translate.css',
] + $resourcePaths;
@@ -495,6 +504,11 @@ $wgResourceModules['ext.translate.statsbar'] = [
],
] + $resourcePaths;
+$wgResourceModules['ext.translate.statstable'] = [
+ 'styles' => 'resources/css/ext.translate.statstable.less',
+ 'targets' => [ 'desktop', 'mobile' ],
+] + $resourcePaths;
+
$wgResourceModules['ext.translate.storage'] = [
'scripts' => 'resources/js/ext.translate.storage.js',
] + $resourcePaths;
diff --git a/MLEB/Translate/Translate.php b/MLEB/Translate/Translate.php
index 8eb45a4c..330bca48 100644
--- a/MLEB/Translate/Translate.php
+++ b/MLEB/Translate/Translate.php
@@ -10,39 +10,23 @@ if ( !defined( 'MEDIAWIKI' ) ) {
*
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @copyright Copyright © 2006-2018, Niklas Laxström, Siebrand Mazeland
+ * @copyright Copyright © 2006-2019, Niklas Laxström, Siebrand Mazeland
* @license GPL-2.0-or-later
*/
/**
* Version number used in extension credits and in other places where needed.
*/
-define( 'TRANSLATE_VERSION', '2018-10-26' );
+define( 'TRANSLATE_VERSION', '2019-01-17' );
-/**
- * Extension credits properties.
- */
-$wgExtensionCredits['specialpage'][] = [
- 'path' => __FILE__,
- 'name' => 'Translate',
- 'namemsg' => 'translate-extensionname',
- 'version' => TRANSLATE_VERSION,
- 'author' => [
- 'Niklas Laxström',
- 'Santhosh Thottingal',
- 'Siebrand Mazeland'
- ],
- 'descriptionmsg' => 'translate-desc',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:Translate',
- 'license-name' => 'GPL-2.0-or-later',
-];
+// Load stuff already converted to extension registration.
+wfLoadExtension( 'Translate', __DIR__ . '/extension-wip.json' );
/**
* @cond file_level_code
* Setup class autoloading.
*/
-$dir = __DIR__;
-require_once "$dir/Autoload.php";
+require_once __DIR__ . '/Autoload.php';
/** @endcond */
/**
@@ -55,11 +39,10 @@ $wgMessagesDirs['Translate'] = __DIR__ . '/i18n/core';
$wgMessagesDirs['TranslateSearch'] = __DIR__ . '/i18n/search';
$wgMessagesDirs['TranslateSandbox'] = __DIR__ . '/i18n/sandbox';
$wgMessagesDirs['TranslateApi'] = __DIR__ . '/i18n/api';
-$wgExtensionMessagesFiles['TranslateAlias'] = "$dir/Translate.alias.php";
-$wgExtensionMessagesFiles['TranslateMagic'] = "$dir/Translate.i18n.magic.php";
+$wgExtensionMessagesFiles['TranslateAlias'] = __DIR__ . '/Translate.alias.php';
+$wgExtensionMessagesFiles['TranslateMagic'] = __DIR__ . '/Translate.i18n.magic.php';
// Register initialization code
-$wgExtensionFunctions[] = 'TranslateHooks::setupTranslate';
$wgHooks['CanonicalNamespaces'][] = 'TranslateHooks::setupNamespaces';
$wgHooks['ResourceLoaderTestModules'][] = 'TranslateHooks::onResourceLoaderTestModules';
$wgHooks['UnitTestsList'][] = 'TranslateHooks::setupUnitTests';
@@ -176,36 +159,7 @@ $wgHooks['AbuseFilter-filterAction'][] = 'TranslateHooks::onAbuseFilterFilterAct
$wgHooks['AbuseFilter-computeVariable'][] = 'TranslateHooks::onAbuseFilterComputeVariable';
$wgHooks['AbuseFilter-builder'][] = 'TranslateHooks::onAbuseFilterBuilder';
-// New rights
-// right-translate
-$wgAvailableRights[] = 'translate';
-// right-translate-import action-translate-import
-$wgAvailableRights[] = 'translate-import';
-// right-translate-manage action-translate-manage
-$wgAvailableRights[] = 'translate-manage';
-// right-translate-messagereview
-$wgAvailableRights[] = 'translate-messagereview';
-// right-translate-groupreview
-$wgAvailableRights[] = 'translate-groupreview';
-
-$wgGrantPermissions['editpage']['translate'] = true;
-
-// Logs. More logs are defined in TranslateHooks::setupTranslate
-// log-name-translationreview log-descriptionmsg-translationreview
-$wgLogTypes[] = 'translationreview';
-// logentry-translationreview-message logentry-translationreview-group
-$wgLogActionsHandlers['translationreview/message'] = 'TranslateLogFormatter';
-$wgLogActionsHandlers['translationreview/group'] = 'TranslateLogFormatter';
-
-// New jobs
-$wgJobClasses['MessageIndexRebuildJob'] = 'MessageIndexRebuildJob';
-$wgJobClasses['MessageUpdateJob'] = 'MessageUpdateJob';
-$wgJobClasses['MessageGroupStatesUpdaterJob'] = 'MessageGroupStatesUpdaterJob';
-$wgJobClasses['TTMServerMessageUpdateJob'] = 'TTMServerMessageUpdateJob';
-
-$wgParserTestFiles[] = "$dir/tests/parser/translateParserTests.txt";
-
-require "$dir/Resources.php";
+require __DIR__ . '/Resources.php';
/** @endcond */
@@ -279,7 +233,7 @@ $wgTranslateTranslationServices['TTMServer'] = [
'public' => false,
];
$wgTranslateTranslationServices['Microsoft'] = [
- 'url' => 'http://api.microsofttranslator.com/V2/Http.svc/Translate',
+ 'url' => 'https://api.cognitive.microsofttranslator.com',
'key' => null,
'timeout' => 3,
'type' => 'microsoft',
@@ -678,7 +632,3 @@ function wfAddNamespace( $id, $name, $constant = null ) {
}
/** @defgroup TranslateSpecialPage Special pages of Translate extension */
-
-if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) {
- require_once __DIR__ . '/vendor/autoload.php';
-}
diff --git a/MLEB/Translate/TranslateEditAddons.php b/MLEB/Translate/TranslateEditAddons.php
index d128ee6d..b8442c1b 100644
--- a/MLEB/Translate/TranslateEditAddons.php
+++ b/MLEB/Translate/TranslateEditAddons.php
@@ -193,11 +193,11 @@ class TranslateEditAddons {
* @param string $_1
* @param bool $_2
* @param int $flags
- * @param Revision $revision
+ * @param Revision|null $revision
* @return true
*/
- public static function onSave( WikiPage $wikiPage, $user, $content, $summary,
- $minor, $_1, $_2, $flags, $revision
+ public static function onSave( WikiPage $wikiPage, User $user, Content $content, $summary,
+ $minor, $_1, $_2, $flags, Revision $revision = null
) {
global $wgEnablePageTranslation;
@@ -227,11 +227,11 @@ class TranslateEditAddons {
$group = $handle->getGroup();
// Update translation stats - source language should always be up to date
if ( $handle->getCode() !== $group->getSourceLanguage() ) {
- MessageGroupStats::forItem(
- $group->getId(),
- $handle->getCode(),
- MessageGroupStats::FLAG_NO_CACHE
- );
+ // This will update in-process cache immediately, but the value is saved
+ // to the database in a deferred update. See MessageGroupStats::queueUpdates.
+ // In case an error happens before that, the stats may be stale, but that
+ // would be fixed by the next update or purge.
+ MessageGroupStats::clear( $handle );
}
MessageGroupStatesUpdaterJob::onChange( $handle );
diff --git a/MLEB/Translate/TranslateHooks.php b/MLEB/Translate/TranslateHooks.php
index 7f5b1b07..68b6856a 100644
--- a/MLEB/Translate/TranslateHooks.php
+++ b/MLEB/Translate/TranslateHooks.php
@@ -12,6 +12,17 @@
*/
class TranslateHooks {
/**
+ * Any user of this list should make sure that the tables
+ * actually exist, since they may be optional
+ *
+ * @var array
+ */
+ private static $userMergeTables = [
+ 'translate_stash' => 'ts_user',
+ 'translate_reviews' => 'trr_user',
+ ];
+
+ /**
* Hook: ResourceLoaderTestModules
* @param array &$modules
*/
@@ -301,7 +312,7 @@ class TranslateHooks {
* Register AbuseFilter variables provided by Translate.
* @param array &$builderValues
*/
- public static function onAbuseFilterBuilder( &$builderValues ) {
+ public static function onAbuseFilterBuilder( array &$builderValues ) {
// Uses: 'abusefilter-edit-builder-vars-translate-source-text'
$builderValues['vars']['translate_source_text'] = 'translate-source-text';
}
@@ -461,7 +472,7 @@ class TranslateHooks {
* @param Title $title
* @param Language &$pageLang
*/
- public static function onPageContentLanguage( Title $title, &$pageLang ) {
+ public static function onPageContentLanguage( Title $title, Language &$pageLang ) {
$handle = new MessageHandle( $title );
if ( $handle->isMessageNamespace() ) {
$pageLang = $handle->getEffectiveLanguage();
@@ -530,9 +541,9 @@ class TranslateHooks {
*/
public static function searchProfileForm(
SpecialSearch $search,
- /*string*/&$form,
- /*string*/$profile,
- /*string*/$term,
+ &$form,
+ $profile,
+ $term,
array $opts
) {
if ( $profile !== 'translation' ) {
@@ -597,7 +608,7 @@ class TranslateHooks {
*/
public static function searchProfileSetupEngine(
SpecialSearch $search,
- /*string*/$profile,
+ $profile,
SearchEngine $engine
) {
if ( $profile !== 'translation' ) {
@@ -698,17 +709,6 @@ class TranslateHooks {
}
/**
- * Any user of this list should make sure that the tables
- * actually exist, since they may be optional
- *
- * @var array
- */
- private static $userMergeTables = [
- 'translate_stash' => 'ts_user',
- 'translate_reviews' => 'trr_user',
- ];
-
- /**
* Hook: MergeAccountFromTo
* For UserMerge extension.
*
@@ -768,7 +768,7 @@ class TranslateHooks {
Title $title,
RecentChange $rc
) {
- if ( $rc->mAttribs['rc_log_type'] === 'translationreview' ) {
+ if ( $rc->getAttribute( 'rc_log_type' ) === 'translationreview' ) {
return false;
}
}
@@ -814,6 +814,10 @@ class TranslateHooks {
$parser->setFunctionHook( 'translation', 'TranslateHooks::translateRenderParserFunction' );
}
+ /**
+ * @param Parser $parser
+ * @return string
+ */
public static function translateRenderParserFunction( Parser $parser ) {
$pageTitle = $parser->getTitle();
@@ -825,6 +829,9 @@ class TranslateHooks {
return '';
}
+ /**
+ * @param ResourceLoader $resourceLoader
+ */
public static function onResourceLoaderRegisterModules( ResourceLoader $resourceLoader ) {
$modules = [];
$modules['ext.translate.recentgroups'] = [
diff --git a/MLEB/Translate/TranslateUtils.php b/MLEB/Translate/TranslateUtils.php
index 4b51ed06..0ee7a349 100644
--- a/MLEB/Translate/TranslateUtils.php
+++ b/MLEB/Translate/TranslateUtils.php
@@ -253,11 +253,9 @@ class TranslateUtils {
public static function getLanguageNames( $code ) {
$languageNames = Language::fetchLanguageNames( $code );
- // Remove languages with deprecated codes (bug T37475)
- global $wgDummyLanguageCodes;
-
- foreach ( array_keys( $wgDummyLanguageCodes ) as $dummyLanguageCode ) {
- unset( $languageNames[$dummyLanguageCode] );
+ $deprecatedCodes = LanguageCode::getDeprecatedCodeMapping();
+ foreach ( array_keys( $deprecatedCodes ) as $deprecatedCode ) {
+ unset( $languageNames[ $deprecatedCode ] );
}
Hooks::run( 'TranslateSupportedLanguages', [ &$languageNames, $code ] );
@@ -493,7 +491,7 @@ class TranslateUtils {
* @param string $text
* @return array
*/
- public static function resolveSpecialPageAlias( $text ) {
+ public static function resolveSpecialPageAlias( $text ) : array {
if ( method_exists( MediaWikiServices::class, 'getSpecialPageFactory' ) ) {
return MediaWikiServices::getInstance()->getSpecialPageFactory()->resolveAlias( $text );
}
@@ -533,4 +531,64 @@ class TranslateUtils {
);
}
}
+
+ /**
+ * Compatibility for pre-1.32, before OutputPage::wrapWikiTextAsInterface()
+ *
+ * @see OutputPage::wrapWikiTextAsInterface
+ * @param OutputPage $out
+ * @param string $wrapperClass The class attribute value for the <div>
+ * wrapper in the output HTML
+ * @param string $text The wikitext in the user interface language to
+ * add to the output.
+ */
+ public static function wrapWikiTextAsInterface( OutputPage $out, $wrapperClass, $text ) {
+ if ( is_callable( [ $out, 'wrapWikiTextAsInterface' ] ) ) {
+ $out->wrapWikiTextAsInterface( $wrapperClass, $text );
+ } else {
+ // wfDeprecated( 'use OutputPage::wrapWikiTextAsInterface', '1.32')
+ if ( !$wrapperClass ) {
+ $wrapperClass = '';
+ }
+ $out->addHTML( Html::openElement(
+ 'div', [ 'class' => $wrapperClass ]
+ ) );
+ self::addWikiTextAsInterface( $out, $text );
+ $out->addHtml( Html::closeElement(
+ 'div'
+ ) );
+ }
+ }
+
+ /**
+ * Compatibility for pre-1.33, before OutputPage::parseAsInterface()
+ *
+ * @see OutputPage::parseAsInterface
+ * @param OutputPage $out
+ * @param string $text The wikitext in the user interface language to
+ * be parsed
+ * @return string HTML
+ */
+ public static function parseAsInterface( OutputPage $out, $text ) {
+ if ( is_callable( [ $out, 'parseAsInterface' ] ) ) {
+ return $out->parseAsInterface( $text );
+ } else {
+ // wfDeprecated( 'use OutputPage::parseAsInterface', '1.33')
+ return $out->parse( $text, /*linestart*/true, /*interface*/true );
+ }
+ }
+
+ public static function parseInlineAsInterface( OutputPage $out, $text ) {
+ if ( is_callable( [ $out, 'parseInlineAsInterface' ] ) ) {
+ return $out->parseInlineAsInterface( $text );
+ } else {
+ // wfDeprecated( 'use OutputPage::parseInlineAsInterface', '1.33')
+ // The block wrapper stripping was slightly broken before 1.33
+ // as well.
+ $contents = $out->parse( $text, /*linestart*/true, /*interface*/true );
+ // Remove whatever block element wrapup the parser likes to add
+ $contents = preg_replace( '~^<([a-z]+)>(.*)</\1>$~us', '\2', $contents );
+ return $contents;
+ }
+ }
}
diff --git a/MLEB/Translate/data/plural-gettext.txt b/MLEB/Translate/data/plural-gettext.txt
index f0561dc1..e3800aea 100644
--- a/MLEB/Translate/data/plural-gettext.txt
+++ b/MLEB/Translate/data/plural-gettext.txt
@@ -104,6 +104,8 @@ sl nplurals=4; plural=(n%100 == 1) ? 0 : ( (n%100 == 2) ? 1 : ( (n%100 == 3 || n
so nplurals=2; plural=(n != 1);
sq nplurals=2; plural=(n != 1);
sr nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+sr-ec nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+sr-el nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
su nplurals=1; plural=0;
sv nplurals=2; plural=(n != 1);
sw nplurals=2; plural=(n != 1);
diff --git a/MLEB/Translate/extension-wip.json b/MLEB/Translate/extension-wip.json
new file mode 100644
index 00000000..b8c5a723
--- /dev/null
+++ b/MLEB/Translate/extension-wip.json
@@ -0,0 +1,49 @@
+{
+ "name": "Translate",
+ "type": "specialpage",
+ "author": [
+ "Niklas Laxström",
+ "Santhosh Thottingal",
+ "Siebrand Mazeland",
+ "..."
+ ],
+ "version": "2018-11-05",
+ "url": "https://www.mediawiki.org/wiki/Extension:Translate",
+ "descriptionmsg": "translate-desc",
+ "license-name": "GPL-2.0-or-later",
+ "requires": {
+ "MediaWiki": ">= 1.30.0"
+ },
+ "callback": "TranslateHooks::setupTranslate",
+ "load_composer_autoloader": true,
+ "manifest_version": 2,
+ "AutoloadClasses": {
+ "TranslateHooks": "TranslateHooks.php"
+ },
+ "JobClasses": {
+ "MessageGroupStatesUpdaterJob": "MessageGroupStatesUpdaterJob",
+ "MessageGroupStatsRebuildJob": "MessageGroupStatsRebuildJob",
+ "MessageIndexRebuildJob": "MessageIndexRebuildJob",
+ "MessageUpdateJob": "MessageUpdateJob",
+ "TTMServerMessageUpdateJob": "TTMServerMessageUpdateJob"
+ },
+ "LogTypes": [
+ "translationreview"
+ ],
+ "LogActionsHandlers": {
+ "translationreview/message": "TranslateLogFormatter",
+ "translationreview/group": "TranslateLogFormatter"
+ },
+ "AvailableRights": [
+ "translate",
+ "translate-import",
+ "translate-manage",
+ "translate-messagereview",
+ "translate-groupreview"
+ ],
+ "GrantPermissions": {
+ "editpage": {
+ "translate": true
+ }
+ }
+}
diff --git a/MLEB/Translate/ffs/GettextFFS.php b/MLEB/Translate/ffs/GettextFFS.php
index 7176e953..f4ba0720 100644
--- a/MLEB/Translate/ffs/GettextFFS.php
+++ b/MLEB/Translate/ffs/GettextFFS.php
@@ -540,7 +540,7 @@ PHP;
$header .= '#, ' . implode( ', ', array_unique( $flags ) ) . "\n";
}
- $output = $header ? $header : "#\n";
+ $output = $header ?: "#\n";
$output .= $content . "\n";
return $output;
diff --git a/MLEB/Translate/ffs/IniFFS.php b/MLEB/Translate/ffs/IniFFS.php
index ee3c2427..42af1d4e 100644
--- a/MLEB/Translate/ffs/IniFFS.php
+++ b/MLEB/Translate/ffs/IniFFS.php
@@ -24,7 +24,7 @@ class IniFFS extends SimpleFFS {
$group = MessageGroupBase::factory( $conf );
MediaWiki\suppressWarnings();
- $ffs = new IniFFS( $group );
+ $ffs = new self( $group );
$parsed = $ffs->readFromVariable( $data );
MediaWiki\restoreWarnings();
diff --git a/MLEB/Translate/ffs/JavaFFS.php b/MLEB/Translate/ffs/JavaFFS.php
index 87d9b1bd..45d3d85f 100644
--- a/MLEB/Translate/ffs/JavaFFS.php
+++ b/MLEB/Translate/ffs/JavaFFS.php
@@ -159,7 +159,7 @@ class JavaFFS extends SimpleFFS implements MetaYamlSchemaExtender {
* Parses non-empty properties file row to key and value.
* @param string $line
* @param string $sep
- * @return string
+ * @return string[]
* @since 2012-03-28
*/
public static function readRow( $line, $sep ) {
diff --git a/MLEB/Translate/i18n/api/be-tarask.json b/MLEB/Translate/i18n/api/be-tarask.json
new file mode 100644
index 00000000..2c481705
--- /dev/null
+++ b/MLEB/Translate/i18n/api/be-tarask.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Renessaince"
+ ]
+ },
+ "apihelp-translationreview-description": "Пазначыць пераклады як правераныя.",
+ "apihelp-translationreview-summary": "Пазначыць пераклады як правераныя."
+}
diff --git a/MLEB/Translate/i18n/api/da.json b/MLEB/Translate/i18n/api/da.json
index 133437bb..67465d22 100644
--- a/MLEB/Translate/i18n/api/da.json
+++ b/MLEB/Translate/i18n/api/da.json
@@ -4,6 +4,7 @@
"Saederup92"
]
},
+ "apihelp-aggregategroups-param-group": "Beskedgruppe-ID.",
"apihelp-groupreview-param-group": "Beskedgruppe.",
"apihelp-groupreview-param-language": "Sprogkode.",
"apihelp-query+languagestats-param-language": "Sprogkode.",
@@ -11,10 +12,13 @@
"apihelp-query+messagecollection-param-language": "Sprogkode.",
"apihelp-query+messagecollection-example-1": "Liste over understøttede sprog",
"apihelp-query+messagegroups-example-1": "Vis beskedgrupper",
+ "apihelp-query+messagegroupstats-param-group": "Beskedgruppe-ID.",
+ "apihelp-query+messagetranslations-param-title": "Den fulde titel af en kendt besked.",
"apihelp-translatesandbox-param-username": "Brugernavn når ny bruger oprettes.",
"apihelp-translatesandbox-param-password": "Kodeord når ny bruger oprettes.",
"apihelp-translationaids-param-title": "Den fulde titel af en kendt besked.",
"apihelp-translationstash-param-subaction": "Handling.",
+ "apihelp-translationstash-param-metadata": "JSON-objekt.",
"apihelp-searchtranslations-description": "Søg i oversættelser.",
"apihelp-searchtranslations-summary": "Søg i oversættelser.",
"apihelp-searchtranslations-param-query": "Strengen der skal søges efter.",
diff --git a/MLEB/Translate/i18n/api/de.json b/MLEB/Translate/i18n/api/de.json
index 84cb0129..beeb6fa7 100644
--- a/MLEB/Translate/i18n/api/de.json
+++ b/MLEB/Translate/i18n/api/de.json
@@ -18,7 +18,9 @@
"apihelp-groupreview-param-language": "Sprachcode.",
"apihelp-groupreview-param-state": "Der neue Status für die Gruppe.",
"apihelp-query+languagestats-description": "Ruft Sprachstatistiken ab.",
+ "apihelp-query+languagestats-summary": "Ruft Sprachstatistiken ab.",
"apihelp-query+languagestats-param-language": "Sprachcode.",
+ "apihelp-query+languagestats-example-1": "Listet Übersetzungsvervollständigungsstatistiken für Finnisch auf.",
"apihelp-query+messagecollection-description": "Ruft die Nachrichtensammlung über Übersetzungen ab.",
"apihelp-query+messagecollection-param-group": "Nachrichtengruppe.",
"apihelp-query+messagecollection-param-language": "Sprachcode.",
@@ -28,21 +30,25 @@
"apihelp-query+messagecollection-example-2": "Listet nicht-optionale Nachrichtendefinitionen für die Gruppe „page-Example“ auf",
"apihelp-query+messagecollection-example-3": "Listet optionale Nachrichten in Finnisch mit Markierungen für die Gruppe „page-Example“ auf",
"apihelp-query+messagecollection-example-4": "Weitere Informationen über die aktuellsten Übersetzungsversionen für die Gruppe „page-Example“",
+ "apihelp-query+messagegroups-summary": "Gibt Informationen über Nachrichtengruppen zurück.",
"apihelp-query+messagegroups-param-iconsize": "Bevorzugte Größe des Rastergruppensymbols.",
"apihelp-query+messagegroups-example-1": "Nachrichtengruppen anzeigen",
"apihelp-query+messagegroupstats-description": "Ruft Statistiken zu Nachrichtengruppen ab.",
+ "apihelp-query+messagegroupstats-summary": "Ruft Statistiken zu Nachrichtengruppen ab.",
"apihelp-query+messagegroupstats-param-group": "Nachrichtengruppenkennung.",
"apihelp-query+messagegroupstats-example-1": "Liste von Übersetzungs-Vollständigkeits-Statistiken für die Gruppe „page-Example“",
"apihelp-query+messagetranslations-description": "Ruft alle Übersetzungen für eine einzelne Nachricht ab.",
"apihelp-query+messagetranslations-param-title": "Vollständiger Titel einer bekannten Nachricht.",
"apihelp-query+messagetranslations-example-1": "Liste der Übersetzungen im Wiki für „MediaWiki:January“",
"apihelp-translatesandbox-description": "Registriert und verwaltet Spielwiesenbenutzer.",
+ "apihelp-translatesandbox-summary": "Registriert und verwaltet Spielwiesen-Benutzer.",
"apihelp-translatesandbox-param-do": "Was ist zu tun?",
"apihelp-translatesandbox-param-userid": "Kennungen der zu verwaltenden Benutzer. 0 für Erstellungen verwenden.",
"apihelp-translatesandbox-param-username": "Benutzername beim Erstellen des Benutzers.",
"apihelp-translatesandbox-param-password": "Passwort beim Erstellen des Benutzers.",
"apihelp-translatesandbox-param-email": "E-Mail beim Erstellen des Benutzers.",
"apihelp-translationaids-description": "Ruft alle Übersetzungshilfen ab.",
+ "apihelp-translationaids-summary": "Ruft alle Übersetzungshilfen ab.",
"apihelp-translationaids-param-title": "Vollständiger Titel einer bekannten Nachricht.",
"apihelp-translationaids-param-prop": "Die einzuschließenden Übersetzungshelfer.",
"apihelp-translationaids-example-1": "Hilfen für [[MediaWiki:January/fi]] anzeigen",
@@ -50,6 +56,7 @@
"apihelp-translationreview-param-revision": "Die zu überprüfende Versionsnummer.",
"apihelp-translationreview-example-1": "Überprüft die Version 1",
"apihelp-translationstash-description": "Fügt Übersetzungen dem Speicher hinzu.",
+ "apihelp-translationstash-summary": "Fügt Übersetzungen dem Speicher hinzu.",
"apihelp-translationstash-param-subaction": "Aktion.",
"apihelp-translationstash-param-title": "Titel der Übersetzungseinheitsseite.",
"apihelp-translationstash-param-translation": "Übersetzung erstellt vom Benutzer.",
@@ -63,6 +70,7 @@
"apihelp-ttmserver-param-text": "Der Text, für den Vorschläge gefunden werden sollen.",
"apihelp-ttmserver-example-1": "Erhalte Vorschläge für die Übersetzung von \"Help\" aus dem Englischen ins Finnische",
"apihelp-searchtranslations-description": "Übersetzungen suchen.",
+ "apihelp-searchtranslations-summary": "Sucht nach Übersetzungen.",
"apihelp-searchtranslations-param-service": "Welcher der verfügbaren Übersetzungsdienste genutzt werden sollte.",
"apihelp-searchtranslations-param-query": "Die Zeichenfolge, nach der gesucht werden soll.",
"apihelp-searchtranslations-param-sourcelanguage": "Der Sprachcode des Quelltextes.",
diff --git a/MLEB/Translate/i18n/api/es.json b/MLEB/Translate/i18n/api/es.json
index 879c404e..c2b27a64 100644
--- a/MLEB/Translate/i18n/api/es.json
+++ b/MLEB/Translate/i18n/api/es.json
@@ -5,7 +5,8 @@
"Fitoschido",
"Csbotero",
"Lemondoge",
- "Dgstranz"
+ "Dgstranz",
+ "Tiberius1701"
]
},
"apihelp-aggregategroups-description": "Administrar grupos de mensajes agregados.\n\nPuedes agregar y quitar grupos de mensajes agregados, y asociar o disociar a ellos grupos de mensajes (uno a la vez).",
@@ -21,6 +22,7 @@
"apihelp-groupreview-param-state": "El estado nuevo para el grupo.",
"apihelp-groupreview-example-1": "Marcar como leído el estado de la traducción al alemán del grupo de mensajes \"group-Example\"",
"apihelp-query+languagestats-description": "Consultar estadísticas de idioma.",
+ "apihelp-query+languagestats-summary": "Consultar las estadísticas del idioma.",
"apihelp-query+languagestats-param-language": "Código de idioma.",
"apihelp-query+languagestats-example-1": "Lista de estadísticas de traducciones completadas en finés.",
"apihelp-query+messagecollection-description": "Consultar a MessageCollection acerca de las traducciones.",
@@ -36,9 +38,11 @@
"apihelp-query+messagegroups-param-root": "Cuando se utiliza el formato de árbol, en lugar de partir de nivel superior empezar desde el mensaje del grupo, que debe ser un agregado de mensaje de grupo. Cuando se utiliza plano formato de sólo el grupo especificado se devuelve.",
"apihelp-query+messagegroups-example-1": "Mostrar grupos de mensajes",
"apihelp-query+messagegroupstats-description": "Consultar estadísticas del grupo de mensajes.",
+ "apihelp-query+messagegroupstats-summary": "Consultar las estadísticas del grupo de mensajes.",
"apihelp-query+messagegroupstats-param-group": "Identificador del grupo de mensajes.",
"apihelp-query+messagegroupstats-example-1": "Lista de estadísticas de finalización de traducciones para el grupo \"page-Example\"",
"apihelp-query+messagetranslations-description": "Consultar todas las traducciones para un único mensaje.",
+ "apihelp-query+messagetranslations-summary": "Consulta todas las traducciones de un solo mensaje.",
"apihelp-query+messagetranslations-param-title": "Título completo de un mensaje conocido.",
"apihelp-query+messagetranslations-example-1": "Lista de traducciones en el wiki de \"MediaWiki:January\"",
"apihelp-translatesandbox-description": "Registrar y gestionar usuarios aislados (en \"sandbox\").",
@@ -48,6 +52,7 @@
"apihelp-translatesandbox-param-password": "Contraseña al crear el usuario.",
"apihelp-translatesandbox-param-email": "Correo electrónico al crear el usuario.",
"apihelp-translationaids-description": "Consultar todas las asistencias de traducciones.",
+ "apihelp-translationaids-summary": "Consultar todas las ayudas de traducción.",
"apihelp-translationaids-param-title": "Título completo de un mensaje conocido.",
"apihelp-translationaids-param-group": "Grupo de mensajes al que pertenece el mensaje. Si está vacío se usa el grupo primario.",
"apihelp-translationaids-param-prop": "Cuáles asistentes de traducción incluir.",
diff --git a/MLEB/Translate/i18n/api/fi.json b/MLEB/Translate/i18n/api/fi.json
index 25d9887a..53fb1c69 100644
--- a/MLEB/Translate/i18n/api/fi.json
+++ b/MLEB/Translate/i18n/api/fi.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Nike",
- "Pyscowicz"
+ "Pyscowicz",
+ "Valtlait"
]
},
"apihelp-aggregategroups-param-group": "Viestiryhmän tunnus.",
@@ -13,7 +14,7 @@
"apihelp-groupreview-param-group": "Viestiryhmä.",
"apihelp-groupreview-param-language": "Kielikoodi.",
"apihelp-groupreview-param-state": "Viestiryhmän uusi tila.",
- "apihelp-groupreview-example-1": "Merkitsee saksankielisen käännöksen viestiryhmälle \"group-Example\" valmiiksi",
+ "apihelp-groupreview-example-1": "Merkitsee saksankielisen käännöksen viestiryhmälle ”group-Example” valmiiksi",
"apihelp-query+languagestats-description": "Hakee kielitilastoja.",
"apihelp-query+languagestats-param-language": "Kielikoodi.",
"apihelp-query+languagestats-example-1": "Luettelo käännösten kattavuustilastoista suomeksi",
diff --git a/MLEB/Translate/i18n/api/hr.json b/MLEB/Translate/i18n/api/hr.json
new file mode 100644
index 00000000..832fac96
--- /dev/null
+++ b/MLEB/Translate/i18n/api/hr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bugoslav"
+ ]
+ },
+ "apierror-translate-language-disabled-source": "Izvorni jezik ove grupe je $1. Molimo Vas, izaberite drugi jezik na koji želite prevoditi."
+}
diff --git a/MLEB/Translate/i18n/api/ja.json b/MLEB/Translate/i18n/api/ja.json
index ff4bc40c..ee3393f2 100644
--- a/MLEB/Translate/i18n/api/ja.json
+++ b/MLEB/Translate/i18n/api/ja.json
@@ -1,10 +1,11 @@
{
"@metadata": {
"authors": [
- "Sujiniku"
+ "Sujiniku",
+ "Shirayuki"
]
},
- "apihelp-aggregategroups-param-group": "メッセージグループID",
- "apihelp-query+messagegroupstats-param-group": "メッセージグループID。",
+ "apihelp-aggregategroups-param-group": "メッセージ群の ID。",
+ "apihelp-query+messagegroupstats-param-group": "メッセージ群の ID。",
"apihelp-searchtranslations-param-match": "任意/すべて の検索ワードのマッチ"
}
diff --git a/MLEB/Translate/i18n/api/kjp.json b/MLEB/Translate/i18n/api/kjp.json
new file mode 100644
index 00000000..c35733e8
--- /dev/null
+++ b/MLEB/Translate/i18n/api/kjp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "apihelp-query+messagecollection-param-group": "ပ်ုယုံ့ဆ်ုပြိုင့်ကုံလွာဲ"
+}
diff --git a/MLEB/Translate/i18n/api/nl.json b/MLEB/Translate/i18n/api/nl.json
index 3f101926..9b67cc30 100644
--- a/MLEB/Translate/i18n/api/nl.json
+++ b/MLEB/Translate/i18n/api/nl.json
@@ -6,9 +6,14 @@
"Robin0van0der0vliet",
"Mainframe98",
"Robin van der Vliet",
- "Mar(c)"
+ "Mar(c)",
+ "Elroy"
]
},
+ "apihelp-aggregategroups-description": "Samengestelde berichtgroepen beheren.\n\nJe kunt samengestelde berichtgroepen toevoegen en verwijderen. Verder kun je berichtgroepen eraan koppelen of ontkoppelen (één per keer).",
+ "apihelp-aggregategroups-summary": "Samengestelde berichtgroepen beheren.",
+ "apihelp-aggregategroups-param-group": "Berichtgroeps-id.",
+ "apihelp-aggregategroups-example-1": "Groep koppelen",
"apihelp-groupreview-param-group": "Berichtgroep.",
"apihelp-groupreview-param-language": "Taalcode.",
"apihelp-query+languagestats-param-language": "Taalcode.",
@@ -18,13 +23,18 @@
"apihelp-query+messagecollection-example-2": "Lijst met niet-optionele berichtdefinities voor de groep \"page-Example\"",
"apihelp-query+messagecollection-example-3": "Lijst met optionele berichten in het Fins met labels voor de groep \"page-Example\"",
"apihelp-query+messagecollection-example-4": "Meer informatie over de nieuwste vertaalde versies voor de groep \"page-Example\"",
+ "apihelp-query+messagegroups-example-1": "Berichtgroepen weergeven",
"apihelp-query+messagegroupstats-example-1": "Lijst met vertalingsstatistieken voor de groep \"page-Example\"",
"apihelp-query+messagetranslations-example-1": "Lijst met vertalingen in de wiki voor \"MediaWiki:January\"",
"apihelp-translationstash-param-subaction": "Handeling.",
"apihelp-translationstash-param-metadata": "JSON-object.",
"apihelp-searchtranslations-description": "Vertalingen doorzoeken.",
"apihelp-searchtranslations-summary": "Vertalingen doorzoeken.",
+ "apihelp-translationcheck-summary": "Vertalingen controleren.",
+ "apihelp-translationcheck-param-translation": "Te controleren vertaling.",
+ "apierror-translate-duplicateaggregategroup": "Berichtgroep bestaat al",
"apierror-translate-invalidgroup": "Groep bestaat niet of is ongeldig",
+ "apierror-translate-invalidupdate": "Ongeldige vernieuwing",
"apierror-translate-language-disabled": "Vertalen naar deze taal is uitgeschakeld",
"apierror-translate-sandbox-invalidppassword": "Ongeldig wachtwoord",
"apierror-translate-unknownmessage": "Onbekend bericht"
diff --git a/MLEB/Translate/i18n/api/pt-br.json b/MLEB/Translate/i18n/api/pt-br.json
index db508a72..51f7d864 100644
--- a/MLEB/Translate/i18n/api/pt-br.json
+++ b/MLEB/Translate/i18n/api/pt-br.json
@@ -4,7 +4,8 @@
"Mordecool",
"Dianakc",
"Felipe L. Ewald",
- "Eduardo Addad de Oliveira"
+ "Eduardo Addad de Oliveira",
+ "TheEduGobi"
]
},
"apihelp-aggregategroups-description": "Gerencie grupos de mensagens agregadas.\n\nVocê pode adicionar e remover grupos de mensagens agregadas e associar ou dissociar grupos de mensagens deles (um de cada vez).",
@@ -91,8 +92,8 @@
"apihelp-ttmserver-param-targetlanguage": "O código de idioma da sugestão.",
"apihelp-ttmserver-param-text": "O texto para o qual encontrar sugestões.",
"apihelp-ttmserver-example-1": "Obtenha sugestões para traduzir \"Help\" do inglês para o finlandês",
- "apihelp-searchtranslations-description": "Pesquisa traduções.",
- "apihelp-searchtranslations-summary": "Pesquisa traduções.",
+ "apihelp-searchtranslations-description": "Pesquisar traduções.",
+ "apihelp-searchtranslations-summary": "Pesquisar traduções.",
"apihelp-searchtranslations-param-service": "Qual dos serviços de tradução disponíveis para usar.",
"apihelp-searchtranslations-param-query": "A string pela qual procurar.",
"apihelp-searchtranslations-param-sourcelanguage": "O código de idioma do texto original.",
diff --git a/MLEB/Translate/i18n/api/roa-tara.json b/MLEB/Translate/i18n/api/roa-tara.json
index 1a1bd07c..918e4d37 100644
--- a/MLEB/Translate/i18n/api/roa-tara.json
+++ b/MLEB/Translate/i18n/api/roa-tara.json
@@ -33,6 +33,8 @@
"apihelp-query+messagegroupstats-param-group": "ID d'u gruppe de messàgge.",
"apihelp-query+messagegroupstats-example-1": "Elenghe de le statisteche de combletamende de le traduziune pu gruppe \"page-Example\"",
"apihelp-query+messagetranslations-description": "'Nderroghe tutte le traduziune pe 'nu messàgge singole.",
+ "apihelp-query+messagetranslations-param-title": "Titole comblete de 'nu messàgge canusciute.",
+ "apihelp-translatesandbox-param-do": "Ce ste da fà.",
"apihelp-translatesandbox-param-email": "Email quanne stoche a ccreje 'n'utende.",
"apihelp-translationaids-description": "'Nderroghe tutte le aijute de traduziune.",
"apihelp-translationaids-summary": "'Nderroghe tutte le aijute de traduziune.",
diff --git a/MLEB/Translate/i18n/api/sr-el.json b/MLEB/Translate/i18n/api/sr-el.json
new file mode 100644
index 00000000..8e278e9a
--- /dev/null
+++ b/MLEB/Translate/i18n/api/sr-el.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "apierror-translate-sandbox-invalidppassword": "Nevalidna lozinka"
+}
diff --git a/MLEB/Translate/i18n/api/yi.json b/MLEB/Translate/i18n/api/yi.json
new file mode 100644
index 00000000..d3d6ccea
--- /dev/null
+++ b/MLEB/Translate/i18n/api/yi.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "apihelp-groupreview-param-group": "מעלדונג גרופע",
+ "apihelp-groupreview-param-language": "שפראַך קאד.",
+ "apihelp-query+languagestats-param-language": "שפראַך קאד.",
+ "apihelp-translatesandbox-param-do": "וואס צו טון.",
+ "apihelp-searchtranslations-example-1": "ווייזן איבערזעצונגען פאר דער שפראך.",
+ "apierror-translate-sandbox-invalidppassword": "אומגילטיק פאסווארט"
+}
diff --git a/MLEB/Translate/i18n/api/yue.json b/MLEB/Translate/i18n/api/yue.json
new file mode 100644
index 00000000..882bddd0
--- /dev/null
+++ b/MLEB/Translate/i18n/api/yue.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hello903hello"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "訊息組ID。",
+ "apihelp-groupreview-param-group": "訊息組。",
+ "apihelp-query+messagecollection-param-group": "訊息組。",
+ "apihelp-translatesandbox-param-do": "要做乜。",
+ "apihelp-translationreview-example-1": "複審修訂版本1",
+ "apihelp-translationcheck-summary": "驗證翻譯。"
+}
diff --git a/MLEB/Translate/i18n/core/ace.json b/MLEB/Translate/i18n/core/ace.json
index 57e1aec8..7c9a2d0e 100644
--- a/MLEB/Translate/i18n/core/ace.json
+++ b/MLEB/Translate/i18n/core/ace.json
@@ -31,14 +31,15 @@
"translate-next": "Laman u keue",
"translate-prev": "Laman u likôt",
"translate-page-description-legend": "Hareutoe bhah kawan nyoe",
- "translate-page-edit": "andam",
+ "translate-page-edit": "peusaneut",
"translate-optional": "(teunamah)",
"translate-ignored": "(hana peuhiröe)",
- "translate-edit-title": "Andam \"$1\"",
+ "translate-edit-title": "Peusaneut \"$1\"",
"translate-edit-definition": "Hareutoe peusan",
"translate-edit-translation": "Teujeumah",
"translate-edit-contribute": "beuneuri",
"translate-edit-information": "Hareutoe bhah peusan ($1)",
"translate-edit-in-other-languages": "Peusan bak bahsa la'én",
+ "translate-manage-import-new": "Peusan barô $1",
"translate-documentation-language": "Dokumentasi peusan"
}
diff --git a/MLEB/Translate/i18n/core/ar.json b/MLEB/Translate/i18n/core/ar.json
index 0ec771f6..acc1888e 100644
--- a/MLEB/Translate/i18n/core/ar.json
+++ b/MLEB/Translate/i18n/core/ar.json
@@ -22,6 +22,7 @@
]
},
"translate": "ترجمة",
+ "translate-extensionname": "ترجمة",
"translate-desc": "[[Special:Translate|صفحة خاصة]] لترجمة الميدياويكي وما بعده",
"translate-fuzzybot-desc": "هذا حساب نظام خاص يستخدمه [https://www.mediawiki.org/wiki/Extension:Translate امتداد ترجمة] ميدياويكي ومستخدم للحفاظ على الترجمات،\nهذا الحساب جزء من برنامج ميدياويكي وليس مملوك لأي مستخدم.",
"translate-taskui-export-to-file": "صدر في صيغة أصلية",
@@ -189,6 +190,7 @@
"translate-untranslated": "غير مترجمة",
"translate-percentage-complete": "مكتملة",
"translate-percentage-fuzzy": "غير محدثة",
+ "translate-percentage-proofread": "مراجعة",
"translate-languagestats-overall": "جميع مجموعات الرسائل معا",
"translate-ls-submit": "أظهر الإحصاءات",
"translate-ls-column-group": "مجموعة الرسائل",
@@ -320,7 +322,7 @@
"tux-editor-cancel-button-label": "ألغ",
"tux-editor-confirm-button-label": "أكد الترجمة",
"tux-editor-proofread-button-label": "قبول الترجمة",
- "tux-editor-shortcut-info": "اضغط \"$1\" للحفظ أو \"$2\" للمتابعة للرسالة القادمة أو \"$4\" لتوفير ملخص أو \"$3\" للاختصارات الأخرى.",
+ "tux-editor-shortcut-info": "اضغط على \"$1\" للتأكيد والانتقال إلى الرسالة التالية، أو \"$2\" للتخطي، أو \"$4\" لتقديم ملخص أو اضغط على \"$3\" لمشاهدة اختصارات أخرى.",
"tux-editor-edit-desc": "عدل التوثيق",
"tux-editor-add-desc": "إضافة توثيق",
"tux-editor-suggestions-title": "اقتراحات",
diff --git a/MLEB/Translate/i18n/core/avk.json b/MLEB/Translate/i18n/core/avk.json
new file mode 100644
index 00000000..74bad8dd
--- /dev/null
+++ b/MLEB/Translate/i18n/core/avk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Axel xadolik"
+ ]
+ },
+ "translate-documentation-language": "Staksafa valdigara"
+}
diff --git a/MLEB/Translate/i18n/core/be-tarask.json b/MLEB/Translate/i18n/core/be-tarask.json
index 41a75911..6eda0d56 100644
--- a/MLEB/Translate/i18n/core/be-tarask.json
+++ b/MLEB/Translate/i18n/core/be-tarask.json
@@ -292,7 +292,7 @@
"tux-editor-skip-button-label": "Да наступнага",
"tux-editor-cancel-button-label": "Скасаваць",
"tux-editor-confirm-button-label": "Зацьвердзіць пераклад",
- "tux-editor-shortcut-info": "Націсьніце «$1», каб захаваць, «$2», каб прапусьціць і перайсьці да наступнага паведамленьня, «$4», каб увесьці апісаньне ці «$3», каб пабачыць іншыя скароты.",
+ "tux-editor-shortcut-info": "Націсьніце «$1», каб пацьвердзіць і перайсьці да наступнага паведамленьня, «$2», каб прапусьціць, «$4», каб увесьці апісаньне ці ўтрымлівайце «$3», каб пабачыць іншыя скароты.",
"tux-editor-edit-desc": "Зьмяніць дакумэнтацыю",
"tux-editor-add-desc": "Дадаць дакумэнтацыю",
"tux-editor-suggestions-title": "Прапановы",
diff --git a/MLEB/Translate/i18n/core/be.json b/MLEB/Translate/i18n/core/be.json
index 5a4a6617..2da05bf8 100644
--- a/MLEB/Translate/i18n/core/be.json
+++ b/MLEB/Translate/i18n/core/be.json
@@ -100,6 +100,11 @@
"right-translate-groupreview": "змяняць стан апрацоўкі груп паведамленняў",
"translate-rcfilters-translations": "Пераклады",
"translate-rcfilters-translations-only-label": "Пераклады",
+ "translate-rcfilters-translations-only-desc": "Змены ў перакладзеных старонках.",
+ "translate-rcfilters-translations-filter-label": "Не пераклады",
+ "translate-rcfilters-translations-filter-desc": "Усе змены, якія не з’яўляюцца перакладамі",
+ "translate-rcfilters-translations-site-label": "Паведамленні сайта",
+ "translate-rcfilters-translations-site-desc": "Пераазначэнне паведамленняў сайта ў прасторы назваў MediaWiki.",
"translate-rc-translation-filter": "Фільтраваць пераклады:",
"translate-rc-translation-filter-no": "Без абмежаванняў",
"translate-rc-translation-filter-only": "Паказаць толькі пераклады",
@@ -128,13 +133,18 @@
"translate-statsf-count-registrations": "Новыя ўдзельнікі",
"translate-statsf-count-reviews": "Рэцэнзенты перакладу",
"translate-statsf-count-reviewers": "Рэцэнзенты",
+ "translate-sidebar-alltrans": "На іншых мовах",
+ "translate-language": "Мова",
+ "translate-mgs-column-language": "Мова",
"supportedlanguages": "Падтрымліваюцца мовы",
"supportedlanguages-summary": "На гэтай старонцы прыведзены спіс падтрымоўваных праектам {{SITENAME}} моў\nразам з імёнамі тых, хто тут працуе над перакладамі на гэтыя мовы.\nІмя перакладчыка адлюстроўваецца тым буйней, чым больш правак ён зрабіў.\nПа колер падкрэслення можна зразумець, наколькі даўно перакладчык апошні раз здзяйсняў тут якое-небудзь дзеянне.",
"supportedlanguages-count": "Усяго $1 {{PLURAL:$1|мова|мовы|моў}}.",
"abusefilter-edit-builder-vars-translate-source-text": "Зыходны тэкст элемента перакладу",
"translate-js-support": "Задаць пытанне",
+ "translate-js-support-title": "Звярніцеся за дапамогай, калі не хапае інфармацыі для правільнага перакладу гэтага паведамлення.",
"translate-documentation-language": "Дакументацыя паведамлення",
"translate-searchprofile": "Пераклады",
+ "translate-searchprofile-tooltip": "Шукаць ва ўсіх перакладах",
"tux-editor-in-other-languages": "На іншых мовах",
"tux-editor-close-tooltip": "Закрыць"
}
diff --git a/MLEB/Translate/i18n/core/bg.json b/MLEB/Translate/i18n/core/bg.json
index 26e015ce..ddd71e7e 100644
--- a/MLEB/Translate/i18n/core/bg.json
+++ b/MLEB/Translate/i18n/core/bg.json
@@ -157,6 +157,7 @@
"translate-ls-submit": "Показване на статистики",
"translate-ls-column-group": "Група съобщения",
"translate-mgs-pagename": "Статистика за групата съобщения",
+ "translate-mgs-fieldset": "Визуални настройки",
"translate-mgs-group": "Група съобщения:",
"translate-mgs-nocomplete": "Скриване на езици с напълно завършен превод",
"translate-mgs-noempty": "Скриване на езици без започнат превод",
@@ -216,6 +217,7 @@
"tux-edit": "Редактиране",
"tux-status-optional": "Незадължително",
"tux-status-fuzzy": "Неактуален",
+ "tux-status-proofread": "Проверени",
"tux-status-translated": "Преведено",
"tux-status-saving": "Съхраняване...",
"tux-editor-editsummary-placeholder": "Незадължително резюме",
diff --git a/MLEB/Translate/i18n/core/bn.json b/MLEB/Translate/i18n/core/bn.json
index 3988ef43..7660ecd3 100644
--- a/MLEB/Translate/i18n/core/bn.json
+++ b/MLEB/Translate/i18n/core/bn.json
@@ -150,6 +150,7 @@
"translate-untranslated": "অনুবাদ হয়নি",
"translate-percentage-complete": "সম্পন্ন",
"translate-percentage-fuzzy": "পুরাতন",
+ "translate-percentage-proofread": "পর্যালোচিত",
"translate-ls-submit": "পরিসংখ্যান দেখান",
"translate-ls-column-group": "বার্তা দল",
"translate-mgs-pagename": "বার্তা দলের পরিসংখ্যান",
@@ -160,6 +161,7 @@
"translate-mgs-totals": "একসাথে $1টি {{PLURAL:$1|ভাষায়}}।",
"supportedlanguages": "সমর্থিত ভাষাসমূহ",
"supportedlanguages-colorlegend": "রঙের ব্যাখ্যা: সর্বশেষ অনুবাদ $1 দিন আগে।",
+ "supportedlanguages-sqlite-error": "SQLite সমর্থিত নয়",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|অনুবাদক}}|অনুবাদকগণ}}: $1",
"supportedlanguages-recenttranslations": "সাম্প্রতিক অনুবাদ",
"supportedlanguages-count": "সর্বমোট $1টি {{PLURAL:$1|ভাষায়}}।",
@@ -237,12 +239,12 @@
"tux-editor-editsummary-placeholder": "ঐচ্ছিক সারাংশ",
"tux-editor-paste-original-button-label": "মূল লেখা যোগ করো",
"tux-editor-discard-changes-button-label": "পরিবর্তন বাতিল",
- "tux-editor-save-button-label": "অনুবাদ সংরক্ষণ",
+ "tux-editor-save-button-label": "অনুবাদ সংরক্ষণ করুন",
"tux-editor-skip-button-label": "বাতিল ও পরবর্তী",
"tux-editor-cancel-button-label": "বাতিল",
"tux-editor-confirm-button-label": "অনুবাদ নিশ্চিত করুন",
"tux-editor-proofread-button-label": "পর্যালোচিত হিসেবে চিহ্নিত করুন",
- "tux-editor-shortcut-info": "সংরক্ষণ করতে \"$1\" চাপুন বা পরবর্তী বার্তায় যেতে \"$2\" চাপুন বা সারাংশ প্রদান করতে \"$4\" চাপুন বা অন্যান্য শর্টকাটের জন্য \"$3\" চাপুন।",
+ "tux-editor-shortcut-info": "সংরক্ষণ করতে ও পরবর্তী বার্তায় যেতে \"$1\" চাপুন, এড়িয়ে যেতে \"$2\" চাপুন, সারাংশ প্রদান করতে \"$4\" চাপুন বা অন্যান্য শর্টকাট দেখতে \"$3\" চাপুন।",
"tux-editor-edit-desc": "নথি সম্পাদনা",
"tux-editor-add-desc": "নথি যোগ করুন",
"tux-editor-suggestions-title": "পরামর্শসমূহ",
diff --git a/MLEB/Translate/i18n/core/ca.json b/MLEB/Translate/i18n/core/ca.json
index 0eb8e7c4..c9f09660 100644
--- a/MLEB/Translate/i18n/core/ca.json
+++ b/MLEB/Translate/i18n/core/ca.json
@@ -20,6 +20,7 @@
]
},
"translate": "Tradueix",
+ "translate-extensionname": "Tradueix",
"translate-desc": "[[Special:Translate|Pàgina especial]] per a traduir el MediaWiki i altres coses",
"translate-taskui-export-to-file": "Exporta a format natiu",
"translate-taskui-export-as-po": "Exporta-ho per traduir-ho fora de línia",
@@ -66,6 +67,7 @@
"translate-edit-askpermission": "Obté permís",
"exporttranslations": "Exporta les traduccions",
"translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Especifiqueu un format vàlid.",
"translate-magic-pagename": "Traducció ampliada del MediaWiki",
"translate-magic-help": "Aquí podeu traduir els àlies de les pàgines especials, les paraules màgiques i els títols dels diferents espais de noms (''namespaces'').\n\nEls àlies de les pàgines especials i les paraules màgiques poden tenir múltiples traduccions. Separeu-les per una coma (,). Els espais de noms només poden tenir una traducció.\n\nDins les traduccions dels espais de noms, la <code>$1 talk</code> és especial. <code>$1</code> es substitueix pel nom del projecte (per exemple <code>{{ns:project_talk}}</code>). Si no és possible fer-ho així en el vostre idioma sense canviar la forma gramatical del nom del projecte, siusplau contacteu amb nosaltres: [[Support]].\n\nHeu de tenir permisos de traductor per a desar els canvis, que no es guardaran fins que no cliqueu el botó corresponent.",
"translate-magic-module": "Mòdul:",
@@ -84,7 +86,7 @@
"translate-magic-namespace": "Noms dels espais de noms",
"translate-magic-notsaved": "No s'ha desat la modificació!",
"translate-magic-errors": "Al que arregleu {{PLURAL:$1|el següent error|els següents errors}} a les traduccions:",
- "translate-magic-saved": "Els vostres canvis s'han desat amb èxit.",
+ "translate-magic-saved": "Els vostres canvis s'han desat.",
"translate-checks-parameters": "{{PLURAL:$2|El paràmetre següent no s'està|Els paràmetres següents no s'estan}} usant:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|El paràmetre següent és desconegut|Els paràmetres següent són desconeguts}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Hi ha un nombre senar de {{PLURAL:$2|parèntesis, claus i/o claudàtors|parèntesis, claus i/o claudàtors}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -113,6 +115,11 @@
"right-translate-messagereview": "Revisa les traduccions",
"action-translate-messagereview": "revisa les traduccions",
"right-translate-groupreview": "Canvia l'estat del flux de treball dels grups de missatges",
+ "translate-rcfilters-translations": "Traduccions",
+ "translate-rcfilters-translations-only-label": "Traduccions",
+ "translate-rcfilters-translations-filter-label": "No traduccions",
+ "translate-rcfilters-translations-filter-desc": "Tots els canvis que no són traduccions.",
+ "translate-rcfilters-translations-site-label": "Missatges del lloc",
"translate-rc-translation-filter": "Filtra traduccions:",
"translate-rc-translation-filter-no": "No facis res",
"translate-rc-translation-filter-only": "Mostra només traduccions",
@@ -175,6 +182,7 @@
"translate-untranslated": "Sense traduir",
"translate-percentage-complete": "Completesa",
"translate-percentage-fuzzy": "Desfasats",
+ "translate-percentage-proofread": "Revisat",
"translate-languagestats-overall": "Tots els grups de missatges junts",
"translate-ls-submit": "Mostra les estadístiques",
"translate-ls-column-group": "Grup de missatges",
@@ -185,7 +193,7 @@
"translate-mgs-noempty": "No mostris els idiomes que no tenen cap traducció",
"translate-mgs-submit": "Mostra les estadístiques",
"translate-mgs-column-language": "Idioma",
- "translate-mgs-totals": "Tots els idiomes junts",
+ "translate-mgs-totals": "{{PLURAL:$1|Tota la $1 llengua junta|Totes les $1 llengües juntes}}",
"translate-mgs-invalid-group": "El grup $1 especificat no existeix.",
"translate-mgs-nothing": "Res a mostrar per l'estadística soŀlicitada.",
"supportedlanguages": "Llengües admeses",
@@ -224,7 +232,7 @@
"translate-import-from-local": "Càrrega de fitxer local:",
"translate-import-load": "Carrega fitxer",
"translate-import-err-dl-failed": "No s'ha pogut obtenir el fitxer:\n$1",
- "translate-import-err-ul-failed": "La càrrega del fitxer no s'ha completat",
+ "translate-import-err-ul-failed": "Ha fallat la càrrega de fitxer",
"translate-import-err-invalid-title": "El nom del fitxer <nowiki>$1</nowiki> no és vàlid.",
"translate-import-err-no-such-file": "El fitxer <nowiki>$1</nowiki>no existeix o no s'ha carregat localment.",
"translate-import-err-stale-group": "El grup de missatges al qual aquest fitxer pertany no existeix.",
@@ -300,7 +308,7 @@
"tux-editor-cancel-button-label": "Cancel·la",
"tux-editor-confirm-button-label": "Confirma la traducció",
"tux-editor-proofread-button-label": "Marca com a revisada",
- "tux-editor-shortcut-info": "Premeu «$1» per desar, «$2» per anar al següent missatge, «$4» per proporcionar un resum o «$3» per a altres dreceres.",
+ "tux-editor-shortcut-info": "Premeu «$1» per confirmar i anar al missatge següent, «$2» per ometre, «$4» per proporcionar un resum o «$3» per mantenir altres dreceres.",
"tux-editor-edit-desc": "Edita la documentació",
"tux-editor-add-desc": "Afegiu documentació",
"tux-editor-suggestions-title": "Suggeriments",
@@ -359,11 +367,12 @@
"tux-editor-message-tools-history": "Historial",
"tux-editor-message-tools-delete": "Suprimeix",
"tux-editor-message-tools-translations": "Totes les traduccions",
+ "tux-editor-message-tools-linktothis": "Enllaç a aquest missatge",
"tux-editor-loading": "S'està carregant…",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|idioma|idiomes}} més",
"translate-statsbar-tooltip": "$1% traduït, $2% revisat",
"translate-statsbar-tooltip-with-fuzzy": "$1% traduït, $2 % revisat, $3% desfasat",
"translate-search-more-groups-info": "$1 {{PLURAL:$1|grup|grups}} més",
"translate-ulsdep-title": "Error de configuració",
- "tux-nojs": "Aquesta pàgina requereix JavaScript."
+ "tux-nojs": "Aquesta eina no funciona sense JavaScript. El JavaScript està inhabilitat, no funciona o el navegador no el permet."
}
diff --git a/MLEB/Translate/i18n/core/cs.json b/MLEB/Translate/i18n/core/cs.json
index ef4ca18d..0109045d 100644
--- a/MLEB/Translate/i18n/core/cs.json
+++ b/MLEB/Translate/i18n/core/cs.json
@@ -303,7 +303,7 @@
"tux-editor-cancel-button-label": "Storno",
"tux-editor-confirm-button-label": "Potvrdit překlad",
"tux-editor-proofread-button-label": "Označit jako zkontrolované",
- "tux-editor-shortcut-info": "Stiskněte „$1“ pro uložení, „$2“ pro přeskočení na další zprávu, „$4“ pro zadání shrnutí nebo „$3“ pro další zkratky.",
+ "tux-editor-shortcut-info": "Stiskněte „$1“ pro potvrzení a přesun na další zprávu, „$2“ pro přeskočení na další zprávu, „$4“ pro zadání shrnutí nebo přidržte „$3“ pro zobrazení dalších zkratek.",
"tux-editor-edit-desc": "Upravit dokumentaci",
"tux-editor-add-desc": "Přidat dokumentaci",
"tux-editor-suggestions-title": "Návrhy",
diff --git a/MLEB/Translate/i18n/core/da.json b/MLEB/Translate/i18n/core/da.json
index e4fed7e7..27355296 100644
--- a/MLEB/Translate/i18n/core/da.json
+++ b/MLEB/Translate/i18n/core/da.json
@@ -177,6 +177,7 @@
"translate-untranslated": "Uoversatte",
"translate-percentage-complete": "Færdiggørelse",
"translate-percentage-fuzzy": "Forældede",
+ "translate-percentage-proofread": "Korrekturlæst",
"translate-languagestats-overall": "Alle beskedgrupper lagt sammen",
"translate-ls-submit": "Vis statistik",
"translate-ls-column-group": "Beskedgruppe",
@@ -193,6 +194,7 @@
"supportedlanguages": "Understøttede sprog",
"supportedlanguages-summary": "Denne side viser en liste over alle de sprog, der understøttes af {{SITENAME}},\nsammen med navnene på de oversættere, der arbejder på dette sprog.\n\nJo flere redigeringer, en oversætter har bidraget med, jo større skrift bruges til navnet.\nUnderstregningsfarven angiver, hvor nyligt en oversætter har været aktiv.",
"supportedlanguages-colorlegend": "Forklaring til farven: seneste oversættelse var for $1 dage siden.",
+ "supportedlanguages-sqlite-error": "SQLite understøttes ikke",
"supportedlanguages-translators": "{{PLURAL:$2|Oversætter|Oversættere}}: $1",
"supportedlanguages-recenttranslations": "seneste oversættelser",
"supportedlanguages-count": "$1 {{PLURAL:$1|sprog|sprog}} i alt.",
diff --git a/MLEB/Translate/i18n/core/de-formal.json b/MLEB/Translate/i18n/core/de-formal.json
index 317ed050..717ee2b5 100644
--- a/MLEB/Translate/i18n/core/de-formal.json
+++ b/MLEB/Translate/i18n/core/de-formal.json
@@ -5,13 +5,14 @@
"Imre",
"Kghbln",
"MichaelFrey",
- "Umherirrender"
+ "Umherirrender",
+ "Tacsipacsi"
]
},
"translate-page-description-hasoptional": "Diese Nachrichtengruppe enthält optionale Nachrichten.\nOptionale Nachrichten sollten nur dann übersetzt werden, sofern es in Ihrer Sprache Bedarf für sie gibt,\nwie beispielsweise die Nichtverwendung von Leerzeichen oder die Transkription von Eigennamen. $1",
"translate-edit-no-information": "''Zu dieser Nachricht ist keine Dokumentation vorhanden.''\nSofern Sie wissen, wo und in welchem Zusammenhang sie genutzt wird, können Sie anderen Übersetzern bei ihrer Arbeit helfen, indem Sie eine Dokumentation hinzufügen.",
"translate-use-suggestion": "Ersetzen Sie die aktuelle Übersetzung mit diesem Vorschlag.",
- "translate-edit-nopermission": "Sie benötigen die Berechtigung, Systemnachrichten übersetzen zu können.",
+ "translate-edit-nopermission": "Sie benötigen Übersetzerrechte, um Nachrichten übersetzen zu können.",
"translate-magic-help": "Sie können hier Aliase für Spezialseiten, magische Wörter und Namensraumnamen übersetzen.\n\nSpezialseiten und magische Wörter können mehrere Übersetzungen haben, sie werden jeweils durch ein Komma (,) getrennt. Namensraumnamen dürfen nur je eine Übersetzung haben.\n\nIn der Übersetzung eines Namensraumnamens hat <code>$1 talk</code> eine spezielle Bedeutung. <code>$1</code> wird durch den Projektnamen ersetzt (zum Beispiel <code>{{ns:project_talk}}</code>).\nWenn es in Ihrer Sprache nicht möglich ist, eine grammatikalisch korrekte Form davon zu bilden ohne den Projektnamen zu verändern, kontaktieren Sie bitte einen Softwareentwickler.\n\nSie müssen in der Übersetzer-Gruppe sein, um Änderungen zu speichern.\nÄnderungen werden erst beim Klick auf den Speichern-Button gespeichert.",
"translate-magic-errors": "Bitte beheben Sie {{PLURAL:$1|nachfolgenden|nachfolgende}} Fehler in der Übersetzung:",
"translate-checks-xhtml": "Bitte ersetzen Sie {{PLURAL:$2|den folgenden Tag|die folgenden Tags}} durch die korrekten: <strong>$1</strong>",
diff --git a/MLEB/Translate/i18n/core/de.json b/MLEB/Translate/i18n/core/de.json
index 69c8a73f..1d2521bd 100644
--- a/MLEB/Translate/i18n/core/de.json
+++ b/MLEB/Translate/i18n/core/de.json
@@ -192,6 +192,7 @@
"translate-untranslated": "Nachrichten (übersetzbar)",
"translate-percentage-complete": "Vollständig",
"translate-percentage-fuzzy": "Veraltet",
+ "translate-percentage-proofread": "Überprüft",
"translate-languagestats-overall": "Alle Gruppen zusammen",
"translate-ls-submit": "Statistiken anzeigen",
"translate-ls-column-group": "Systemnachrichtengruppe",
@@ -323,7 +324,7 @@
"tux-editor-cancel-button-label": "Abbrechen",
"tux-editor-confirm-button-label": "Übersetzung bestätigen",
"tux-editor-proofread-button-label": "Als überprüft markieren",
- "tux-editor-shortcut-info": "Drücke „$1“ zum Speichern, „$2“, um zur nächsten Nachricht zu gelangen, „$4“, um eine Zusammenfassung anzugeben oder „$3“ für andere Tastaturkürzel.",
+ "tux-editor-shortcut-info": "Drücke „$1“ zum Bestätigen und gehe zur nächsten Nachricht, „$2“ zum Überspringen, „$4“, um eine Zusammenfassung anzugeben oder halte „$3“ gedrückt, um andere Tastaturkürzel anzusehen.",
"tux-editor-edit-desc": "Dokumentation bearbeiten",
"tux-editor-add-desc": "Dokumentation hinzufügen",
"tux-editor-suggestions-title": "Vorschläge",
diff --git a/MLEB/Translate/i18n/core/diq.json b/MLEB/Translate/i18n/core/diq.json
index ac5bf26b..b34afc9e 100644
--- a/MLEB/Translate/i18n/core/diq.json
+++ b/MLEB/Translate/i18n/core/diq.json
@@ -131,7 +131,7 @@
"translate-langstats-incomplete": "Tay istatistiki ena pela dı nêratneyay. İstatistikan mocnayışi rê pela newe kerê.",
"translate-langstats-expand": "Hera ke",
"translate-langstats-collapse": "teng ke",
- "translate-langstats-expandall": "pêron hera kı",
+ "translate-langstats-expandall": "pêrıne hera ke",
"translate-langstats-collapseall": "Pêron teng kı",
"translate-language-code": "Kodê zıwani",
"translate-language-code-field-name": "Kodê zıwani:",
@@ -151,7 +151,7 @@
"translate-mgs-submit": "İstatistikan bımocne",
"translate-mgs-column-language": "Zıwan",
"translate-mgs-totals": "Zıwani heme piya",
- "supportedlanguages": "Zıwanê ke peşti gırewtê",
+ "supportedlanguages": "Zıwanê ke peşti gırewta",
"supportedlanguages-summary": "Ena perre lista zıwananê ke hetê {{SITENAME}}y ra qebul biy, be namanê çarnayoğan inan motnena. \nhem zi tewr vêşi iştirak kerdaye karbera goreya zoni rezkeno. \nAçarnayoğe ke namey cı gırdo ina zaf iştiraqkkerdo. \nNara ke ek namey cı bın de reng asena aktivi yana racbayeyi.",
"supportedlanguages-colorlegend": "Asengeya Renga: açarnayışo peyên verdê $1 roca biyo",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Açarnoğ}}|Açarnoği}}: $1",
@@ -240,7 +240,7 @@
"tux-editor-proofread-button-label": "Vêniyaye nişan ke",
"tux-editor-shortcut-info": "Seba qeydkerdışi \"$1\" ya zi ravêrdışê mesacê bini \"$2\" ya zi dayışê xulasa \"$4\" ya zi rayanê binanê kılman rê \"$3\" bıtıkne.",
"tux-editor-edit-desc": "Belgekerdışi bıvurne",
- "tux-editor-add-desc": "Dokuman dek",
+ "tux-editor-add-desc": "Belge cı ke",
"tux-editor-suggestions-title": "Wesıbi",
"tux-editor-in-other-languages": "Zıwananê binan de",
"tux-editor-need-more-help": "Hewna peşti lazıma?",
@@ -249,9 +249,9 @@
"tux-warnings-more": "{{PLURAL:$1|$1 zêde}}",
"tux-warnings-hide": "bınımne",
"tux-editor-save-failed": "Qeyd kerdışa açarnayışi nêbi:$1",
- "tux-editor-n-uses": "$1 {{PLURAL:$1|fın|fıni}} karıyê",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|raye gureno|reyi gurenê}}",
"tux-editor-message-desc-more": "Zêde bıvêne",
- "tux-editor-message-desc-less": "Mevin",
+ "tux-editor-message-desc-less": "Şenık bıvêne",
"tux-editor-clear-translated": "Açarnayeyan bınımne",
"tux-editor-proofreading-mode": "Çım berze cı",
"tux-editor-translate-mode": "Liste",
diff --git a/MLEB/Translate/i18n/core/el.json b/MLEB/Translate/i18n/core/el.json
index 27f891c9..85206e1e 100644
--- a/MLEB/Translate/i18n/core/el.json
+++ b/MLEB/Translate/i18n/core/el.json
@@ -15,7 +15,8 @@
"ZaDiak",
"Περίεργος",
"KATRINE1992",
- "Nikosgranturismogt"
+ "Nikosgranturismogt",
+ "KATRINE1993"
]
},
"translate": "Μεταφράστε",
@@ -186,6 +187,7 @@
"translate-untranslated": "Αμετάφραστα",
"translate-percentage-complete": "Ολοκλήρωση",
"translate-percentage-fuzzy": "Παρωχημένα",
+ "translate-percentage-proofread": "Ελέγχθηκε",
"translate-languagestats-overall": "Όλες οι ομάδες μηνυμάτων μαζί",
"translate-ls-submit": "Εμφάνιση στατιστικών",
"translate-ls-column-group": "Ομάδα μηνυμάτων",
diff --git a/MLEB/Translate/i18n/core/en.json b/MLEB/Translate/i18n/core/en.json
index 8e774f55..d2ddc9b6 100644
--- a/MLEB/Translate/i18n/core/en.json
+++ b/MLEB/Translate/i18n/core/en.json
@@ -178,6 +178,7 @@
"translate-untranslated": "Untranslated",
"translate-percentage-complete": "Completion",
"translate-percentage-fuzzy": "Outdated",
+ "translate-percentage-proofread": "Reviewed",
"translate-languagestats-overall": "All message groups together",
"translate-ls-submit": "Show statistics",
"translate-ls-column-group": "Message group",
@@ -312,7 +313,7 @@
"tux-editor-cancel-button-label": "Cancel",
"tux-editor-confirm-button-label": "Confirm translation",
"tux-editor-proofread-button-label": "Mark as reviewed",
- "tux-editor-shortcut-info": "Press \"$1\" to save or \"$2\" to skip to next message or \"$4\" to provide summary or \"$3\" for other shortcuts.",
+ "tux-editor-shortcut-info": "Press \"$1\" to confirm and move to the next message, \"$2\" to skip, \"$4\" to provide summary or hold \"$3\" to see other shortcuts.",
"tux-editor-edit-desc": "Edit documentation",
"tux-editor-add-desc": "Add documentation",
"tux-editor-suggestions-title": "Suggestions",
diff --git a/MLEB/Translate/i18n/core/eo.json b/MLEB/Translate/i18n/core/eo.json
index 8de937c9..7dfe082a 100644
--- a/MLEB/Translate/i18n/core/eo.json
+++ b/MLEB/Translate/i18n/core/eo.json
@@ -15,7 +15,8 @@
"KuboF",
"Robin van der Vliet",
"Psychoslave",
- "Joao Xavier"
+ "Joao Xavier",
+ "YvesNevelsteen"
]
},
"translate": "Tradukado",
@@ -254,10 +255,10 @@
"log-description-translationreview": "Protokolo de ĉiuj tradukprovlegoj kaj de mesaĝgrupoj.",
"logentry-translationreview-message": "$1 {{GENDER:$2|reviziis}} tradukon $3",
"translate-workflow-state-": "(malŝalta)",
- "translate-workflowstatus": "Statuso = $1",
+ "translate-workflowstatus": "Stato = $1",
"translate-workflow-set-doing": "Aktivado...",
"translate-workflow-autocreated-summary": "Aŭtomata kreado de paĝo por laborflustatuso $1",
- "translate-stats-workflow": "Statuso",
+ "translate-stats-workflow": "Stato",
"translate-workflowgroup-label": "Laborflustatusoj",
"translate-workflowgroup-desc": "Ĉi tiu mesaĝgrupo montras la laborflustatusojn.\nLa statusoj estas difinitaj en la konfigurvariablo $wgTranslateWorkflowStates.",
"translate-dynagroup-recent-label": "Lastatempaj tradukoj",
diff --git a/MLEB/Translate/i18n/core/es.json b/MLEB/Translate/i18n/core/es.json
index 42d3fc19..79e3afc2 100644
--- a/MLEB/Translate/i18n/core/es.json
+++ b/MLEB/Translate/i18n/core/es.json
@@ -26,7 +26,9 @@
"Macofe",
"Indiralena",
"Dgstranz",
- "KATRINE1992"
+ "KATRINE1992",
+ "Laura Ospina",
+ "Tiberius1701"
]
},
"translate": "Traducir",
@@ -129,7 +131,7 @@
"right-translate-groupreview": "Modificar el estado del flujo de trabajo de los grupos de mensajes",
"translate-rcfilters-translations": "Traducciones",
"translate-rcfilters-translations-only-label": "Traducciones",
- "translate-rcfilters-translations-only-desc": "Cambios a las páginas traducidas.",
+ "translate-rcfilters-translations-only-desc": "Cambios en las páginas traducidas.",
"translate-rcfilters-translations-filter-label": "No traducciones",
"translate-rcfilters-translations-filter-desc": "Todos los cambios que no son traducciones.",
"translate-rcfilters-translations-site-label": "Mensajes del sitio",
@@ -178,7 +180,7 @@
"translate-translations-including-no-param": "Especifica una clave de mensaje válida en el parámetro de subpágina",
"translate-translations-history-short": "h",
"languagestats": "Estadísticas por idioma",
- "languagestats-summary": "Esta página muestra estadísticas de traducción para todos los grupos de mensajes para un idioma.",
+ "languagestats-summary": "Esta página muestra las estadísticas de traducción en todos los grupos de mensajes de un idioma.",
"messagegroupstats-summary": "Esta página muestra las estadísticas del grupo de mensajes.",
"languagestats-stats-for": "Estadísticas de las traducciones en $1 ($2).",
"languagestats-recenttranslations": "traducciones recientes",
@@ -196,6 +198,7 @@
"translate-untranslated": "Sin traducir",
"translate-percentage-complete": "Completados",
"translate-percentage-fuzzy": "Desactualizados",
+ "translate-percentage-proofread": "Revisados",
"translate-languagestats-overall": "Todos los grupos de mensajes juntos",
"translate-ls-submit": "Mostrar estadísticas",
"translate-ls-column-group": "Grupo de mensajes",
@@ -235,7 +238,7 @@
"translate-manage-action-ignore": "Ignorar",
"translate-manage-action-fuzzy": "Importar y combinar traducciones",
"translate-manage-nochanges": "No hay cambios en los mensajes originales para este grupo.",
- "translate-manage-nochanges-other": "No hubo cambios para este idioma.\nUse el enlace siguiente para volver a la vista de grupo.",
+ "translate-manage-nochanges-other": "No hubo cambios en este idioma.\nUse el enlace siguiente para volver a la vista de grupo.",
"translate-manage-inconsistent": "Se detectaron inconsistencias en la solicitud.\nRevisa cambios y prueba nuevamente.\nDetalles: $1.",
"translate-manage-toolong": "Se excedió el tiempo máximo de procesamiento de $1 {{PLURAL:$1|segundo|segundos}}.\nPor favor reenvía el formulario para continuar procesando.",
"translate-manage-import-summary": "Importando una nueva versión desde fuente externa",
@@ -326,7 +329,7 @@
"tux-editor-cancel-button-label": "Cancelar",
"tux-editor-confirm-button-label": "Confirmar la traducción",
"tux-editor-proofread-button-label": "Marcar como revisada",
- "tux-editor-shortcut-info": "Pulsa «$1» para guardar, «$2» para ir al siguiente mensaje, «$4» para proporcionar un resumen o «$3» para más atajos.",
+ "tux-editor-shortcut-info": "Pulsa «$1» para confirmar, «$2» para ir al siguiente mensaje, «$4» para proporcionar un resumen o «$3» para ver más atajos.",
"tux-editor-edit-desc": "Editar la documentación",
"tux-editor-add-desc": "Añadir documentación",
"tux-editor-suggestions-title": "Sugerencias",
diff --git a/MLEB/Translate/i18n/core/et.json b/MLEB/Translate/i18n/core/et.json
index 8e8bfc21..6dcb334f 100644
--- a/MLEB/Translate/i18n/core/et.json
+++ b/MLEB/Translate/i18n/core/et.json
@@ -275,7 +275,7 @@
"tux-editor-cancel-button-label": "Loobu",
"tux-editor-confirm-button-label": "Kinnita tõlge",
"tux-editor-proofread-button-label": "Märgi ülevaadatuks",
- "tux-editor-shortcut-info": "Vajuta \"$1\", et salvestada, või \"$2\", et see sõnum vahele jätta ja minna järgmise juurde, või \"$4\", et kirjutada resümee, või \"$3\", et näha teisi kiirklahve.",
+ "tux-editor-shortcut-info": "Vajuta klahve \"$1\", et kinnitada ja et minna järgmise sõnumi juurde, \"$2\", et sõnum vahele jätta, \"$4\", et kirjutada resümee, või \"$3\", et näha teisi kiirklahve.",
"tux-editor-edit-desc": "Redigeeri dokumentatsiooni",
"tux-editor-add-desc": "Lisa dokumentatsioon",
"tux-editor-suggestions-title": "Pakkumused",
diff --git a/MLEB/Translate/i18n/core/fa.json b/MLEB/Translate/i18n/core/fa.json
index 74444e6d..2dc50b92 100644
--- a/MLEB/Translate/i18n/core/fa.json
+++ b/MLEB/Translate/i18n/core/fa.json
@@ -205,6 +205,7 @@
"supportedlanguages": "زبان‌های پشتیبانی‌شده",
"supportedlanguages-summary": "این صفحه فهرستی از تمام زبان‌های پشتیبانی‌شده توسط {{SITENAME}} را به همراه نام مترجمان در حال کار در آن زبان نمایش میدهد.\nهرچه یک مترجم با ویرایش‌های بیشتری مشارکت کرده باشد، نامش بزرگتر دیده می‌شود.\nرنگ زیرخط نشان‌دهندهٔ تازگی فعالیت مترجم در اینجا است.",
"supportedlanguages-colorlegend": "توضیح برای رنگ: آخرین ترجمه در $1 روز پیش.",
+ "supportedlanguages-sqlite-error": "از SQLite پشتیبانی نمی‌شود",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|مترجم}}|مترجمان}}: $1",
"supportedlanguages-recenttranslations": "ترجمه‌های اخیر",
"supportedlanguages-count": "در مجموع $1 {{PLURAL:$1|زبان|زبان}}.",
diff --git a/MLEB/Translate/i18n/core/fi.json b/MLEB/Translate/i18n/core/fi.json
index 4a3aecc5..5e1cacac 100644
--- a/MLEB/Translate/i18n/core/fi.json
+++ b/MLEB/Translate/i18n/core/fi.json
@@ -189,6 +189,7 @@
"translate-untranslated": "Kääntämättömiä",
"translate-percentage-complete": "Käännösten kattavuus",
"translate-percentage-fuzzy": "Vanhentuneita",
+ "translate-percentage-proofread": "Oikoluettu",
"translate-languagestats-overall": "Kaikki viestiryhmät yhdessä",
"translate-ls-submit": "Näytä tilastot",
"translate-ls-column-group": "Viestiryhmä",
@@ -205,6 +206,7 @@
"supportedlanguages": "Tuetut kielet",
"supportedlanguages-summary": "Tällä sivulla luetellaan kaikki kielet, joita {{SITENAME}} tukee, sekä kaikki näillä kielillä työskentelevät kääntäjät.\nKääntäjän nimi on sitä suurempi, mitä enemmän hän on tehnyt käännöksiä.\nAlleviivauksen väri kertoo, milloin kääntäjä on viimeksi kääntänyt täällä.",
"supportedlanguages-colorlegend": "Värin selitys: Viimeinen käännös $1 päivää sitten.",
+ "supportedlanguages-sqlite-error": "SQLite ei ole tuettu",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Kääntäjä}}|Kääntäjät}}: $1",
"supportedlanguages-recenttranslations": "tuoreet käännökset",
"supportedlanguages-count": "$1 {{PLURAL:$1|kieli|kieltä}} yhteensä.",
@@ -319,7 +321,7 @@
"tux-editor-cancel-button-label": "Peru",
"tux-editor-confirm-button-label": "Hyväksy käännös",
"tux-editor-proofread-button-label": "Merkitse tarkastetuksi",
- "tux-editor-shortcut-info": "$1 tallentaa, $2 siirty seuraavaan, $4 siirtyy yhteenvetoon ja $3 näyttää muut näppäinyhdistelmät.",
+ "tux-editor-shortcut-info": "Paina ”$1” hyväksyäksesi ja siirtyäksesi seuraavaan viestiin, ”$2” ohittaaksesi, ”$4” siirtyäksesi yhteenvetoon tai ”$3” näyttääksesi muut näppäinyhdistelmät.",
"tux-editor-edit-desc": "Muokkaa ohjeistusta",
"tux-editor-add-desc": "Lisää ohjeistus",
"tux-editor-suggestions-title": "Ehdotukset",
diff --git a/MLEB/Translate/i18n/core/fr.json b/MLEB/Translate/i18n/core/fr.json
index 620a4d6b..1529109e 100644
--- a/MLEB/Translate/i18n/core/fr.json
+++ b/MLEB/Translate/i18n/core/fr.json
@@ -212,6 +212,7 @@
"translate-untranslated": "Non traduits",
"translate-percentage-complete": "Achèvement",
"translate-percentage-fuzzy": "Désuets",
+ "translate-percentage-proofread": "Relu",
"translate-languagestats-overall": "Tous les groupes de messages ensemble",
"translate-ls-submit": "Afficher les statistiques",
"translate-ls-column-group": "Groupe de messages",
@@ -345,7 +346,7 @@
"tux-editor-cancel-button-label": "Annuler",
"tux-editor-confirm-button-label": "Confirmer la traduction",
"tux-editor-proofread-button-label": "Marquer comme relu",
- "tux-editor-shortcut-info": "Appuyez sur « $1 » pour enregistrer ou « $2 » pour passer au message suivant ou « $4 » pour fournir un résumé ou « $3 » pour d’autres raccourcis.",
+ "tux-editor-shortcut-info": "Appuyez sur « $1 » pour confirmer et passer au message suivant, « $2 » pour sauter, « $4 » pour fournir un résumé ou maintenir « $3 » pour voir d’autres raccourcis.",
"tux-editor-edit-desc": "Modifier la documentation",
"tux-editor-add-desc": "Ajouter une documentation",
"tux-editor-suggestions-title": "Suggestions",
diff --git a/MLEB/Translate/i18n/core/he.json b/MLEB/Translate/i18n/core/he.json
index 97bfefa2..1d4b3b06 100644
--- a/MLEB/Translate/i18n/core/he.json
+++ b/MLEB/Translate/i18n/core/he.json
@@ -183,6 +183,7 @@
"translate-untranslated": "לא מתורגמות",
"translate-percentage-complete": "התקדמות",
"translate-percentage-fuzzy": "לא מעודכנות",
+ "translate-percentage-proofread": "נסקרו",
"translate-languagestats-overall": "כל קבוצות ההודעות יחד",
"translate-ls-submit": "הצגת סטטיסטיקות",
"translate-ls-column-group": "קבוצת הודעות",
@@ -314,7 +315,7 @@
"tux-editor-cancel-button-label": "ביטול",
"tux-editor-confirm-button-label": "אישור תרגום",
"tux-editor-proofread-button-label": "לסמן שהתרגום נסקר",
- "tux-editor-shortcut-info": "\"$1\" לשמירה, \"$2\" למעבר להודעה הבאה,\"$4\" לכתיבת תקציר, או \"$3\" להצגת קיצורים אחרים.",
+ "tux-editor-shortcut-info": "אפשר ללחוץ על \"$1\" לאישור ומעבר להודעה הבאה, \"$2\" למעבר להודעה הבאה, \"$4\" לכתיבת תקציר או להחזיק \"$3\" להצגת קיצורים אחרים.",
"tux-editor-edit-desc": "עריכת תיעוד",
"tux-editor-add-desc": "הוספת תיעוד",
"tux-editor-suggestions-title": "הצעות",
diff --git a/MLEB/Translate/i18n/core/hr.json b/MLEB/Translate/i18n/core/hr.json
index 975dec69..259d20cd 100644
--- a/MLEB/Translate/i18n/core/hr.json
+++ b/MLEB/Translate/i18n/core/hr.json
@@ -100,6 +100,8 @@
"action-translate-import": "uvoz izvanmrežnih prijevoda",
"right-translate-messagereview": "Provjera prijevoda",
"action-translate-messagereview": "Provjeri prijevode",
+ "right-translate-groupreview": "Mijenjanje stanja radnoga tijeka za skupine poruka",
+ "action-translate-groupreview": "promijenite stanje radnoga tijeka za skupine poruka",
"translate-rcfilters-translations": "Prijevodi",
"translate-rcfilters-translations-only-label": "Prijevodi",
"translate-rcfilters-translations-only-desc": "Promjene stranica s prijevodima.",
@@ -136,7 +138,7 @@
"translate-statsf-language": "Zarezom odvojen popis jezičnih kodova:",
"translate-statsf-group": "Zarezom odvojen popis skupine kodova:",
"translate-statsf-submit": "Prikaži",
- "translate-tag-page-desc": "Prijevod wikistranice [[$2|$1]] prema $3 ($4).",
+ "translate-tag-page-desc": "Prijevod wikistranice [[$2|$1]] s jezika: $3 ($4).",
"translate-sidebar-alltrans": "Na drugim jezicima",
"translations": "Svi prijevodi",
"translations-summary": "Unesite naziv poruke da biste vidjeli sve prijevode.",
@@ -166,6 +168,7 @@
"translate-untranslated": "Neprevedeno",
"translate-percentage-complete": "Dovršeno",
"translate-percentage-fuzzy": "Zastarjelo",
+ "translate-percentage-proofread": "Provjereno",
"translate-languagestats-overall": "Sve skupine poruka zajedno",
"translate-ls-submit": "Prikaži statistiku",
"translate-ls-column-group": "Grupa poruka",
@@ -176,7 +179,7 @@
"translate-mgs-noempty": "Ne prikazuj jezike koji uopće nemaju prijevode",
"translate-mgs-submit": "Prikaži statistiku",
"translate-mgs-column-language": "Jezik",
- "translate-mgs-totals": "Svi jezici zajedno",
+ "translate-mgs-totals": "All $1 {{PLURAL:$1|Jedan jezik|Oba jezika zajedno|Svih $1 jezika zajedno}}",
"translate-mgs-invalid-group": "Navedena skupina $1 ne postoji.",
"translate-mgs-nothing": "Nema se što prikazati za zahtijevane statistike.",
"supportedlanguages": "Podržani jezici",
@@ -209,6 +212,7 @@
"translate-manage-import-summary": "Uvoz nove inačice iz vanjskog izvora",
"translate-manage-conflict-summary": "Uvoz nove inačice iz vanjskog izvora.\nMolimo provjerite.",
"translate-manage-submit": "Izvrši",
+ "translate-manage-intro-other": "Niže je popis promijenjenih prijevoda za $1 jezik.\nProvjerite promjene i izaberite radnju koju želite poduzeti za svaku promjenu.\nAko izaberete zanemariti promjene, ta će radnja biti samo privremena.",
"translate-manage-import-done": "Uvoz završen!",
"importtranslations": "Uvezi prijevode",
"translate-import-from-local": "Snimanje lokalne datoteke:",
@@ -286,7 +290,7 @@
"tux-editor-cancel-button-label": "Otkaži",
"tux-editor-confirm-button-label": "Potvrdi prijevod",
"tux-editor-proofread-button-label": "Označi provjerenim",
- "tux-editor-shortcut-info": "Za spremanje pritisnite \"$1\"; za preskok na sljedeću poruku pritisnite \"$2\"; za sažetak pritisnite \"$4\", a za ostale prečace pritisnite \"$3\".",
+ "tux-editor-shortcut-info": "Za potvrdu i preskok na sljedeću poruku pritisnite \"$1\", za preskok pritisnite \"$2\", za upis sažetka pritisnite \"$4\" te za ostale prečace \"$3\".",
"tux-editor-edit-desc": "Uredi dokumentaciju",
"tux-editor-add-desc": "Dodaj dokumentaciju",
"tux-editor-suggestions-title": "Prijedlozi",
@@ -322,6 +326,7 @@
"tux-proofread-translated-by-self": "Vi ste autor ovog prijevoda",
"tux-empty-list-all": "Ova je skupina poruka prazna",
"tux-empty-list-all-guide": "Izaberite drugu skupinu poruka za prevođenje",
+ "tux-translate-page-no-such-group": "<strong>Naznačena skupina ne postoji.</strong> Molimo Vas, izaberite drugu skupinu poruka.",
"tux-empty-list-translated": "Nema prevedenih poruka",
"tux-empty-list-translated-guide": "Pomozite i Vi prevodeći poruke.",
"tux-empty-list-translated-action": "Nastavi prevoditi",
@@ -352,5 +357,5 @@
"translate-search-more-groups-info": "još $1 {{PLURAL:$1|skupina|skupine|skupina}}",
"translate-ulsdep-title": "Pogrješka u konfiguraciji",
"tux-session-expired": "Više niste prijavljeni. Prijavite se u zasebnoj kartici. Druga mogućnost je da prekopirate nesačuvane prijevode, prijavite se, vratite se na ovu stranicu i ponovo upišete svoje prijevode.",
- "tux-nojs": "Ova stranica zahtijeva JavaScript."
+ "tux-nojs": "Ovaj alat ne radi bez JavaScripta. Javascript je onemogućen, ne radi ili je preglednik nepodržan."
}
diff --git a/MLEB/Translate/i18n/core/hu.json b/MLEB/Translate/i18n/core/hu.json
index d4f71eb8..2f147bae 100644
--- a/MLEB/Translate/i18n/core/hu.json
+++ b/MLEB/Translate/i18n/core/hu.json
@@ -182,6 +182,7 @@
"translate-untranslated": "Lefordítatlan",
"translate-percentage-complete": "Készültségi fok",
"translate-percentage-fuzzy": "Elavult",
+ "translate-percentage-proofread": "Ellenőrizve",
"translate-languagestats-overall": "Valamennyi üzenetcsoport együtt",
"translate-ls-submit": "Statisztika megjelenítése",
"translate-ls-column-group": "Üzenetcsoport",
@@ -198,6 +199,7 @@
"supportedlanguages": "Támogatott nyelvek",
"supportedlanguages-summary": "Ezen a lapon megtalálható a {{SITENAME}} által támogatott összes nyelv, a nyelven dolgozó fordítók neveivel együtt.\n\nEgy fordító minél többet fordított, a neve annál nagyobb betűkkel jelenik meg. Az aláhúzás színe jelzi, hogy az adott fordító legutóbb mikor volt aktív.",
"supportedlanguages-colorlegend": "A színek jelentése: a legutóbbi fordítást $1 napja végezte.",
+ "supportedlanguages-sqlite-error": "Az SQLite nem támogatott",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Fordító}}|Fordítók}}: $1",
"supportedlanguages-recenttranslations": "friss fordítások",
"supportedlanguages-count": "Összesen {{PLURAL:$1|egy|$1}} nyelv.",
@@ -279,6 +281,7 @@
"translate-workflow-autocreated-summary": "Automatikus lap létrehozás $1 munkafolyamat állapothoz.",
"translate-stats-workflow": "Állapot",
"translate-workflowgroup-label": "Munkafolyamat állapotok",
+ "translate-workflowgroup-desc": "Ez az üzenetcsoport tartalmazza a fordítási állapotok üzeneteit.\nAz állapotokat a $wgTranslateWorkflowStates konfigurációs változó tartalmazza.",
"translate-dynagroup-recent-label": "Friss fordítások",
"translate-dynagroup-recent-desc": "Ez az üzenetcsoport tartalmaz minden friss fordítást erre a nyelvre.\nFordítás-ellenőrzéshez hasznos.",
"translate-dynagroup-additions-label": "Legutóbb hozzáadva",
@@ -311,7 +314,7 @@
"tux-editor-cancel-button-label": "Mégse",
"tux-editor-confirm-button-label": "Fordítás megerősítése",
"tux-editor-proofread-button-label": "Megjelölés átnézettként",
- "tux-editor-shortcut-info": "Nyomd meg a „$1” billentyűkombinációt a mentéshez, az „$2”-t a továbblépéshez, az „$4”-t az összefoglaló megadásához vagy az „$3”-ot további gyorsbillentyűk megjelenítéséhez.",
+ "tux-editor-shortcut-info": "Nyomd meg a „$1” billentyűkombinációt a megerősítéshez és a következő üzenetre lépéshez, az „$2”-t az üzenet kihagyásához, az „$4”-t az összefoglaló megadásához vagy tartsd lenyomva az „$3”-ot további gyorsbillentyűk megjelenítéséhez.",
"tux-editor-edit-desc": "Dokumentáció szerkesztése",
"tux-editor-add-desc": "Dokumentáció hozzáadása",
"tux-editor-suggestions-title": "Javaslatok",
diff --git a/MLEB/Translate/i18n/core/ia.json b/MLEB/Translate/i18n/core/ia.json
index 811393e1..20909d0e 100644
--- a/MLEB/Translate/i18n/core/ia.json
+++ b/MLEB/Translate/i18n/core/ia.json
@@ -301,7 +301,7 @@
"tux-editor-cancel-button-label": "Cancellar",
"tux-editor-confirm-button-label": "Confirmar traduction",
"tux-editor-proofread-button-label": "Marcar como revidite",
- "tux-editor-shortcut-info": "Preme \"$1\" pro salveguardar o \"$2\" pro saltar al sequente message o \"$4\" pro fornir un summario o \"$3\" pro altere claves accelerator.",
+ "tux-editor-shortcut-info": "Preme \"$1\" pro confirmar e passar al sequente message, \"$2\" pro saltar, \"$4\" pro fornir un summario o tene premite \"$3\" pro vider altere claves accelerator.",
"tux-editor-edit-desc": "Modificar documentation",
"tux-editor-add-desc": "Adder documentation",
"tux-editor-suggestions-title": "Suggestiones",
diff --git a/MLEB/Translate/i18n/core/ig.json b/MLEB/Translate/i18n/core/ig.json
index 8cd75327..db120eb0 100644
--- a/MLEB/Translate/i18n/core/ig.json
+++ b/MLEB/Translate/i18n/core/ig.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Ukabia"
+ "Ukabia",
+ "Uzoma Ozurumba"
]
},
"translate": "Tụ̀wári ásụ̀sụ̀",
@@ -47,6 +48,7 @@
"translate-gs-speakers": "Ndi na su",
"translate-gs-multiple": "Onuogụgụ kachara otụ",
"translate-gs-total": "Òlé níle",
+ "translate-documentation-language": "Ndokọta ozi",
"tux-edit": "Mèzi",
"tux-editor-cancel-button-label": "Hapụ̀",
"tux-editor-in-other-languages": "Nà asụ̀sụ̀ ndị ọ̀zọ",
diff --git a/MLEB/Translate/i18n/core/it.json b/MLEB/Translate/i18n/core/it.json
index 2b0ecb7a..68fc6c6b 100644
--- a/MLEB/Translate/i18n/core/it.json
+++ b/MLEB/Translate/i18n/core/it.json
@@ -324,7 +324,7 @@
"tux-editor-cancel-button-label": "Annulla",
"tux-editor-confirm-button-label": "Conferma traduzione",
"tux-editor-proofread-button-label": "Contrassegna come revisionata",
- "tux-editor-shortcut-info": "Premi \"$1\" per salvare, \"$2\" per passare al messaggio successivo o \"$4\" per fornire un riassunto o \"$3\" per altre scorciatoie.",
+ "tux-editor-shortcut-info": "Premi \"$1\" per confermare e passare al prossimo messaggio, \"$2\" per saltare, \"$4\" per fornire un riassunto o \"$3\" per vedere altre scorciatoie.",
"tux-editor-edit-desc": "Modifica documentazione",
"tux-editor-add-desc": "Aggiungi documentazione",
"tux-editor-suggestions-title": "Suggerimenti",
diff --git a/MLEB/Translate/i18n/core/ja.json b/MLEB/Translate/i18n/core/ja.json
index 5078b632..934f81ac 100644
--- a/MLEB/Translate/i18n/core/ja.json
+++ b/MLEB/Translate/i18n/core/ja.json
@@ -127,8 +127,8 @@
"translate-rcfilters-translations-only-desc": "翻訳ページの変更。",
"translate-rcfilters-translations-filter-label": "翻訳ではない",
"translate-rcfilters-translations-filter-desc": "翻訳以外の変更",
- "translate-rcfilters-translations-site-label": "システムメッセージの一覧",
- "translate-rcfilters-translations-site-desc": " MediaWiki の名前空間でシステムメッセージをカスタマイズする方法。",
+ "translate-rcfilters-translations-site-label": "システム メッセージ",
+ "translate-rcfilters-translations-site-desc": "MediaWiki 名前空間のシステム メッセージのカスタマイズ。",
"translate-rc-translation-filter": "翻訳を絞り込み:",
"translate-rc-translation-filter-no": "絞り込まない",
"translate-rc-translation-filter-only": "翻訳のみ表示",
@@ -191,6 +191,7 @@
"translate-untranslated": "未翻訳",
"translate-percentage-complete": "完了",
"translate-percentage-fuzzy": "要更新",
+ "translate-percentage-proofread": "査読済",
"translate-languagestats-overall": "合計",
"translate-ls-submit": "統計を表示",
"translate-ls-column-group": "メッセージ群",
@@ -323,7 +324,7 @@
"tux-editor-cancel-button-label": "キャンセル",
"tux-editor-confirm-button-label": "翻訳を確認",
"tux-editor-proofread-button-label": "査読済の印を付ける",
- "tux-editor-shortcut-info": "保存するには「$1」を、次のメッセージへスキップするには「$2」を、要約を入力するには「$4」を、他のショートカットキーについては「$3」を押してください。",
+ "tux-editor-shortcut-info": "確認して次のメッセージへ移動するには「$1」を、単にスキップするには「$2」を、要約を入力するには「$4」を押してください。他のショートカットキーを表示するには「$3」を押し続けてください。",
"tux-editor-edit-desc": "説明文を編集",
"tux-editor-add-desc": "説明文を追加",
"tux-editor-suggestions-title": "提案",
diff --git a/MLEB/Translate/i18n/core/kjp.json b/MLEB/Translate/i18n/core/kjp.json
index ffb630ab..7a2f3b0d 100644
--- a/MLEB/Translate/i18n/core/kjp.json
+++ b/MLEB/Translate/i18n/core/kjp.json
@@ -4,20 +4,84 @@
"Rul1902"
]
},
+ "translate": "ခၠယ့်လာႋဆာ်",
+ "translate-taction-translate": "ခၠယ့်လာႋ",
"translate-taction-lstats": "ဆ်ုခၠါင်ဘာႋသာ့ စ်ုရင့်ကါင်ကါ",
"translate-taction-mstats": "လိက်သုံ့ၜိင်းကုံရွာဲ စ်ုရင့်ကါင်ကါ",
+ "translate-taction-export": "မ်ုသုံ့ထင်း",
+ "translate-page-language": "ဆ်ုခၠါင်ဘာႋသာ့",
+ "translate-page-navigation-legend": "ပ်ုယုံ့",
+ "translate-next": "လ်ုယာ့လိက်မေံၜၠါ်",
+ "translate-prev": "ၯံင်ခွိက် လိက်မေံၜၠါ်",
+ "translate-page-edit": "သံင့်ၜးၯဴ",
+ "translate-edit-title": "သံင့်ၜးၯဴ \"$1\"",
+ "translate-edit-definition": "ပ်ုယုံ့ဆ်ုခၠါင် ဆ်ုမါဏါင်းအ်ုခဝ့်ပ်ုယဝ့်",
+ "translate-edit-translation": "ဆ်ုခၠယ့်ထသယ်လ်ုဖး",
+ "translate-edit-contribute": "ဆ်ုထ္ၜါ",
+ "translate-edit-information": "ပ်ုယုံ့ဆ်ုခၠါင်အ်ုကျံင် ဆ်ုပြိုင့်အ်ုဖၠံင်အ်ုဖၠ ($1)",
+ "translate-edit-in-other-languages": "အ်ုၰာႋၰံင်ဆ်ုခၠါင်ဘာႋသာ့ခဝ့် ပ်ုယုံ့ဆ်ုခၠါင်",
+ "translate-magic-cm-export": "မ်ုသုံ့ထင်း",
"translate-rcfilters-translations": "ဆ်ုခၠယ်ထသယ်လ်ုဖး",
- "translationstats": "ခၠယ်ထသယ် စ်ုရင့်ကါင်ကါ",
+ "translate-rcfilters-translations-only-label": "ဆ်ုခၠယ့်ထသယ်လ်ုဖး",
+ "translationstats": "ဆ်ုခၠယ့် စ်ုရင့်ကါင်ကါ",
+ "translate-stats-edits": "ဆ်ုသံင့်ၜးၯဴလ်ုဖး",
+ "translate-stats-users": "ခၠယ့်ဏင့်ဆာႋလ်ုဖး",
+ "translate-stats-registrations": "ပ္တိင့်ဏင့်ဆာႋဏါင်း",
"translate-sidebar-alltrans": "အ်ုၰာႋၰံင် ဆ်ုခၠါင်ဘာႋသာ့လ်ုဖးသိုဝ်",
+ "translations": "ခၠယ့်ထလုက်ဆိင့်",
"translate-translations-fieldset-title": "လိက်သုံ့ၜိင်း",
"translate-translations-messagename": "အ်ုမၠိင်:",
"translate-translations-project": "ပ်ုရောဲဂျက်:",
"languagestats": "ဆ်ုခၠါင်ဘာႋသာ့ စ်ုရင့်ကါင်ကါ",
- "languagestats-stats-for": "$1 ($2) အ်ုၯင်း ခၠယ်ထသယ် စ်ုရင့်ကါင်ကါ",
- "languagestats-recenttranslations": "လ်ုယိက်လ်ုမဝ်ႋဆ်ုအင်းတာင်",
+ "languagestats-summary": "လိက်မေံၜၠါ်ယိုဝ် ဆ်ုခၠါင်ဘာႋသာ့လ်ုဏါင်းၯင်ႋ လိက်ၜိင်းသုံ့ကုံလွာဲလုက်ဆိင့် ဆ်ုခၠယ့်စ်ုရင့်ကါင်ကါဏှ် ဏဲဖှ်ေထဝေ့ဆေဝ်ႋလှ်။",
+ "languagestats-stats-for": "$1 ($2) အ်ုၯင်း ခၠယ့်ထသယ် စ်ုရင့်ကါင်ကါ",
+ "languagestats-recenttranslations": "လ်ုယိက်လ်ုမဝ်ႋ ဆ်ုခၠယ့်လ်ုဖး",
+ "translate-langstats-expand": "မာလာဲ",
+ "translate-langstats-collapse": "မာအိင်း",
+ "translate-langstats-expandall": "ဖၠဟ်လဲါလုက်ကာ",
+ "translate-langstats-collapseall": "သါ်သူးလုက်ကာ",
+ "translate-language-code": "ဆ်ုခၠါင်ဘာႋသာ့ၜီးၜါ်",
+ "translate-language-code-field-name": "ဆ်ုခၠါင်ဘာႋသာ့ၜီးၜါ်:",
+ "translate-suppress-complete": "ဍုဂ်ဍုဂ်ပါင်ပါင်ခၠယ့်ထ လိက်သုံ့ကုံလွာဲဏှ် မ်ုကာၜါ်ထ",
+ "translate-ls-noempty": "ခၠယ့်ထလ်ုဍုဂ်ပါင် လိက်သုံ့ကုံလွာဲဏှ် မ်ုကာၜါ်",
+ "translate-language": "ဆ်ုခၠါင်ဘာႋသာ့",
+ "translate-total": "လိက်ဆ်ုသုံ့လ်ုဖး",
+ "translate-untranslated": "လ်ုခၠယ့်ထၯး",
+ "translate-percentage-complete": "ဆ်ုၯံင်ခွိက်",
+ "translate-percentage-fuzzy": "ဆ်ုအှ်ထဝ်ႋလင်ႋခါင့်",
+ "translate-percentage-proofread": "မ်ုယောဝ်ႋထါင်",
+ "translate-ls-submit": "မ်ုဍုဂ်ဏဲ စ်ုရင့်ကါင်ကါ",
+ "translate-ls-column-group": "လိက်ဆ်ုသုံ့ကုံလွာဲ",
"translate-mgs-pagename": "လိက်သုံ့ၜိင်းကုံရွာဲ စ်ုရင့်ကါင်ကါ",
- "supportedlanguages-recenttranslations": "လ်ုယိက်လ်ုမဝ်ႋဆ်ုအင်းတာင်",
+ "translate-mgs-fieldset": "မ်ုဍုဂ်ဏဲ လုဲႋၯးသးလ်ုဖး",
+ "translate-mgs-group": "လိက်ဆ်ုသုံ့ကုံလွာဲ:",
+ "translate-mgs-submit": "မ်ုဍုဂ်ဏဲ စ်ုရင့်ကါင်ကါ",
+ "translate-mgs-column-language": "ဆ်ုခၠါင်ဘာႋသာ့",
+ "supportedlanguages-summary": "လိက်မေံၜၠါ်ယိုဝ် {{SITENAME}} မှ ထောက်ပံ့ထားသည့် ဘာသာစကားအားလုံး၏ စာရင်းကို ပြသထားပြီး ယင်းဘာသာစကားတွင် လုပ်ဆောင်နေသော ဘာသာပြန်သူများ၏ အမည်များကို ဖော်ပြထားသည်။ တည်းဖြတ်မှုပိုများသော ဘာသာပြန်သူများကို ပိုကြီးသောနာမည်ဖြင့် ဖော်ပြထားပြီး အောက်ခြေမျဉ်းသည် ဘာသာပြန်သူက ဤနေရာတွင် လတ်တလော မည်မျှတက်ကြွစွာ ပါဝင်ခဲ့သည်ကို ဖော်ပြသည်။",
+ "supportedlanguages-colorlegend": "အ်ုယံင့်အ်ုၯင်ႋ လိက်မါဏါင်း $1 မူႋဏီယိက်ခါ့ လင်ခါင့်ထုက် ဆ်ုခၠယ့်ဝေ့",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|ခၠယ့်ဏင့်ဆာႋ}}|ခၠယ့်ဏင့်ဆာႋလ်ုဖး}}: $1",
+ "supportedlanguages-recenttranslations": "လ်ုယိက်လ်ုမဝ်ႋ ဆ်ုခၠယ့်လ်ုဖး",
+ "translate-manage-action-import": "ဆူ့ဍုဂ်သုံ့လင်",
+ "translate-js-support": "မ်ုအင်းကိင်ဆ်ုအင်းစာ",
"translate-documentation-language": "လိက်ၜၠာ် လိက်မါၮါင်း",
- "translate-dynagroup-recent-label": "လ်ုယိက်လ်ုမဝ်ႋဆ်ုအင်းတာင်",
- "tux-editor-in-other-languages": "အ်ုၰာႋၰံင် ဆ်ုခၠါင်ဘာႋသာ့လ်ုဖးသိုဝ်"
+ "translate-searchprofile": "ဆ်ုခၠယ့်ထသယ်လ်ုဖး",
+ "translate-dynagroup-recent-label": "လ်ုယိက်လ်ုမဝ်ႋ ဆ်ုခၠယ့်လ်ုဖး",
+ "translate-msggroupselector-projects": "လိက်ဆ်ုသုံ့ကုံလွာဲ",
+ "translate-msggroupselector-search-all": "လုက်ဆိင့်",
+ "tux-languageselector": "မ်ုခၠယ့်အိုဝ်ဏှ်",
+ "tux-tab-all": "လုက်ဆိင့်",
+ "tux-tab-untranslated": "လ်ုခၠယ့်ထၯး",
+ "tux-tab-outdated": "ဆ်ုအှ်ထဝ်ႋလင်ႋခါင့်",
+ "tux-tab-translated": "ဆ်ုခၠယ့်ထ",
+ "tux-edit": "သံင့်ၜးၯဴ",
+ "tux-status-fuzzy": "ဆ်ုအှ်ထဝ်ႋလင်ႋခါင့်",
+ "tux-status-translated": "ဆ်ုခၠယ့်ထ",
+ "tux-editor-in-other-languages": "အ်ုၰာႋၰံင် ဆ်ုခၠါင်ဘာႋသာ့လ်ုဖးသိုဝ်",
+ "tux-proofread-edit-label": "သံင့်ၜးၯဴ",
+ "tux-empty-list-translated-action": "မ်ုခၠယ့်အိုဝ်",
+ "tux-editor-expand-tooltip": "မာလာဲ",
+ "tux-editor-collapse-tooltip": "မာအိင်း",
+ "tux-editor-message-tools-history": "မေင်ႋစိင်",
+ "tux-editor-message-tools-delete": "ထုဂ်ဆိင့်",
+ "tux-editor-message-tools-translations": "ဆ်ုခၠယ့်လ်ုဖးလုက်ဆိင့်"
}
diff --git a/MLEB/Translate/i18n/core/km.json b/MLEB/Translate/i18n/core/km.json
index 8d9898bd..cd8eb540 100644
--- a/MLEB/Translate/i18n/core/km.json
+++ b/MLEB/Translate/i18n/core/km.json
@@ -234,7 +234,7 @@
"tux-editor-placeholder": "ការបកប្រែរបស់អ្នក",
"tux-editor-editsummary-placeholder": "ចំណារពន្យល់ (ដាក់ក៏បានមិនដាក់ក៏បាន)",
"tux-editor-paste-original-button-label": "បិតចម្លងឃ្លាដើម",
- "tux-editor-discard-changes-button-label": "បោះបង់ការកែប្រែ",
+ "tux-editor-discard-changes-button-label": "បោះបង់បន្លាស់ប្ដូរ",
"tux-editor-save-button-label": "រក្សាទុកការបកប្រែ",
"tux-editor-skip-button-label": "រំលងទៅកាន់សារបន្ទាប់",
"tux-editor-cancel-button-label": "បោះបង់",
diff --git a/MLEB/Translate/i18n/core/ko.json b/MLEB/Translate/i18n/core/ko.json
index 79b30a2e..11d9a975 100644
--- a/MLEB/Translate/i18n/core/ko.json
+++ b/MLEB/Translate/i18n/core/ko.json
@@ -183,6 +183,7 @@
"translate-untranslated": "미번역",
"translate-percentage-complete": "완료",
"translate-percentage-fuzzy": "오래됨",
+ "translate-percentage-proofread": "검토됨",
"translate-languagestats-overall": "모든 메시지 그룹의 합계",
"translate-ls-submit": "통계 보기",
"translate-ls-column-group": "메시지 그룹",
@@ -313,7 +314,7 @@
"tux-editor-cancel-button-label": "취소",
"tux-editor-confirm-button-label": "번역 확인",
"tux-editor-proofread-button-label": "검토한 것으로 표시",
- "tux-editor-shortcut-info": "저장하려면 \"$1\"을, 다음 메시지로 넘어가려면 \"$2\"를, 요약을 제공하려면 \"$4\"를, 다른 단축키를 보려면 \"$3\"을 누르세요.",
+ "tux-editor-shortcut-info": "확인 후 다음 메시지로 이동하려면 \"$1\"을, 건너뛰려면 \"$2\"를, 요약을 제공하려면 \"$4\"를 누르시고, 다른 단축키를 보려면 \"$3\"을 누르고 계십시오.",
"tux-editor-edit-desc": "설명문 편집",
"tux-editor-add-desc": "설명문 추가",
"tux-editor-suggestions-title": "제안",
diff --git a/MLEB/Translate/i18n/core/lb.json b/MLEB/Translate/i18n/core/lb.json
index 43ce343d..ae6b025d 100644
--- a/MLEB/Translate/i18n/core/lb.json
+++ b/MLEB/Translate/i18n/core/lb.json
@@ -171,6 +171,7 @@
"translate-untranslated": "Net iwwersat",
"translate-percentage-complete": "Fäerdeg zu",
"translate-percentage-fuzzy": "Net à jour",
+ "translate-percentage-proofread": "Nogekuckt",
"translate-languagestats-overall": "All Systemmessagen zesummen",
"translate-ls-submit": "Statistike weisen",
"translate-ls-column-group": "Grupp vu Messagen",
diff --git a/MLEB/Translate/i18n/core/lv.json b/MLEB/Translate/i18n/core/lv.json
index 0125109f..b1a5643a 100644
--- a/MLEB/Translate/i18n/core/lv.json
+++ b/MLEB/Translate/i18n/core/lv.json
@@ -64,6 +64,7 @@
"right-translate-manage": "Ziņojumu grupu pārvaldība",
"action-translate-manage": "ziņojumu grupu pārvaldība",
"right-translate-messagereview": "Pārskatīt tulkojumus",
+ "action-translate-messagereview": "pārskatīt tulkojumus",
"translate-rcfilters-translations": "Tulkojumi",
"translate-rcfilters-translations-only-label": "Tulkojumi",
"translate-rcfilters-translations-only-desc": "Izmaiņas tulkotās lapās",
@@ -133,6 +134,7 @@
"translate-manage-action-import": "Importēt",
"translate-manage-action-ignore": "Ignorēt",
"translate-manage-submit": "Izpildīt",
+ "translate-manage-import-done": "Imports pabeigts!",
"importtranslations": "Importēt tulkojumus",
"translate-import-load": "Ielādēt failu",
"translate-import-err-ul-failed": "Faila augšupielāde neizdevās.",
diff --git a/MLEB/Translate/i18n/core/lzz.json b/MLEB/Translate/i18n/core/lzz.json
index 631c738a..dc230498 100644
--- a/MLEB/Translate/i18n/core/lzz.json
+++ b/MLEB/Translate/i18n/core/lzz.json
@@ -1,12 +1,14 @@
{
"@metadata": {
"authors": [
- "Bombola"
+ "Bombola",
+ "Cem Rize"
]
},
"translate-page-group": "Grubi",
"translate-page-language": "Nena",
"translate-stats-users": "Magoktirepe",
"translate-statsf-scale-days": "Ndğalepe",
- "translate-statsf-scale-hours": "Saat'epe"
+ "translate-statsf-scale-hours": "Saat'epe",
+ "translate-documentation-language": "İleti belgelemesi"
}
diff --git a/MLEB/Translate/i18n/core/min.json b/MLEB/Translate/i18n/core/min.json
index e2182cf9..6c5c0d0c 100644
--- a/MLEB/Translate/i18n/core/min.json
+++ b/MLEB/Translate/i18n/core/min.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Iwan Novirion",
- "Naval Scene"
+ "Naval Scene",
+ "Muhraz"
]
},
"translate-statsf-start": "Tanggal mulai:",
@@ -17,5 +18,6 @@
"translate-statsf-count-registrations": "Pangguno baru",
"translate-sidebar-alltrans": "Dalam bahaso lain",
"translate-js-support": "Batanyo",
+ "translate-documentation-language": "Pambakehan pasan",
"translate-searchprofile-tooltip": "Cari dari sado tajamahan"
}
diff --git a/MLEB/Translate/i18n/core/mk.json b/MLEB/Translate/i18n/core/mk.json
index 28ecc943..adbbdd26 100644
--- a/MLEB/Translate/i18n/core/mk.json
+++ b/MLEB/Translate/i18n/core/mk.json
@@ -179,6 +179,7 @@
"translate-untranslated": "Непреведени",
"translate-percentage-complete": "Потполност",
"translate-percentage-fuzzy": "Застарени",
+ "translate-percentage-proofread": "Проверени",
"translate-languagestats-overall": "Сите групи на пораки заедно",
"translate-ls-submit": "Дај статистики",
"translate-ls-column-group": "Група пораки",
@@ -212,7 +213,7 @@
"translate-smg-submitted": "Формулациите на пораките се подновени. Измените се обработуваат во позадина.",
"translate-smg-more": "Ќе има уште промени за обработка откако ќе ги поднесете овие.",
"translate-smg-left": "Содржина на пораката во викито",
- "translate-smg-right": "Престојни промени",
+ "translate-smg-right": "Претстојни промени",
"translate-manage-import-diff": "Порака $1 | Дејства: $2",
"translate-manage-import-new": "Нова порака $1",
"translate-manage-import-deleted": "Избришана порака $1",
@@ -312,7 +313,7 @@
"tux-editor-cancel-button-label": "Откажи",
"tux-editor-confirm-button-label": "Потврди превод",
"tux-editor-proofread-button-label": "Означи како проверено",
- "tux-editor-shortcut-info": "Стиснете на „$1“ за да зачувате, „$2“ за да прејдете на следната порака, „$4“ за да дадете опис, или пак „$3“ за други кратенки.",
+ "tux-editor-shortcut-info": "Стиснете на „$1“ за да потврдите и да прејдете на следната порака, „$2“ за да прескокнете, „$4“ за да весете опис или држете го „$3“ за да видите други кратенки.",
"tux-editor-edit-desc": "Уреди документација",
"tux-editor-add-desc": "Додај документација",
"tux-editor-suggestions-title": "Предлози",
diff --git a/MLEB/Translate/i18n/core/my.json b/MLEB/Translate/i18n/core/my.json
index a00a43ea..861c22c2 100644
--- a/MLEB/Translate/i18n/core/my.json
+++ b/MLEB/Translate/i18n/core/my.json
@@ -128,6 +128,7 @@
"translate-untranslated": "ဘာသာမပြန်ထားသော",
"translate-percentage-complete": "ပြီးမြောက်မှု",
"translate-percentage-fuzzy": "ခေတ်နောက်ကျနေသော",
+ "translate-percentage-proofread": "ပြန်လည်ဆန်းစစ်ပြီး",
"translate-languagestats-overall": "မက်ဆေ့အုပ်စုအားလုံး အတူတကွ",
"translate-ls-submit": "စာရင်းအင်း ပြရန်",
"translate-ls-column-group": "မက်ဆေ့အုပ်စု",
diff --git a/MLEB/Translate/i18n/core/myv.json b/MLEB/Translate/i18n/core/myv.json
index 4793e8ef..e9264f59 100644
--- a/MLEB/Translate/i18n/core/myv.json
+++ b/MLEB/Translate/i18n/core/myv.json
@@ -63,5 +63,6 @@
"translate-untranslated": "Апак ютавто",
"translate-percentage-fuzzy": "Таштамозь",
"translate-manage-action-import": "Совавтомс",
- "translate-manage-submit": "Топавтомс"
+ "translate-manage-submit": "Топавтомс",
+ "translate-documentation-language": "Пачтямнеде документация"
}
diff --git a/MLEB/Translate/i18n/core/ne.json b/MLEB/Translate/i18n/core/ne.json
index 49362cd2..c918a3c9 100644
--- a/MLEB/Translate/i18n/core/ne.json
+++ b/MLEB/Translate/i18n/core/ne.json
@@ -103,6 +103,7 @@
"translate-untranslated": "अनुवाद नगरिएका",
"translate-percentage-complete": "सकिएका",
"translate-percentage-fuzzy": "पुराना (काम नलाग्ने)",
+ "translate-percentage-proofread": "समीक्षा गरियो",
"translate-ls-column-group": "सन्देश समूह",
"translate-mgs-group": "सन्देश समूहः",
"translate-mgs-column-language": "भाषा",
diff --git a/MLEB/Translate/i18n/core/nl.json b/MLEB/Translate/i18n/core/nl.json
index 706597d0..e4cdfc42 100644
--- a/MLEB/Translate/i18n/core/nl.json
+++ b/MLEB/Translate/i18n/core/nl.json
@@ -14,7 +14,8 @@
"Mar(c)",
"Southparkfan",
"Sjoerddebruin",
- "Mainframe98"
+ "Mainframe98",
+ "Elroy"
]
},
"translate": "Vertalen",
@@ -182,6 +183,7 @@
"translate-untranslated": "Te vertalen",
"translate-percentage-complete": "Vertaald",
"translate-percentage-fuzzy": "Verouderd",
+ "translate-percentage-proofread": "Gecontroleerd",
"translate-languagestats-overall": "Alle berichtengroepen samen",
"translate-ls-submit": "Statistieken weergeven",
"translate-ls-column-group": "Berichtengroep",
@@ -198,6 +200,7 @@
"supportedlanguages": "Ondersteunde talen",
"supportedlanguages-summary": "Op deze pagina wordt een lijst van alle talen die in {{SITENAME}} worden ondersteund weergegeven, samen met de namen van de vertalers die werken aan die taal.\nDe naam van een vertaler wordt groter weergegeven als deze meer bewerkingen heeft gemaakt.\nDe kleur van een onderstreping geeft aan hoe recent een vertaler actief is geweest.",
"supportedlanguages-colorlegend": "Legenda voor de kleuren: laatste vertaling $1 dagen geleden.",
+ "supportedlanguages-sqlite-error": "SQLite wordt niet ondersteund",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Vertaler}}|Vertalers}}: $1",
"supportedlanguages-recenttranslations": "recente vertalingen",
"supportedlanguages-count": "$1 {{PLURAL:$1|taal|talen}} in totaal.",
@@ -371,6 +374,7 @@
"tux-editor-message-tools-history": "Geschiedenis",
"tux-editor-message-tools-delete": "Verwijderen",
"tux-editor-message-tools-translations": "Alle vertalingen",
+ "tux-editor-message-tools-linktothis": "Aan dit bericht koppelen",
"tux-editor-loading": "Bezig met laden…",
"translate-search-more-languages-info": "Nog $1 {{PLURAL:$1|taal|talen}}",
"translate-statsbar-tooltip": "$1% vertaald, $2% gecontroleerd",
diff --git a/MLEB/Translate/i18n/core/pl.json b/MLEB/Translate/i18n/core/pl.json
index 3f789992..28d326aa 100644
--- a/MLEB/Translate/i18n/core/pl.json
+++ b/MLEB/Translate/i18n/core/pl.json
@@ -27,12 +27,15 @@
"Wpedzich",
"Žekřil71pl",
"The Polish",
- "Tsca"
+ "Tsca",
+ "Railfail536",
+ "CiaPan"
]
},
"translate": "Przetłumacz",
"translate-extensionname": "Przetłumacz",
"translate-desc": "[[Special:Translate|Strona specjalna]] umożliwiająca tłumaczenie MediaWiki oraz innych programów",
+ "translate-fuzzybot-desc": "To jest specjalne konto systemowe używane przez rozszerzenie MediaWiki [https://www.mediawiki.org/wiki/Extension:Translate Translate] służące do utrzymywania tłumaczeń.\nTo konto to część oprogramowania MediaWiki - nie jest prowadzone przez żadnego użytkownika.",
"translate-taskui-export-to-file": "Eksportuj w formacie macierzystym",
"translate-taskui-export-as-po": "Eksportuj do tłumaczenia off-line",
"translate-taction-translate": "Przetłumacz",
@@ -198,6 +201,7 @@
"translate-untranslated": "Nieprzetłumaczone",
"translate-percentage-complete": "Przetłumaczone",
"translate-percentage-fuzzy": "Zdezaktualizowane",
+ "translate-percentage-proofread": "Przejrzane",
"translate-languagestats-overall": "Komunikaty ze wszystkich grup",
"translate-ls-submit": "Pokaż statystyki",
"translate-ls-column-group": "Grupa komunikatów",
@@ -214,6 +218,7 @@
"supportedlanguages": "Obsługiwane języki",
"supportedlanguages-summary": "Na tej stronie znajduje się lista wszystkich języków, obsługiwanych przez {{GRAMMAR:B.lp|{{SITENAME}}}}, razem z pseudonimami tłumaczy, pracującymi w danym języku.\nWiększa czcionka świadczy o większej liczbie edycji wykonanych przez tłumacza.\nKolorem podkreślenia wyróżniono jak dawno tłumacz był aktywny.",
"supportedlanguages-colorlegend": "Znaczenie koloru – ostatnie tłumaczenie $1 dni temu.",
+ "supportedlanguages-sqlite-error": "SQLite nie jest obsługiwane",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tłumacz|Tłumaczka}}|Tłumacze}}: $1",
"supportedlanguages-recenttranslations": "ostatnie tłumaczenia",
"supportedlanguages-count": "Razem $1 {{PLURAL:$1|język|języki|języków}}.",
@@ -279,8 +284,8 @@
"translate-searchprofile-note": "Więcej opcji wyszukiwania dostępnych jest w [$1 wyszukiwarce tłumaczeń].",
"translate-search-languagefilter": "Filtruj według języka",
"translate-search-nofilter": "Bez filtrowania",
- "log-name-translationreview": "Rejestr zatwierdzania tłumaczeń",
- "log-description-translationreview": "Zapisuje wszystkie zatwierdzenia tłumaczeń i grupy komunikatów.",
+ "log-name-translationreview": "Rejestr przeglądu tłumaczeń",
+ "log-description-translationreview": "Rejestruje wszystkie przeglądy tłumaczeń i grupy komunikatów.",
"logentry-translationreview-message": "$1 {{GENDER:$2|przejrzał|przejrzała}} tłumaczenie $3",
"logentry-translationreview-group": "$1 {{GENDER:$2|zmienił|zmieniła}} status tłumaczeń strony $3 na język $4 z $6 na $7",
"group-translate-sandboxed": "Niezatwierdzeni tłumacze",
@@ -328,7 +333,7 @@
"tux-editor-cancel-button-label": "Anuluj",
"tux-editor-confirm-button-label": "Potwierdź tłumaczenie",
"tux-editor-proofread-button-label": "Oznacz jako przejrzane",
- "tux-editor-shortcut-info": "Naciśnij \"$1\", aby zapisać, \"$2\", aby przejść do następnego komunikatu, lub \"$4\", aby podać opis zmian lub \"$3\" dla innych skrótów.",
+ "tux-editor-shortcut-info": "Naciśnij „$1”, aby zatwierdzić i przejść do następnego komunikatu, lub „$2”, aby pominąć, lub „$4”, aby podać opis zmian lub przytrzymaj „$3”, aby zobaczyć inne skróty.",
"tux-editor-edit-desc": "Edytuj dokumentację",
"tux-editor-add-desc": "Dodaj dokumentację",
"tux-editor-suggestions-title": "Sugestie",
diff --git a/MLEB/Translate/i18n/core/ps.json b/MLEB/Translate/i18n/core/ps.json
index 577e54c9..2288f99b 100644
--- a/MLEB/Translate/i18n/core/ps.json
+++ b/MLEB/Translate/i18n/core/ps.json
@@ -3,7 +3,8 @@
"authors": [
"Ahmed-Najib-Biabani-Ibrahimkhel",
"Waldir",
- "Baloch Khan"
+ "Baloch Khan",
+ "Amjad Khan"
]
},
"translate": "ژباړل",
diff --git a/MLEB/Translate/i18n/core/pt-br.json b/MLEB/Translate/i18n/core/pt-br.json
index 058b1fc8..be800c73 100644
--- a/MLEB/Translate/i18n/core/pt-br.json
+++ b/MLEB/Translate/i18n/core/pt-br.json
@@ -189,6 +189,7 @@
"translate-untranslated": "Não traduzidas",
"translate-percentage-complete": "Progresso",
"translate-percentage-fuzzy": "Desatualizadas",
+ "translate-percentage-proofread": "Revisado",
"translate-languagestats-overall": "Soma de todos os grupos de mensagens",
"translate-ls-submit": "Mostrar estatísticas",
"translate-ls-column-group": "Grupo de mensagens",
@@ -322,7 +323,7 @@
"tux-editor-cancel-button-label": "Cancelar",
"tux-editor-confirm-button-label": "Confirmar tradução",
"tux-editor-proofread-button-label": "Marcar como revisado",
- "tux-editor-shortcut-info": "Pressione \"$1\" para salvar, \"$2\" para pular para a mensagem seguinte, \"$4\" para introduzir um súmario ou \"$3\" para outros atalhos.",
+ "tux-editor-shortcut-info": "Pressione \"$1\" para confirmar e passar à mensagem seguinte, \"$2\" para pular, \"$4\" para fornecer um resumo ou mantenha premido \"$3\" para ver outros atalhos.",
"tux-editor-edit-desc": "Editar documentação",
"tux-editor-add-desc": "Adicionar documentação",
"tux-editor-suggestions-title": "Sugestões",
@@ -352,7 +353,7 @@
"tux-messagetable-more-messages": "mais $1 {{PLURAL:$1|mensagem|mensagens}}",
"tux-messagetable-loading-messages": "Carregando {{PLURAL:$1|mensagem|mensagens}}.",
"tux-message-filter-placeholder": "Filtrar lista",
- "tux-message-filter-result": "{{PLURAL:$1|Encontrado $1 resultado|Encontrados $1 resultados}} para \"$2\"",
+ "tux-message-filter-result": "{{PLURAL:$1|Encontrado $1 resultado|Encontrados $1 resultados}} para “$2”",
"tux-message-filter-advanced-button": "Pesquisa avançada",
"tux-message-filter-optional-messages-label": "Mensagens opcionais",
"tux-proofread-translated-by-self": "Traduzido por você",
diff --git a/MLEB/Translate/i18n/core/pt.json b/MLEB/Translate/i18n/core/pt.json
index 856aa33e..fc3bb3e1 100644
--- a/MLEB/Translate/i18n/core/pt.json
+++ b/MLEB/Translate/i18n/core/pt.json
@@ -184,6 +184,7 @@
"translate-untranslated": "Não traduzidas",
"translate-percentage-complete": "Progresso",
"translate-percentage-fuzzy": "Desatualizadas",
+ "translate-percentage-proofread": "Revistas",
"translate-languagestats-overall": "Todos os grupos de mensagens em conjunto",
"translate-ls-submit": "Mostrar estatísticas",
"translate-ls-column-group": "Grupo de mensagens",
@@ -315,7 +316,7 @@
"tux-editor-cancel-button-label": "Cancelar",
"tux-editor-confirm-button-label": "Confirmar a tradução",
"tux-editor-proofread-button-label": "Marcar como revista",
- "tux-editor-shortcut-info": "Prima \"$1\" para gravar ou \"$2\" para saltar para a mensagem seguinte ou \"$4\" para fornecer um resumo ou \"$3\" para outros atalhos.",
+ "tux-editor-shortcut-info": "Prima \"$1\" para confirmar e passar à mensagem seguinte, \"$2\" para saltar, \"$4\" para fornecer um resumo ou mantenha premido \"$3\" para ver outros atalhos.",
"tux-editor-edit-desc": "Editar a documentação",
"tux-editor-add-desc": "Adicionar documentação",
"tux-editor-suggestions-title": "Sugestões",
diff --git a/MLEB/Translate/i18n/core/qqq.json b/MLEB/Translate/i18n/core/qqq.json
index 62849ed0..e23357be 100644
--- a/MLEB/Translate/i18n/core/qqq.json
+++ b/MLEB/Translate/i18n/core/qqq.json
@@ -210,8 +210,9 @@
"translate-language": "Table header at [[Special:LanguageStats]].\n\n{{Identical|Language}}",
"translate-total": "Table header at [[Special:LanguageStats]].\n{{Identical|Message}}",
"translate-untranslated": "Column header in [[Special:LanguageStats]] for number of untranslated messages in a message group.\n{{Identical|Untranslated}}",
- "translate-percentage-complete": "Used in [[Special:LanguageStats]].",
- "translate-percentage-fuzzy": "Used in [[Special:LanguageStats]].\n{{Identical|Outdated}}",
+ "translate-percentage-complete": "Used as column header in [[Special:LanguageStats]] and [[Special:MessageGroupStats]].",
+ "translate-percentage-fuzzy": "Used as column header in [[Special:LanguageStats]] and [[Special:MessageGroupStats]].\n{{Identical|Outdated}}",
+ "translate-percentage-proofread": "Used as column header in [[Special:LanguageStats]] and [[Special:MessageGroupStats]].",
"translate-languagestats-overall": "Label for summary row on [[Special:LanguageStats]]",
"translate-ls-submit": "Submit button text on [[Special:LanguageStats]] and [[Special:MessageGroupStats]].",
"translate-ls-column-group": "Column header in [[Special:LanguageStats]].\n{{Identical|Message group}}",
diff --git a/MLEB/Translate/i18n/core/roa-tara.json b/MLEB/Translate/i18n/core/roa-tara.json
index 9d17e0c2..e8e71cce 100644
--- a/MLEB/Translate/i18n/core/roa-tara.json
+++ b/MLEB/Translate/i18n/core/roa-tara.json
@@ -173,6 +173,7 @@
"translate-untranslated": "Senza traduzione",
"translate-percentage-complete": "% de Combletamende",
"translate-percentage-fuzzy": "Non aggiornate",
+ "translate-percentage-proofread": "Reviste",
"translate-languagestats-overall": "Tutte le gruppe de messàgge 'nzieme",
"translate-ls-submit": "Fà vedè le statisteche",
"translate-ls-column-group": "Gruppe de messàgge",
@@ -306,7 +307,7 @@
"tux-editor-cancel-button-label": "Annulle",
"tux-editor-confirm-button-label": "Conferme 'a traduzione",
"tux-editor-proofread-button-label": "Signe cumme reviste",
- "tux-editor-shortcut-info": "Cazze \"$1\" pe reggistrà o \"$2\" pe zumbà a 'u prossime messàgge o \"$4\" pe pigghià 'u riepiloghe o \"$3\" pe otre cose.",
+ "tux-editor-shortcut-info": "Cazze \"$1\" pe confermà e spustà a 'u prossime messàgge, \"$2\" da zumbà, \"$4\" pe pigghià 'u riepiloghe o \"$3\" pe otre cose.",
"tux-editor-edit-desc": "Cange 'a documendazione",
"tux-editor-add-desc": "Aggiunge 'a documendazione",
"tux-editor-suggestions-title": "Suggereminde",
diff --git a/MLEB/Translate/i18n/core/ru.json b/MLEB/Translate/i18n/core/ru.json
index 08fefc6d..fd512e3c 100644
--- a/MLEB/Translate/i18n/core/ru.json
+++ b/MLEB/Translate/i18n/core/ru.json
@@ -124,14 +124,14 @@
"prefs-translate": "Настройки перевода",
"translate-pref-editassistlang-help": "Разделённый запятыми список кодов языков.\nПереводы на эти языки будут показаны при правке сообщений.\nСписок по умолчанию зависит от вашего языка.",
"translate-pref-editassistlang-bad": "Неверный языковой код в списке:\n<nowiki>$1</nowiki>.",
- "right-translate": "правка с использованием интерфейса перевода",
- "right-translate-manage": "управление группами сообщений",
+ "right-translate": "Правка с использованием интерфейса перевода",
+ "right-translate-manage": "Управление группами сообщений",
"action-translate-manage": "управление группами сообщений",
- "right-translate-import": "импортирование переводов, выполненных в оффлайне",
+ "right-translate-import": "Импортирование переводов, выполненных в оффлайне",
"action-translate-import": "импорт переводов, выполненных в оффлайне",
- "right-translate-messagereview": "досмотр переводов",
+ "right-translate-messagereview": "Досмотр переводов",
"action-translate-messagereview": "проверку переводов",
- "right-translate-groupreview": "изменять состояние обработки групп сообщений",
+ "right-translate-groupreview": "Изменять состояние обработки групп сообщений",
"action-translate-groupreview": "изменение состояния групп сообщений",
"translate-rcfilters-translations": "Переводы",
"translate-rcfilters-translations-only-label": "Переводы",
@@ -202,6 +202,7 @@
"translate-untranslated": "Непереведённые",
"translate-percentage-complete": "Выполнено",
"translate-percentage-fuzzy": "Устарело",
+ "translate-percentage-proofread": "Проверенные",
"translate-languagestats-overall": "Сообщения всех групп",
"translate-ls-submit": "Показать статистику",
"translate-ls-column-group": "Группа сообщений",
@@ -219,6 +220,7 @@
"supportedlanguages-summary": "На этой странице приведён список поддерживаемых проектом {{SITENAME}} языков\nвместе с именами тех, кто здесь трудится над переводами на эти языки.\nИмя переводчика отображается тем крупнее, чем больше правок он сделал.\nПо цвет подчёркивания можно понять, насколько давно переводчик последний раз совершал здесь какое-либо действие.",
"supportedlanguages-colorlegend": "Цветовая легенда: последний перевод был сделан $1 {{PLURAL:$1|день|дня|дней}} назад.",
"supportedlanguages-portallink": "[$1] $2 — $3",
+ "supportedlanguages-sqlite-error": "SQLite не поддерживается",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Переводчик|Переводчица}}|Переводчики}}: $1",
"supportedlanguages-recenttranslations": "недавние переводы",
"supportedlanguages-count": "Всего $1 {{PLURAL:$1|язык|языка|языков}}.",
@@ -290,7 +292,7 @@
"logentry-translationreview-group": "$1 {{GENDER:$2|изменил|изменила}} состояние переводов страницы «$3» на $4 язык с «$6» на «$7»",
"group-translate-sandboxed": "Неутвержденные переводчики",
"group-translate-sandboxed-member": "{{GENDER:$1|неутверждённый переводчик|неутверждённая переводчица}}",
- "right-translate-sandboxmanage": "управление правами участников, ещё не получивших полных прав (sandboxed users)",
+ "right-translate-sandboxmanage": "Управление участниками, ещё не получившими полных прав (sandboxed users)",
"action-translate-sandboxmanage": "управлять правами участников, ещё не получивших полных прав (sandboxed users)",
"right-translate-sandboxaction": "выполнение действий, разрешённых для участников, ещё не получивших полных прав (sandboxed users)",
"action-translate-sandboxaction": "выполнять действия, разрешённые для участников, ещё не получивших полных прав (sandboxed users)",
@@ -319,7 +321,7 @@
"tux-edit": "Правка",
"tux-status-optional": "Необязательно",
"tux-status-fuzzy": "Устарело",
- "tux-status-proofread": "Проверка",
+ "tux-status-proofread": "Проверено",
"tux-status-translated": "Переведено",
"tux-status-saving": "Сохраняется...",
"tux-status-unsaved": "Не сохранено",
@@ -333,7 +335,7 @@
"tux-editor-cancel-button-label": "Отмена",
"tux-editor-confirm-button-label": "Подтвердить перевод",
"tux-editor-proofread-button-label": "Пометить как проверенное",
- "tux-editor-shortcut-info": "Нажмите «$1» для сохранения, «$2» для перехода к следующему сообщению, «$4» для ввода описания изменения или «$3» для других ярлыков.",
+ "tux-editor-shortcut-info": "Нажмите «$1» для подтверждения и перемещения к следующему сообщению, «$2» для пропуска, «$4» для ввода описания изменения или «$3» для других ярлыков.",
"tux-editor-edit-desc": "Изменить документацию",
"tux-editor-add-desc": "Добавить документацию",
"tux-editor-suggestions-title": "Подсказки",
diff --git a/MLEB/Translate/i18n/core/ses.json b/MLEB/Translate/i18n/core/ses.json
new file mode 100644
index 00000000..b539af59
--- /dev/null
+++ b/MLEB/Translate/i18n/core/ses.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Songhay"
+ ]
+ },
+ "translate-documentation-language": "Alhabar fahamandi tiira"
+}
diff --git a/MLEB/Translate/i18n/core/shn.json b/MLEB/Translate/i18n/core/shn.json
index a2dfa2fb..49889fbf 100644
--- a/MLEB/Translate/i18n/core/shn.json
+++ b/MLEB/Translate/i18n/core/shn.json
@@ -4,5 +4,6 @@
"Saimawnkham"
]
},
+ "right-translate": "ၸႂ်ႉလွင်ႈပိၼ်ႇၽႃႇသႃႇယူင်ႉႁၢင်ႈသေ မႄးထတ်း",
"translate-documentation-language": "ၽိုၼ်လိၵ်ႈၶေႃႈၶၢဝ်ႇ"
}
diff --git a/MLEB/Translate/i18n/core/shy-latn.json b/MLEB/Translate/i18n/core/shy-latn.json
index a349e2d1..68422824 100644
--- a/MLEB/Translate/i18n/core/shy-latn.json
+++ b/MLEB/Translate/i18n/core/shy-latn.json
@@ -5,5 +5,6 @@
]
},
"translate-statsf-scale-months": "Iyaren",
- "translate-statsf-scale-days": "Ussan"
+ "translate-statsf-scale-days": "Ussan",
+ "translate-documentation-language": "Tasemlit n yizen"
}
diff --git a/MLEB/Translate/i18n/core/sl.json b/MLEB/Translate/i18n/core/sl.json
index 2a5db6e1..9544a81e 100644
--- a/MLEB/Translate/i18n/core/sl.json
+++ b/MLEB/Translate/i18n/core/sl.json
@@ -304,7 +304,7 @@
"tux-editor-cancel-button-label": "Prekliči",
"tux-editor-confirm-button-label": "Potrdi prevod",
"tux-editor-proofread-button-label": "Označi kot pregledano",
- "tux-editor-shortcut-info": "Pritisnite »$1« za shranitev, »$2« za skok na naslednje sporočilo, »$4« za navedbo povzetka ali »$3« za druge bližnjice.",
+ "tux-editor-shortcut-info": "Pritisnite »$1« za potrditev in premik na naslednje sporočilo, »$2« za preskočitev, »$4« za navedbo povzetka ali pa držite »$3« za ogled drugih bližnjic.",
"tux-editor-edit-desc": "Uredi dokumentacijo",
"tux-editor-add-desc": "Dodaj dokumentacijo",
"tux-editor-suggestions-title": "Predlogi",
diff --git a/MLEB/Translate/i18n/core/sr-ec.json b/MLEB/Translate/i18n/core/sr-ec.json
index b665b2bc..a9283478 100644
--- a/MLEB/Translate/i18n/core/sr-ec.json
+++ b/MLEB/Translate/i18n/core/sr-ec.json
@@ -16,22 +16,22 @@
"Zoranzoki21"
]
},
- "translate": "Превод",
+ "translate": "Превођење",
"translate-extensionname": "Превођење",
- "translate-desc": "[[Special:Translate|Посебна страница]] за превод Медијавикија и више од тога",
- "translate-fuzzybot-desc": "Ово је посебан системски налог који користи [https://www.mediawiki.org/wiki/Extension:Translate додатак „Превођење” (Translate)] Медијавикија, који се корсти за одржавање превода.\nОвај налог је део софтвера Медијавики и није у власништву ниједног корисника.",
- "translate-taskui-export-to-file": "Извези у матичном формату",
- "translate-taskui-export-as-po": "Извези за офлајн-превођење",
- "translate-taction-translate": "Превод",
- "translate-taction-proofread": "Преглед",
+ "translate-desc": "[[Special:Translate|Посебна страница]] за превођење MediaWiki-ја и више од тога",
+ "translate-fuzzybot-desc": "Ово је посебан системски налог који користи MediaWiki [https://www.mediawiki.org/wiki/Extension:Translate додатак „Превођење”], који се корсти за одржавање превода.\nОвај налог је део MediaWiki софтвера и није у власништву ниједног корисника.",
+ "translate-taskui-export-to-file": "Извоз у матичном формату",
+ "translate-taskui-export-as-po": "Извоз за превођење ван мреже",
+ "translate-taction-translate": "Превођење",
+ "translate-taction-proofread": "Провера",
"translate-taction-lstats": "Статистика језика",
"translate-taction-mstats": "Статистика групе порука",
"translate-taction-export": "Извоз",
"translate-taction-disabled": "Ова радња је онемогућена на овом викију.",
- "translate-page-no-such-language": "Наведени језик је неважећи.",
- "translate-page-no-such-group": "Наведена група је неважећа.",
- "translate-page-disabled": "Преводи на овом језику у овој групи су онемогућени.\nРазлог:\n\n<em>$1</em>",
- "translate-language-disabled": "Превод на овај језик је онемогућен.",
+ "translate-page-no-such-language": "Наведени језик није важећи.",
+ "translate-page-no-such-group": "Наведена група није важећа.",
+ "translate-page-disabled": "Превођење на овом језику у овој групи је онемогућено.\nРазлог:\n\n<em>$1</em>",
+ "translate-language-disabled": "Превођење на овај језик је онемогућено.",
"translate-page-settings-legend": "Подешавања",
"translate-page-group": "Група",
"translate-page-language": "Језик",
@@ -54,33 +54,33 @@
"translate-edit-title": "Уредите страницу „$1”",
"translate-edit-definition": "Дефиниција поруке",
"translate-edit-translation": "Превод",
- "translate-edit-contribute": "допринеси",
+ "translate-edit-contribute": "допринесите",
"translate-edit-no-information": "<em>Ова порука нема документацију.\nАко знате где или како се користи, помозите другим преводиоцима тако што ћете је написати.</em>",
"translate-edit-information": "Информације о поруци ($1)",
"translate-edit-in-other-languages": "Порука на другим језицима",
"translate-edit-warnings": "Упозорења о непотпуним преводима",
"translate-edit-tmmatch-source": "Текст изворног превода: $1",
- "translate-edit-tmmatch": "$1% поклапања",
- "translate-use-suggestion": "Замените актуелан превод овим предлогом.",
- "translate-edit-nopermission": "Требају вам преводилачка права да бисте преводили поруке.",
+ "translate-edit-tmmatch": "$1% подударања",
+ "translate-use-suggestion": "Замените тренутни превод овим предлогом.",
+ "translate-edit-nopermission": "Требају вам права преводиоца да бисте преводили поруке.",
"translate-edit-askpermission": "Набави дозволу",
"exporttranslations": "Извоз превода",
"translate-export-form-format": "Формат",
"translate-export-invalid-format": "Наведите важећи формат.",
"translate-export-not-supported": "Извоз превода није подржан.",
"translate-export-format-notsupported": "Група порука не подржава наведени формат извоза.",
- "translate-magic-pagename": "Проширени превод Медијавикија",
+ "translate-magic-pagename": "Проширеног MediaWiki превода",
"translate-magic-help": "Можете превести кодове за посебне странице, магичне речи и именске просторе.\n\nКодови за посебне странице и магичне речи могу имати више превода.\nПреводи су одвојени зарезом.\nИменски простори могу имати само један превод.\n\nПревод именских простора за <code>$1 разговор</code> може бити компликован.\n<code>$1</code> је замењен с називом сајта (нпр. <code>{{ns:project_talk}}</code>).\nАко на вашем језику није могуће формирати важећи израз без мењања назив сајта, молимо обавестите нас на [[Support]].\n\nМорате бити преводилац да бисте сачували промене.\nТо ћете урадити кликом на дугме „Сачувај“ које се налази испод.",
"translate-magic-module": "Модул:",
"translate-magic-submit": "Добави",
"translate-magic-cm-export": "Извези",
"translate-magic-nothing-to-export": "Нема ништа за извоз.",
"translate-magic-cm-to-be": "Будуће",
- "translate-magic-cm-current": "Актуелно",
+ "translate-magic-cm-current": "Тренутно",
"translate-magic-cm-original": "Оригинално",
"translate-magic-cm-comment": "Коментар:",
"translate-magic-cm-save": "Сачувај",
- "translate-magic-cm-updatedusing": "Ажурирано користећи ''[[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]''",
+ "translate-magic-cm-updatedusing": "Ажурирано коришћењем ''[[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]''",
"translate-magic-cm-savefailed": "Чување није успело",
"translate-magic-special": "псеудоними посебних страница",
"translate-magic-words": "магичне речи",
@@ -98,32 +98,32 @@
"translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> је дата {{PLURAL:$1|један облик|$1 облика}} али {{PLURAL:$2|само један облик је|$2 облика је}} подржано (изузимајући облике 0= и 1=).",
"translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> садржи дуплирану форму. Форму <nowiki>{{PLURAL:$1|врата|врата}}</nowiki> би требало писати као <nowiki>{{PLURAL:$1|врата}}</nowiki>.",
"translate-checks-pagename": "Именски простор је промењен у односу на дефиницију",
- "translate-checks-format": "Овај превод не прати дефиницију или има неважећу синтаксу: $1",
+ "translate-checks-format": "Овај превод не прати дефиницију или нема важећу синтаксу: $1",
"translate-checks-escape": "Следећи излази могу бити случајни: <strong>$1</strong>",
"translate-checks-parametersnotequal": "Број коришћених параметара је {{PLURAL:$1|$1}}; требало би да је {{PLURAL:$2|$2}}.",
- "translate-checks-malformed": "<nowiki>$1</nowiki> има погрешан формат.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> је погрешно уобличен.",
"translate-checks-fudforum-syntax": "Користи <nowiki>$1</nowiki> уместо <nowiki>$2</nowiki> у овом пројекту.",
"translate-pref-nonewsletter": "Не шаљи ми билтене путем имејла",
"translate-pref-editassistlang": "Помоћни језици:",
- "prefs-translate": "Опције превода",
- "translate-pref-editassistlang-help": "Списак кодова језика раздвојених зарезом.\nПревод поруке на овим језицима приказује се док преводите.\nПодразумеваи списак језика зависи од вашег језика.",
- "translate-pref-editassistlang-bad": "Неважећи кôд језика на списку:\n<nowiki>$1</nowiki>.",
- "right-translate": "уређивање коришћењем преводилачког интерфејса",
+ "prefs-translate": "Опције превођења",
+ "translate-pref-editassistlang-help": "Листа кодова језика раздвојених зарезом.\nПревод поруке на овим језицима приказује се док преводите.\nПодразумевана листа језика зависи од вашег језика.",
+ "translate-pref-editassistlang-bad": "Неважећи кôд језика на листи:\n<nowiki>$1</nowiki>.",
+ "right-translate": "уређивање коришћењем интерфејса за превођење",
"right-translate-manage": "управљање групама порука",
"action-translate-manage": "управљате групама порука",
- "right-translate-import": "увожење офлајн-превода",
- "action-translate-import": "увозите офлајн-преводе",
- "right-translate-messagereview": "прегледање превода",
- "action-translate-messagereview": "прегледавате преводе",
+ "right-translate-import": "увожење превода ван мреже",
+ "action-translate-import": "увозите преводе ван мреже",
+ "right-translate-messagereview": "проверавање превода",
+ "action-translate-messagereview": "проверавате преводе",
"right-translate-groupreview": "мењање стања радног тока за групе порука",
- "action-translate-groupreview": "промените стање тока рада за групе порука",
+ "action-translate-groupreview": "мењате стање тока рада за групе порука",
"translate-rcfilters-translations": "Преводи",
"translate-rcfilters-translations-only-label": "Преводи",
"translate-rcfilters-translations-only-desc": "Промене преведених страница",
"translate-rcfilters-translations-filter-label": "Нису преводи",
"translate-rcfilters-translations-filter-desc": "Све промене које нису преводи.",
"translate-rcfilters-translations-site-label": "Поруке сајта",
- "translate-rcfilters-translations-site-desc": "Прилагођавање порука сајта у именском простору Медијавики.",
+ "translate-rcfilters-translations-site-desc": "Прилагођавање порука сајта у MediaWiki именском простору.",
"translate-rc-translation-filter": "Филтрирај преводе:",
"translate-rc-translation-filter-no": "не ради ништа",
"translate-rc-translation-filter-only": "прикажи само преводе",
@@ -133,8 +133,8 @@
"translate-stats-edits": "Измене",
"translate-stats-users": "Преводиоци",
"translate-stats-registrations": "Регистрације",
- "translate-stats-reviews": "Прегледи",
- "translate-stats-reviewers": "Прегледавачи",
+ "translate-stats-reviews": "Провере",
+ "translate-stats-reviewers": "Проверавачи",
"translate-statsf-intro": "Генеришете једноставну статистику уз помоћ овог обрасца.\nСве вредности имају доња и горња ограничења.",
"translate-statsf-options": "Опције графикона",
"translate-statsf-width": "Ширина у пикселима:",
@@ -150,10 +150,10 @@
"translate-statsf-count-edits": "Број измена",
"translate-statsf-count-users": "Активни преводиоци",
"translate-statsf-count-registrations": "Нови корисници",
- "translate-statsf-count-reviews": "Прегледи превода",
- "translate-statsf-count-reviewers": "Прегледавачи",
- "translate-statsf-language": "Списак кодова језика раздвојених зарезом:",
- "translate-statsf-group": "Списак кодова група раздвојених зарезом:",
+ "translate-statsf-count-reviews": "Провере превода",
+ "translate-statsf-count-reviewers": "Проверавачи",
+ "translate-statsf-language": "Листа кодова језика раздвојених зарезом:",
+ "translate-statsf-group": "Листа кодова група раздвојених зарезом:",
"translate-statsf-submit": "Прегледај",
"translate-tag-page-desc": "Превод вики странице [[$2|$1]] са $3 ($4).",
"translate-sidebar-alltrans": "На другим језицима",
@@ -170,12 +170,12 @@
"languagestats": "Статистика језика",
"languagestats-summary": "Ова страница приказује статистику превода за све групе порука на неком језику.",
"messagegroupstats-summary": "Ова страница приказује статистику група порука.",
- "languagestats-stats-for": "Статистика превода за {{LCFIRST:$1}} ($2).",
+ "languagestats-stats-for": "Статистика превођења за {{LCFIRST:$1}} ($2).",
"languagestats-recenttranslations": "недавни преводи",
"translate-langstats-incomplete": "Неке статистике наведене на страници су непотпуне. Поново учитајте страницу да бите добили још статистика.",
- "translate-langstats-expand": "прошири",
+ "translate-langstats-expand": "развиј",
"translate-langstats-collapse": "скупи",
- "translate-langstats-expandall": "прошири све",
+ "translate-langstats-expandall": "развиј све",
"translate-langstats-collapseall": "скупи све",
"translate-language-code": "Кôд језика",
"translate-language-code-field-name": "Кôд језика",
@@ -186,6 +186,7 @@
"translate-untranslated": "Непреведено",
"translate-percentage-complete": "Завршено",
"translate-percentage-fuzzy": "Застарело",
+ "translate-percentage-proofread": "Проверено",
"translate-languagestats-overall": "Све групе порука заједно",
"translate-ls-submit": "Прикажи статистику",
"translate-ls-column-group": "Група порука",
@@ -196,11 +197,11 @@
"translate-mgs-noempty": "Не приказуј језике који немају никакве преводе",
"translate-mgs-submit": "Прикажи статистику",
"translate-mgs-column-language": "Језик",
- "translate-mgs-totals": "Свих $1 {{PLURAL:$1|језик|језика}} заједно",
+ "translate-mgs-totals": "Свих $1 {{PLURAL:$1|језика}} заједно",
"translate-mgs-invalid-group": "Наведена група „$1” не постоји.",
"translate-mgs-nothing": "Нема ничега да се прикаже за захтеване статистике.",
"supportedlanguages": "Подржани језици",
- "supportedlanguages-summary": "Ова страница приказује списак свих језика које подржава {{SITENAME}},\nзаједно са именима преводилаца који раде на одабраном језику.\nИме преводиоца је веће што је са више превода допринео.\nБоја линије подвлачења индицира колико скоро је преводилац овде био активан.",
+ "supportedlanguages-summary": "Ова страница приказује листу свих језика које подржава {{SITENAME}},\nзаједно са именима преводилаца који раде на одабраном језику.\nИме преводиоца је веће што је са више превода допринео.\nБоја линије подвлачења индицира колико скоро је преводилац овде био активан.",
"supportedlanguages-colorlegend": "Легенда за боју: последњи превод извршен пре $1 дана.",
"supportedlanguages-portallink": "[$1] $2 – $3",
"supportedlanguages-portallink-nocldr": "[$1] $2",
@@ -234,7 +235,7 @@
"translate-manage-import-summary": "Увозим нову верзију из спољашњег извора",
"translate-manage-conflict-summary": "Увозим нову верзију из спољашњег извора.\nПроверите.",
"translate-manage-submit": "Изврши",
- "translate-manage-intro-other": "Испод је списак промена превода за $1 језик.\nПрегледајте промене и одаберите радњу коју желите да предузмете за свако ажурирање.\nАко одаберете да занемарите промене, ова радња ће бити привремена.",
+ "translate-manage-intro-other": "Испод је листа промена превода за $1 језик.\nПроверите промене и одаберите радњу коју желите да предузмете за свако ажурирање.\nАко одаберете да занемарите промене, ова радња ће бити привремена.",
"translate-manage-import-ok": "Увезено: $1.",
"translate-manage-import-done": "Увоз је завршен.",
"importtranslations": "Увоз превода",
@@ -270,8 +271,8 @@
"translate-searchprofile-note": "Још опција претраге доступно је на [$1 претрази превода].",
"translate-search-languagefilter": "Филтрирање по језику:",
"translate-search-nofilter": "Без филтрирања",
- "log-name-translationreview": "Дневник прегледа превода",
- "log-description-translationreview": "Дневник свих прегледа превода и група порука.",
+ "log-name-translationreview": "Дневник провере превода",
+ "log-description-translationreview": "Дневник свих провера превода и група порука.",
"logentry-translationreview-message": "$1 је {{GENDER:$2|прегледао|прегледала}} превод $3",
"logentry-translationreview-group": "$1 је {{GENDER:$2|променио|променила}} стање $4 превода $3 са $6 на $7",
"group-translate-sandboxed": "Неодобрени преводиоци",
@@ -288,7 +289,7 @@
"translate-workflowgroup-label": "Радна стања",
"translate-workflowgroup-desc": "Ова група порука приказује радно стање превода.\nСтања су дефинисана у конфигурацији променљиве $wgTranslateWorkflowStates.",
"translate-dynagroup-recent-label": "Недавни преводи",
- "translate-dynagroup-recent-desc": "Ова група порука приказује све недавне преводе на овом језику.\nОво је најкорисније за преглед превода.",
+ "translate-dynagroup-recent-desc": "Ова група порука приказује све недавне преводе на овом језику.\nОво је најкорисније за проверу превода.",
"translate-dynagroup-additions-label": "Недавна додавања",
"translate-dynagroup-additions-desc": "Ова група порука приказује нове и промењене поруке.",
"translate-msggroupselector-projects": "Група порука",
@@ -301,11 +302,11 @@
"tux-tab-untranslated": "Непреведено",
"tux-tab-outdated": "Застарело",
"tux-tab-translated": "Преведено",
- "tux-tab-unproofread": "Непрегледано",
- "tux-edit": "Уреди",
+ "tux-tab-unproofread": "Непроверено",
+ "tux-edit": "Измени",
"tux-status-optional": "Oпционално",
"tux-status-fuzzy": "Застарело",
- "tux-status-proofread": "Прегледано",
+ "tux-status-proofread": "Проверено",
"tux-status-translated": "Преведено",
"tux-status-saving": "Чување…",
"tux-status-unsaved": "Несачувано",
@@ -318,28 +319,28 @@
"tux-editor-skip-button-label": "Пређи на следећу",
"tux-editor-cancel-button-label": "Откажи",
"tux-editor-confirm-button-label": "Потврди превод",
- "tux-editor-proofread-button-label": "Означи као прегледано",
- "tux-editor-shortcut-info": "Притисните „$1” да бисте сачували или „$2” да бисте прескочили на следећу поруку, или „$4” да бисте навели резиме или „$3” за друге пречице.",
- "tux-editor-edit-desc": "Уреди документацију",
- "tux-editor-add-desc": "Додајте документацију",
+ "tux-editor-proofread-button-label": "Означи као проверено",
+ "tux-editor-shortcut-info": "Притисните „$1” да бисте потврдили и прешли на следећу поруку, „$2” да бисте прескочили поруку, „$4” да бисте пружили резиме или задржите „$3” како бисте видели друге пречице.",
+ "tux-editor-edit-desc": "Измени документацију",
+ "tux-editor-add-desc": "Додај документацију",
"tux-editor-suggestions-title": "Предлози",
"tux-editor-in-other-languages": "На другим језицима",
- "tux-editor-need-more-help": "Треба вам помоћ?",
+ "tux-editor-need-more-help": "Потребна вам је додатна помоћ?",
"tux-editor-ask-help": "Затражите више информација",
- "tux-editor-tm-match": "$1% поклапања",
+ "tux-editor-tm-match": "$1% подударања",
"tux-warnings-more": "{{PLURAL:$1|још $1}}",
"tux-warnings-hide": "сакриј",
"tux-editor-save-failed": "Чување превода није успело: $1",
"tux-editor-n-uses": "коришћено $1 {{PLURAL:$1|пут|пута}}",
- "tux-editor-message-desc-more": "Прикажи још",
+ "tux-editor-message-desc-more": "Прикажи више",
"tux-editor-message-desc-less": "Прикажи мање",
"tux-editor-clear-translated": "Сакриј преведено",
- "tux-editor-proofreading-mode": "Преглед",
+ "tux-editor-proofreading-mode": "Провера",
"tux-editor-translate-mode": "Списак",
"tux-editor-proofreading-hide-own-translations": "Сакриј моје преводе",
"tux-editor-proofreading-show-own-translations": "Прикажи моје преводе",
- "tux-proofread-action-tooltip": "Означите као прегледано",
- "tux-proofread-edit-label": "Уреди",
+ "tux-proofread-action-tooltip": "Означите као проверено",
+ "tux-proofread-edit-label": "Измени",
"tux-editor-page-mode": "Страница",
"tux-editor-outdated-warning": "Овај превод можда треба да се ажурира.",
"tux-editor-outdated-warning-diff-link": "Прикажи разлике",
@@ -349,7 +350,7 @@
"tux-messagetable-more-messages": "још $1 {{PLURAL:$1|порука}}",
"tux-messagetable-loading-messages": "Учитавање {{PLURAL:$1|поруке|порука}}…",
"tux-message-filter-placeholder": "Филтрирајте списак",
- "tux-message-filter-result": "{{PLURAL:$1|Пронађен $1 резултат|Пронађена $1 резултата|Пронађено $1 резултата}} за „$2”",
+ "tux-message-filter-result": "{{PLURAL:$1|Пронађен је $1 резултат|Пронађена су $1 резултата|Пронађено је $1 резултата}} за ниску „$2”",
"tux-message-filter-advanced-button": "Напредна претрага",
"tux-message-filter-optional-messages-label": "Опционалне поруке",
"tux-proofread-translated-by-self": "Ваш превод",
@@ -358,22 +359,22 @@
"tux-translate-page-no-such-group": "<strong>Назначена група не постоји.</strong> Изаберите другу групу порука.",
"tux-empty-list-translated": "Нема преведених порука",
"tux-empty-list-translated-guide": "Помозите у превођењу",
- "tux-empty-list-translated-action": "Преведи",
+ "tux-empty-list-translated-action": "Преведите",
"tux-empty-no-messages-to-display": "Нема порука за приказ.",
"tux-empty-there-are-optional": "Постоје опционалне поруке које нису приказане на списку",
"tux-empty-show-optional-messages": "Прикажи опционалне поруке",
"tux-empty-no-outdated-messages": "Нема застарелих порука",
- "tux-empty-nothing-to-proofread": "Ништа за преглед",
+ "tux-empty-nothing-to-proofread": "Ништа за проверу",
"tux-empty-you-can-help-providing": "Помозите пружањем нових превода",
- "tux-empty-nothing-new-to-proofread": "Ништа ново за преглед",
- "tux-empty-you-can-review-already-proofread": "Можете да прегледате преводе које су други већ прегледали.",
+ "tux-empty-nothing-new-to-proofread": "Ништа ново за проверу",
+ "tux-empty-you-can-review-already-proofread": "Можете да проверавате преводе које су други већ проверили.",
"tux-empty-list-other": "Ништа за превођење",
- "tux-empty-list-other-guide": "Помозите прегледом постојећих превода",
- "tux-empty-list-other-action": "Прегледај преводе",
+ "tux-empty-list-other-guide": "Можете да помогнете провером постојећих превода",
+ "tux-empty-list-other-action": "Проверите преводе",
"tux-empty-list-other-link": "Прикажи све поруке",
- "tux-editor-close-tooltip": "Затворите",
- "tux-editor-expand-tooltip": "Проширите",
- "tux-editor-collapse-tooltip": "Скупите",
+ "tux-editor-close-tooltip": "Затвори",
+ "tux-editor-expand-tooltip": "Прошири",
+ "tux-editor-collapse-tooltip": "Скупи",
"tux-editor-message-tools-show-editor": "Прикажи у вики уређивачу",
"tux-editor-message-tools-history": "Историја",
"tux-editor-message-tools-delete": "Избриши",
@@ -381,11 +382,11 @@
"tux-editor-message-tools-linktothis": "Веза ка овој поруци",
"tux-editor-loading": "Учитавање…",
"translate-search-more-languages-info": "још $1 {{PLURAL:$1|језик|језика}}",
- "translate-statsbar-tooltip": "$1% преведено, $2% прегледано",
- "translate-statsbar-tooltip-with-fuzzy": "$1% преведено, $2% прегледано, $3% застарело",
- "translate-search-more-groups-info": "још $1 {{PLURAL:$1|група}}",
+ "translate-statsbar-tooltip": "$1% преведено, $2% проверено",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% преведено, $2% проверено, $3% застарело",
+ "translate-search-more-groups-info": "још $1 {{PLURAL:$1|група|групе|група}}",
"translate-ulsdep-title": "Грешка у конфигурацији",
- "translate-ulsdep-body": "Додатак „Превођење” (Translate) зависи од [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector додатка „Универзалан бирач језика” (Universal Language Selector)].",
+ "translate-ulsdep-body": "Додатак „Превођење” зависи од [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector додатка „Универзални бирач језика”].",
"tux-session-expired": "Више нисте пријављени. Пријавите се у засебној картици. Друга могућност је да прекопирате несачуване преводе, пријавите се, вратите се на ову страницу и поново унесете своје преводе.",
"tux-nojs": "Ова алатка не ради без JavaScript-а. JavaScript је онемогућен, не ради или је овај прегледач неподржан."
}
diff --git a/MLEB/Translate/i18n/core/sr-el.json b/MLEB/Translate/i18n/core/sr-el.json
index e7235048..ec26b3ce 100644
--- a/MLEB/Translate/i18n/core/sr-el.json
+++ b/MLEB/Translate/i18n/core/sr-el.json
@@ -15,21 +15,21 @@
]
},
"translate": "Prevođenje",
- "translate-extensionname": "Prevedi",
- "translate-desc": "[[Special:Translate|Posebna stranica]] za prevođenje Medijavikija i više od toga",
- "translate-fuzzybot-desc": "Ovo je poseban sistemski nalog koji koristi [https://www.mediawiki.org/wiki/Extension:Translate dodatak „Prevođenje” (Translate)] Medijavikija, koji se korsti za održavanje prevoda.\nOvaj nalog je deo softvera Medijaviki i nije u vlasništvu nijednog korisnika.",
+ "translate-extensionname": "Prevođenje",
+ "translate-desc": "[[Special:Translate|Posebna stranica]] za prevod Medijavikija i više od toga",
+ "translate-fuzzybot-desc": "Ovo je poseban sistemski nalog koji koristi [https://www.mediawiki.org/wiki/Extension:Translate dodatak „Prevođenje”] Medijavikija, koji se korsti za održavanje prevoda.\nOvaj nalog je deo softvera Medijaviki i nije u vlasništvu nijednog korisnika.",
"translate-taskui-export-to-file": "Izvezi u matičnom formatu",
"translate-taskui-export-as-po": "Izvezi za oflajn-prevođenje",
"translate-taction-translate": "Prevođenje",
"translate-taction-proofread": "Pregled",
- "translate-taction-lstats": "Statistike jezika",
- "translate-taction-mstats": "Statistike grupe poruka",
+ "translate-taction-lstats": "Statistika jezika",
+ "translate-taction-mstats": "Statistika grupe poruka",
"translate-taction-export": "Izvoz",
- "translate-taction-disabled": "Radnja je onemogućena na ovom vikiju.",
- "translate-page-no-such-language": "Navedeni jezik je nevažeći.",
- "translate-page-no-such-group": "Navedena grupa je nevažeća.",
- "translate-page-disabled": "Prevodi na ovom jeziku u ovoj grupi su onemogućeni.\nRazlog:\n\n<em>$1</em>",
- "translate-language-disabled": "Prevod na ovaj jezik je onemogućen.",
+ "translate-taction-disabled": "Ova radnja je onemogućena na ovom vikiju.",
+ "translate-page-no-such-language": "Navedeni jezik nije važeći.",
+ "translate-page-no-such-group": "Navedena grupa nije važeća.",
+ "translate-page-disabled": "Prevođenje na ovom jeziku u ovoj grupi je onemogućeno.\nRazlog:\n\n<em>$1</em>",
+ "translate-language-disabled": "Prevođenje na ovaj jezik je onemogućeno.",
"translate-page-settings-legend": "Podešavanja",
"translate-page-group": "Grupa",
"translate-page-language": "Jezik",
@@ -49,10 +49,10 @@
"translate-page-edit": "uredi",
"translate-optional": "(opcionalno)",
"translate-ignored": "(zanemareno)",
- "translate-edit-title": "Uređivanje stranice „$1“",
+ "translate-edit-title": "Uredite stranicu „$1”",
"translate-edit-definition": "Definicija poruke",
"translate-edit-translation": "Prevod",
- "translate-edit-contribute": "doprinesi",
+ "translate-edit-contribute": "doprinesite",
"translate-edit-no-information": "<em>Ova poruka nema dokumentaciju.\nAko znate gde ili kako se koristi, pomozite drugim prevodiocima tako što ćete je napisati.</em>",
"translate-edit-information": "Informacije o poruci ($1)",
"translate-edit-in-other-languages": "Poruka na drugim jezicima",
@@ -60,7 +60,7 @@
"translate-edit-tmmatch-source": "Tekst izvornog prevoda: $1",
"translate-edit-tmmatch": "$1% poklapanja",
"translate-use-suggestion": "Zamenite aktuelan prevod ovim predlogom.",
- "translate-edit-nopermission": "Trebaju vam prevodilačka prava da biste prevodili poruke.",
+ "translate-edit-nopermission": "Trebaju vam prava prevodioca da biste prevodili poruke.",
"translate-edit-askpermission": "Nabavi dozvolu",
"exporttranslations": "Izvoz prevoda",
"translate-export-form-format": "Format",
@@ -68,14 +68,14 @@
"translate-export-not-supported": "Izvoz prevoda nije podržan.",
"translate-export-format-notsupported": "Grupa poruka ne podržava navedeni format izvoza.",
"translate-magic-pagename": "Prošireni prevod Medijavikija",
- "translate-magic-help": "Možete prevesti kodove za posebne stranice, magične reči i imenske prostore.\n\nKodovi za posebne stranice i magične reči mogu imati više prevoda.\nPrevodi su odvojeni zarezom.\nImenski prostori mogu imati samo jedan prevod.\n\nPrevođenje imenskih prostora za <code>$1 razgovor</code> može biti komplikovano.\n<code>$1</code> je zamenjen s nazivom sajta (npr. <code>{{ns:project_talk}}</code>).\nAko na vašem jeziku nije moguće formirati važeći izraz bez menjanja naziv sajta, molimo obavestite nas na [[Support]].\n\nMorate biti prevodilac da biste sačuvali izmene.\nTo ćete uraditi klikom na dugme „Sačuvaj“ koje se nalazi ispod.",
+ "translate-magic-help": "Možete prevesti kodove za posebne stranice, magične reči i imenske prostore.\n\nKodovi za posebne stranice i magične reči mogu imati više prevoda.\nPrevodi su odvojeni zarezom.\nImenski prostori mogu imati samo jedan prevod.\n\nPrevod imenskih prostora za <code>$1 razgovor</code> može biti komplikovan.\n<code>$1</code> je zamenjen s nazivom sajta (npr. <code>{{ns:project_talk}}</code>).\nAko na vašem jeziku nije moguće formirati važeći izraz bez menjanja naziv sajta, molimo obavestite nas na [[Support]].\n\nMorate biti prevodilac da biste sačuvali promene.\nTo ćete uraditi klikom na dugme „Sačuvaj“ koje se nalazi ispod.",
"translate-magic-module": "Modul:",
"translate-magic-submit": "Dobavi",
"translate-magic-cm-export": "Izvezi",
"translate-magic-nothing-to-export": "Nema ništa za izvoz.",
"translate-magic-cm-to-be": "Buduće",
"translate-magic-cm-current": "Aktuelno",
- "translate-magic-cm-original": "Prvobitno",
+ "translate-magic-cm-original": "Originalno",
"translate-magic-cm-comment": "Komentar:",
"translate-magic-cm-save": "Sačuvaj",
"translate-magic-cm-updatedusing": "Ažurirano koristeći ''[[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]''",
@@ -85,28 +85,28 @@
"translate-magic-namespace": "imena imenskih prostora",
"translate-magic-notsaved": "Vaša izmena nije sačuvana.",
"translate-magic-errors": "Ispravite {{PLURAL:$1|sledeću grešku|sledeće greške}} u prevodima:",
- "translate-magic-saved": "Vaše izmene su sačuvane.",
+ "translate-magic-saved": "Vaše promene su sačuvane.",
"translate-checks-parameters": "Sledeći {{PLURAL:$2|parametar se ne koristi|parametri se ne koriste}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "Sledeći {{PLURAL:$2|parametar je nepoznat|parametri su nepoznati}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Prisutan je neparan broj {{PLURAL:$2|zagrada}}:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-links": "{{PLURAL:$2|Sledeći link je problematičan|Sledeća $2 linkova su problematična|Sledećih $2 linkova je problematično}}:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-links-missing": "{{PLURAL:$2|Sledeći link nedostaje|Sledeća $2 linkova nedostaju|Sledećih $2 linkova nedostaju}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Sledeća veza je problematična|Sledeće $2 veze su problematične|Sledećih $2 veza je problematično}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Sledeća veza nedostaje|Sledeće $2 veze nedostaju|Sledećih $2 veza nedostaju}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Zamenite {{PLURAL:$2|sledeću oznaku ispravnom|sledeće oznake ispravnim}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "Definicija koristi <nowiki>{{PLURAL:}}</nowiki>, a prevod ne.",
"translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> je data {{PLURAL:$1|jedan oblik|$1 oblika}} ali {{PLURAL:$2|samo jedan oblik je|$2 oblika je}} podržano (izuzimajući oblike 0= i 1=).",
"translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> sadrži dupliranu formu. Formu <nowiki>{{PLURAL:$1|vrata|vrata}}</nowiki> bi trebalo pisati kao <nowiki>{{PLURAL:$1|vrata}}</nowiki>.",
"translate-checks-pagename": "Imenski prostor je promenjen u odnosu na definiciju",
- "translate-checks-format": "Ovaj prevod ne prati definiciju ili ima nevažeću sintaksu: $1",
+ "translate-checks-format": "Ovaj prevod ne prati definiciju ili nema važeću sintaksu: $1",
"translate-checks-escape": "Sledeći izlazi mogu biti slučajni: <strong>$1</strong>",
"translate-checks-parametersnotequal": "Broj korišćenih parametara je {{PLURAL:$1|$1}}; trebalo bi da je {{PLURAL:$2|$2}}.",
"translate-checks-malformed": "<nowiki>$1</nowiki> ima pogrešan format.",
"translate-checks-fudforum-syntax": "Koristi <nowiki>$1</nowiki> umesto <nowiki>$2</nowiki> u ovom projektu.",
"translate-pref-nonewsletter": "Ne šalji mi biltene putem imejla",
"translate-pref-editassistlang": "Pomoćni jezici:",
- "prefs-translate": "Opcije prevoda",
- "translate-pref-editassistlang-help": "Lista kodova jezika razdvojenih zarezom.\nPrevod poruke na ovim jezicima prikazuje se dok prevodite.\nPodrazumevana lista jezika zavisi od vašeg jezika.",
- "translate-pref-editassistlang-bad": "Nevažeći kôd jezika na listi:\n<nowiki>$1</nowiki>.",
- "right-translate": "uređivanje korišćenjem prevodilačkog interfejsa",
+ "prefs-translate": "Opcije prevođenja",
+ "translate-pref-editassistlang-help": "Spisak kodova jezika razdvojenih zarezom.\nPrevod poruke na ovim jezicima prikazuje se dok prevodite.\nPodrazumevai spisak jezika zavisi od vašeg jezika.",
+ "translate-pref-editassistlang-bad": "Nevažeći kôd jezika na spisku:\n<nowiki>$1</nowiki>.",
+ "right-translate": "uređivanje korišćenjem interfejsa za prevođenje",
"right-translate-manage": "upravljanje grupama poruka",
"action-translate-manage": "upravljate grupama poruka",
"right-translate-import": "uvoženje oflajn-prevoda",
@@ -127,11 +127,11 @@
"translate-rc-translation-filter-only": "prikaži samo prevode",
"translate-rc-translation-filter-filter": "izbaci prevode",
"translate-rc-translation-filter-site": "samo promene poruka sajta",
- "translationstats": "Statistike prevoda",
+ "translationstats": "Statistika prevoda",
"translate-stats-edits": "Izmene",
"translate-stats-users": "Prevodioci",
"translate-stats-registrations": "Registracije",
- "translate-stats-reviews": "Pregledi",
+ "translate-stats-reviews": "Redigovanja",
"translate-stats-reviewers": "Pregledavači",
"translate-statsf-intro": "Generišete jednostavnu statistiku uz pomoć ovog obrasca.\nSve vrednosti imaju donja i gornja ograničenja.",
"translate-statsf-options": "Opcije grafikona",
@@ -150,8 +150,8 @@
"translate-statsf-count-registrations": "Novi korisnici",
"translate-statsf-count-reviews": "Pregledi prevoda",
"translate-statsf-count-reviewers": "Pregledavači",
- "translate-statsf-language": "Lista kodova jezika razdvojenih zarezom:",
- "translate-statsf-group": "Lista kodova grupa razdvojenih zarezom:",
+ "translate-statsf-language": "Spisak kodova jezika razdvojenih zarezom:",
+ "translate-statsf-group": "Spisak kodova grupa razdvojenih zarezom:",
"translate-statsf-submit": "Pregledaj",
"translate-tag-page-desc": "Prevod viki stranice [[$2|$1]] sa $3 ($4).",
"translate-sidebar-alltrans": "Na drugim jezicima",
@@ -165,10 +165,10 @@
"translate-translations-project": "Projekat:",
"translate-translations-including-no-param": "Navedite važeći ključ poruke u parametru podstranice",
"translate-translations-history-short": "i",
- "languagestats": "Statistike jezika",
+ "languagestats": "Statistika jezika",
"languagestats-summary": "Ova stranica prikazuje statistiku prevoda za sve grupe poruka na nekom jeziku.",
- "messagegroupstats-summary": "Ova stranica prikazuje statistike o grupi poruka.",
- "languagestats-stats-for": "Statistike prevoda za {{LCFIRST:$1}} ($2).",
+ "messagegroupstats-summary": "Ova stranica prikazuje statistiku grupa poruka.",
+ "languagestats-stats-for": "Statistika prevođenja za {{LCFIRST:$1}} ($2).",
"languagestats-recenttranslations": "nedavni prevodi",
"translate-langstats-incomplete": "Neke statistike navedene na stranici su nepotpune. Ponovo učitajte stranicu da bite dobili još statistika.",
"translate-langstats-expand": "proširi",
@@ -178,37 +178,38 @@
"translate-language-code": "Kôd jezika",
"translate-language-code-field-name": "Kôd jezika",
"translate-suppress-complete": "Sakrij potpuno prevedene grupe poruka",
- "translate-ls-noempty": "Sakrij potpuno prevedene grupe poruka",
+ "translate-ls-noempty": "Sakrij potpuno neprevedene grupe poruka",
"translate-language": "Jezik",
"translate-total": "Poruke",
"translate-untranslated": "Neprevedeno",
"translate-percentage-complete": "Završeno",
"translate-percentage-fuzzy": "Zastarelo",
"translate-languagestats-overall": "Sve grupe poruka zajedno",
- "translate-ls-submit": "Prikaži statistike",
+ "translate-ls-submit": "Prikaži statistiku",
"translate-ls-column-group": "Grupa poruka",
- "translate-mgs-pagename": "Statistike o grupi poruka",
+ "translate-mgs-pagename": "Statistika grupa poruka",
"translate-mgs-fieldset": "Podešavanje prikaza",
"translate-mgs-group": "Grupa poruka:",
"translate-mgs-nocomplete": "Ne prikazuj jezike sa potpunim prevodom",
"translate-mgs-noempty": "Ne prikazuj jezike koji nemaju nikakve prevode",
- "translate-mgs-submit": "Prikaži statistike",
+ "translate-mgs-submit": "Prikaži statistiku",
"translate-mgs-column-language": "Jezik",
"translate-mgs-totals": "Svih $1 {{PLURAL:$1|jezik|jezika}} zajedno",
"translate-mgs-invalid-group": "Navedena grupa „$1” ne postoji.",
"translate-mgs-nothing": "Nema ničega da se prikaže za zahtevane statistike.",
"supportedlanguages": "Podržani jezici",
- "supportedlanguages-summary": "Ova stranica prikazuje listu svih jezika koje podržava {{SITENAME}},\nzajedno sa imenima prevodilaca koji rade na odabranom jeziku.\nIme prevodioca je veće što je sa više prevoda doprineo.\nBoja linije podvlačenja indicira koliko skoro je prevodilac ovde bio aktivan.",
+ "supportedlanguages-summary": "Ova stranica prikazuje spisak svih jezika koje podržava {{SITENAME}},\nzajedno sa imenima prevodilaca koji rade na odabranom jeziku.\nIme prevodioca je veće što je sa više prevoda doprineo.\nBoja linije podvlačenja indicira koliko skoro je prevodilac ovde bio aktivan.",
"supportedlanguages-colorlegend": "Legenda za boju: poslednji prevod izvršen pre $1 dana.",
"supportedlanguages-portallink": "[$1] $2 – $3",
"supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite nije podržan",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Prevodilac|Prevoditeljka}}|Prevodioci}}: $1",
"supportedlanguages-recenttranslations": "nedavni prevodi",
"supportedlanguages-count": "Ukupno $1 {{PLURAL:$1|jezik|jezika}}.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|izmena|izmene|izmena}} – poslednja izmena pre $3 {{PLURAL:$3|dan|dana|dana}}",
"abusefilter-edit-builder-vars-translate-source-text": "Izvorni tekst prevodilačke jedinice",
"translate-save": "Sačuvaj ($1)",
- "translate-jssti-add": "Dodaj na listu",
+ "translate-jssti-add": "Dodaj na spisak",
"managemessagegroups": "Upravljanje grupama poruka",
"translate-smg-notallowed": "Nije vam dozvoljeno da izvršite ovu radnju.",
"translate-smg-nochanges": "Nema promena koje treba obraditi.",
@@ -225,24 +226,24 @@
"translate-manage-action-ignore": "zanemari",
"translate-manage-action-fuzzy": "uvezi prevode i označi ih kao zastarele",
"translate-manage-nochanges": "Nema promena u definicijama poruka u ovoj grupi.",
- "translate-manage-nochanges-other": "Nema promena na ovom jeziku.\nKoristite link ispod da biste se vratili na prikaz detalja grupe.",
+ "translate-manage-nochanges-other": "Nema promena za ovaj jezik.\nKoristite dolenavedenu vezu da biste se vratili na prikaz detalja grupe.",
"translate-manage-inconsistent": "Otkrivena je nedoslednost u zahtevu.\nProverite promene i pokušajte ponovo.\nDetalji: $1.",
"translate-manage-toolong": "Najveće vreme izvršavanja od $1 {{PLURAL:$1|sekunde|sekunde|sekundi}} je prekoračeno.\nPonovo pošaljite obrazac za nastavak.",
"translate-manage-import-summary": "Uvozim novu verziju iz spoljašnjeg izvora",
"translate-manage-conflict-summary": "Uvozim novu verziju iz spoljašnjeg izvora.\nProverite.",
"translate-manage-submit": "Izvrši",
- "translate-manage-intro-other": "Ispod je lista izmena prevoda za $1 jezik.\nPregledajte izmene i izaberite radnju za svako ažuriranje.\nAko izaberete da zanemarite izmene, ova radnja će biti privremena.",
+ "translate-manage-intro-other": "Ispod je spisak promena prevoda za $1 jezik.\nPregledajte promene i odaberite radnju koju želite da preduzmete za svako ažuriranje.\nAko odaberete da zanemarite promene, ova radnja će biti privremena.",
"translate-manage-import-ok": "Uvezeno: $1.",
"translate-manage-import-done": "Uvoz je završen.",
"importtranslations": "Uvoz prevoda",
"translate-import-from-local": "Otpremanje lokalne datoteke:",
"translate-import-load": "Učitaj datoteku",
- "translate-import-err-dl-failed": "Ne mogu da dobavim datoteku:\n$1",
+ "translate-import-err-dl-failed": "Nije moguće dobaviti datoteku:\n$1",
"translate-import-err-ul-failed": "Otpremanje datoteke nije uspelo",
"translate-import-err-invalid-title": "Pruženo ime datoteke <nowiki>$1</nowiki> nije važeće.",
"translate-import-err-no-such-file": "Datoteka <nowiki>$1</nowiki> ne postoji ili nije otpremljena lokalno.",
"translate-import-err-stale-group": "Grupa poruka kojoj ova datoteka pripada ne postoji.",
- "translate-import-err-no-headers": "Datoteka nije dobro formirana Gettext datoteka u formatu dodatka „Prevođenje” (Translate):\nNe mogu da odredim grupu poruka i jezik iz zaglavlja datoteke.",
+ "translate-import-err-no-headers": "Datoteka nije dobro formirana Gettext datoteka u formatu dodatka „Prevođenje”:\nNe mogu da odredim grupu poruka i jezik iz zaglavlja datoteke.",
"translate-import-err-warnings": "Datoteka nije dobro formirana.\nUverite se da vaš uređivač ne uklanja polja msgctxt.\nDetalji: $1",
"translate-js-summary": "Rezime:",
"translate-js-save": "Sačuvaj",
@@ -279,7 +280,7 @@
"action-translate-sandboxaction": "izvršavate radnje na beloj listi za korisnike u pesku",
"translate-workflow-state-": "(nepostavljen)",
"translate-workflowstatus": "Stanje: $1",
- "translate-workflow-set-doing": "Postavljam…",
+ "translate-workflow-set-doing": "Postavljanje…",
"translate-workflow-autocreated-summary": "Automatsko pravljenje stranice za radno stanje $1",
"translate-stats-workflow": "Stanje",
"translate-workflowgroup-label": "Radna stanja",
@@ -304,7 +305,7 @@
"tux-status-fuzzy": "Zastarelo",
"tux-status-proofread": "Pregledano",
"tux-status-translated": "Prevedeno",
- "tux-status-saving": "Čuvam…",
+ "tux-status-saving": "Čuvanje…",
"tux-status-unsaved": "Nesačuvano",
"tux-save-unknown-error": "Došlo je do nepoznate greške.",
"tux-editor-placeholder": "Vaš prevod",
@@ -316,7 +317,7 @@
"tux-editor-cancel-button-label": "Otkaži",
"tux-editor-confirm-button-label": "Potvrdi prevod",
"tux-editor-proofread-button-label": "Označi kao pregledano",
- "tux-editor-shortcut-info": "Pritisnite „$1” da biste sačuvali ili „$2” da biste preskočili na sledeću poruku, ili „$4” da biste uneli opis ili „$3” za ostale prečice.",
+ "tux-editor-shortcut-info": "Pritisnite „$1” da biste sačuvali ili „$2” da biste preskočili na sledeću poruku, ili „$4” da biste naveli rezime ili „$3” za druge prečice.",
"tux-editor-edit-desc": "Uredi dokumentaciju",
"tux-editor-add-desc": "Dodaj dokumentaciju",
"tux-editor-suggestions-title": "Predlozi",
@@ -340,22 +341,22 @@
"tux-editor-page-mode": "Stranica",
"tux-editor-outdated-warning": "Ovaj prevod možda treba da se ažurira.",
"tux-editor-outdated-warning-diff-link": "Prikaži razlike",
- "tux-editor-doc-editor-placeholder": "Dokumentacija o poruci",
+ "tux-editor-doc-editor-placeholder": "Dokumentacija poruke",
"tux-editor-doc-editor-save": "Sačuvaj dokumentaciju",
"tux-editor-doc-editor-cancel": "Otkaži",
"tux-messagetable-more-messages": "još $1 {{PLURAL:$1|poruka}}",
- "tux-messagetable-loading-messages": "Učitavam {{PLURAL:$1|poruku|poruke}}…",
- "tux-message-filter-placeholder": "Filtrirajte listu",
+ "tux-messagetable-loading-messages": "Učitavanje {{PLURAL:$1|poruke|poruka}}…",
+ "tux-message-filter-placeholder": "Filtrirajte spisak",
"tux-message-filter-result": "{{PLURAL:$1|Pronađen $1 rezultat|Pronađena $1 rezultata|Pronađeno $1 rezultata}} za „$2”",
"tux-message-filter-advanced-button": "Napredna pretraga",
"tux-message-filter-optional-messages-label": "Opcionalne poruke",
"tux-proofread-translated-by-self": "Vaš prevod",
"tux-empty-list-all": "Ova grupa poruka je prazna",
- "tux-empty-list-all-guide": "Izaberite drugu grupu poruka za prevođenje",
+ "tux-empty-list-all-guide": "Izaberite drugu grupu poruka za prevod",
"tux-translate-page-no-such-group": "<strong>Naznačena grupa ne postoji.</strong> Izaberite drugu grupu poruka.",
"tux-empty-list-translated": "Nema prevedenih poruka",
"tux-empty-list-translated-guide": "Pomozite u prevođenju",
- "tux-empty-list-translated-action": "Prevedi",
+ "tux-empty-list-translated-action": "Prevedite",
"tux-empty-no-messages-to-display": "Nema poruka za prikaz.",
"tux-empty-there-are-optional": "Postoje opcionalne poruke koje nisu prikazane na spisku",
"tux-empty-show-optional-messages": "Prikaži opcionalne poruke",
@@ -363,10 +364,10 @@
"tux-empty-nothing-to-proofread": "Ništa za pregled",
"tux-empty-you-can-help-providing": "Pomozite pružanjem novih prevoda",
"tux-empty-nothing-new-to-proofread": "Ništa novo za pregled",
- "tux-empty-you-can-review-already-proofread": "Pregledaj prevode koje su drugi već pregledali.",
- "tux-empty-list-other": "Ničega za prevođenje",
+ "tux-empty-you-can-review-already-proofread": "Možete da pregledate prevode koje su drugi već pregledali.",
+ "tux-empty-list-other": "Ništa za prevođenje",
"tux-empty-list-other-guide": "Pomozite pregledom postojećih prevoda",
- "tux-empty-list-other-action": "Pregledaj prevode",
+ "tux-empty-list-other-action": "Pregledajte prevode",
"tux-empty-list-other-link": "Prikaži sve poruke",
"tux-editor-close-tooltip": "Zatvorite",
"tux-editor-expand-tooltip": "Proširite",
@@ -375,12 +376,12 @@
"tux-editor-message-tools-history": "Istorija",
"tux-editor-message-tools-delete": "Izbriši",
"tux-editor-message-tools-translations": "Svi prevodi",
- "tux-editor-message-tools-linktothis": "Link ka ovoj poruci",
- "tux-editor-loading": "Učitavam…",
+ "tux-editor-message-tools-linktothis": "Veza ka ovoj poruci",
+ "tux-editor-loading": "Učitavanje…",
"translate-search-more-languages-info": "još $1 {{PLURAL:$1|jezik|jezika}}",
"translate-statsbar-tooltip": "$1% prevedeno, $2% pregledano",
"translate-statsbar-tooltip-with-fuzzy": "$1% prevedeno, $2% pregledano, $3% zastarelo",
- "translate-search-more-groups-info": "još $1 {{PLURAL:$1|grupa}}",
+ "translate-search-more-groups-info": "još $1 {{PLURAL:$1|grupa|grupe|grupa}}",
"translate-ulsdep-title": "Greška u konfiguraciji",
"translate-ulsdep-body": "Dodatak „Prevođenje” (Translate) zavisi od [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector dodatka „Univerzalan birač jezika” (Universal Language Selector)].",
"tux-session-expired": "Više niste prijavljeni. Prijavite se u zasebnoj kartici. Druga mogućnost je da prekopirate nesačuvane prevode, prijavite se, vratite se na ovu stranicu i ponovo unesete svoje prevode.",
diff --git a/MLEB/Translate/i18n/core/sv.json b/MLEB/Translate/i18n/core/sv.json
index f184464c..5e438d7a 100644
--- a/MLEB/Translate/i18n/core/sv.json
+++ b/MLEB/Translate/i18n/core/sv.json
@@ -194,6 +194,7 @@
"translate-untranslated": "Oöversatt",
"translate-percentage-complete": "Avklarat",
"translate-percentage-fuzzy": "Föråldrat",
+ "translate-percentage-proofread": "Granskat",
"translate-languagestats-overall": "Alla meddelandegrupper tillsammans",
"translate-ls-submit": "Visa statistik",
"translate-ls-column-group": "Meddelandegrupp",
@@ -210,6 +211,7 @@
"supportedlanguages": "Språk som stöds",
"supportedlanguages-summary": "Den här sidan visar en lista över alla språk som stöds av {{SITENAME}},\ntillsammans med namnen på översättarna som arbetar på det språket.\nEn översättares namn visas större ju fler redigeringar översättaren har bidragit med.\nFärgen på en understrykning visar hur nyligen en översättare har varit aktiv här.",
"supportedlanguages-colorlegend": "Färgförklaring: Senaste översättningen gjordes $1 dagar sedan.",
+ "supportedlanguages-sqlite-error": "SQLite stöds inte",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Översättare}}}}: $1",
"supportedlanguages-recenttranslations": "senaste översättningar",
"supportedlanguages-count": "$1 {{PLURAL:$1|språk}} totalt.",
@@ -324,7 +326,7 @@
"tux-editor-cancel-button-label": "Avbryt",
"tux-editor-confirm-button-label": "Bekräfta översättning",
"tux-editor-proofread-button-label": "Markera som granskad",
- "tux-editor-shortcut-info": "Tryck \"$1\" för att spara, \"$2\" för att hoppa till nästa meddelande, \"$4\" för att skriva en sammanfattning eller \"$3\" för andra kortkommandon.",
+ "tux-editor-shortcut-info": "Tryck \"$1\" för att bekräfta och gå till nästa meddelande, \"$2\" för att hoppa över, \"$4\" för att skriva en sammanfattning eller håll ned \"$3\" för att se andra kortkommandon.",
"tux-editor-edit-desc": "Redigera dokumentation",
"tux-editor-add-desc": "Lägg till dokumentation",
"tux-editor-suggestions-title": "Förslag",
diff --git a/MLEB/Translate/i18n/core/tcy.json b/MLEB/Translate/i18n/core/tcy.json
index f2f61948..2d7304a1 100644
--- a/MLEB/Translate/i18n/core/tcy.json
+++ b/MLEB/Translate/i18n/core/tcy.json
@@ -5,7 +5,8 @@
"Soundarya shetty s",
"Vishwanatha Badikana",
"BHARATHESHA ALASANDEMAJALU",
- "Kiranpoojary"
+ "Kiranpoojary",
+ "Ravi Mundkur"
]
},
"translate": "ಭಾಷಾಂತರ ಮಲ್ಪುಲೆ",
@@ -54,5 +55,6 @@
"translate-gs-total": "ಒಟ್ಟು",
"translate-documentation-language": "ಸುದ್ದಿ ದಾಕಲೆ ಮಲ್ಪುನು",
"tux-languageselector": "ತರ್ಜುಮೆ ಮಲ್ಪೊಡಾಯಿನ ಬಾಸೆ",
+ "tux-editor-shortcut-info": "ದೃಡ ಮಲ್ತಿ ಬೊಕ ದುಂಬುದ ಸಂದೇಶೊಗು ಪೋವರೆ $1 ಒತ್ತುಲೆ, ಬುಡಿಯೆರೆ $2,ಸಾರಾಂಶ ಕೊರಿಯರೆ $4, ಅತ್ತಾಂಡ ಬೇತೆ ಕಿನ್ಯಸಾದಿಲೆನ್ ತೂವರೆ $3 ಒತ್ತುಲೆ.",
"tux-editor-message-tools-show-editor": "wiki editor ಡ್ ತೋಜಾಲೆ"
}
diff --git a/MLEB/Translate/i18n/core/th.json b/MLEB/Translate/i18n/core/th.json
index ed73b18d..e574bc8b 100644
--- a/MLEB/Translate/i18n/core/th.json
+++ b/MLEB/Translate/i18n/core/th.json
@@ -7,7 +7,8 @@
"Woraponboonkerd",
"Horus",
"Octahedron80",
- "Aefgh39622"
+ "Aefgh39622",
+ "Geonuch"
]
},
"translate": "แปล",
@@ -31,8 +32,8 @@
"translate-page-limit-option": "$1 {{PLURAL:$1|ข้อความ|ข้อความ}}ต่อหน้า",
"translate-submit": "ดึงข้อมูล",
"translate-page-navigation-legend": "แถบนำทาง",
- "translate-page-showing": "แสดงตั้งแต่ข้อความที่ $1 ถึง $2 จากทั้งหมด $3 ข้อความ",
- "translate-page-showing-all": "แสดง $1 {{PLURAL:$1|ข้อความ|ข้อความ}}",
+ "translate-page-showing": "แสดงตั้งแต่สารที่ $1 ถึง $2 จากทั้งหมด $3 สาร",
+ "translate-page-showing-all": "แสดง $1 {{PLURAL:$1|สาร|สาร}}",
"translate-page-showing-none": "ไม่มีข้อความแสดง",
"translate-next": "หน้าถัดไป",
"translate-prev": "หน้าก่อน",
@@ -153,7 +154,7 @@
"translate-translations-no-message": "\"$1\" เป็นข้อความที่ไม่สามารถแปลได้",
"translate-translations-none": "ไม่มีคำแปลสำหรับ \"$1\"",
"translate-translations-count": "ค้นพบ $1 {{PLURAL:$1|การแปล|การแปล}}",
- "translate-translations-fieldset-title": "ข้อความ",
+ "translate-translations-fieldset-title": "สาร",
"translate-translations-messagename": "ชื่อ:",
"translate-translations-project": "โครงการ:",
"translate-translations-including-no-param": "โปรดระบุคีย์ของข้อความในตัวแปรหน้าย่อย (subpage parameter) ให้ถูกต้อง",
@@ -177,6 +178,7 @@
"translate-untranslated": "ไม่ได้แปล",
"translate-percentage-complete": "เสร็จสมบูรณ์",
"translate-percentage-fuzzy": "ล้าสมัย",
+ "translate-percentage-proofread": "ตรวจทานแล้ว",
"translate-languagestats-overall": "กลุ่มข้อความทั้งหมด",
"translate-ls-submit": "แสดงสถิติ",
"translate-ls-column-group": "กลุ่มข้อความ",
@@ -208,7 +210,7 @@
"translate-smg-more": "จะมีการเปลี่ยนแปลงที่จะประมวลผลเพิ่มเติมหลังจากที่ส่งการเปลี่ยนแปลงเหล่านี้แล้ว",
"translate-smg-left": "เนื้อหาข้อความในวิกิ",
"translate-smg-right": "การเปลี่ยนแปลงที่ใกล้จะมาถึง",
- "translate-manage-import-diff": "ข้อความ $1 | การกระทำ: $2",
+ "translate-manage-import-diff": "สาร $1 | การกระทำ: $2",
"translate-manage-import-new": "ข้อความใหม่ $1",
"translate-manage-import-deleted": "ข้อความที่ลบแล้ว $1",
"translate-manage-action-import": "นำเข้า",
@@ -243,7 +245,7 @@
"translate-js-support-title": "ขอความช่วยเหลือ ถ้ามีข้อมูลไม่เพียงพอที่จะแปลข้อความนี้ให้ถูกต้อง",
"translate-js-support-unsaved-warning": "คุณมีการแปลที่ยังไม่ได้บันทึก",
"translate-gs-pos": "ตำแหน่ง",
- "translate-gs-code": "โค้ด",
+ "translate-gs-code": "รหัส",
"translate-gs-continent": "ทวีป",
"translate-gs-speakers": "จำนวนผู้ใช้",
"translate-gs-score": "คะแนน",
diff --git a/MLEB/Translate/i18n/core/tr.json b/MLEB/Translate/i18n/core/tr.json
index a5810570..179ae0ff 100644
--- a/MLEB/Translate/i18n/core/tr.json
+++ b/MLEB/Translate/i18n/core/tr.json
@@ -77,7 +77,7 @@
"translate-magic-cm-export": "Aktar",
"translate-magic-nothing-to-export": "Dışa aktarılacak herhangi bir şey yok.",
"translate-magic-cm-to-be": "Yap",
- "translate-magic-cm-current": "Güncelle",
+ "translate-magic-cm-current": "Güncel",
"translate-magic-cm-original": "Orjinal",
"translate-magic-cm-comment": "Açıklama :",
"translate-magic-cm-save": "Kaydet",
diff --git a/MLEB/Translate/i18n/core/uk.json b/MLEB/Translate/i18n/core/uk.json
index 7af56f7f..b530e995 100644
--- a/MLEB/Translate/i18n/core/uk.json
+++ b/MLEB/Translate/i18n/core/uk.json
@@ -195,6 +195,7 @@
"translate-untranslated": "Неперекладені",
"translate-percentage-complete": "Готово",
"translate-percentage-fuzzy": "Застаріло",
+ "translate-percentage-proofread": "Перевірено",
"translate-languagestats-overall": "Повідомлення всіх груп",
"translate-ls-submit": "Показати статистику",
"translate-ls-column-group": "Група повідомлень",
@@ -211,6 +212,7 @@
"supportedlanguages": "Підтримувані мови",
"supportedlanguages-summary": "На цій сторінці перелічено всі мови, що підтримуються {{SITENAME}},\nразом з іменами перекладачів, що працюють цими мовами.\nІм'я перекладача буде тим більшим, що більше редагувань він зробив.\nКолір підкреслення позначає як давно було вчинено останні дії.",
"supportedlanguages-colorlegend": "Кольорова легенда: останній переклад здійснено $1 днів тому.",
+ "supportedlanguages-sqlite-error": "SQLite не підтримується",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Перекладач|Перекладачка}}|Перекладачі}}: $1",
"supportedlanguages-recenttranslations": "останні переклади",
"supportedlanguages-count": "Всього $1 {{PLURAL:$1|мова|мови|мов}}.",
@@ -325,7 +327,7 @@
"tux-editor-cancel-button-label": "Скасувати",
"tux-editor-confirm-button-label": "Підтвердити переклад",
"tux-editor-proofread-button-label": "Позначити як перевірений",
- "tux-editor-shortcut-info": "Натисніть «$1» щоб зберегти, або «$2» для переходу до наступного повідомлення, або «$4» щоб додати короткий опис, або «$3» для інших ярликів.",
+ "tux-editor-shortcut-info": "Натисніть «$1» щоб підтвердити і перейти до наступного повідомлення, «$2», щоб пропустити, «$4», щоб додати короткий опис, або натисніть і потримайте «$3», щоб переглянути інші ярлики.",
"tux-editor-edit-desc": "Редагувати документацію",
"tux-editor-add-desc": "Додати документацію",
"tux-editor-suggestions-title": "Пропозиції",
diff --git a/MLEB/Translate/i18n/core/ur.json b/MLEB/Translate/i18n/core/ur.json
index 3f9abd84..007cbb1a 100644
--- a/MLEB/Translate/i18n/core/ur.json
+++ b/MLEB/Translate/i18n/core/ur.json
@@ -33,6 +33,7 @@
"translate-page-limit-option": "$1 {{PLURAL:$1|پیغام|پیغاما}} فی صفحہ",
"translate-submit": "اخذ کریں",
"translate-page-navigation-legend": "نیوی گیشن",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|پیغام}} کی نمائش",
"translate-page-showing-none": "کو دکھانے کے لئے کوئی پیغامات ۔",
"translate-next": "اگلا صفحہ",
"translate-prev": "سابق صفحہ",
@@ -117,6 +118,7 @@
"translate-sidebar-alltrans": "دیگر زبانوں میں",
"translations": "جملہ تراجم",
"translations-summary": "تمام دستیاب تراجم دیکھنے کے لیے ذیل میں کسی پیغام کا نام درج کریں۔",
+ "translate-translations-none": "«$1» کے تراجم موجود نہیں ہیں",
"translate-translations-fieldset-title": "پیغام",
"translate-translations-messagename": "نام:",
"translate-translations-project": "منصوبہ:",
@@ -138,10 +140,11 @@
"translate-untranslated": "غیر ترجمہ شدہ",
"translate-percentage-complete": "تکمیل",
"translate-percentage-fuzzy": "از کار رفتہ",
+ "translate-percentage-proofread": "نظر ثانی شدہ",
"translate-languagestats-overall": "تمام پیامی گروہ ایک ساتھ",
"translate-ls-submit": "شماریات دکھائیں",
"translate-ls-column-group": "پیامی گروہ",
- "translate-mgs-pagename": "پیغام گروپ کے اعداد و شمار",
+ "translate-mgs-pagename": "پیامی گروہ کے اعداد و شمار",
"translate-mgs-fieldset": "ڈسپلے کی ترجیحات",
"translate-mgs-group": "پیامی گروہ:",
"translate-mgs-nocomplete": "ان زبانوں کو نہ دکھائیں جن کے تراجم مکمل ہو چکے ہیں",
@@ -151,6 +154,7 @@
"translate-mgs-totals": "جملہ $1 {{PLURAL:$1|زبان|زبانیں}} ایک ساتھ",
"supportedlanguages": "حمایت کی زبانیں",
"supportedlanguages-recenttranslations": "حالیہ تراجم",
+ "supportedlanguages-count": "کل $1 {{PLURAL:$1|زبان|زبانیں}}",
"translate-jssti-add": "فہرست کرنے کے لئے شامل کریں",
"translate-smg-right": "آنے والی تبدیلیاں",
"translate-manage-action-import": "درآمد",
@@ -165,6 +169,7 @@
"translate-js-history": "ترجمہ کی تاریخ",
"translate-js-support": "سوال پوچھیں",
"translate-js-support-unsaved-warning": "آپ کے کچھ تراجم اب تک محفوظ نہیں ہوئے ہیں۔",
+ "translate-gs-code": "کوڈ",
"translate-gs-continent": "براعظم",
"translate-gs-speakers": "مقررین",
"translate-gs-score": "سکور",
@@ -211,7 +216,7 @@
"tux-editor-cancel-button-label": "منسوخ کریں",
"tux-editor-confirm-button-label": "ترجمہ کی تصدیق کریں",
"tux-editor-proofread-button-label": "بطور نظرثانی شدہ نشان زد کریں",
- "tux-editor-shortcut-info": "محفوظ کرنے کے لیے \"$1\"، اسے چھوڑ کر آگے بڑھنے کے لیے \"$2\"، خلاصہ درج کرنے کے لیے \"$4\" یا دیگر شارٹ کٹ کے لیے \"$3\" دبائیں۔",
+ "tux-editor-shortcut-info": "تصدیق اور اگلے پیغام پر جانے کے لیے \"$1\"، اسے چھوڑ کر آگے بڑھنے کے لیے \"$2\"، خلاصہ درج کرنے کے لیے \"$4\" یا دیگر شارٹ کٹ کے لیے \"$3\" دبائیں۔",
"tux-editor-edit-desc": "دستاویز میں ترمیم کریں",
"tux-editor-add-desc": "دستاویز شامل کریں",
"tux-editor-suggestions-title": "تجاویز",
@@ -219,6 +224,7 @@
"tux-editor-need-more-help": "مزید مدد کی ضرورت ہے؟",
"tux-editor-ask-help": "مزید معلومات طلب کریں",
"tux-warnings-hide": "چھپائیں",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|دفعہ}} مستعمل",
"tux-editor-message-desc-more": "مزید دیکھیں",
"tux-editor-message-desc-less": "کم دکھائیں",
"tux-editor-clear-translated": "ترجمہ شدہ کو چھپائیں",
diff --git a/MLEB/Translate/i18n/core/uz.json b/MLEB/Translate/i18n/core/uz.json
index c168d4e2..86d7c45f 100644
--- a/MLEB/Translate/i18n/core/uz.json
+++ b/MLEB/Translate/i18n/core/uz.json
@@ -87,6 +87,8 @@
"action-translate-import": "offline tarjimalarni yuklash",
"right-translate-messagereview": "Tarjimalarni koʻrib chiqish",
"right-translate-groupreview": "Xabarlar guruhlarini qayta ishlash holatini o'zgartirish",
+ "translate-rcfilters-translations": "Tarjimalar",
+ "translate-rcfilters-translations-only-label": "Tarjimalar",
"translate-rc-translation-filter": "Tarjimalarni filtrlash",
"translate-rc-translation-filter-no": "Cheklovlarsiz",
"translate-rc-translation-filter-only": "Faqat tarjimalarni koʻrsatish",
@@ -97,26 +99,26 @@
"translate-stats-users": "Tarjimonlar",
"translate-stats-registrations": "Ro'yxatga olishlar",
"translate-stats-reviews": "Tekshiruvlar",
- "translate-stats-reviewers": "Taqrizchilar",
- "translate-statsf-intro": "Bu shakl sizga qulay jadval tuzishga yordam beradi.\nBarcha qiymatlar yuqori va past chegaralarga ega.",
+ "translate-stats-reviewers": "Tekshiruvchilar",
+ "translate-statsf-intro": "Quyidagi shakl yordamida qulay statistik jadval tuzishingiz mumkin.\nBarcha qiymatlar uchun ustki va ostki chegaralarni tayinlash mumkin.",
"translate-statsf-options": "Jadval moslamalari",
- "translate-statsf-width": "Uzunlik piksellarda",
- "translate-statsf-height": "Balandlik piksellarda:",
- "translate-statsf-days": "Kunlardagi vaqt davri:",
- "translate-statsf-start": "Boshlang'ich sana:",
+ "translate-statsf-width": "Uzunligi (piksellarda):",
+ "translate-statsf-height": "Balandligi (piksellarda):",
+ "translate-statsf-days": "Muddati (kunlarda):",
+ "translate-statsf-start": "Boshlangʻich sana:",
"translate-statsf-scale": "Tafsilotlilik darajasi:",
"translate-statsf-scale-months": "Oylar",
"translate-statsf-scale-weeks": "Haftalar",
"translate-statsf-scale-days": "Kunlar",
"translate-statsf-scale-hours": "Soatlar",
- "translate-statsf-count": "O'lchov",
+ "translate-statsf-count": "Oʻlchov birligi:",
"translate-statsf-count-edits": "Tahrirlar soni",
"translate-statsf-count-users": "Faol tarjimonlar",
- "translate-statsf-count-registrations": "Yangi foydalanuvchilar",
- "translate-statsf-count-reviews": "Tarjima taqrizchilari",
- "translate-statsf-count-reviewers": "Taqrizchilar",
- "translate-statsf-language": "Til kodlari roʻyxati vergul orqali:",
- "translate-statsf-group": "Guruh kodlari roʻyxati vergul orqali:",
+ "translate-statsf-count-registrations": "Yangi tarjimonlar",
+ "translate-statsf-count-reviews": "Tekshiruvlar",
+ "translate-statsf-count-reviewers": "Tekshiruvchilar",
+ "translate-statsf-language": "Til kodlarining roʻyxati (vergul bilan ajrating):",
+ "translate-statsf-group": "Guruh kodlarining roʻyxati (vergul bilan ajrating):",
"translate-statsf-submit": "Ko‘rib chiqish",
"translate-tag-page-desc": "[[$2|$1]] viki-sahifasining tarjimasi",
"translate-sidebar-alltrans": "Boshqa tillarda",
@@ -144,10 +146,11 @@
"translate-ls-noempty": "Toʻliq tarjima qilinmagan xabar guruhlari koʻrsatilmasin",
"translate-language": "Til",
"translate-total": "Xabarlar",
- "translate-untranslated": "Tarjima qilinmaganlari",
- "translate-percentage-complete": "Bajarildi",
- "translate-percentage-fuzzy": "Eskirdi",
- "translate-languagestats-overall": "Barcha guruhlar xabarlari",
+ "translate-untranslated": "Tarjima qilinmagan",
+ "translate-percentage-complete": "Tayyor",
+ "translate-percentage-fuzzy": "Eskirgan",
+ "translate-percentage-proofread": "Tekshirilgan",
+ "translate-languagestats-overall": "Jami (barcha xabarlar)",
"translate-ls-submit": "Statistikani koʻrsat",
"translate-ls-column-group": "Xabarlar guruhi",
"translate-mgs-pagename": "Xabarlar guruhlari statistikasi",
@@ -163,18 +166,18 @@
"supportedlanguages-count": "Jami $1 ta til.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|ta tahrir}} - oxirgi tahrir $3 {{PLURAL:$3|kun}} oldin",
"translate-save": "Saqlash ($1)",
- "translate-jssti-add": "Ro'yxatga qo'shish",
+ "translate-jssti-add": "Roʻyxatga qoʻshish",
"managemessagegroups": "Xabar guruhlarini boshqarish",
"translate-smg-nochanges": "Ishlov berish uchun mos oʻzgarishlar yoʻq.",
- "translate-smg-left": "Vikiga xabaring tarkibi",
+ "translate-smg-left": "Xabarning vikidagi tarkibi",
"translate-smg-right": "Kiruvchi oʻzgarishlar",
"translate-manage-import-diff": "Xabar $1 | Amallar: $2",
"translate-manage-import-new": "Yangi xabar $1",
"translate-manage-import-deleted": "O'chirilgan xabar $1",
"translate-manage-action-import": "Import",
"translate-manage-action-conflict": "Import qilish va noaniqlik",
- "translate-manage-action-ignore": "E'tibor qilmaslik",
- "translate-manage-action-fuzzy": "Import qilish va noaniq tarjimalar",
+ "translate-manage-action-ignore": "Eʼtibor berilmasin",
+ "translate-manage-action-fuzzy": "Import qilingan va eskirgan tarjimalar",
"translate-js-summary": "Tavsif",
"translate-js-save": "Saqlash",
"translate-js-next": "Saqlash va keyingisini ochish",
@@ -198,7 +201,7 @@
"translate-search-languagefilter": "Mazkur til boʻyicha saralash:",
"translate-search-nofilter": "Filtrsiz",
"log-name-translationreview": "Tarjimalarni tekshirish qaydlari",
- "log-description-translationreview": "Barcha tarjima taqrizlari va xabar guruhlari qaydi",
+ "log-description-translationreview": "Tarjimalar va xabar guruhlarini tekshirib chiqish qaydlarining toʻliq roʻyxati",
"logentry-translationreview-message": "$1 $3 sahifasi tarjimasini {{GENDER:$2|tekshirib chiqdi}}",
"translate-workflow-state-": "(o'rnatilmagan)",
"translate-workflowstatus": "Holat: $1",
diff --git a/MLEB/Translate/i18n/core/vi.json b/MLEB/Translate/i18n/core/vi.json
index 0e3dbff8..53ebe7a3 100644
--- a/MLEB/Translate/i18n/core/vi.json
+++ b/MLEB/Translate/i18n/core/vi.json
@@ -3,7 +3,8 @@
"authors": [
"Minh Nguyen",
"Vinhtantran",
- "Thin"
+ "Thin",
+ "Leduyquang753"
]
},
"translate": "Biên dịch",
@@ -176,6 +177,7 @@
"translate-untranslated": "Chưa dịch",
"translate-percentage-complete": "Mức hoàn thành",
"translate-percentage-fuzzy": "Lỗi thời",
+ "translate-percentage-proofread": "Đã duyệt",
"translate-languagestats-overall": "Tổng cộng các nhóm thông điệp",
"translate-ls-submit": "Xem thống kê",
"translate-ls-column-group": "Nhóm thông điệp",
@@ -193,6 +195,8 @@
"supportedlanguages-summary": "Trang này liệt kê tất cả các ngôn ngữ được {{SITENAME}} hỗ trợ, cùng với tên các biên dịch viên đang làm việc trên ngôn ngữ đó.\nBiên dịch viên càng đóng góp nhiều thì tên của họ càng lớn hơn.\nMàu đường gạch dưới cho biết biên dịch viên đã tích cực tại đây cách đây bao lâu.",
"supportedlanguages-colorlegend": "Chú thích các màu: Bản dịch gần đây nhất cách đây $1 ngày.",
"supportedlanguages-portallink": "[$1] $2 – $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite không được hỗ trợ",
"supportedlanguages-translators": "{{PLURAL:$2|Biên dịch viên|Các biên dịch viên}}{{GENDER:$3}}: $1",
"supportedlanguages-recenttranslations": "các bản dịch gần đây",
"supportedlanguages-count": "$1 ngôn ngữ tổng cộng.",
@@ -288,18 +292,18 @@
"tux-tab-all": "Tất cả",
"tux-tab-untranslated": "Chưa dịch",
"tux-tab-outdated": "Lỗi thời",
- "tux-tab-translated": "Dịch rồi",
+ "tux-tab-translated": "Đã dịch",
"tux-tab-unproofread": "Chưa duyệt",
"tux-edit": "Sửa đổi",
"tux-status-optional": "Tùy chọn",
"tux-status-fuzzy": "Lỗi thời",
"tux-status-proofread": "Đã duyệt",
- "tux-status-translated": "Dịch rồi",
+ "tux-status-translated": "Đã dịch",
"tux-status-saving": "Đang lưu…",
"tux-status-unsaved": "Chưa lưu",
"tux-save-unknown-error": "Đã xuất hiệu lỗi bất ngờ.",
"tux-editor-placeholder": "Bản dịch của bạn",
- "tux-editor-editsummary-placeholder": "Tùy chọn tóm lược sửa đổi",
+ "tux-editor-editsummary-placeholder": "Tóm tắt tùy chọn",
"tux-editor-paste-original-button-label": "Dán văn bản gốc",
"tux-editor-discard-changes-button-label": "Hủy thay đổi",
"tux-editor-save-button-label": "Lưu bản dịch",
@@ -307,7 +311,7 @@
"tux-editor-cancel-button-label": "Hủy bỏ",
"tux-editor-confirm-button-label": "Xác nhận bản dịch",
"tux-editor-proofread-button-label": "Đánh dấu duyệt",
- "tux-editor-shortcut-info": "Bấm “$1” để lưu, “$2” để chuyển đến thông điệp kế, “$4” để tóm lược, hoặc “$3” cho các phím tắt khác.",
+ "tux-editor-shortcut-info": "Bấm “$1” để lưu và chuyển tới thông điệp tiếp theo, “$2” để bỏ qua, “$4” để cung cấp tóm tắt, hoặc giữ “$3” để xem các phím tắt khác.",
"tux-editor-edit-desc": "Sửa đổi tài liệu",
"tux-editor-add-desc": "Thêm tài liệu",
"tux-editor-suggestions-title": "Gợi ý",
diff --git a/MLEB/Translate/i18n/core/yi.json b/MLEB/Translate/i18n/core/yi.json
index b313f9ca..85f722a5 100644
--- a/MLEB/Translate/i18n/core/yi.json
+++ b/MLEB/Translate/i18n/core/yi.json
@@ -282,7 +282,7 @@
"tux-editor-cancel-button-label": "אַנולירן",
"tux-editor-confirm-button-label": "באשטעטיקן איבערזעצונג",
"tux-editor-proofread-button-label": "מארקירן רעצענזירט",
- "tux-editor-shortcut-info": "דרוקט \"$1\" אויפצוהיטן אדער \"$2\" איבערצוהיפן צו דער נעקסטער מעלדונג אדער \"$4\" צו פארזארגן א רעזומע אדער \"$3\" פאר אנדערע דורכוועגן.",
+ "tux-editor-shortcut-info": "דרוקט \"$1\" צו באשטעטיקן און גיין צו דער נעקסטער מעלדונג, \"$2\" איבערצוהיפן, \"$4\" צו פארזארגן א רעזומע אדער האלט \"$3\" צו זען אנדערע דורכוועגן.",
"tux-editor-edit-desc": "רעדאקטירן דאקומענטאציע",
"tux-editor-add-desc": "צולייגן דאקומענטאציע",
"tux-editor-suggestions-title": "הצעות",
diff --git a/MLEB/Translate/i18n/core/yue.json b/MLEB/Translate/i18n/core/yue.json
index 78a99c2e..66b2af06 100644
--- a/MLEB/Translate/i18n/core/yue.json
+++ b/MLEB/Translate/i18n/core/yue.json
@@ -11,6 +11,9 @@
"translate": "翻譯",
"translate-desc": "翻譯MediaWiki同其它嘢嘅[[Special:Translate|特別頁]]",
"translate-taction-translate": "翻譯",
+ "translate-taction-proofread": "複審",
+ "translate-taction-export": "匯出",
+ "translate-taction-disabled": "呢個wiki唔畀做呢個動作。",
"translate-page-no-such-language": "所指定嘅語言唔正確。",
"translate-page-no-such-group": "所指定嘅組唔正確。",
"translate-page-settings-legend": "設定",
@@ -26,14 +29,22 @@
"translate-next": "下一版",
"translate-prev": "上一版",
"translate-page-description-legend": "有關嗰組嘅信息",
+ "translate-page-edit": "改",
"translate-optional": "(可選)",
"translate-ignored": "(已略過)",
+ "translate-edit-title": "改「$1」",
"translate-edit-definition": "信息定義",
"translate-edit-contribute": "貢獻",
- "translate-edit-no-information": "''呢句信息無註解。\n如果你知道呢句信息響邊同埋點用,你可以加註解去呢個信息去幫其他嘅翻譯者。''",
+ "translate-edit-no-information": "<em>呢句信息無註解。\n如果你知道呢句信息響邊同埋點用,你可以加註解去呢個信息去幫其他嘅譯者。</em>",
"translate-edit-information": "呢句信息嘅資料 ($1)",
- "translate-edit-in-other-languages": "其它語言嘅信息",
+ "translate-edit-in-other-languages": "呢個訊息嘅第啲語文",
"translate-edit-warnings": "有關未譯好嘅警告",
+ "translate-edit-tmmatch-source": "翻譯原文:$1",
+ "translate-edit-tmmatch": "$1%符合",
+ "translate-edit-nopermission": "你要有翻譯權限先譯到啲訊息。",
+ "translate-edit-askpermission": "攞權限",
+ "exporttranslations": "匯出翻譯",
+ "translate-export-form-format": "格式",
"translate-magic-pagename": "延伸MediaWiki翻譯",
"translate-magic-help": "你可以翻譯特別頁替身、魔術字、皮名同埋名空間嘅名。\n\n響魔術字度你係要同時包括英文嘅翻譯,唔係嘅話就會唔能夠運作。\n同時保持第一個項目 (0或1) 不變。\n\n特別頁替身同埋魔術字可以有多個翻譯。\n翻譯係以逗號 (,) 分隔。\n皮名同埋空間名只可以有一項翻譯。\n\n響空間名翻譯度, <code>$1 talk</code> 係特別嘅。 <code>$1</code> 會由網名代替咗(例如<code>{{ns:project_talk}}</code>)。\n如果你嘅語言組合唔能夠響網站名唔改嘅情況之下去組合成你嘅意思,請聯絡技術員。\n\n你需要係翻譯組嘅組員去儲存嘅啲信息。\n響你撳下面嘅儲存擊之前,啲改動唔會儲存落來。",
"translate-magic-submit": "擷取",
@@ -48,7 +59,7 @@
"translate-magic-special": "特別頁替身",
"translate-magic-words": "魔術字",
"translate-magic-namespace": "名空間名",
- "translate-checks-parameters": "下面嘅參數係無用到嘅: <strong>$1</strong>",
+ "translate-checks-parameters": "下面{{PLURAL:$2|嘅參數|啲參數}}係無用到嘅: <strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "插入字嘅數量唔均等: <strong>$1</strong>",
"translate-checks-links": "下面嘅連結有問題: <strong>$1</strong>",
"translate-checks-xhtml": "請改下面嘅標籤去正確嘅: <strong>$1</strong>",
@@ -56,6 +67,21 @@
"translate-mgs-totals": "總共有$1個文",
"translate-gs-multiple": "多種語言",
"translate-documentation-language": "訊息說明文檔",
+ "translate-msggroupselector-projects": "訊息組",
+ "translate-msggroupselector-search-all": "全部",
+ "tux-languageselector": "譯做",
+ "tux-tab-all": "全部",
+ "tux-tab-untranslated": "未譯",
+ "tux-tab-translated": "譯咗",
+ "tux-edit": "改",
+ "tux-status-translated": "譯咗",
+ "tux-status-saving": "儲存緊……",
"tux-save-unknown-error": "發生未知嘅錯誤。",
+ "tux-editor-placeholder": "你嘅譯文",
+ "tux-editor-save-button-label": "儲存翻譯",
+ "tux-editor-skip-button-label": "跳去下個",
+ "tux-editor-clear-translated": "收埋譯咗嘅",
+ "tux-editor-translate-mode": "一覽",
+ "tux-messagetable-more-messages": "重有$1句{{PLURAL:$1|訊息}}",
"translate-search-more-languages-info": "重有 $1 種{{PLURAL:$1|語言|語言}}"
}
diff --git a/MLEB/Translate/i18n/core/zh-hans.json b/MLEB/Translate/i18n/core/zh-hans.json
index da214abb..0c4ba72b 100644
--- a/MLEB/Translate/i18n/core/zh-hans.json
+++ b/MLEB/Translate/i18n/core/zh-hans.json
@@ -30,7 +30,8 @@
"Fengchao",
"Duolaimi",
"LNDDYL",
- "Wmr"
+ "Wmr",
+ "A Chinese Wikipedian"
]
},
"translate": "翻译",
@@ -202,6 +203,7 @@
"translate-untranslated": "未翻译数",
"translate-percentage-complete": "完成度",
"translate-percentage-fuzzy": "已过时",
+ "translate-percentage-proofread": "已巡查",
"translate-languagestats-overall": "所有信息组总计",
"translate-ls-submit": "显示统计",
"translate-ls-column-group": "信息组",
diff --git a/MLEB/Translate/i18n/core/zh-hant.json b/MLEB/Translate/i18n/core/zh-hant.json
index bd0397ab..58e50c5c 100644
--- a/MLEB/Translate/i18n/core/zh-hant.json
+++ b/MLEB/Translate/i18n/core/zh-hant.json
@@ -191,6 +191,7 @@
"translate-untranslated": "未翻譯",
"translate-percentage-complete": "完成度",
"translate-percentage-fuzzy": "已過時",
+ "translate-percentage-proofread": "已審查",
"translate-languagestats-overall": "所有訊息群組合計",
"translate-ls-submit": "顯示統計",
"translate-ls-column-group": "訊息群組",
@@ -322,7 +323,7 @@
"tux-editor-cancel-button-label": "取消",
"tux-editor-confirm-button-label": "確認翻譯",
"tux-editor-proofread-button-label": "標記為已審查",
- "tux-editor-shortcut-info": "使用 \"$1\" 儲存,或 \"$2\" 跳至下一則訊息或 \"$4\" 填寫摘要或 \"$3\" 使用其他快速鍵。",
+ "tux-editor-shortcut-info": "使用 \"$1\" 來確認並移至下一個訊息,使用 \"$2\" 來略過,使用 \"$4\" 來提供摘要或壓住 \"$3\" 來查看使用其它快速鍵。",
"tux-editor-edit-desc": "編輯說明",
"tux-editor-add-desc": "新增說明",
"tux-editor-suggestions-title": "建議",
diff --git a/MLEB/Translate/i18n/pagetranslation/ar.json b/MLEB/Translate/i18n/pagetranslation/ar.json
index f419067e..a313fcf4 100644
--- a/MLEB/Translate/i18n/pagetranslation/ar.json
+++ b/MLEB/Translate/i18n/pagetranslation/ar.json
@@ -138,6 +138,8 @@
"pt-movepage-list-pages": "قائمة الصفحات التي ستنقل",
"pt-movepage-list-translation": "{{PLURAL:$1|صفحة|صفحات}} الترجمة",
"pt-movepage-list-section": "{{PLURAL:$1|صفحة|صفحات}} وحدة الترجمة",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|صفحة|صفحات}} معلم عليها للترجمة",
+ "pt-movepage-list-translatable-note": "هذه الصفحات يجب أن يتم نقلها بشكل منفصل.",
"pt-movepage-list-other": "{{PLURAL:$1|صفحة|صفحات}} فرعية أخرى",
"pt-movepage-list-count": "كإجمالي $1 {{PLURAL:$1|صفحة|صفحات}} للنقل.",
"pt-movepage-legend": "نقل الصفحة القابلة للترجمة",
diff --git a/MLEB/Translate/i18n/pagetranslation/avk.json b/MLEB/Translate/i18n/pagetranslation/avk.json
new file mode 100644
index 00000000..9e1cf219
--- /dev/null
+++ b/MLEB/Translate/i18n/pagetranslation/avk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Axel xadolik"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ( $2% kalavayan )"
+}
diff --git a/MLEB/Translate/i18n/pagetranslation/be-tarask.json b/MLEB/Translate/i18n/pagetranslation/be-tarask.json
index 64de4cf1..73c2c3b5 100644
--- a/MLEB/Translate/i18n/pagetranslation/be-tarask.json
+++ b/MLEB/Translate/i18n/pagetranslation/be-tarask.json
@@ -9,7 +9,7 @@
]
},
"pagetranslation": "Пераклад старонкі",
- "right-pagetranslation": "пазначаць вэрсіяў старонак для перакладу",
+ "right-pagetranslation": "пазначэньне вэрсіяў старонак для перакладу",
"action-pagetranslation": "кіраваньне перакладам старонак",
"tpt-section": "Адзінка перакладу $1",
"tpt-section-new": "Новая адзінка перакладу. Назва: $1",
@@ -29,6 +29,7 @@
"tpt-offer-notify": "Вы можаце <span class=\"plainlinks\">[$1 паведаміць перакладчыкам]</span> пра гэтую старонку.",
"tpt-showpage-intro": "Ніжэй знаходзяцца новыя, існуючыя і выдаленыя сэкцыі.\nПерад пазначэньнем гэтай вэрсіі для перакладу, праверце зьмены ў сэкцыях для таго, каб пазьбегнуць непатрэбнай працы для перакладчыкаў.",
"tpt-mark-summary": "Пазначыў гэтую вэрсію для перакладу",
+ "tpt-mark-nochanges": "Няма зьмяненьняў для прагляду. Пазначэньне гэтай старонкі для перакладу не адрэдагуе ні яе, ні любыя модулі перакладу.",
"tpt-edit-failed": "Немагчыма абнавіць старонку: $1",
"tpt-duplicate": "Назва адзінкі перакладу «$1» скарыстаная больш за адзін раз.",
"tpt-already-marked": "Апошняя вэрсія гэтай старонкі ўжо была пазначана для перакладу.",
@@ -65,8 +66,10 @@
"tpt-languages-nonzero": "$1 ($2% перакладзена)",
"tpt-tab-translate": "Перакладаць",
"tpt-target-page": "Гэта старонка ня можа быць абноўлена ўручную.\nГэта старонка зьяўляецца перакладам старонкі [[$1]], пераклад можа быць абноўлены з выкарыстаньнем [$2 інструмэнта перакладу].",
+ "tpt-patrolling-blocked": "Гэтая старонка ня можа быць адпатруляваная. Замест гэтага скарыстайцеся дзеяньнем перакладу, каб праверыць яго.",
"tpt-unknown-page": "Гэта прастора назваў зарэзэрваваная для перакладаў старонак зьместу.\nСтаронка, якую Вы спрабуеце рэдагаваць, верагодна не зьвязана зь якой-небудзь старонкай пазначанай для перакладу.",
"tpt-translation-restricted": "Пераклад гэтай старонкі на дадзеную мову быў папярэджаны адміністратарам паракладаў.\n\nПрычына: $1",
+ "tpt-discouraged-language-force-header": "Гэтую старонку немагчыма перакласьці на $1.",
"tpt-discouraged-language-force": "<strong>Гэтая старонка ня можа быць перакладзеная на мову $2.</strong>\n\nАдміністратар перакладу вырашыў, што гэтая старонка можа быць перакладзеная толькі на мовы: $3.",
"tpt-discouraged-language": "<strong>Пераклад на мову $2 не зьяўляецца прыярытэтным.</strong>\n\nАдміністратар перакладу вырашыў сканцэнтраваць перакладніцкія высілкі на мовах $3.",
"tpt-discouraged-language-reason": "Прычына: $1",
diff --git a/MLEB/Translate/i18n/pagetranslation/bg.json b/MLEB/Translate/i18n/pagetranslation/bg.json
index 494d2463..e68c2cd5 100644
--- a/MLEB/Translate/i18n/pagetranslation/bg.json
+++ b/MLEB/Translate/i18n/pagetranslation/bg.json
@@ -41,6 +41,7 @@
"pt-deletepage-reason": "Причина:",
"pt-deletepage-subpages": "Изтриване на всички подстраници",
"pt-deletepage-list-other": "Други подстраници",
+ "pm-import-button-label": "Внасяне",
"pm-savepages-button-label": "Съхраняване",
"pm-cancel-button-label": "Отказ",
"tpt-translate-title": "Позволяване превод на заглавието на страницата",
diff --git a/MLEB/Translate/i18n/pagetranslation/cs.json b/MLEB/Translate/i18n/pagetranslation/cs.json
index b86d5d53..14ae7812 100644
--- a/MLEB/Translate/i18n/pagetranslation/cs.json
+++ b/MLEB/Translate/i18n/pagetranslation/cs.json
@@ -10,7 +10,8 @@
"Vks",
"H4nek",
"Kvetoslav47",
- "Dvorapa"
+ "Dvorapa",
+ "Patriccck"
]
},
"pagetranslation": "Překlad stránek",
@@ -106,6 +107,7 @@
"pt-movepage-action-check": "Zkontrolovat, zda je přesun možný",
"pt-movepage-action-perform": "Přesunout",
"pt-movepage-action-other": "Změnit cíl",
+ "pt-deletepage-current": "Název stránky:",
"pt-deletepage-reason": "Důvod:",
"pt-deletepage-subpages": "Odstranit všechny podstránky",
"pt-deletepage-list-pages": "Seznam stránek ke smazání",
diff --git a/MLEB/Translate/i18n/pagetranslation/da.json b/MLEB/Translate/i18n/pagetranslation/da.json
index 03024366..7566c994 100644
--- a/MLEB/Translate/i18n/pagetranslation/da.json
+++ b/MLEB/Translate/i18n/pagetranslation/da.json
@@ -129,6 +129,8 @@
"pt-movepage-list-pages": "Liste over sider til at flytte",
"pt-movepage-list-translation": "{{PLURAL:$1|Oversættelsesside|Oversættelsessider}}",
"pt-movepage-list-section": "{{PLURAL:$1|Oversættelsesenhedsside|Oversættelsesenhedssider}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Underside|Undersider}} markeret til oversættelse",
+ "pt-movepage-list-translatable-note": "Disse sider bør flyttes separat.",
"pt-movepage-list-other": "{{PLURAL:$1|Anden underside|Andre undersider}}",
"pt-movepage-list-count": "I alt $1 {{PLURAL:$1|side|sider}} til at flytte.",
"pt-movepage-legend": "Flyt oversætbare side",
@@ -170,9 +172,12 @@
"pm-cancel-button-label": "Annullér",
"pm-page-does-not-exist": "$1 findes ikke.",
"pm-old-translations-missing": "$1 indeholder ingen gamle oversættelser.",
+ "pm-pagename-missing": "Indtast venlist sidetitlen.",
"pm-delete-icon-hover-text": "Slet enhed",
"pm-pagetitle-placeholder": "Indtast sidetitlen",
+ "pm-pagetitle-missing": "Indtast venlist sidetitlen.",
"tpt-translate-title": "Tillad oversættelse af sidetitlen",
+ "pagepreparation": "Forbered side til oversættelse",
"pp-pagename-placeholder": "Indtast sidenavnet",
"pp-prepare-button-label": "Forbered",
"pp-save-button-label": "Gem",
diff --git a/MLEB/Translate/i18n/pagetranslation/de.json b/MLEB/Translate/i18n/pagetranslation/de.json
index b5bed164..9fdae9b6 100644
--- a/MLEB/Translate/i18n/pagetranslation/de.json
+++ b/MLEB/Translate/i18n/pagetranslation/de.json
@@ -143,7 +143,9 @@
"pt-movepage-list-pages": "Liste der zu verschiebenden Seiten",
"pt-movepage-list-translation": "Übersetzte {{PLURAL:$1|Seite|Seiten}}",
"pt-movepage-list-section": "{{PLURAL:$1|Seite|Seiten}} der Übersetzungseinheiten",
- "pt-movepage-list-other": "Weitere {{PLURAL:$1|Unterseite|Unterseiten}}",
+ "pt-movepage-list-translatable": "Zur Übersetzung markierte {{PLURAL:$1|Unterseite|Unterseiten}}",
+ "pt-movepage-list-translatable-note": "Diese Seiten müssen getrennt verschoben werden.",
+ "pt-movepage-list-other": "Andere {{PLURAL:$1|Unterseite|Unterseiten}}",
"pt-movepage-list-count": "Insgesamt gibt es $1 zu verschiebende {{PLURAL:$1|Seite|Seiten}}.",
"pt-movepage-legend": "Übersetzungsseite verschieben",
"pt-movepage-current": "Aktueller Seitenname:",
diff --git a/MLEB/Translate/i18n/pagetranslation/diq.json b/MLEB/Translate/i18n/pagetranslation/diq.json
index 8078a4bf..91e7b608 100644
--- a/MLEB/Translate/i18n/pagetranslation/diq.json
+++ b/MLEB/Translate/i18n/pagetranslation/diq.json
@@ -37,7 +37,7 @@
"pt-movepage-current": "Nameyo raverde:",
"pt-movepage-new": "Nameyo newe:",
"pt-movepage-reason": "Sebeb:",
- "pt-deletepage-action-other": "Etiketan bivurne",
+ "pt-deletepage-action-other": "Hedefi bıvurne",
"pt-deletepage-current": "Nameyê pele:",
"pt-deletepage-reason": "Sebeb:",
"pt-deletepage-list-translation": "Pelê açarnayışi",
diff --git a/MLEB/Translate/i18n/pagetranslation/en.json b/MLEB/Translate/i18n/pagetranslation/en.json
index d8d0a118..9a1fe1ba 100644
--- a/MLEB/Translate/i18n/pagetranslation/en.json
+++ b/MLEB/Translate/i18n/pagetranslation/en.json
@@ -136,7 +136,9 @@
"pt-movepage-list-pages": "List of pages to move",
"pt-movepage-list-translation": "Translation {{PLURAL:$1|page|pages}}",
"pt-movepage-list-section": "Translation unit {{PLURAL:$1|page|pages}}",
- "pt-movepage-list-other": "Other sub{{PLURAL:$1|page|pages}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Subpage|Subpages}} marked for translation",
+ "pt-movepage-list-translatable-note": "These pages must be moved separately.",
+ "pt-movepage-list-other": "Other {{PLURAL:$1|subpage|subpages}}",
"pt-movepage-list-count": "In total $1 {{PLURAL:$1|page|pages}} to move.",
"pt-movepage-legend": "Move translatable page",
"pt-movepage-current": "Current name:",
diff --git a/MLEB/Translate/i18n/pagetranslation/es.json b/MLEB/Translate/i18n/pagetranslation/es.json
index 60d1adc5..f0dfbd6b 100644
--- a/MLEB/Translate/i18n/pagetranslation/es.json
+++ b/MLEB/Translate/i18n/pagetranslation/es.json
@@ -185,7 +185,7 @@
"pt-deletepage-started": "Compruebe los errores y los mensajes de conclusión en el [[Special:Log/pagetranslation|registro de traducción de páginas]].",
"pt-deletepage-intro": "Esta página especial te permite eliminar páginas traducibles enteras o una página de traducción individual a un idioma. La eliminación no será instantánea, porque deben borrarse todas las páginas dependientes de ella. \nLos fallos se registrarán en el [[Special:Log/pagetranslation|registro de traducción de la página]] y tendrán que ser reparados a mano.",
"pagemigration": "Migración de página de traducción",
- "pagemigration-summary": "Especificar una página de traducción y restaurar cualquier traducción antes de que el sistema Translate fue habilitado en esa página.",
+ "pagemigration-summary": "Especifica una página traducida y restaura cualesquera traducciones realizadas antes de que se activara el sistema Translate en esa página.",
"pm-import-button-label": "Importar",
"pm-savepages-button-label": "Guardar",
"pm-cancel-button-label": "Cancelar",
diff --git a/MLEB/Translate/i18n/pagetranslation/fa.json b/MLEB/Translate/i18n/pagetranslation/fa.json
index 829ab964..0ed9f3be 100644
--- a/MLEB/Translate/i18n/pagetranslation/fa.json
+++ b/MLEB/Translate/i18n/pagetranslation/fa.json
@@ -108,7 +108,7 @@
"log-description-pagetranslation": "سیاههٔ اعمال مربوط به سامانهٔ ترجمهٔ صفحه",
"log-name-pagetranslation": "سیاههٔ ترجمهٔ صفحه",
"logentry-pagetranslation-mark": "$1 $3 را برای ترجمه {{GENDER:$2|علامت‌گذاری کرد}}",
- "logentry-pagetranslation-unmark": "$1 $3 را از ترجمه {{GENDER:$2|حذف کرد}}",
+ "logentry-pagetranslation-unmark": "$1 $3 را از سامانه ترجمه {{GENDER:$2|حذف کرد}}",
"logentry-pagetranslation-moveok": "$1$1 تغییر نام صفحه قابل ترجمه از $3 به $4 را {{GENDER:$2|کامل کرد}}",
"logentry-pagetranslation-movenok": "$1 هنگام انتقال صفحه $3 به $4 به مشکل {{GENDER:$2|برخورد}}",
"logentry-pagetranslation-deletefok": "$1 حذف صفحه قابل ترجمه $3 را {{GENDER:$2|کامل کرد}}",
diff --git a/MLEB/Translate/i18n/pagetranslation/fi.json b/MLEB/Translate/i18n/pagetranslation/fi.json
index 4d6f16fc..5710b680 100644
--- a/MLEB/Translate/i18n/pagetranslation/fi.json
+++ b/MLEB/Translate/i18n/pagetranslation/fi.json
@@ -119,7 +119,7 @@
"logentry-pagetranslation-discourage": "$1 {{GENDER:$2|rajoitti}} sivun $3 kääntämistä",
"logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|poisti}} ensisijaiset kielet käännettävästä sivusta $3",
"logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|asetti}} käännettävän sivun $3 ensisijaiset käännöskielet arvoon $5",
- "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|asetti}} käännettävän sivun $3 ainoat sallitus käännöskielet arvoon $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|asetti}} käännettävän sivun $3 ainoat sallitut käännöskielet arvoon $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|lisäsi}} käännettävän sivun $3 kokoelmaryhmään $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|poisti}} käännettävän sivun $3 kokoelmaryhmästä $4",
"log-action-filter-pagetranslation": "Toiminnon tyyppi:",
@@ -135,13 +135,14 @@
"pt-movepage-block-base-invalid": "Käännettävän sivun nimi ei ole kelvollinen.",
"pt-movepage-block-tp-exists": "Käännössivu [[:$2]] on olemassa.",
"pt-movepage-block-tp-invalid": "Käännössivun [[:$1]] uusi nimi ei ole kelvollinen (liian pitkä?)",
- "pt-movepage-block-section-exists": "Käännösosiosivu \"[[:$2]]\" käännöselementille on olemassa.",
- "pt-movepage-block-section-invalid": "Kohdesivun otsikko käännösosiosivulle \"[[:$1]]\" ei ole kelvollinen (liian pitkä?)",
+ "pt-movepage-block-section-exists": "Käännösosiosivu ”[[:$2]]” käännöselementille on olemassa.",
+ "pt-movepage-block-section-invalid": "Kohdesivun otsikko käännösosiosivulle ”[[:$1]]” ei ole kelvollinen (liian pitkä?)",
"pt-movepage-block-subpage-exists": "Alasivu [[:$2]] on olemassa.",
"pt-movepage-block-subpage-invalid": "Alasivun [[:$1]] uusi nimi ei ole kelvollinen (liian pitkä?)",
"pt-movepage-list-pages": "Lista siirrettävistä sivuista",
"pt-movepage-list-translation": "{{PLURAL:$1|Käännössivu|Käännössivut}}",
"pt-movepage-list-section": "{{PLURAL:$1|Käännösosiosivut}}",
+ "pt-movepage-list-translatable-note": "Nämä sivut on siirrettävä erikseen.",
"pt-movepage-list-other": "{{PLURAL:$1|Muu alasivu|Muut alasivut}}",
"pt-movepage-list-count": "Yhteensä $1 {{PLURAL:$1|siirrettävä sivu|siirrettävää sivua}}.",
"pt-movepage-legend": "Siirrä käännettävä sivu",
diff --git a/MLEB/Translate/i18n/pagetranslation/fr.json b/MLEB/Translate/i18n/pagetranslation/fr.json
index 526b73b3..5d03ddeb 100644
--- a/MLEB/Translate/i18n/pagetranslation/fr.json
+++ b/MLEB/Translate/i18n/pagetranslation/fr.json
@@ -157,7 +157,9 @@
"pt-movepage-list-pages": "Liste des pages à déplacer",
"pt-movepage-list-translation": "{{PLURAL:$1|page|pages}} de traduction",
"pt-movepage-list-section": "{{PLURAL:$1|page|pages}} d'unités de traduction",
- "pt-movepage-list-other": "{{PLURAL:$1|Autre sous-page|Autres sous-pages}}",
+ "pt-movepage-list-translatable": "Sous-page{{PLURAL:$1||s}} marquée{{PLURAL:$1||s}} pour la traduction",
+ "pt-movepage-list-translatable-note": "Ces pages doivent être renommées séparément.",
+ "pt-movepage-list-other": "Autre{{PLURAL:$1||s}} sous-page{{PLURAL:$1||s}}",
"pt-movepage-list-count": "$1 {{PLURAL:$1|page|pages}} à déplacer au total.",
"pt-movepage-legend": "Déplacer la page à traduire",
"pt-movepage-current": "Nom actuel :",
diff --git a/MLEB/Translate/i18n/pagetranslation/he.json b/MLEB/Translate/i18n/pagetranslation/he.json
index 8e1e631a..83955d7b 100644
--- a/MLEB/Translate/i18n/pagetranslation/he.json
+++ b/MLEB/Translate/i18n/pagetranslation/he.json
@@ -137,7 +137,9 @@
"pt-movepage-list-pages": "רשימת הדפים להעברה",
"pt-movepage-list-translation": "{{PLURAL:$1|דף|דפי}} תרגום",
"pt-movepage-list-section": "{{PLURAL:$1|דף|דפי}} יחידת תרגום",
- "pt-movepage-list-other": "{{PLURAL:$1|דף משנה אחר|דפי משנה אחרים}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|דף־משנה שסומן|דפי־משנה שסומנו}} לתרגום",
+ "pt-movepage-list-translatable-note": "צריך להעביר את הדפים האלה בנפרד.",
+ "pt-movepage-list-other": "{{PLURAL:$1|דף־משנה אחר|דפי־משנה אחרים}}",
"pt-movepage-list-count": "בסך הכול יש {{PLURAL:$1|דף אחד|$1 דפים}} להעברה.",
"pt-movepage-legend": "העברת דף שניתן לתרגום",
"pt-movepage-current": "השם הנוכחי:",
diff --git a/MLEB/Translate/i18n/pagetranslation/hr.json b/MLEB/Translate/i18n/pagetranslation/hr.json
index 9cd10561..becd6c26 100644
--- a/MLEB/Translate/i18n/pagetranslation/hr.json
+++ b/MLEB/Translate/i18n/pagetranslation/hr.json
@@ -11,7 +11,7 @@
},
"pagetranslation": "Prijevod stranice",
"right-pagetranslation": "Označi inačice stranica za prijevod",
- "action-pagetranslation": "upravljaj prevodivim stranicama",
+ "action-pagetranslation": "upravljanje prevodivim stranicama",
"tpt-section": "Grupa za prijevod $1",
"tpt-section-new": "Nova grupa za prijevod.\nIme: $1",
"tpt-section-deleted": "Grupa za prijevod $1",
@@ -26,7 +26,19 @@
"tpt-nosuchpage": "Stranica $1 ne postoji",
"tpt-oldrevision": "$2 nije posljednja inačica stranice [[:$1]].\nJedino posljednje inačice mogu se označiti za prevođenje.",
"tpt-notsuitable": "Stranica $1 nije pogodna za prevođenje.\nUtvrdite, postoje li oznake <nowiki><translate></nowiki> i ispravna sintaksa.",
+ "tpt-mark-summary": "Ova inačica označena je za prevođenje",
+ "tpt-new-pages-title": "Stranice predložene za prevođenje",
+ "tpt-old-pages-title": "Stranice u prevođenju",
"tpt-discouraged-pages-title": "Nepreporučene stranice",
+ "tpt-sections-prioritylangs": "Prednosni jezici",
+ "tpt-rev-mark": "označi za prevođenje",
+ "tpt-rev-unmark": "ukloni iz prevođenja",
+ "tpt-rev-discourage": "obeshrabreno",
+ "tpt-rev-encourage": "vrati",
+ "tpt-rev-mark-tooltip": "Označi posljednju inačicu stranice za prevođenje.",
+ "tpt-rev-unmark-tooltip": "Ukloni stranicu iz prevođenja.",
+ "tpt-rev-discourage-tooltip": "Obeshrabri dalnje prevođenje ove stranice.",
+ "tpt-rev-encourage-tooltip": "Obnovite na ovoj stranici uobičajeno prevođenje.",
"translate-tag-translate-link-desc": "Prevedi ovu stranicu",
"translate-tag-markthis": "Označi ovu stranicu za prijevod",
"translate-tag-hasnew": "Ova stranica sadržava <span class=\"plainlinks\">[$1 uređivanja]</span> koja nisu označena za prevođenje.",
@@ -35,9 +47,26 @@
"tpt-languages-legend": "Drugi jezici:",
"tpt-languages-nonzero": "$1 ($2 % prevedeno)",
"tpt-tab-translate": "Prevedi",
+ "tpt-translation-restricted": "Prevoditeljski administrator spriječio je prevođenje stranice na ovaj jezik.\n\nRazlog: $1",
+ "tpt-discouraged-language-force-header": "Ova se stranica ne može prevoditi na $1.",
+ "tpt-discouraged-language-force-content": "Prevoditeljski administrator odlučio je da se stranica može prevesti samo na $1.",
"aggregategroups": "Spojene skupine",
"log-name-pagetranslation": "Evidencija prevođenja stranica",
"logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|pobrisao|pobrisala}} je prevodivu stranicu $3",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|ohrabrio je|ohrabrila je|ohrabruje}} prevođenje stranice $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|obeshrabrio je|obeshrabrila je|obeshrabruje}} prevođenje stranice $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|uklonio|uklonila}} je prednosne jezike s prevodive stranice $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|postavio|postavila}} je prednosne jezike $5 za prevodivu stranicu $3",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ograničio|ograničila}} je jezike prevodive stranice $3 na $5",
+ "log-action-filter-pagetranslation": "Vrsta radnje:",
+ "log-action-filter-pagetranslation-mark": "Označivanje za prevođenje",
+ "log-action-filter-pagetranslation-unmark": "Uklanjanje iz prevođenja",
+ "log-action-filter-pagetranslation-move": "Premještanje stranica",
+ "log-action-filter-pagetranslation-delete": "Brisanje stranica",
+ "log-action-filter-pagetranslation-encourage": "Ohrabrivanje prevođenja",
+ "log-action-filter-pagetranslation-discourage": "Obeshrabrivanje prevođenja",
+ "log-action-filter-pagetranslation-prioritylanguages": "Mijenjanje prednosnih jezika",
+ "log-action-filter-pagetranslation-aggregategroups": "Mijenjanje združenih skupina",
"pt-movepage-list-pages": "Popis stranica za premještanje",
"pt-movepage-list-other": "{{PLURAL:$1|Druga podstranica|Druge podstranice}}",
"pt-movepage-current": "Trenutačni naziv:",
diff --git a/MLEB/Translate/i18n/pagetranslation/ia.json b/MLEB/Translate/i18n/pagetranslation/ia.json
index 33792775..ff9e8ea6 100644
--- a/MLEB/Translate/i18n/pagetranslation/ia.json
+++ b/MLEB/Translate/i18n/pagetranslation/ia.json
@@ -119,7 +119,7 @@
"pt-movepage-list-pages": "Lista de paginas a renominar",
"pt-movepage-list-translation": "{{PLURAL:$1|Pagina|Paginas}} de traduction",
"pt-movepage-list-section": "{{PLURAL:$1|Pagina|Paginas}} de unitate de traduction",
- "pt-movepage-list-other": "Altere sub{{PLURAL:$1|pagina|paginas}}",
+ "pt-movepage-list-other": "Altere {{PLURAL:$1|subpagina|subpaginas}}",
"pt-movepage-list-count": "In total $1 {{PLURAL:$1|pagina|paginas}} a renominar.",
"pt-movepage-legend": "Renominar pagina traducibile",
"pt-movepage-current": "Nomine actual:",
diff --git a/MLEB/Translate/i18n/pagetranslation/ig.json b/MLEB/Translate/i18n/pagetranslation/ig.json
index 08af9a4b..def7e449 100644
--- a/MLEB/Translate/i18n/pagetranslation/ig.json
+++ b/MLEB/Translate/i18n/pagetranslation/ig.json
@@ -1,21 +1,22 @@
{
"@metadata": {
"authors": [
- "Ukabia"
+ "Ukabia",
+ "Uzoma Ozurumba"
]
},
- "pagetranslation": "Ihü kuwariala na asụsụ ozor",
- "tpt-diff-new": "Mpkurụ edemede ohúrù",
- "translate-tag-translate-link-desc": "Kùwáría ihüá na asụsụ ozor",
- "tpt-languages-legend": "Asụ̀sụ̀ ndị ọ̀zọ:",
- "tpt-aggregategroup-save": "Dònye",
- "tpt-aggregategroup-update": "Dònye",
- "tpt-aggregategroup-update-cancel": "Hapụ̀",
+ "pagetranslation": "Nsụgharị ihuakwukwọ",
+ "tpt-diff-new": "Mpkurụ edemede ọhuru",
+ "translate-tag-translate-link-desc": "Tugharia ihuakwụkwọ a",
+ "tpt-languages-legend": "Asụsụ ndị ọzọ:",
+ "tpt-aggregategroup-save": "Doma",
+ "tpt-aggregategroup-update": "Debe",
+ "tpt-aggregategroup-update-cancel": "Kagbụo",
"pt-movepage-list-other": "Ihü-íme-ihü nke ozor",
- "pt-movepage-current": "Áhà nke di ùbwá:",
- "pt-movepage-new": "Áhà ọhúrù:",
+ "pt-movepage-current": "Áhà nke di ugbua:",
+ "pt-movepage-new": "Áhà ọhuru:",
"pt-movepage-reason": "Mgbághapụtà:",
- "pm-savepages-button-label": "Dònye",
- "pm-cancel-button-label": "Hapụ̀",
- "pp-cancel-button-label": "Hapụ̀"
+ "pm-savepages-button-label": "Doma",
+ "pm-cancel-button-label": "Kagbụo",
+ "pp-cancel-button-label": "Kagbụo"
}
diff --git a/MLEB/Translate/i18n/pagetranslation/it.json b/MLEB/Translate/i18n/pagetranslation/it.json
index 95b9df27..7a3560e9 100644
--- a/MLEB/Translate/i18n/pagetranslation/it.json
+++ b/MLEB/Translate/i18n/pagetranslation/it.json
@@ -144,6 +144,8 @@
"pt-movepage-list-pages": "Elenco di pagine da spostare",
"pt-movepage-list-translation": "{{PLURAL:$1|Pagina|Pagine}} di traduzione",
"pt-movepage-list-section": "{{PLURAL:$1|Pagina|Pagine}} degli elementi di traduzione",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Sottopagina contrassegnata|Sottopagine contrassegnate}} per la traduzione",
+ "pt-movepage-list-translatable-note": "Queste pagine devono essere spostate separatamente.",
"pt-movepage-list-other": "{{PLURAL:$1|Altra sottopagina|Altre sottopagine}}",
"pt-movepage-list-count": "$1 {{PLURAL:$1|pagina|pagine}} in tutto da spostare.",
"pt-movepage-legend": "Sposta pagina traducibile",
diff --git a/MLEB/Translate/i18n/pagetranslation/ja.json b/MLEB/Translate/i18n/pagetranslation/ja.json
index 84f85e2e..a19636b7 100644
--- a/MLEB/Translate/i18n/pagetranslation/ja.json
+++ b/MLEB/Translate/i18n/pagetranslation/ja.json
@@ -10,7 +10,8 @@
"Otokoume",
"ネイ",
"Afaz",
- "Yusuke1109"
+ "Yusuke1109",
+ "Omotecho"
]
},
"pagetranslation": "ページ翻訳",
@@ -100,7 +101,7 @@
"log-description-pagetranslation": "ページ翻訳システムに関連する操作の記録",
"log-name-pagetranslation": "ページ翻訳記録",
"logentry-pagetranslation-mark": "$1 が $3 を翻訳対象に{{GENDER:$2|指定}}",
- "logentry-pagetranslation-unmark": "$1 が $3 を翻訳から{{GENDER:$2|除去}}",
+ "logentry-pagetranslation-unmark": "$1 が $3 を翻訳システムから{{GENDER:$2|除去}}",
"logentry-pagetranslation-moveok": "$1 が翻訳対象ページ $3 の名前を $4 に変更{{GENDER:$2|完了}}",
"logentry-pagetranslation-movenok": "$1 がページ $3 を $4 に移動させる際に問題が{{GENDER:$2|発生}}",
"logentry-pagetranslation-deletefok": "$1 が翻訳対象ページ $3 の削除を{{GENDER:$2|完了}}",
@@ -115,6 +116,12 @@
"logentry-pagetranslation-associate": "$1 が翻訳対象ページ $3 を集約群 $4 に{{GENDER:$2|追加}}",
"logentry-pagetranslation-dissociate": "$1 が翻訳対象ページ $3 を集約群 $4 から{{GENDER:$2|除去}}",
"log-action-filter-pagetranslation": "操作の種類:",
+ "log-action-filter-pagetranslation-mark": "翻訳対象に指定",
+ "log-action-filter-pagetranslation-unmark": "翻訳からの除去",
+ "log-action-filter-pagetranslation-move": "ページの移動",
+ "log-action-filter-pagetranslation-delete": "ページの削除",
+ "log-action-filter-pagetranslation-prioritylanguages": "優先言語の変更",
+ "log-action-filter-pagetranslation-aggregategroups": "集約群の変更",
"pt-movepage-title": "翻訳対象ページ「$1」の移動",
"pt-movepage-blockers": "以下の{{PLURAL:$1|エラー}}が発生したため、翻訳対象ページを新しいページ名に移動できません:",
"pt-movepage-block-base-exists": "移動先の翻訳対象ページ「[[:$1]]」は既に存在します。",
@@ -128,7 +135,8 @@
"pt-movepage-list-pages": "移動するページの一覧",
"pt-movepage-list-translation": "翻訳{{PLURAL:$1|ページ}}",
"pt-movepage-list-section": "翻訳単位{{PLURAL:$1|ページ}}",
- "pt-movepage-list-other": "その他の下位{{PLURAL:$1|ページ}}",
+ "pt-movepage-list-translatable-note": "これらのページは個別に移動させてください。",
+ "pt-movepage-list-other": "その他の{{PLURAL:$1|subpage|下位ページ}}",
"pt-movepage-list-count": "合計 $1 ページを移動",
"pt-movepage-legend": "翻訳対象ページの移動",
"pt-movepage-current": "現在の名前:",
@@ -175,6 +183,7 @@
"pm-swap-icon-hover-text": "下の単位と入れ替える",
"pm-delete-icon-hover-text": "単位を削除",
"pm-pagetitle-invalid": "有効なページ名を入力してください。<page-name>/<language-code> 形式でなければなりません。",
+ "pm-pagetitle-missing": "ページ名を入力してください。",
"pm-langcode-missing": "言語コードがタイトルに表示されないようです。<page-name>/<language-code> の形式でページタイトルを入力してください。",
"pm-summary-import": "[[Special:PageMigration|ページ移行]]を使用して翻訳を取り込み",
"tpt-translate-title": "ページ名を翻訳できるようにする",
diff --git a/MLEB/Translate/i18n/pagetranslation/kjp.json b/MLEB/Translate/i18n/pagetranslation/kjp.json
index 3f6cbcd5..18c6beb6 100644
--- a/MLEB/Translate/i18n/pagetranslation/kjp.json
+++ b/MLEB/Translate/i18n/pagetranslation/kjp.json
@@ -4,5 +4,12 @@
"Rul1902"
]
},
- "tpt-languages-nonzero": "$1 ($2% ၮှ်ခၠယ့်ၯင်ႋ)"
+ "tpt-select-prioritylangs-reason": "ဖှ်ေအ်ုၯာင်ႋကျံင်းဏါင်း:",
+ "translate-tag-translate-link-desc": "လိက်မေံၜၠါ်ယိုဝ် ခၠယ့်လာႋဆာ်",
+ "tpt-languages-legend": "အ်ုၰာႋၰံင်ဆ်ုခၠါင်ဘာႋသာ့လ်ုဖး:",
+ "tpt-languages-nonzero": "$1 ($2% ၮှ်ခၠယ့်ၯင်ႋ)",
+ "tpt-tab-translate": "ခၠယ့်လာႋ",
+ "tpt-aggregategroup-new-description": "ဆ်ုဏဲဖၠဟ် (လ်ုဆူ့ဍုဂ်ၜးသီသှ်ေလှ်)",
+ "tpt-aggregategroup-edit-description": "ဆ်ုဏဲဖၠဟ်:",
+ "pm-import-button-label": "ဆူ့ဍုဂ်သုံ့လင်"
}
diff --git a/MLEB/Translate/i18n/pagetranslation/ko.json b/MLEB/Translate/i18n/pagetranslation/ko.json
index 0d9d0453..19b7f1b5 100644
--- a/MLEB/Translate/i18n/pagetranslation/ko.json
+++ b/MLEB/Translate/i18n/pagetranslation/ko.json
@@ -133,7 +133,8 @@
"pt-movepage-list-pages": "이동할 문서 목록",
"pt-movepage-list-translation": "번역 {{PLURAL:$1|문서}}",
"pt-movepage-list-section": "번역 단위 {{PLURAL:$1|문서}}",
- "pt-movepage-list-other": "다른 하위 {{PLURAL:$1|문서}}",
+ "pt-movepage-list-translatable-note": "이 문서들은 개별적으로 이동되어야 합니다.",
+ "pt-movepage-list-other": "다른 {{PLURAL:$1|하위 문서}}",
"pt-movepage-list-count": "이동할 {{PLURAL:$1|문서}} 총 $1개입니다.",
"pt-movepage-legend": "번역 가능한 문서 이동",
"pt-movepage-current": "현재 이름:",
diff --git a/MLEB/Translate/i18n/pagetranslation/lzz.json b/MLEB/Translate/i18n/pagetranslation/lzz.json
new file mode 100644
index 00000000..1ba52bbd
--- /dev/null
+++ b/MLEB/Translate/i18n/pagetranslation/lzz.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cem Rize"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% çevrildi)"
+}
diff --git a/MLEB/Translate/i18n/pagetranslation/min.json b/MLEB/Translate/i18n/pagetranslation/min.json
index b8534b0c..06d8d78c 100644
--- a/MLEB/Translate/i18n/pagetranslation/min.json
+++ b/MLEB/Translate/i18n/pagetranslation/min.json
@@ -1,9 +1,11 @@
{
"@metadata": {
"authors": [
- "Iwan Novirion"
+ "Iwan Novirion",
+ "Ardzun"
]
},
"tpt-languages-legend": "Baso lain:",
+ "tpt-languages-nonzero": "$1 ($2% ditarjamahkan)",
"pt-movepage-intro": "Laman istimewa ko mamungkinan Sanak untuak mamindahan laman nan ditandoi untuak ditajamahan.\nTindakan pamindahan indak akan balangsuang sakatika dek banyak laman nan paralu dipindahan.\nSangkek laman dipindahan, indak dimungkinan untuak barinteraksi jo laman nan basangkutan.\nKagagalan akan dicatat di [[Special:Log/pagetranslation|log tajamahan laman]] dan paralu dipelokan sacaro manual."
}
diff --git a/MLEB/Translate/i18n/pagetranslation/mk.json b/MLEB/Translate/i18n/pagetranslation/mk.json
index 6d287e31..ab9f49ab 100644
--- a/MLEB/Translate/i18n/pagetranslation/mk.json
+++ b/MLEB/Translate/i18n/pagetranslation/mk.json
@@ -134,6 +134,8 @@
"pt-movepage-list-pages": "Список на страници за преместување",
"pt-movepage-list-translation": "{{PLURAL:$1|Преводна страница|Преводни страници}}",
"pt-movepage-list-section": "{{PLURAL:$1|Страница на преводна единица|Страници на преводни единици}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Потстраница означена|Потстраници означени}} за превод",
+ "pt-movepage-list-translatable-note": "Овие страници мора да се преместат одделно.",
"pt-movepage-list-other": "{{PLURAL:$1|Друга потстраница|Други потстраници}}",
"pt-movepage-list-count": "Вкупно $1 {{PLURAL:$1|страница|страници}} за преместување.",
"pt-movepage-legend": "Премести преводлива страница",
diff --git a/MLEB/Translate/i18n/pagetranslation/pl.json b/MLEB/Translate/i18n/pagetranslation/pl.json
index dc2a62dd..3e490230 100644
--- a/MLEB/Translate/i18n/pagetranslation/pl.json
+++ b/MLEB/Translate/i18n/pagetranslation/pl.json
@@ -126,7 +126,7 @@
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|usunął|usunęła}} stronę przeznaczoną do tłumaczenia $3 z grupy zbiorczej $4",
"log-action-filter-pagetranslation": "Rodzaj działania:",
"log-action-filter-pagetranslation-mark": "Oznacz do tłumaczenia",
- "log-action-filter-pagetranslation-unmark": "Usuwanie z tłumaczenia.",
+ "log-action-filter-pagetranslation-unmark": "Usuwanie z tłumaczenia",
"log-action-filter-pagetranslation-move": "Przenoszenie stron",
"log-action-filter-pagetranslation-delete": "Usuwanie stron",
"log-action-filter-pagetranslation-encourage": "Zachęcanie do tłumaczenia",
@@ -146,6 +146,7 @@
"pt-movepage-list-pages": "Lista stron do przeniesienia",
"pt-movepage-list-translation": "{{PLURAL:$1|strona|strony|stron}} do przetłumaczenia",
"pt-movepage-list-section": "{{PLURAL:$1|Strona|Strony}} jednostek tłumaczenia",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Podstrona oznaczona|Podstrony oznaczone}} do tłumaczenia",
"pt-movepage-list-other": "{{PLURAL:$1|Inna podstrona|Inne podstrony}}",
"pt-movepage-list-count": "W sumie do przeniesienia {{PLURAL:$1|jest $1 strona|są $1 strony|jest $1 stron}}.",
"pt-movepage-legend": "Przenieś przetłumaczalną stronę",
diff --git a/MLEB/Translate/i18n/pagetranslation/ps.json b/MLEB/Translate/i18n/pagetranslation/ps.json
index eae468ce..a3598823 100644
--- a/MLEB/Translate/i18n/pagetranslation/ps.json
+++ b/MLEB/Translate/i18n/pagetranslation/ps.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Ahmed-Najib-Biabani-Ibrahimkhel",
- "Baloch Khan"
+ "Baloch Khan",
+ "Amjad Khan"
]
},
"pagetranslation": "د مخ ژباړه",
diff --git a/MLEB/Translate/i18n/pagetranslation/pt-br.json b/MLEB/Translate/i18n/pagetranslation/pt-br.json
index 66dbcedd..4ee5dd35 100644
--- a/MLEB/Translate/i18n/pagetranslation/pt-br.json
+++ b/MLEB/Translate/i18n/pagetranslation/pt-br.json
@@ -144,6 +144,8 @@
"pt-movepage-list-pages": "Lista de páginas para serem movidas",
"pt-movepage-list-translation": "{{PLURAL:$1|Página|Páginas}} de tradução",
"pt-movepage-list-section": "{{PLURAL:$1|Página de unidade|Páginas de unidades}} de tradução",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Subpágina marcada|Subpáginas marcadas}} para tradução",
+ "pt-movepage-list-translatable-note": "Essas páginas devem ser movidas separadamente.",
"pt-movepage-list-other": "{{PLURAL:$1|Outra subpágina|Outras subpáginas}}",
"pt-movepage-list-count": "Há, no total, $1 {{PLURAL:$1|página para ser movida|páginas para serem movidas}}.",
"pt-movepage-legend": "Mover página traduzível",
diff --git a/MLEB/Translate/i18n/pagetranslation/pt.json b/MLEB/Translate/i18n/pagetranslation/pt.json
index ed5f2f94..be870114 100644
--- a/MLEB/Translate/i18n/pagetranslation/pt.json
+++ b/MLEB/Translate/i18n/pagetranslation/pt.json
@@ -141,6 +141,8 @@
"pt-movepage-list-pages": "Lista de páginas para serem movidas",
"pt-movepage-list-translation": "{{PLURAL:$1|Página|Páginas}} de tradução",
"pt-movepage-list-section": "{{PLURAL:$1|Página de unidade|Páginas de unidades}} de tradução",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Subpágina marcada|Subpáginas marcadas}} para tradução",
+ "pt-movepage-list-translatable-note": "Estas páginas devem ser movidas separadamente.",
"pt-movepage-list-other": "{{PLURAL:$1|Outra subpágina|Outras subpáginas}}",
"pt-movepage-list-count": "No total, $1 {{PLURAL:$1|página para ser movida|páginas para serem movidas}}.",
"pt-movepage-legend": "Mover página traduzível",
diff --git a/MLEB/Translate/i18n/pagetranslation/qqq.json b/MLEB/Translate/i18n/pagetranslation/qqq.json
index 9ab40a87..aed9188b 100644
--- a/MLEB/Translate/i18n/pagetranslation/qqq.json
+++ b/MLEB/Translate/i18n/pagetranslation/qqq.json
@@ -20,10 +20,11 @@
"Robby",
"Liuxinyu970226",
"Guycn2",
- "Zoranzoki21"
+ "Zoranzoki21",
+ "Metalhead64"
]
},
- "pagetranslation": "{{doc-special|PageTranslation}}\n[[Image:Page translation admin view.png|thumb|Admin view]]",
+ "pagetranslation": "{{doc-special|PageTranslation}}\n[[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
"right-pagetranslation": "{{doc-right|pagetranslation}}",
"action-pagetranslation": "{{doc-action|pagetranslation}}",
"tpt-section": "[[File:Page_translation_mark_view.png|thumb|Page translation]]\nA screenshot of the translation administration page is available.\n\nParameters:\n* $1 - the identifier of the unit, or the string \"Page display title\" (special unit identifier for page title; hard-coded)",
@@ -50,26 +51,26 @@
"tpt-already-marked": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
"tpt-unmarked": "Used as success message for unmarking page for translation.\n\nTranslate this as \"Page $1 has been unmarked for translation\".\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - page title",
"tpt-list-nopages": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
- "tpt-new-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view]]",
- "tpt-old-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view]]",
- "tpt-other-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view]]",
- "tpt-discouraged-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view]]",
- "tpt-new-pages": "[[Image:Page translation admin view.png|thumb|Admin view]]\nPreceded by the section header {{msg-mw|Tpt-new-pages-title}}.\n\nFollowed by the ordered list of pages.\n\nParameters:\n* $1 - the number of pages in the following list",
- "tpt-old-pages": "The words \"some version\" refer to \"one version of the page\", or \"a single version of each of the pages\", respectively. Each page can have either one or none of its versions marked for translaton.\n* $1 - the number of pages\n[[Image:Page translation admin view.png|thumb|Admin view]]",
- "tpt-other-pages": "[[Image:Page translation admin view.png|thumb|Admin view]]\nPreceded by the section header {{msg-mw|Tpt-other-pages-title}}.\n\nFollowed by the ordered list of pages.\n\nParameters:\n* $1 - the number of pages in the following list",
- "tpt-discouraged-pages": "[[Image:Page translation admin view.png|thumb|Admin view]]\nPreceded by the section header {{msg-mw|Tpt-discouraged-pages-title}}.\n\nFollowed by the ordered list of pages.\n\nParameters:\n* $1 - the number of pages in the following list",
+ "tpt-new-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-old-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-other-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-discouraged-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-new-pages": "[[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]\nPreceded by the section header {{msg-mw|Tpt-new-pages-title}}.\n\nFollowed by the ordered list of pages.\n\nParameters:\n* $1 - the number of pages in the following list",
+ "tpt-old-pages": "The words \"some version\" refer to \"one version of the page\", or \"a single version of each of the pages\", respectively. Each page can have either one or none of its versions marked for translaton.\n* $1 - the number of pages\n[[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-other-pages": "[[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]\nPreceded by the section header {{msg-mw|Tpt-other-pages-title}}.\n\nFollowed by the ordered list of pages.\n\nParameters:\n* $1 - the number of pages in the following list",
+ "tpt-discouraged-pages": "[[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]\nPreceded by the section header {{msg-mw|Tpt-discouraged-pages-title}}.\n\nFollowed by the ordered list of pages.\n\nParameters:\n* $1 - the number of pages in the following list",
"tpt-select-prioritylangs": "Label for the input box to enter preferred languages",
"tpt-select-prioritylangs-force": "Label for the checkbox to make the translation restriction",
"tpt-select-prioritylangs-reason": "Label for the textbox to enter reason for restriction.\n{{Identical|Reason}}",
"tpt-sections-prioritylangs": "Section title in [[Special:PageTranslation]].\n{{Identical|Priority language}}",
- "tpt-rev-mark": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view]]",
- "tpt-rev-unmark": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view]]",
- "tpt-rev-discourage": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view]]",
- "tpt-rev-encourage": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view]]\n{{Identical|Restore}}",
- "tpt-rev-mark-tooltip": "Tooltip for page action link text in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view]]",
- "tpt-rev-unmark-tooltip": "Tooltip for page action link text in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view]]",
- "tpt-rev-discourage-tooltip": "Tooltip for page action link text in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view]]",
- "tpt-rev-encourage-tooltip": "Tooltip for page action link text in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view]]",
+ "tpt-rev-mark": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-unmark": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-discourage": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-encourage": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]\n{{Identical|Restore}}",
+ "tpt-rev-mark-tooltip": "Tooltip for page action link text in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-unmark-tooltip": "Tooltip for page action link text in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-discourage-tooltip": "Tooltip for page action link text in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-encourage-tooltip": "Tooltip for page action link text in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
"translate-edit-tag-warning": "{{notranslate}}\nShown when editing translatable pages. Default is empty.",
"translate-tag-translate-link-desc": "Link at the top of translatable pages, see [[mw:Help:Extension:Translate/Translation example]] for context.",
"translate-tag-markthis": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
@@ -153,6 +154,8 @@
"pt-movepage-list-pages": "Used as section header.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - (Unused) number of old pages to move\n{{Related|Pt-movepage-list}}",
"pt-movepage-list-translation": "Used as section header.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - number of translation pages\n{{Related|Pt-movepage-list}}",
"pt-movepage-list-section": "Used as section header.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - number of translation unit pages (section pages)\n{{Related|Pt-movepage-list}}",
+ "pt-movepage-list-translatable": "Used as a section header.\n\nParameters:\n* $1 - number of pages",
+ "pt-movepage-list-translatable-note": "Appears below the section header {{msg-mw|pt-movepage-list-translatable}}",
"pt-movepage-list-other": "Header of a list of additional subpages (other than translation pages) of the translatable page being moved, when the user selected the option to move subpages as well.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - number of subpages\n{{Related|Pt-movepage-list}}",
"pt-movepage-list-count": "Used to indicate how many pages will be moved.\n\nParameters:\n* $1 - number of pages\nSee also:\n* {{msg-mw|Pt-deletepage-list-count}}",
"pt-movepage-legend": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
diff --git a/MLEB/Translate/i18n/pagetranslation/roa-tara.json b/MLEB/Translate/i18n/pagetranslation/roa-tara.json
index ee8a0cab..b9600100 100644
--- a/MLEB/Translate/i18n/pagetranslation/roa-tara.json
+++ b/MLEB/Translate/i18n/pagetranslation/roa-tara.json
@@ -105,6 +105,8 @@
"pm-cancel-button-label": "Annulle",
"pm-page-does-not-exist": "$1 non g'esiste.",
"pm-old-translations-missing": "$1 non ge tène traduziune vicchie.",
+ "pm-delete-icon-hover-text": "Scangìlle l'aunità",
+ "pm-pagetitle-placeholder": "Mitte 'u titole d'a pàgene",
"pp-save-button-label": "Reggìstre",
"pp-cancel-button-label": "Annulle",
"pp-save-message": "'A pàgene ha state reggistrate. Puè [$1 cangiarle]."
diff --git a/MLEB/Translate/i18n/pagetranslation/ru.json b/MLEB/Translate/i18n/pagetranslation/ru.json
index b2088eed..44c5b363 100644
--- a/MLEB/Translate/i18n/pagetranslation/ru.json
+++ b/MLEB/Translate/i18n/pagetranslation/ru.json
@@ -22,7 +22,7 @@
]
},
"pagetranslation": "Перевод страниц",
- "right-pagetranslation": "отметка версий страниц для перевода",
+ "right-pagetranslation": "Отметка версий страниц для перевода",
"action-pagetranslation": "управлять переводимыми страницами",
"tpt-section": "Блок перевода $1",
"tpt-section-new": "Новый блок перевода. Название: $1",
@@ -149,6 +149,8 @@
"pt-movepage-list-pages": "Список страниц для переименования",
"pt-movepage-list-translation": "{{PLURAL:$1|1=Страница|Страницы}} перевода",
"pt-movepage-list-section": "Разделы {{PLURAL:$1|1=переводимой страницы|переводимых страниц}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Подстраница|Подстраницы}}, отмеченные для перевода",
+ "pt-movepage-list-translatable-note": "Эти страницы должны быть переименованы отдельно.",
"pt-movepage-list-other": "{{PLURAL:$1|1=Другая подстраница|Другие подстраницы}}",
"pt-movepage-list-count": "Всего переименовать $1 {{PLURAL:$1|страницу|страницы|страниц}}.",
"pt-movepage-legend": "Переименование переводимых страниц",
diff --git a/MLEB/Translate/i18n/pagetranslation/ses.json b/MLEB/Translate/i18n/pagetranslation/ses.json
new file mode 100644
index 00000000..83569071
--- /dev/null
+++ b/MLEB/Translate/i18n/pagetranslation/ses.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Songhay"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% berante)"
+}
diff --git a/MLEB/Translate/i18n/pagetranslation/shy-latn.json b/MLEB/Translate/i18n/pagetranslation/shy-latn.json
new file mode 100644
index 00000000..635133da
--- /dev/null
+++ b/MLEB/Translate/i18n/pagetranslation/shy-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vikoula5"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% yettwasuqel)"
+}
diff --git a/MLEB/Translate/i18n/pagetranslation/sr-ec.json b/MLEB/Translate/i18n/pagetranslation/sr-ec.json
index bd6f0aff..2008e6c0 100644
--- a/MLEB/Translate/i18n/pagetranslation/sr-ec.json
+++ b/MLEB/Translate/i18n/pagetranslation/sr-ec.json
@@ -13,40 +13,47 @@
"Vlad5250"
]
},
- "pagetranslation": "Превод странице",
- "right-pagetranslation": "означавање верзија страница за превод",
+ "pagetranslation": "Превођење странице",
+ "right-pagetranslation": "означавање верзија страница за превођење",
"action-pagetranslation": "управљате преводивим страницама",
- "tpt-section": "Преводилачка јединица $1",
- "tpt-section-new": "Нова преводилачка јединица.\nИме: $1",
- "tpt-section-deleted": "Преводилачка јединица $1",
+ "tpt-section": "Јединица превода $1",
+ "tpt-section-new": "Нова јединица превода.\nИме: $1",
+ "tpt-section-deleted": "Јединица превода $1",
"tpt-diff-old": "Претходни текст",
"tpt-diff-new": "Нови текст",
- "tpt-submit": "Означи ову верзију за превод",
- "tpt-sections-oldnew": "Нове и постојеће преводилачке јединице",
- "tpt-sections-deleted": "Избрисане преводилачке јединице",
- "tpt-sections-template": "Шаблон странице за превод",
+ "tpt-submit": "Означи ову верзију за превођење",
+ "tpt-sections-oldnew": "Нове и постојеће јединице превођења",
+ "tpt-sections-deleted": "Избрисане јединице превођења",
+ "tpt-sections-template": "Шаблон странице за превођење",
"tpt-action-nofuzzy": "Не поништавајте преводе",
"tpt-badtitle": "Задато име странице ($1) није важећи наслов",
"tpt-nosuchpage": "Страница „$1” не постоји",
- "tpt-mark-nochanges": "Нема промена за преглед. Означавање ове странице за превод неће да уреди страницу ни постојећу преводилачку јединицу.",
+ "tpt-saveok": "Страница [[:$1]] је означена за превођење са $2 {{PLURAL:$2|јединицом превођења|јединице превођења|јединица превођења}}. Страница сада може да буде <span class=\"plainlinks\">[$3 преведена]</span>.",
+ "tpt-offer-notify": "Можете да <span class=\"plainlinks\">[$1 обавестите преводиоце]</span> о овој страници.",
+ "tpt-mark-nochanges": "Нема промена за преглед. Означавање ове странице за превођење неће да уреди страницу нити било коју постојећу јединицу превођења.",
"tpt-edit-failed": "Није могуће ажурирати страницу: $1",
+ "tpt-already-marked": "Најновија верзија ове странице је већ означена за превођење.",
"tpt-unmarked": "Страница $1 није више означена за превођење.",
- "tpt-new-pages-title": "Странице предложене за превод",
+ "tpt-new-pages-title": "Странице предложене за превођење",
+ "tpt-old-pages-title": "Странице за превођење",
"tpt-other-pages-title": "Покварене странице",
"tpt-discouraged-pages-title": "Непрепоручене странице",
+ "tpt-new-pages": "{{PLURAL:$1|Ова страница садржи|Ове странице садрже}} текст за ознакама за превођење, али нема верзије {{PLURAL:$1|ове странице која је|ове странице које су}} тренутно {{PLURAL:$1|означена|означене}} за превођење.",
+ "tpt-old-pages": "{{PLURAL:$1|Нека верзија ове странице је означена|Неке верзије ових страница су означене}} за превођење.",
+ "tpt-other-pages": "{{PLURAL:$1|Старија верзија ове странице је означена|Старије верзије ових страница су означене}} за превођење, \nали {{PLURAL:$1|најновија верзија|најновије верзије}} не могу да буду означене за превођење.",
"tpt-select-prioritylangs-force": "Спречи превођење на језике који нису приоритетни",
"tpt-select-prioritylangs-reason": "Разлог:",
"tpt-sections-prioritylangs": "Приоритетни језици",
- "tpt-rev-mark": "означи за превод",
- "tpt-rev-unmark": "уклони из превода",
+ "tpt-rev-mark": "означи за превођење",
+ "tpt-rev-unmark": "уклони из система превођења",
"tpt-rev-discourage": "непрепоручено",
"tpt-rev-encourage": "врати",
- "tpt-rev-mark-tooltip": "Означите најновију верзију ове странице као „за превод”.",
- "tpt-rev-unmark-tooltip": "Уклоните ову страницу из преводилачког система.",
- "tpt-rev-discourage-tooltip": "Поставите ову страницу као непрепоручену за даљње преводе.",
- "tpt-rev-encourage-tooltip": "Вратите ову страницу за нормалан превод.",
+ "tpt-rev-mark-tooltip": "Означите најновију верзију ове странице за превођење.",
+ "tpt-rev-unmark-tooltip": "Уклоните ову страницу из система превођења.",
+ "tpt-rev-discourage-tooltip": "Поставите ову страницу као непрепоручену за даљње превођење.",
+ "tpt-rev-encourage-tooltip": "Вратите ову страницу за нормално превођење.",
"translate-tag-translate-link-desc": "Преведите ову страницу",
- "translate-tag-markthis": "Означи страницу као „за превод“",
+ "translate-tag-markthis": "Означи страницу за превођење",
"translate-tag-hasnew": "Ова страница садржи <span class=\"plainlinks\">[$1 измене]</span> које нису означене за превођење.",
"tpt-translation-intro": "Ово је <span class=\"plainlinks\">[$1 преведена верзија]</span> странице [[$2]]. Превод је $3% завршен.",
"tpt-translation-intro-fuzzy": "Застарели преводи су означени овако.",
@@ -56,8 +63,8 @@
"tpt-languages-nonzero": "$1 ($2% преведено)",
"tpt-tab-translate": "Превођење",
"tpt-discouraged-language-header": "Превођење ове странице на $1 није приоритет.",
- "tpt-discouraged-language-force": "<strong>Ова страница се не може превести на $2.</strong>\n\nПреводилачки администратор је одредио да се ова страница може превести само на: $3.",
- "tpt-discouraged-language": "<strong>Превођење ове странице на $2 није приоритет.</strong>\n\nПреводилачки администратор је одредио приоритетне језике и они су: $3.",
+ "tpt-discouraged-language-force": "<strong>Ова страница се не може превести на $2.</strong>\n\nАдминистратор превођења је одредио да се ова страница може превести само на: $3.",
+ "tpt-discouraged-language": "<strong>Превођење ове странице на $2 није приоритет.</strong>\n\nАдминистратор превођења је одредио приоритетне језике и они су: $3.",
"tpt-discouraged-language-reason": "Разлог: $1",
"aggregategroups": "Збирне групе",
"tpt-aggregategroup-add": "Додај",
@@ -70,9 +77,9 @@
"tpt-aggregategroup-update": "Сачувај",
"tpt-aggregategroup-update-cancel": "Откажи",
"tpt-invalid-group": "Неважећа група",
- "pt-shake-multiple": "Више маркера јединице превода за једну јединицу превода.\nТекст јединице превода: <pre>$1</pre>",
- "pt-shake-position": "Маркери јединице превода у неочекиваној позицији.\nТекст јединице превода: <pre>$1</pre>",
- "log-name-pagetranslation": "Дневник превода страница",
+ "pt-shake-multiple": "Више маркера јединице превођења за једну јединицу превођења.\nТекст јединице превођења: <pre>$1</pre>",
+ "pt-shake-position": "Маркери јединице превођења у неочекиваној позицији.\nТекст јединице превода: <pre>$1</pre>",
+ "log-name-pagetranslation": "Дневник превођења страница",
"logentry-pagetranslation-mark": "$1 је {{GENDER:$2|означио|означила}} страницу $3 за превођење",
"logentry-pagetranslation-unmark": "$1 је {{GENDER:$2|уклонио|уклонила}} страницу $3 из система превођења",
"logentry-pagetranslation-deletefok": "$1 је {{GENDER:$2|избрисао|избрисала}} преводиву страницу $3",
@@ -80,25 +87,27 @@
"logentry-pagetranslation-prioritylanguages": "$1 је {{GENDER:$2|одредио|одредила}} приоритетне језике за преводиву страницу $3: $5",
"log-action-filter-pagetranslation": "Тип радње:",
"log-action-filter-pagetranslation-mark": "Означавање за превођење",
- "log-action-filter-pagetranslation-unmark": "Уклањање из превода",
+ "log-action-filter-pagetranslation-unmark": "Уклањање из система превођења",
"log-action-filter-pagetranslation-move": "Премештања страница",
"log-action-filter-pagetranslation-delete": "Брисања страница",
"log-action-filter-pagetranslation-encourage": "Подстицање на превођење",
"log-action-filter-pagetranslation-discourage": "Одвраћање од превођења",
"log-action-filter-pagetranslation-prioritylanguages": "Измена приоритетних језика",
"pt-movepage-title": "Премештање преводиве странице „$1”",
- "pt-movepage-block-base-exists": "Циљна преводива страница [[:$1]] постоји.",
+ "pt-movepage-block-base-exists": "Циљна преводива страница „[[:$1]]” постоји.",
"pt-movepage-block-base-invalid": "Циљ имена преводиве странице није важећи наслов.",
- "pt-movepage-block-tp-exists": "Циљна страница за превод [[:$2]] постоји.",
- "pt-movepage-block-tp-invalid": "Наслов циљне странице за превод за [[:$1]] био би неисправан (предугачак?).",
- "pt-movepage-block-section-exists": "Циљна страница [[:$2]] за преводилачку јединицу постоји.",
- "pt-movepage-block-section-invalid": "Наслов циљне странице за преводилачку јединицу \"[[:$1]]\" био би неисправан (предугачак?).",
+ "pt-movepage-block-tp-exists": "Циљна страница за превођење „[[:$2]]” постоји.",
+ "pt-movepage-block-tp-invalid": "Наслов циљне странице за превођење за „[[:$1]]” био би неважећи (предугачак?).",
+ "pt-movepage-block-section-exists": "Циљна страница „[[:$2]]” за јединицу превода постоји.",
+ "pt-movepage-block-section-invalid": "Наслов циљне странице за јединицу превода „[[:$1]]” био би неважећи (предугачак?).",
"pt-movepage-block-subpage-exists": "Циљна подстраница [[:$2]] постоји.",
"pt-movepage-block-subpage-invalid": "Наслов циљне подстранице за [[:$1]] био би неисправан (предугачак?).",
- "pt-movepage-list-pages": "Листа страница за премештање",
- "pt-movepage-list-translation": "{{PLURAL:$1|Страница|Странице}} за превод",
- "pt-movepage-list-section": "Преводилачка јединица {{PLURAL:$1|странице|страница}}",
- "pt-movepage-list-other": "{{PLURAL:$1|Друге}} подстранице",
+ "pt-movepage-list-pages": "Списак страница за премештање",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Страница|Странице}} за превођење",
+ "pt-movepage-list-section": "Јединица превода {{PLURAL:$1|странице|страница}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Подстраница|Подстранице}} означене за превођење",
+ "pt-movepage-list-translatable-note": "Ове странице морају да се засебно преместе.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Друга подстраница|Друге подстранице}}",
"pt-movepage-list-count": "Укупно $1 {{PLURAL:$1|страница|странице|страница}} за премештање.",
"pt-movepage-legend": "Премести преводиву страницу",
"pt-movepage-current": "Тренутно име:",
@@ -121,10 +130,10 @@
"pt-deletepage-subpages": "Избриши све подстранице",
"pt-deletepage-list-pages": "Листа страница за брисање",
"pt-deletepage-list-translation": "Странице за превођење",
- "pt-deletepage-list-section": "Странице за преводилачку јединицу",
+ "pt-deletepage-list-section": "Странице за јединицу превода",
"pt-deletepage-list-other": "Друге подстранице",
"pt-deletepage-list-count": "Укупно $1 {{PLURAL:$1|страница|странице}} за брисање.",
- "pagemigration": "Миграција страница превода",
+ "pagemigration": "Миграција странице за превођење",
"pm-import-button-label": "Увези",
"pm-savepages-button-label": "Сачувај",
"pm-cancel-button-label": "Откажи",
@@ -136,9 +145,9 @@
"pm-delete-icon-hover-text": "Избриши јединицу",
"pm-pagetitle-placeholder": "Унесите наслов странице",
"pm-pagetitle-missing": "Унесите наслов странице.",
- "tpt-translate-title": "Дозволи превод наслова странице",
- "pp-save-summary": "Страница је припремљена за превод",
- "pagepreparation": "Припрема страница за превод",
+ "tpt-translate-title": "Дозволи превођење наслова странице",
+ "pp-save-summary": "Страница је припремљена за превођење",
+ "pagepreparation": "Припрема страница за превођење",
"pp-pagename-placeholder": "Унесите име странице",
"pp-prepare-button-label": "Припреми",
"pp-save-button-label": "Сачувај",
@@ -148,9 +157,9 @@
"pp-pagename-missing": "Унесите име странице.",
"pp-diff-old-header": "Изворни текст",
"pp-diff-new-header": "Припремљени текст",
- "tpt-unlink-confirm": "Потврдите да стварно желите да уклоните ову страницу из преводилачког система.\nБирач језика и преведена имена страница ће престати са радом.\nСтранице за превођење ће постати уредиве.",
- "tpt-unlink-button": "Уклони из превода",
- "tpt-unlink-summary": "Уклоњена страница из превода",
+ "tpt-unlink-confirm": "Потврдите да стварно желите да уклоните ову страницу из система превођења.\nБирач језика и преведена имена страница ће престати са радом.\nСтранице за превођење ће постати уредиве.",
+ "tpt-unlink-button": "Уклони из система превођења",
+ "tpt-unlink-summary": "Уклоњена страница из система превођења",
"tpt-generic-confirm": "Потврдите радњу.",
"tpt-generic-button": "Потврди"
}
diff --git a/MLEB/Translate/i18n/pagetranslation/sr-el.json b/MLEB/Translate/i18n/pagetranslation/sr-el.json
index 994c1643..e8436c25 100644
--- a/MLEB/Translate/i18n/pagetranslation/sr-el.json
+++ b/MLEB/Translate/i18n/pagetranslation/sr-el.json
@@ -9,67 +9,153 @@
"Zoranzoki21"
]
},
- "right-pagetranslation": "označavanje izdanja stranica za prevod",
+ "pagetranslation": "Prevođenje stranice",
+ "right-pagetranslation": "označavanje verzija stranica za prevođenje",
+ "action-pagetranslation": "upravljate prevodivim stranicama",
+ "tpt-section": "Jedinica prevoda $1",
+ "tpt-section-new": "Nova jedinica prevoda.\nIme: $1",
+ "tpt-section-deleted": "Jedinica prevoda $1",
"tpt-diff-old": "Prethodni tekst",
- "tpt-diff-new": "Sledeći tekst",
- "tpt-submit": "Označi ovu verziju za prevod",
- "tpt-mark-nochanges": "Nema razlika između ove izmene i poslednje označene izmene.",
+ "tpt-diff-new": "Novi tekst",
+ "tpt-submit": "Označi ovu verziju za prevođenje",
+ "tpt-sections-oldnew": "Nove i postojeće jedinice prevođenja",
+ "tpt-sections-deleted": "Izbrisane jedinice prevođenja",
+ "tpt-sections-template": "Šablon stranice za prevođenje",
+ "tpt-action-nofuzzy": "Ne poništavajte prevode",
+ "tpt-badtitle": "Zadato ime stranice ($1) nije važeći naslov",
+ "tpt-nosuchpage": "Stranica „$1” ne postoji",
+ "tpt-saveok": "Stranica [[:$1]] je označena za prevođenje sa $2 {{PLURAL:$2|jedinicom prevođenja|jedinice prevođenja|jedinica prevođenja}}. Stranica sada može da bude <span class=\"plainlinks\">[$3 prevedena]</span>.",
+ "tpt-offer-notify": "Možete da <span class=\"plainlinks\">[$1 obavestite prevodioce]</span> o ovoj stranici.",
+ "tpt-mark-nochanges": "Nema promena za pregled. Označavanje ove stranice za prevođenje neće da uredi stranicu niti bilo koju postojeću jedinicu prevođenja.",
+ "tpt-edit-failed": "Nije moguće ažurirati stranicu: $1",
+ "tpt-already-marked": "Najnovija verzija ove stranice je već označena za prevođenje.",
"tpt-unmarked": "Stranica $1 nije više označena za prevođenje.",
+ "tpt-new-pages-title": "Stranice predložene za prevođenje",
+ "tpt-old-pages-title": "Stranice za prevođenje",
+ "tpt-other-pages-title": "Pokvarene stranice",
+ "tpt-discouraged-pages-title": "Nepreporučene stranice",
+ "tpt-new-pages": "{{PLURAL:$1|Ova stranica sadrži|Ove stranice sadrže}} tekst za oznakama za prevođenje, ali nema verzije {{PLURAL:$1|ove stranice koja je|ove stranice koje su}} trenutno {{PLURAL:$1|označena|označene}} za prevođenje.",
+ "tpt-old-pages": "{{PLURAL:$1|Neka verzija ove stranice je označena|Neke verzije ovih stranica su označene}} za prevođenje.",
+ "tpt-other-pages": "{{PLURAL:$1|Starija verzija ove stranice je označena|Starije verzije ovih stranica su označene}} za prevođenje, \nali {{PLURAL:$1|najnovija verzija|najnovije verzije}} ne mogu da budu označene za prevođenje.",
+ "tpt-select-prioritylangs-force": "Spreči prevođenje na jezike koji nisu prioritetni",
+ "tpt-select-prioritylangs-reason": "Razlog:",
+ "tpt-sections-prioritylangs": "Prioritetni jezici",
"tpt-rev-mark": "označi za prevođenje",
- "tpt-rev-unmark": "ukloni iz prevoda",
+ "tpt-rev-unmark": "ukloni iz sistema prevođenja",
"tpt-rev-discourage": "nepreporučeno",
"tpt-rev-encourage": "vrati",
- "tpt-rev-mark-tooltip": "Označi poslednju verziju stranice kao „za prevođenje“.",
- "tpt-rev-unmark-tooltip": "Ukloni stranicu iz prevoda.",
- "tpt-rev-discourage-tooltip": "Postavi stranicu kao nepreporučenu za daljnje prevođenje.",
- "tpt-rev-encourage-tooltip": "Vrati stranicu za normalno prevođenje.",
- "translate-tag-translate-link-desc": "Prevedite ovu stranu",
- "translate-tag-markthis": "Označi stranicu kao „za prevođenje“",
- "tpt-translation-intro": "Ova stranica je <span class=\"plainlinks\">[$1 prevedeno izdanje]</span> stranice [[$2]]. Prevod je $3% završen.",
- "tpt-languages-legend": "Ostali jezici:",
+ "tpt-rev-mark-tooltip": "Označite najnoviju verziju ove stranice za prevođenje.",
+ "tpt-rev-unmark-tooltip": "Uklonite ovu stranicu iz sistema prevođenja.",
+ "tpt-rev-discourage-tooltip": "Postavite ovu stranicu kao nepreporučenu za daljnje prevođenje.",
+ "tpt-rev-encourage-tooltip": "Vratite ovu stranicu za normalno prevođenje.",
+ "translate-tag-translate-link-desc": "Prevedite ovu stranicu",
+ "translate-tag-markthis": "Označi stranicu za prevođenje",
+ "translate-tag-hasnew": "Ova stranica sadrži <span class=\"plainlinks\">[$1 izmene]</span> koje nisu označene za prevođenje.",
+ "tpt-translation-intro": "Ovo je <span class=\"plainlinks\">[$1 prevedena verzija]</span> stranice [[$2]]. Prevod je $3% završen.",
+ "tpt-translation-intro-fuzzy": "Zastareli prevodi su označeni ovako.",
+ "tpt-languages-legend": "Drugi jezici:",
"tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Započnite prevođenje na ovom jeziku",
"tpt-languages-nonzero": "$1 ($2% prevedeno)",
- "tpt-tab-translate": "Prevedi",
+ "tpt-tab-translate": "Prevođenje",
"tpt-discouraged-language-header": "Prevođenje ove stranice na $1 nije prioritet.",
- "tpt-discouraged-language-force": "<strong>Ova stranica se ne može prevesti na $2.</strong>\n\nPrevodilački administrator je odredio da se ova stranica može prevesti samo na: $3.",
- "tpt-discouraged-language": "<strong>Prevođenje ove stranice na $2 nije prioritet.</strong>\n\nPrevodilački administrator je odredio prioritetne jezike i oni su: $3.",
- "aggregategroups": "Agregirane grupe",
- "tpt-aggregategroup-edit-name": "Naziv:",
+ "tpt-discouraged-language-force": "<strong>Ova stranica se ne može prevesti na $2.</strong>\n\nAdministrator prevođenja je odredio da se ova stranica može prevesti samo na: $3.",
+ "tpt-discouraged-language": "<strong>Prevođenje ove stranice na $2 nije prioritet.</strong>\n\nAdministrator prevođenja je odredio prioritetne jezike i oni su: $3.",
+ "tpt-discouraged-language-reason": "Razlog: $1",
+ "aggregategroups": "Zbirne grupe",
+ "tpt-aggregategroup-add": "Dodaj",
+ "tpt-aggregategroup-save": "Sačuvaj",
+ "tpt-aggregategroup-new-name": "Ime:",
+ "tpt-aggregategroup-new-description": "Opis (opcionalno):",
+ "tpt-aggregategroup-invalid-group": "Grupa ne postoji",
+ "tpt-aggregategroup-edit-name": "Ime:",
"tpt-aggregategroup-edit-description": "Opis:",
"tpt-aggregategroup-update": "Sačuvaj",
"tpt-aggregategroup-update-cancel": "Otkaži",
- "log-name-pagetranslation": "Dnevnik prevoda stranica",
+ "tpt-invalid-group": "Nevažeća grupa",
+ "pt-shake-multiple": "Više markera jedinice prevođenja za jednu jedinicu prevođenja.\nTekst jedinice prevođenja: <pre>$1</pre>",
+ "pt-shake-position": "Markeri jedinice prevođenja u neočekivanoj poziciji.\nTekst jedinice prevoda: <pre>$1</pre>",
+ "log-name-pagetranslation": "Dnevnik prevođenja stranica",
"logentry-pagetranslation-mark": "$1 je {{GENDER:$2|označio|označila}} stranicu $3 za prevođenje",
- "logentry-pagetranslation-unmark": "$1 je {{GENDER:$2|uklonio|uklonila}} opciju prevođenja sa stranice $3",
- "logentry-pagetranslation-deletefok": "$1 je {{GENDER:$2|obrisao|obrisala}} prevodivu stranicu $3",
- "logentry-pagetranslation-deletelok": "$1 je {{GENDER:$2|obrisao|obrisala}} prevodivu stranicu $3",
+ "logentry-pagetranslation-unmark": "$1 je {{GENDER:$2|uklonio|uklonila}} stranicu $3 iz sistema prevođenja",
+ "logentry-pagetranslation-deletefok": "$1 je {{GENDER:$2|izbrisao|izbrisala}} prevodivu stranicu $3",
+ "logentry-pagetranslation-deletelok": "$1 je {{GENDER:$2|izbrisao|izbrisala}} prevodivu stranicu $3",
"logentry-pagetranslation-prioritylanguages": "$1 je {{GENDER:$2|odredio|odredila}} prioritetne jezike za prevodivu stranicu $3: $5",
- "pt-movepage-title": "Premeštanje prevodive stranice $1",
- "pt-movepage-block-base-exists": "Ciljna osnovna stranica [[:$1]] postoji.",
- "pt-movepage-block-base-invalid": "Cilj prevodive stranice ne predstavlja ispravan naziv.",
- "pt-movepage-block-tp-exists": "Ciljna stranica za prevod [[:$2]] postoji.",
- "pt-movepage-block-tp-invalid": "Naslov ciljne stranice za prevod za [[:$1]] bio bi neispravan (predugačak?).",
+ "log-action-filter-pagetranslation": "Tip radnje:",
+ "log-action-filter-pagetranslation-mark": "Označavanje za prevođenje",
+ "log-action-filter-pagetranslation-unmark": "Uklanjanje iz sistema prevođenja",
+ "log-action-filter-pagetranslation-move": "Premeštanja stranica",
+ "log-action-filter-pagetranslation-delete": "Brisanja stranica",
+ "log-action-filter-pagetranslation-encourage": "Podsticanje na prevođenje",
+ "log-action-filter-pagetranslation-discourage": "Odvraćanje od prevođenja",
+ "log-action-filter-pagetranslation-prioritylanguages": "Izmena prioritetnih jezika",
+ "pt-movepage-title": "Premeštanje prevodive stranice „$1”",
+ "pt-movepage-block-base-exists": "Ciljna prevodiva stranica „[[:$1]]” postoji.",
+ "pt-movepage-block-base-invalid": "Cilj imena prevodive stranice nije važeći naslov.",
+ "pt-movepage-block-tp-exists": "Ciljna stranica za prevođenje „[[:$2]]” postoji.",
+ "pt-movepage-block-tp-invalid": "Naslov ciljne stranice za prevođenje za „[[:$1]]” bio bi nevažeći (predugačak?).",
+ "pt-movepage-block-section-exists": "Ciljna stranica „[[:$2]]” za jedinicu prevoda postoji.",
+ "pt-movepage-block-section-invalid": "Naslov ciljne stranice za jedinicu prevoda „[[:$1]]” bio bi nevažeći (predugačak?).",
"pt-movepage-block-subpage-exists": "Ciljna podstranica [[:$2]] postoji.",
"pt-movepage-block-subpage-invalid": "Naslov ciljne podstranice za [[:$1]] bio bi neispravan (predugačak?).",
"pt-movepage-list-pages": "Spisak stranica za premeštanje",
- "pt-movepage-list-translation": "{{PLURAL:$1|Stranice}} za prevod",
- "pt-movepage-list-other": "{{PLURAL:$1|Druge}} podstranice",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Stranica|Stranice}} za prevođenje",
+ "pt-movepage-list-section": "Jedinica prevoda {{PLURAL:$1|stranice|stranica}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Podstranica|Podstranice}} označene za prevođenje",
+ "pt-movepage-list-translatable-note": "Ove stranice moraju da se zasebno premeste.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Druga podstranica|Druge podstranice}}",
"pt-movepage-list-count": "Ukupno $1 {{PLURAL:$1|stranica|stranice|stranica}} za premeštanje.",
"pt-movepage-legend": "Premesti prevodivu stranicu",
- "pt-movepage-current": "Tekući naziv:",
- "pt-movepage-new": "Novi naziv:",
+ "pt-movepage-current": "Trenutno ime:",
+ "pt-movepage-new": "Novo ime:",
"pt-movepage-reason": "Razlog:",
"pt-movepage-subpages": "Premesti sve podstranice",
"pt-movepage-action-check": "Proveri da li je premeštanje izvodljivo",
- "pt-movepage-action-perform": "Premesti",
+ "pt-movepage-action-perform": "Izvrši premeštanje",
"pt-movepage-action-other": "Promeni cilj",
+ "pt-movepage-started": "U međuvremenu, proverite [[Special:Log/pagetranslation|dnevnik prevođenja stranice]] da bi se pronašle eventualne greške i poruke završetka.",
+ "pt-deletepage-invalid-title": "Navedena stranica nije važeća.",
+ "pt-deletepage-action-check": "Navedi stranice za brisanje",
+ "pt-deletepage-action-perform": "Izvrši brisanje",
+ "pt-deletepage-action-other": "Promeni cilj",
+ "pt-deletepage-lang-legend": "Izbriši stranicu prevoda",
+ "pt-deletepage-full-legend": "Izbriši prevodivu stranicu",
+ "pt-deletepage-any-legend": "Izbrišite prevodivu stranicu ili stranicu prevoda",
+ "pt-deletepage-current": "Ime stranice:",
+ "pt-deletepage-reason": "Razlog:",
+ "pt-deletepage-subpages": "Izbriši sve podstranice",
+ "pt-deletepage-list-pages": "Lista stranica za brisanje",
+ "pt-deletepage-list-translation": "Stranice za prevođenje",
+ "pt-deletepage-list-section": "Stranice za jedinicu prevoda",
+ "pt-deletepage-list-other": "Druge podstranice",
"pt-deletepage-list-count": "Ukupno $1 {{PLURAL:$1|stranica|stranice}} za brisanje.",
+ "pagemigration": "Migracija stranice za prevođenje",
"pm-import-button-label": "Uvezi",
"pm-savepages-button-label": "Sačuvaj",
"pm-cancel-button-label": "Otkaži",
- "pp-pagename-placeholder": "Unesite naziv stranice",
+ "pm-page-does-not-exist": "$1 ne postoji.",
+ "pm-old-translations-missing": "$1 ne sadrži stare prevode.",
+ "pm-pagename-missing": "Unesite ime stranice.",
+ "pm-add-icon-hover-text": "Dodaj jedinicu ispod",
+ "pm-swap-icon-hover-text": "Zameni sa jedinicom ispod",
+ "pm-delete-icon-hover-text": "Izbriši jedinicu",
+ "pm-pagetitle-placeholder": "Unesite naslov stranice",
+ "pm-pagetitle-missing": "Unesite naslov stranice.",
+ "tpt-translate-title": "Dozvoli prevođenje naslova stranice",
+ "pp-save-summary": "Stranica je pripremljena za prevođenje",
+ "pagepreparation": "Priprema stranica za prevođenje",
+ "pp-pagename-placeholder": "Unesite ime stranice",
+ "pp-prepare-button-label": "Pripremi",
"pp-save-button-label": "Sačuvaj",
"pp-cancel-button-label": "Otkaži",
- "pp-prepare-message": "Ova stranica je pripremljena za prevođenje. Pogledajte razliku izmena ispod. Kliknite na dugme \"{{int:pp-save-button-label}}\" ako je u redu!",
- "tpt-unlink-confirm": "Molimo vas da potvrdite da stvarno želite da uklonite ovu stranicu iz prevodilačkog sistema.\nSelektor jezika i prevedeni nazivi stranica će prestati sa radom.\nStranice za prevođenje će postati uredive."
+ "pp-save-message": "Stranica je sačuvana. Možete je [$1 urediti].",
+ "pp-prepare-message": "Ova stranica je pripremljena za prevođenje. Pogledajte donju razliku izmena. Kliknite na dugme „{{int:pp-save-button-label}}” ako je sve u redu!",
+ "pp-pagename-missing": "Unesite ime stranice.",
+ "pp-diff-old-header": "Izvorni tekst",
+ "pp-diff-new-header": "Pripremljeni tekst",
+ "tpt-unlink-confirm": "Potvrdite da stvarno želite da uklonite ovu stranicu iz sistema prevođenja.\nBirač jezika i prevedena imena stranica će prestati sa radom.\nStranice za prevođenje će postati uredive.",
+ "tpt-unlink-button": "Ukloni iz sistema prevođenja",
+ "tpt-unlink-summary": "Uklonjena stranica iz sistema prevođenja",
+ "tpt-generic-confirm": "Potvrdite radnju.",
+ "tpt-generic-button": "Potvrdi"
}
diff --git a/MLEB/Translate/i18n/pagetranslation/sv.json b/MLEB/Translate/i18n/pagetranslation/sv.json
index ef7a3b37..8823e8b3 100644
--- a/MLEB/Translate/i18n/pagetranslation/sv.json
+++ b/MLEB/Translate/i18n/pagetranslation/sv.json
@@ -68,12 +68,13 @@
"translate-tag-markthisagain": "Den här sidan har <span class=\"plainlinks\">[$1 förändringar]</span> sedan den senast <span class=\"plainlinks\">[$2 märktes för översättning]</span>.",
"translate-tag-hasnew": "Den här sidan innehåller <span class=\"plainlinks\">[$1 förändringar]</span> som inte är märkta för översättning.",
"tpt-translation-intro": "Det här är en <span class=\"plainlinks\">[$1 översatt version]</span> av sidan [[$2]]. Översättningen är till $3% färdig och uppdaterad.",
- "tpt-translation-intro-fuzzy": "Föråldrade översättningar visas på det här sättet.",
+ "tpt-translation-intro-fuzzy": "Föråldrade översättningar markeras på det här sättet.",
"tpt-languages-legend": "Andra språk:",
"tpt-languages-zero": "Starta översättning för detta språk",
"tpt-languages-nonzero": "$1 ($2 % översatt)",
"tpt-tab-translate": "Översätt",
"tpt-target-page": "Den här sidan kan inte uppdateras manuellt. Den här sidan är en översättning av [[$1]] och översättningen kan uppdateras genom att använda [$2 översättningsverktyget].",
+ "tpt-patrolling-blocked": "Denna sidan kan inte patrulleras. Använd översättningsåtgärden för att granska den.",
"tpt-unknown-page": "Den här namnrymden är reserverad för översättningar av sidor. Sidan du försöker redigera verkar inte stämma överens med någon sida som är märkt för översättning.",
"tpt-translation-restricted": "Översättningar av denna sida har förhindrats av en översättningsadministratör.\n\nAnledningar: $1",
"tpt-discouraged-language-force-header": "Denna sida kan inte översättas till $1.",
@@ -121,6 +122,11 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|begränsade}} språken för översättbara sidan $3 till $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|lade till}} den översättbara sidan $3 till samlingsgruppen $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|tog bort}} den översättbara sidan $3 från samlingsgruppen $4",
+ "log-action-filter-pagetranslation": "Typ av åtgärd:",
+ "log-action-filter-pagetranslation-mark": "Märk för översättning",
+ "log-action-filter-pagetranslation-unmark": "Ta bort från översättning",
+ "log-action-filter-pagetranslation-move": "Sidflyttningar",
+ "log-action-filter-pagetranslation-delete": "Sidraderingar",
"pt-movepage-title": "Flytta översättningsbar sida $1",
"pt-movepage-blockers": "Den översättningsbara sidan kan inte flyttas till ett nytt namn på grund av följande {{PLURAL:$1|fel|fel}}:",
"pt-movepage-block-base-exists": "Den översättningsbara målsidan \"[[:$1]]\" finns.",
@@ -134,6 +140,8 @@
"pt-movepage-list-pages": "Lista över sidor att flytta",
"pt-movepage-list-translation": "Översättnings{{PLURAL:$1|sida|sidor}}",
"pt-movepage-list-section": "Översättningsenhets{{PLURAL:$1|sida|sidor}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Undersida|Undersidor}} markerades för översättning",
+ "pt-movepage-list-translatable-note": "Dessa sidor måste flyttas separat.",
"pt-movepage-list-other": "{{PLURAL:$1|Annan undersida|Andra undersidor}}",
"pt-movepage-list-count": "Totalt $1 {{PLURAL:$1|sida|sidor}} att flytta.",
"pt-movepage-legend": "Flytta översättningsbar sida",
@@ -146,7 +154,7 @@
"pt-movepage-action-other": "Ändra mål",
"pt-movepage-intro": "Denna specialsida låter dig flytta sidor som är markerade för översättning.\nFlyttningsåtgärden kommer inte att vara omedelbar, eftersom många sidor kommer att behöva flyttas.\nMedan sidorna flyttas är det inte möjligt att interagera med dem.\nFel kommer att registreras i [[Special:Log/pagetranslation|sidöversättningsloggen]] och de behöver repareras manuellt.",
"pt-movepage-logreason": "Del av översättningsbar sida \"$1\".",
- "pt-movepage-started": "Bassidan är nu flyttad.\n\nKontrollera [[Special:Log/pagetranslation|loggen för sidöversättning]] efter fel och meddelande om att det slutförts.",
+ "pt-movepage-started": "Kontrollera [[Special:Log/pagetranslation|loggen för sidöversättning]] om en stund efter fel och meddelande om att det slutförts.",
"pt-locked-page": "Denna sida är låst eftersom den översättningsbara sidan håller på att flyttas.",
"pt-deletepage-lang-title": "Raderar översättningssida \"$1\"",
"pt-deletepage-full-title": "Raderar översättbar sida \"$1\"",
@@ -182,9 +190,13 @@
"pm-add-icon-hover-text": "Lägg till en enhet nedan",
"pm-swap-icon-hover-text": "Byt med enheten nedan",
"pm-delete-icon-hover-text": "Radera enhet",
- "pm-pagetitle-invalid": "Ange en giltig sidtitel",
- "pm-langcode-missing": "Vänligen ange språkkoden",
+ "pm-pagetitle-placeholder": "Ange sidans titel",
+ "pm-pagetitle-invalid": "Ange en giltig sidtitel. Den bör vara i formatet <page-name>/<language-code>.",
+ "pm-pagetitle-missing": "Ange sidans titel.",
+ "pm-langcode-missing": "Språkkoden verkar saknas i titeln. Ange sidans titel i formatet <page-name>/<language-code>.",
"pm-summary-import": "Översättning importerad med hjälpt av [[Special:PageMigration|sidmigrering]]",
+ "pm-on-import-message-text": "De gamla översättningarna har importerats. Använd alternativen lägg till, byt och radera för att justera översättningsenheterna och klicka på knappen \"{{int:pm-savepages-button-label}}\" för att spara dem. Klicka på knappen \"{{int:pm-cancel-button-label}}\" för att slänga dem.",
+ "pm-on-save-message-text": "Översättningsenheterna har sparats. Du kan nu ange titeln för en ny översättningssida för att migrera den eller göra ändringar i enheterna nedan och spara en ny version.",
"tpt-translate-title": "Tillåt översättning av sidans titel",
"pp-save-summary": "Förbered sidan för översättning",
"pagepreparation": "Förbered sida för översättning",
@@ -201,5 +213,6 @@
"tpt-unlink-confirm": "Bekräfta att du verkligen vill ta bort denna sida från översättningssystemet.\nSpråkväljaren och översatta sidnamn kommer sluta fungera.\nÖversättningssidorna kommer bli redigerbara.",
"tpt-unlink-button": "Ta bort från översättning",
"tpt-unlink-summary": "Tog bort sidan från översättning",
+ "tpt-generic-confirm": "Bekräfta åtgärden.",
"tpt-generic-button": "Bekräfta"
}
diff --git a/MLEB/Translate/i18n/pagetranslation/sw.json b/MLEB/Translate/i18n/pagetranslation/sw.json
index 87807006..429596a9 100644
--- a/MLEB/Translate/i18n/pagetranslation/sw.json
+++ b/MLEB/Translate/i18n/pagetranslation/sw.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Kwisha"
+ "Kwisha",
+ "Rance"
]
},
"tpt-select-prioritylangs-reason": "Sababu:",
@@ -11,5 +12,6 @@
"tpt-languages-legend": "Lugha zingine:",
"tpt-discouraged-language-reason": "Sababu: $1",
"tpt-aggregategroup-add": "Ongeza",
- "tpt-aggregategroup-save": "Hifadhi"
+ "tpt-aggregategroup-save": "Hifadhi",
+ "pt-movepage-list-translatable-note": "Kurasa hizi lazima zihamishwe kila ukurasa kivyake"
}
diff --git a/MLEB/Translate/i18n/pagetranslation/tcy.json b/MLEB/Translate/i18n/pagetranslation/tcy.json
index 53bfecaf..3677d8e5 100644
--- a/MLEB/Translate/i18n/pagetranslation/tcy.json
+++ b/MLEB/Translate/i18n/pagetranslation/tcy.json
@@ -4,7 +4,8 @@
"VASANTH S.N.",
"Vishwanatha Badikana",
"BHARATHESHA ALASANDEMAJALU",
- "Kiranpoojary"
+ "Kiranpoojary",
+ "Ravi Mundkur"
]
},
"pagetranslation": "ಪುಟೋ ತರ್ಜುಮೆ",
@@ -31,6 +32,9 @@
"tpt-aggregategroup-update-cancel": "ವಜಾ ಮಲ್ಪುಲೆ",
"log-action-filter-pagetranslation-mark": "ಅನುವಾದಗ್ ಗುರ್ತ್ ಮನ್ಪುಲೆ",
"log-action-filter-pagetranslation-unmark": "ಅನುವಾದತ್ ದೆಪ್ಪುಲೆ",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Subpage|Subpages}}ಅನುವಾದೊಗು ಗುರುತು ಮಲ್ತಿನ",
+ "pt-movepage-list-translatable-note": "ಈ ಪುಟೊಕುಲೆನ್ ಪ್ರತ್ಯೇಕವಾದ್ ದೆಪ್ಪೊಡು.",
+ "pt-movepage-list-other": "ಬೇತೆ {{PLURAL:$1|Subpage|Subpages}}",
"pt-movepage-current": "ಇತ್ತೇತ ಪುದರ್:",
"pt-movepage-new": "ಪೊಸ ಪುದರ್:",
"pt-movepage-reason": "ಕಾರಣೊ:",
diff --git a/MLEB/Translate/i18n/pagetranslation/uk.json b/MLEB/Translate/i18n/pagetranslation/uk.json
index db070d33..b4e9607d 100644
--- a/MLEB/Translate/i18n/pagetranslation/uk.json
+++ b/MLEB/Translate/i18n/pagetranslation/uk.json
@@ -14,7 +14,8 @@
"Ата",
"Тест",
"Piramidion",
- "Dars"
+ "Dars",
+ "Vlad5250"
]
},
"pagetranslation": "Переклад сторінок",
@@ -109,7 +110,7 @@
"log-description-pagetranslation": "Журнал для дій, пов'язаних з системою перекладу сторінок.",
"log-name-pagetranslation": "Журнал перекладу сторінок",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|позначив|позначила}} $3 для перекладу",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|вилучив|вилучила}} $3 з перекладу",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|вилучив|вилучила}} $3 із системи перекладу",
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|здійснив|здійснила}} перейменування перекладабельної сторінки $3 на $4",
"logentry-pagetranslation-movenok": "$1 {{GENDER:$2|зіштовхнувся|зіштовхнулася}} із проблемою під час перейменування сторінки $3 на $4",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|здійснив|здійснила}} вилучення перекладабельної сторінки $3",
@@ -145,6 +146,8 @@
"pt-movepage-list-pages": "Список сторінок для перейменування",
"pt-movepage-list-translation": "{{PLURAL:$1|1=Сторінка|Сторінки}} перекладу",
"pt-movepage-list-section": "{{PLURAL:$1|1=Сторінка|Сторінки}} одиниці перекладу",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Підсторінка, позначена|Підсторінки, позначені}} для перекладу",
+ "pt-movepage-list-translatable-note": "Ці сторінки повинні бути перейменовані окремо.",
"pt-movepage-list-other": "{{PLURAL:$1|1=Інша підсторінка|Інші підсторінки}}",
"pt-movepage-list-count": "Усього перемістити $1 {{PLURAL:$1|сторінку|сторінки|сторінок}}.",
"pt-movepage-legend": "Перемістити сторінку, доступну для перекладу",
diff --git a/MLEB/Translate/i18n/pagetranslation/yi.json b/MLEB/Translate/i18n/pagetranslation/yi.json
index da6697fa..92cd9a87 100644
--- a/MLEB/Translate/i18n/pagetranslation/yi.json
+++ b/MLEB/Translate/i18n/pagetranslation/yi.json
@@ -75,7 +75,7 @@
"tpt-invalid-group": "אומגילטיגע גרופע",
"log-name-pagetranslation": "בלאט איבערזעצונג לאגבוך",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|מארקירט}} $3 איבערצוזעצן",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|אראפגענומען}} $3 פון איבערזעצן",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|אראפגענומען}} $3 פון דער איבערזעצן סיסטעם",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|האט געקאנטשעט}} אויסמעקן איבערזעצבארן בלאט $3",
"logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|האט אוועקגענומען}} פריאריטעט שפראכן פון איבערזעצבארן בלאט $3",
"log-action-filter-pagetranslation-mark": "מארקירן פאר איבערזעצונג",
@@ -90,7 +90,7 @@
"pt-movepage-list-pages": "רשימה פון בלעטער צו באַוועגן",
"pt-movepage-list-translation": "טײַטש {{PLURAL:$1|בלאַט|בלעטער}}",
"pt-movepage-list-section": "איבערזעצונג איינהייט {{PLURAL:$1|בלאַט|בלעטער}}",
- "pt-movepage-list-other": "אנדערע אונטער{{PLURAL:$1|בלאַט|בלעטער}}",
+ "pt-movepage-list-other": "אנדערע {{PLURAL:$1| אונטערבלאַט| אונטערבלעטער}}",
"pt-movepage-list-count": "אינגאנצן $1 {{PLURAL:$1|בלאט|בלעטער}} צו באוועגן.",
"pt-movepage-legend": "באוועגן איבערזעצבארן בלאט",
"pt-movepage-current": "אקטועלער נאמען:",
diff --git a/MLEB/Translate/i18n/pagetranslation/zh-hant.json b/MLEB/Translate/i18n/pagetranslation/zh-hant.json
index bcd78a7e..9f582588 100644
--- a/MLEB/Translate/i18n/pagetranslation/zh-hant.json
+++ b/MLEB/Translate/i18n/pagetranslation/zh-hant.json
@@ -146,7 +146,9 @@
"pt-movepage-list-pages": "要移動的頁面清單",
"pt-movepage-list-translation": "翻譯{{PLURAL:$1|頁面|頁面}}",
"pt-movepage-list-section": "翻譯單元{{PLURAL:$1|頁面}}",
- "pt-movepage-list-other": "其他子{{PLURAL:$1|頁面}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|子頁面|子頁面}}標記為翻譯",
+ "pt-movepage-list-translatable-note": "這些頁面必須分別移動。",
+ "pt-movepage-list-other": "其它{{PLURAL:$1|子頁面|子頁面}}",
"pt-movepage-list-count": "共 $1 個頁面要移動。",
"pt-movepage-legend": "移動可翻譯頁面",
"pt-movepage-current": "目前名稱:",
diff --git a/MLEB/Translate/i18n/sandbox/da.json b/MLEB/Translate/i18n/sandbox/da.json
index 105f2847..79916c74 100644
--- a/MLEB/Translate/i18n/sandbox/da.json
+++ b/MLEB/Translate/i18n/sandbox/da.json
@@ -5,6 +5,8 @@
"Saederup92"
]
},
+ "tsb-reminder-sending": "Sender påmindelsen...",
+ "tsb-reminder-sent-new": "Sendte en påmindelse",
"tsb-all-languages-button-label": "Alle sprog",
"tsb-accept-button-label": "Accepter",
"tsb-reject-button-label": "Afvis",
@@ -12,6 +14,9 @@
"tsb-reject-all-button-label": "Afvis alle",
"tsb-user-posted-a-comment": "Ikke en oversætter",
"tsb-translations-source": "Kilde",
+ "tsb-translations-current": "Eksisterende oversættelser",
+ "tsb-reject-confirmation": "Afviste {{PLURAL:$1|bruger|brugere}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Accepteret bruger|Accepterede brugere}}",
"translationstash": "Velkommen",
"translate-translationstash-welcome": "Velkommen {{GENDER:$1|$1}}, du er nu en ny oversætter",
"translate-translationstash-skip-button-label": "Prøv en anden",
diff --git a/MLEB/Translate/i18n/sandbox/fa.json b/MLEB/Translate/i18n/sandbox/fa.json
index 12d6102a..f2be5810 100644
--- a/MLEB/Translate/i18n/sandbox/fa.json
+++ b/MLEB/Translate/i18n/sandbox/fa.json
@@ -7,7 +7,8 @@
"Alirezaaa",
"Mjbmr",
"Huji",
- "Ladsgroup"
+ "Ladsgroup",
+ "Physicsch"
]
},
"managetranslatorsandbox": "مدیریت کاربران مترجم",
@@ -49,7 +50,7 @@
"tsb-limit-reached-title": "تشکر برای ترجمه‌های شما",
"tsb-limit-reached-body": "شما به حد ترجمه برای مترجمان جدید رسیده‌اید.\nتیم ما بررسی خواهد کرد و حساب شما را به زودی ارتقاء می‌دهد.\nسپس شما قادر به ترجمه بدون محدودیت خواهید بود.",
"tsb-no-requests-from-new-users": "هیچ درخواستی از کاربران تازه نیست",
- "tsb-create-user-page": "ایجاد صفحهٔ کاربری اصلی",
+ "tsb-create-user-page": "صفحهٔ کاربری اصلی ایجاد شد",
"log-name-translatorsandbox": "محل تمرین ترجمه",
"log-description-translatorsandbox": "سیاهه‌ای از عملکرد بر روی کاربران جعبه شنی ترجمه",
"logentry-translatorsandbox-promoted": "$1، $3 را به {{GENDER:$4|مترجم}} {{GENDER:$2|ترفیع}} داد",
diff --git a/MLEB/Translate/i18n/sandbox/fi.json b/MLEB/Translate/i18n/sandbox/fi.json
index 274e070d..aa601247 100644
--- a/MLEB/Translate/i18n/sandbox/fi.json
+++ b/MLEB/Translate/i18n/sandbox/fi.json
@@ -3,13 +3,15 @@
"authors": [
"Crt",
"Nike",
- "Pyscowicz"
+ "Pyscowicz",
+ "Uusijani",
+ "Valtlait"
]
},
"managetranslatorsandbox": "Kääntäjähakemusten hallinta",
"tsb-filter-pending": "Avoimet hakemukset",
"tsb-reminder-title-generic": "Suorita harjoitus loppuun, jotta sinut voidaan hyväksyä kääntäjäksi",
- "tsb-reminder-content-generic": "Hei $1,\n\nKiitos rekisteröitymisestä sivulle {{SITENAME}}.\n\nJos saatat loppuun testikäännöksesi, ylläpitäjät antavat sinulle täyden pääsyn kääntämiseen pian sen jälkeen.\n\nTule tänne ja tee muutama muu käännöks täällä:\n$2\n\n$3,\n{{SITENAME}}n henkilökunta",
+ "tsb-reminder-content-generic": "Hei $1,\n\nKiitos rekisteröitymisestä {{GRAMMAR:illative|{{SITENAME}}}}.\n\nJos saatat loppuun testikäännöksesi, ylläpitäjät antavat sinulle täyden pääsyn kääntämiseen pian sen jälkeen.\n\nTule takaisin ja tee lisää käännöksiä täällä:\n$2\n\n$3,\n{{GRAMMAR:genitive|{{SITENAME}}}} henkilökunta",
"tsb-reminder-sending": "Lähetetään muistutusta...",
"tsb-reminder-sent": "{{PLURAL:$1|$1 muistutus lähetetty $2.|$1 muistutusta lähetetty. Viimeisin $2.}}",
"tsb-reminder-sent-new": "Muistutus lähetetty",
@@ -39,16 +41,16 @@
"translationstash": "Tervetuloa",
"translate-translationstash-welcome": "Tervetuloa {{GENDER:$1|$1}}. Olet uusi kääntäjä.",
"translate-translationstash-welcome-note": "Tutustu käännöstyökaluihin. Käännä muutamia viestejä, niin saat täydet käännösoikeudet lempiprojektiesi kääntämiseen.",
- "translate-translationstash-initialtranslation": "Ensimmäinen käännös",
+ "translate-translationstash-initialtranslation": "Ensimmäinen käännöksesi",
"translate-translationstash-translations": "$1 {{PLURAL:$1|valmis käännös|valmista käännöstä}}",
"translate-translationstash-skip-button-label": "Ohita",
"tsb-limit-reached-title": "Kiitos käännöksistäsi",
- "tsb-limit-reached-body": "Olet saavuttanut käännösraja uusille kääntäjille.\nTiimimme tarkistaa ja päivittää tilisi pian.\nSitten voit kääntää ilman rajoja.",
+ "tsb-limit-reached-body": "Saavutit uusien kääntäjien käännösrajan. Tiimimme vahvistaa ja päivittää tilisi pian. Sen jälkeen voit kääntää rajattomasti.",
"tsb-no-requests-from-new-users": "Ei uusia hakemuksia.",
"tsb-create-user-page": "Luo yksinkertainen käyttäjäsivu",
- "log-name-translatorsandbox": "Käännöshiekkalaatikkoloki",
+ "log-name-translatorsandbox": "Käännöshiekkalaatikon loki",
"log-description-translatorsandbox": "Loki käännöshiekkalaatikon käyttäjien toimista",
- "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|ylensi}} $3 {{GENDER:$4|kääntäjäksi}}",
- "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|hylkäsi}} pyynnön käyttäjältä \"$3\" ryhtyä kääntäjäksi",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|ylensi}} käyttäjän $3 {{GENDER:$4|kääntäjäksi}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|hylkäsi}} pyynnön käyttäjältä ”$3” ryhtyä kääntäjäksi",
"logentry-newusers-tsbpromoted": "Käyttäjätili $3 {{GENDER:$2|luotiin}} ylentämällä hiekkalaatikosta"
}
diff --git a/MLEB/Translate/i18n/sandbox/kjp.json b/MLEB/Translate/i18n/sandbox/kjp.json
index 98ee5077..9d40b3d6 100644
--- a/MLEB/Translate/i18n/sandbox/kjp.json
+++ b/MLEB/Translate/i18n/sandbox/kjp.json
@@ -4,5 +4,6 @@
"Rul1902"
]
},
- "tsb-translations-source": "အ်ုထိုဝ်"
+ "tsb-translations-source": "အ်ုထိုဝ်",
+ "translationstash": "အင်းၯးလင်ဖဝ်ႋ"
}
diff --git a/MLEB/Translate/i18n/sandbox/mk.json b/MLEB/Translate/i18n/sandbox/mk.json
index bf4b7cc1..97311417 100644
--- a/MLEB/Translate/i18n/sandbox/mk.json
+++ b/MLEB/Translate/i18n/sandbox/mk.json
@@ -43,7 +43,7 @@
"tsb-limit-reached-title": "Ви благодариме за преводите",
"tsb-limit-reached-body": "Ја достигнавте границата на преводи од нови преведувачи.\nНаскоро нашата екипа ќе ви ја провери и надгради сметката.\nПотоа ќе можете да преведувате неограничено.",
"tsb-no-requests-from-new-users": "Нема барања од нови корисници",
- "tsb-create-user-page": "Создавање на основна корисничка страница",
+ "tsb-create-user-page": "Создадена основна корисничка страница",
"log-name-translatorsandbox": "Дневник на Преводниот песочник",
"log-description-translatorsandbox": "Дневник на дејства со корисници на преводниот песочник",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$4|го|ја}} {{GENDER:$2|унапреди}} $3 во {{GENDER:$4|преведувач}}",
diff --git a/MLEB/Translate/i18n/sandbox/pl.json b/MLEB/Translate/i18n/sandbox/pl.json
index ca8fe6de..5f3e5c8b 100644
--- a/MLEB/Translate/i18n/sandbox/pl.json
+++ b/MLEB/Translate/i18n/sandbox/pl.json
@@ -13,7 +13,7 @@
"tsb-reminder-failed": "Wysłanie przypomnienia nie powiodło się",
"tsb-email-promoted-subject": "Teraz jesteś tłumaczem w serwisie {{SITENAME}}",
"tsb-email-promoted-body": "Witaj {{GENDER:$1|$1}},\n\nGratulacje! {{GENDER:$3|Sprawdziłem|Sprawdziłam}} Twoje testowe tłumaczenia wykonane w {{SITENAME}} i {{GENDER:$3|przyznałem|przyznałam}} Ci pełne prawa tłumacza.\n\nPrzyjdź do {{SITENAME}}, aby kontynuować tłumaczenie:\n$2\n\nWitamy i dziękujemy za Twój wkład!\n\n{{GENDER:$3|$3}},\nZespół {{SITENAME}}",
- "tsb-email-rejected-subject": "Twój wniosek o uzyskanie uprawnień tłumacza witryny {{SITENAME}} została odrzucony",
+ "tsb-email-rejected-subject": "Twój wniosek o uzyskanie uprawnień tłumacza witryny {{SITENAME}} został odrzucony",
"tsb-email-rejected-body": "Witaj {{GENDER:$1|$1}},\n\nDziękujemy za zgłoszenie się jako tłumacz w {{SITENAME}}. Z przykrością informuję, że {{GENDER:$3|odrzuciłem|odrzuciłam}} Twój wniosek, ponieważ jakość twoich tłumaczeń nie spełniała wymagań.\n\nJeśli uważasz, że Twoje zgłoszenie zostało odrzucone przez pomyłkę, spróbuj ponownie złożyć wniosek jako tłumacz w {{SITENAME}}. Możesz zarejestrować się tutaj:\n$2\n\n{{GENDER:$3|$3}},\nZespół {{SITENAME}}",
"tsb-request-count": "$1 {{PLURAL:$1|wniosek|wnioski|wniosków}}",
"tsb-all-languages-button-label": "Wszystkie języki",
@@ -37,7 +37,7 @@
"translate-translationstash-skip-button-label": "Spróbuj innego",
"tsb-limit-reached-title": "Dziękuję za Twoje tłumaczenia",
"tsb-no-requests-from-new-users": "Brak wniosków od nowych użytkowników",
- "tsb-create-user-page": "Utwórz prostą stronę użytkownika",
+ "tsb-create-user-page": "Utworzono prostą stronę użytkownika",
"log-name-translatorsandbox": "Rejestr brudnopisu tłumaczeń",
"log-description-translatorsandbox": "To jest rejestr działań użytkowników brudnopisu tłumaczeń",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|awansował|awansowała}} $3 na {{GENDER:$4|tłumacza|tłumaczkę}}",
diff --git a/MLEB/Translate/i18n/sandbox/ru.json b/MLEB/Translate/i18n/sandbox/ru.json
index d22b9100..426ad472 100644
--- a/MLEB/Translate/i18n/sandbox/ru.json
+++ b/MLEB/Translate/i18n/sandbox/ru.json
@@ -51,7 +51,7 @@
"tsb-create-user-page": "Создана основная страница участника",
"log-name-translatorsandbox": "Журнал песочницы для переводов",
"log-description-translatorsandbox": "Журнал действий с участниками песочницы переводов",
- "logentry-translatorsandbox-promoted": "$1 сделал{{GENDER:$2||а}}$3 {{GENDER:$4|переводчиком}}.",
+ "logentry-translatorsandbox-promoted": "$1 сделал{{GENDER:$2||а}} $3 {{GENDER:$4|переводчиком}}",
"logentry-translatorsandbox-rejected": "$1 отклонил{{GENDER:$2||а}} запрос от «$3» на получение статуса переводчика.",
"logentry-newusers-tsbpromoted": "Учётная запись участника $3 была {{GENDER:$2|создана}} из записи в песочнице"
}
diff --git a/MLEB/Translate/i18n/sandbox/sr-el.json b/MLEB/Translate/i18n/sandbox/sr-el.json
index 25a03eda..b618f68b 100644
--- a/MLEB/Translate/i18n/sandbox/sr-el.json
+++ b/MLEB/Translate/i18n/sandbox/sr-el.json
@@ -4,5 +4,14 @@
"Zoranzoki21"
]
},
- "log-name-translatorsandbox": "Dnevnik prevodilačkog peska"
+ "tsb-all-languages-button-label": "Svi jezici",
+ "tsb-accept-button-label": "Prihvati",
+ "tsb-reject-button-label": "Odbij",
+ "tsb-accept-all-button-label": "Prihvati sve",
+ "tsb-reject-all-button-label": "Odbiji sve",
+ "tsb-translations-source": "Izvor",
+ "tsb-create-user-page": "Napravljena osnovna korisnička stranica",
+ "log-name-translatorsandbox": "Dnevnik prevoda u pesku",
+ "logentry-translatorsandbox-promoted": "$1 je {{GENDER:$2|unapredio|unapredila}} $3 u {{GENDER:$4|prevodioca}}",
+ "logentry-translatorsandbox-rejected": "$1 je {{GENDER:$2|odbio|odbila}} zahtev korisnika/ce „$3” da postane prevodilac"
}
diff --git a/MLEB/Translate/i18n/sandbox/sv.json b/MLEB/Translate/i18n/sandbox/sv.json
index 4fd25908..878e9a5e 100644
--- a/MLEB/Translate/i18n/sandbox/sv.json
+++ b/MLEB/Translate/i18n/sandbox/sv.json
@@ -45,7 +45,7 @@
"tsb-limit-reached-title": "Tack för dina översättningar",
"tsb-limit-reached-body": "Du har nått översättningsgränsen för nya översättare.\nVårt team kommer snart verifiera och uppgradera ditt konto.\nSedan kommer du kunna översätta utan begränsningar.",
"tsb-no-requests-from-new-users": "Inga förfrågningar från nya användare",
- "tsb-create-user-page": "Skapa grundläggande användarsida",
+ "tsb-create-user-page": "Skapade grundläggande användarsida",
"log-name-translatorsandbox": "Logg för översättningssandlåda",
"log-description-translatorsandbox": "En logg över åtgärder på översättningssandlådeanvändare",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|befordrades}} $3 till {{GENDER:$4|översättare}}",
diff --git a/MLEB/Translate/i18n/sandbox/tcy.json b/MLEB/Translate/i18n/sandbox/tcy.json
index ead03ab3..b347c08f 100644
--- a/MLEB/Translate/i18n/sandbox/tcy.json
+++ b/MLEB/Translate/i18n/sandbox/tcy.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Vishwanatha Badikana",
- "BHARATHESHA ALASANDEMAJALU"
+ "BHARATHESHA ALASANDEMAJALU",
+ "Ravi Mundkur"
]
},
"tsb-email-promoted-body": "ಓಯ್{{GENDER:$1|$1}},\n\nಅಭಿನಂದನೆಲು! ಈರ್ ಅನುಮಾದೊ ಮಲ್ತಿನೆನ್ ಯಾನ್ ತೂಯೆ {{SITENAME}} ಬುಕ್ಕೊ ಈರೆಗ್ ಪೂರ್ತಿ ಅನುವಾದೊ ಮಲ್ಪುನ ಹಕ್ಕ್‌ ಕೊರ್ಪೆ.\n\nಈಡೆಗ್ ಬಲೆ {{SITENAME}} ಮುಲ್ತುಡ್ದ್ ಇತ್ತೆ ಅನುವಾದೊ ದುಂಬರಿಪುಲೆ, ಬುಕ್ಕೊ ದಿನೋಲ:\n$2\n\nಸ್ವಾಗತೊ, ಬುಕ್ಕೊ ಈರೆಗ್ ಈರೆನ ಕಾನಿಕೆಗ್ ಸೊಲ್ಮೆಲು!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} ಸಿಬಂದಿ",
@@ -13,5 +14,6 @@
"tsb-accept-confirmation": "{{PLURAL:$1|User|ಸದಸ್ಯೆರ್}} ಒಪ್ಪಿಯೇರ್",
"translationstash": "ಸೊಲ್ಮೆಲೋ",
"translate-translationstash-skip-button-label": "ನನೊಂಜಿ ಪ್ರಯತ್ನ ಮಾಂಪಿ",
- "tsb-limit-reached-title": "ಈರೆನ ಅನುವಾದಾಗ್ ಉಡಲ್ ದಿಂಜಿ ಸೊಲ್ಮೆಲೋ"
+ "tsb-limit-reached-title": "ಈರೆನ ಅನುವಾದಾಗ್ ಉಡಲ್ ದಿಂಜಿ ಸೊಲ್ಮೆಲೋ",
+ "tsb-create-user-page": "ಸರಳ ಬಳಕೆದಾರೆ ಪುಟ ರಚಿಸಾಂಡ್"
}
diff --git a/MLEB/Translate/i18n/sandbox/tr.json b/MLEB/Translate/i18n/sandbox/tr.json
new file mode 100644
index 00000000..571a3869
--- /dev/null
+++ b/MLEB/Translate/i18n/sandbox/tr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hedda"
+ ]
+ },
+ "tsb-create-user-page": "Temel kullanıcı sayfası oluşturuldu"
+}
diff --git a/MLEB/Translate/i18n/sandbox/zh-hans.json b/MLEB/Translate/i18n/sandbox/zh-hans.json
index 6b9e394c..423cc0f2 100644
--- a/MLEB/Translate/i18n/sandbox/zh-hans.json
+++ b/MLEB/Translate/i18n/sandbox/zh-hans.json
@@ -6,7 +6,8 @@
"Qiyue2001",
"Shizhao",
"Xiaomingyan",
- "Yfdyh000"
+ "Yfdyh000",
+ "A Chinese Wikipedian"
]
},
"managetranslatorsandbox": "管理译者沙盒",
@@ -48,7 +49,7 @@
"tsb-limit-reached-title": "感谢您的翻译",
"tsb-limit-reached-body": "您已达到新进译者的翻译限制。\n我们的团队将尽快核实和升级您的账户。\n那时您就可以无限制的参与翻译了。",
"tsb-no-requests-from-new-users": "没有新用户请求",
- "tsb-create-user-page": "创建基础用户页",
+ "tsb-create-user-page": "创建了基础用户页",
"log-name-translatorsandbox": "翻译沙盒日志",
"log-description-translatorsandbox": "翻译沙盒用户的操作日志",
"logentry-translatorsandbox-promoted": "$1将$3{{GENDER:$2|提拔}}为{{GENDER:$4|译者}}",
diff --git a/MLEB/Translate/i18n/sandbox/zh-hant.json b/MLEB/Translate/i18n/sandbox/zh-hant.json
index e72d84f5..9794677d 100644
--- a/MLEB/Translate/i18n/sandbox/zh-hant.json
+++ b/MLEB/Translate/i18n/sandbox/zh-hant.json
@@ -49,7 +49,7 @@
"tsb-limit-reached-title": "感謝您的翻譯",
"tsb-limit-reached-body": "您的翻譯已達到新進翻譯人員的限制。\n我們的團隊會儘快審核並升級您的帳號,\n屆時您便可不受限制的翻譯。",
"tsb-no-requests-from-new-users": "沒有來自新使用者的請求",
- "tsb-create-user-page": "建立基本使用者頁面",
+ "tsb-create-user-page": "已建立的基本使用者頁面",
"log-name-translatorsandbox": "翻譯沙盒日誌",
"log-description-translatorsandbox": "翻譯沙盒使用者的工作日誌",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|授權}} $3 成為 {{GENDER:$4|翻譯人員}}",
diff --git a/MLEB/Translate/i18n/search/ca.json b/MLEB/Translate/i18n/search/ca.json
index 71eb328a..dbf12da1 100644
--- a/MLEB/Translate/i18n/search/ca.json
+++ b/MLEB/Translate/i18n/search/ca.json
@@ -8,6 +8,7 @@
},
"searchtranslations": "Cerca a les traduccions",
"tux-sst-edit": "Edita la traducció",
+ "tux-sst-view-foreign": "Mostra a $1",
"tux-sst-search": "Cerca",
"tux-sst-search-ph": "Cerca a les traduccions",
"tux-sst-count": "{{PLURAL:$1|S'ha trobat $1 resultat|S'han trobat $1 resultats}}",
@@ -25,6 +26,7 @@
"tux-sst-outdated": "Traduccions desactualitzades de $1",
"tux-sst-ellipsis-untranslated": "Sense traducció",
"tux-sst-ellipsis-outdated": "Traduccions desactualitzades",
+ "tux-sst-link-all-match": "Requereix totes les paraules de cerca.",
"tux-sst-match-message": "Es mostren les traduccions que coincideixen amb qualssevol paraules de la cerca. $1",
"tux-sst-case-sensitive": "Distingeix entre majúscules i minúscules"
}
diff --git a/MLEB/Translate/i18n/search/diq.json b/MLEB/Translate/i18n/search/diq.json
index 3390c595..d5228db3 100644
--- a/MLEB/Translate/i18n/search/diq.json
+++ b/MLEB/Translate/i18n/search/diq.json
@@ -25,7 +25,7 @@
"tux-sst-default": "Çarnayışi",
"tux-sst-translated": "$1 ra açarnayış",
"tux-sst-untranslated": "$1 ra nêaçarneya",
- "tux-sst-outdated": "$1 ra vêrde açarnayışo",
+ "tux-sst-outdated": "$1 ra açarnayışê verêni",
"tux-sst-ellipsis-untranslated": "Açarnayış çıniyo",
"tux-sst-ellipsis-outdated": "Açarnayışo vêrde",
"tux-sst-link-all-match": "Qıseyê ke geyrenê cı, pêro lazımê.",
diff --git a/MLEB/Translate/i18n/search/eo.json b/MLEB/Translate/i18n/search/eo.json
index 6200e9f5..e3fa73b8 100644
--- a/MLEB/Translate/i18n/search/eo.json
+++ b/MLEB/Translate/i18n/search/eo.json
@@ -1,9 +1,27 @@
{
"@metadata": {
"authors": [
- "Fitoschido"
+ "Fitoschido",
+ "YvesNevelsteen"
]
},
+ "searchtranslations": "Serĉi tradukojn",
+ "tux-sst-edit": "Redakti tradukon",
+ "tux-sst-view-foreign": "Vidi je $1",
+ "tux-sst-search": "Serĉi",
+ "tux-sst-search-ph": "Serĉi tradukojn",
+ "tux-sst-count": "{{PLURAL:$1|Unu rezulto trovita|$1 rezultoj trovitaj}}",
+ "tux-sst-facet-language": "Lingvoj",
+ "tux-sst-facet-group": "Mesaĝogrupoj",
+ "tux-sst-nosolr-title": "Serĉado ne estas disponebla",
+ "tux-sst-nosolr-body": "Ĉi tiu vikio ne havas servon por serĉi tradukojn.",
+ "tux-sst-solr-offline-title": "Serĉado ne estas disponebla",
+ "tux-sst-solr-offline-body": "La serĉoservo portempe ne estas disponebla.",
"tux-sst-next": "Sekvaj →",
- "tux-sst-prev": "← Malsekvaj"
+ "tux-sst-prev": "← Antaŭaj",
+ "tux-sst-default": "Tradukoj",
+ "tux-sst-translated": "Tradukoj de $1",
+ "tux-sst-untranslated": "Neniu traduko de $1",
+ "tux-sst-ellipsis-untranslated": "Neniu traduko",
+ "tux-sst-case-sensitive": "Usklecodistinga"
}
diff --git a/MLEB/Translate/i18n/search/ja.json b/MLEB/Translate/i18n/search/ja.json
index 3221f9cd..881ccfac 100644
--- a/MLEB/Translate/i18n/search/ja.json
+++ b/MLEB/Translate/i18n/search/ja.json
@@ -8,6 +8,7 @@
},
"searchtranslations": "翻訳の検索",
"tux-sst-edit": "翻訳を編集",
+ "tux-sst-view-foreign": "$1 で閲覧",
"tux-sst-search": "検索",
"tux-sst-search-ph": "翻訳の検索",
"tux-sst-count": "{{PLURAL:$1|$1 件見つかりました}}",
diff --git a/MLEB/Translate/i18n/search/km.json b/MLEB/Translate/i18n/search/km.json
index fc9f402d..348daf2a 100644
--- a/MLEB/Translate/i18n/search/km.json
+++ b/MLEB/Translate/i18n/search/km.json
@@ -4,5 +4,27 @@
"គីមស៊្រុន"
]
},
- "tux-sst-facet-language": "ភាសា"
+ "searchtranslations": "ស្វែងរកការបកប្រែ",
+ "tux-sst-edit": "កែប្រែការបកប្រែ",
+ "tux-sst-view-foreign": "មើលលើ $1",
+ "tux-sst-search": "ស្វែងរក",
+ "tux-sst-search-ph": "ស្វែងរកការបកប្រែ",
+ "tux-sst-count": "រកឃើញលទ្ធផលចំនួន{{PLURAL:$1|មួយ|$1}}",
+ "tux-sst-facet-language": "ភាសា",
+ "tux-sst-facet-group": "ក្រុមសារ",
+ "tux-sst-nosolr-title": "មិនអាចស្វែងរកបានទេ",
+ "tux-sst-nosolr-body": "វិគីនេះគ្មានសេវាកម្មស្វែងរកការបកប្រែទេ។",
+ "tux-sst-solr-offline-title": "មិនអាចស្វែងរកបានទេ",
+ "tux-sst-solr-offline-body": "សេវាកម្មស្វែងរកមិនអាចប្រើប្រាស់បានទេនៅពេលនេះ។",
+ "tux-sst-next": "បន្ទាប់ ›",
+ "tux-sst-prev": "‹ មុន",
+ "tux-sst-default": "ការបកប្រែ",
+ "tux-sst-translated": "ការបកប្រែពី $1",
+ "tux-sst-untranslated": "គ្មានការបកប្រែពី $1 ទេ",
+ "tux-sst-outdated": "ការបកប្រែហួសសម័យពី $1",
+ "tux-sst-ellipsis-untranslated": "គ្មានការបកប្រែ",
+ "tux-sst-ellipsis-outdated": "ការបកប្រែហួសសម័យ",
+ "tux-sst-link-all-match": "ត្រូវការពាក្យស្វែងរកទាំងអស់។",
+ "tux-sst-match-message": "បង្ហាញការបកប្រែដែលត្រូវគ្នានឹងពាក្យស្វែករកណាមួយ។ $1",
+ "tux-sst-case-sensitive": "គិតអក្សរតូចឬធំ"
}
diff --git a/MLEB/Translate/i18n/search/ko.json b/MLEB/Translate/i18n/search/ko.json
index 91842930..a8b00056 100644
--- a/MLEB/Translate/i18n/search/ko.json
+++ b/MLEB/Translate/i18n/search/ko.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"아라",
- "SeoJeongHo"
+ "SeoJeongHo",
+ "Nuevo Paso"
]
},
"searchtranslations": "번역 검색",
@@ -20,9 +21,9 @@
"tux-sst-next": "다음 ›",
"tux-sst-prev": "‹ 이전",
"tux-sst-default": "번역",
- "tux-sst-translated": "$1에서의 번역",
+ "tux-sst-translated": "$1에서 번역",
"tux-sst-untranslated": "$1에서의 번역 없음",
- "tux-sst-outdated": "$1에서의 오래된 번역",
+ "tux-sst-outdated": "$1에서 옮긴 오래된 번역",
"tux-sst-ellipsis-untranslated": "번역 없음",
"tux-sst-ellipsis-outdated": "오래된 번역",
"tux-sst-link-all-match": "모든 검색 낱말이 필요합니다.",
diff --git a/MLEB/Translate/i18n/search/my.json b/MLEB/Translate/i18n/search/my.json
index ea9ef4d4..5aa89cb6 100644
--- a/MLEB/Translate/i18n/search/my.json
+++ b/MLEB/Translate/i18n/search/my.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Dr Lotus Black"
+ "Dr Lotus Black",
+ "Ninjastrikers"
]
},
"searchtranslations": "ဘာသာပြန်များ ရှာဖွေရန်",
@@ -26,5 +27,5 @@
"tux-sst-ellipsis-outdated": "ခေတ်နောက်ကျသော ဘာသာပြန်များ",
"tux-sst-link-all-match": "ရှာဖွေစကားလုံးများအားလုံး လိုအပ်သည်။",
"tux-sst-match-message": "ရှာဖွေစကားလုံးများ၏ ကိုက်ညီသော မည်သည့်ဘာသာပြန်များကိုမဆို ပြသနေသည်။ $1",
- "tux-sst-case-sensitive": "စားလုံးအကြီးအသေး အတိမ်းစောင်းမခံ"
+ "tux-sst-case-sensitive": "စာလုံးအကြီးအသေး အတိမ်းစောင်းမခံ"
}
diff --git a/MLEB/Translate/i18n/search/pt-br.json b/MLEB/Translate/i18n/search/pt-br.json
index abe6da57..91794311 100644
--- a/MLEB/Translate/i18n/search/pt-br.json
+++ b/MLEB/Translate/i18n/search/pt-br.json
@@ -2,14 +2,15 @@
"@metadata": {
"authors": [
"Luckas",
- "Felipe L. Ewald"
+ "Felipe L. Ewald",
+ "TheEduGobi"
]
},
- "searchtranslations": "Pesquisa traduções",
+ "searchtranslations": "Pesquisar traduções",
"tux-sst-edit": "Editar tradução",
"tux-sst-view-foreign": "Ver em $1",
"tux-sst-search": "Pesquisar",
- "tux-sst-search-ph": "Pesquisa traduções",
+ "tux-sst-search-ph": "Pesquisar traduções",
"tux-sst-count": "{{PLURAL:$1|Um resultado encontrado|$1 resultados encontrados}}",
"tux-sst-facet-language": "Idiomas",
"tux-sst-facet-group": "Grupos de mensagens",
@@ -27,5 +28,5 @@
"tux-sst-ellipsis-outdated": "Traduções desatualizadas",
"tux-sst-link-all-match": "Exigir todas as palavras de pesquisa.",
"tux-sst-match-message": "Mostrando traduções que correspondem a qualquer das palavras da pesquisa. $1",
- "tux-sst-case-sensitive": "Maiúsculas e Minúsculas"
+ "tux-sst-case-sensitive": "Maiúsculas e minúsculas"
}
diff --git a/MLEB/Translate/i18n/search/sr-ec.json b/MLEB/Translate/i18n/search/sr-ec.json
index 1377332b..dfe56baa 100644
--- a/MLEB/Translate/i18n/search/sr-ec.json
+++ b/MLEB/Translate/i18n/search/sr-ec.json
@@ -4,26 +4,31 @@
"Милан Јелисавчић",
"Milicevic01",
"Сербијана",
- "Obsuser"
+ "Obsuser",
+ "BadDog"
]
},
"searchtranslations": "Претрага превода",
- "tux-sst-edit": "Уреди превод",
+ "tux-sst-edit": "Измени превод",
+ "tux-sst-view-foreign": "Прикажи на пројекту $1",
"tux-sst-search": "Претражи",
- "tux-sst-search-ph": "Претрага превода",
- "tux-sst-count": "{{PLURAL:$1|Један резултат пронађен|$1 резултата пронађена|$1 резултата пронађено}}",
+ "tux-sst-search-ph": "Претражите преводе",
+ "tux-sst-count": "{{PLURAL:$1|Пронађен је један резултат|Пронађена су $1 резултата|Пронађено је $1 резултата|0=Резултати нису пронађени}}",
"tux-sst-facet-language": "Језици",
"tux-sst-facet-group": "Групе порука",
- "tux-sst-nosolr-title": "Претрага недоступна",
- "tux-sst-nosolr-body": "Овај вики нема сервис за претрагу превода.",
- "tux-sst-solr-offline-title": "Претрага недоступна",
- "tux-sst-solr-offline-body": "Сервис за претрагу је привремено недоступан.",
- "tux-sst-next": "Напред ›",
- "tux-sst-prev": "‹ Назад",
+ "tux-sst-nosolr-title": "Претрага није доступна",
+ "tux-sst-nosolr-body": "Овај вики нема услугу за претрагу превода.",
+ "tux-sst-solr-offline-title": "Претрага није доступна",
+ "tux-sst-solr-offline-body": "Услуга за претрагу је привремено недоступна.",
+ "tux-sst-next": "Следеће ›",
+ "tux-sst-prev": "‹ Претходно",
"tux-sst-default": "Преводи",
- "tux-sst-translated": "Преводи за $1",
- "tux-sst-untranslated": "Непреведено за $1",
- "tux-sst-link-all-match": "Ограничи на све речи претраге.",
- "tux-sst-match-message": "Приказани су преводи у којима је пронађена било која од речи претраге. $1",
- "tux-sst-case-sensitive": "Уважавање верзала"
+ "tux-sst-translated": "Преводи са $1",
+ "tux-sst-untranslated": "Нема превода са $1",
+ "tux-sst-outdated": "Застарели преводи са $1",
+ "tux-sst-ellipsis-untranslated": "Нема превода",
+ "tux-sst-ellipsis-outdated": "Застарели преводи",
+ "tux-sst-link-all-match": "Ограничи на све речи из претраге.",
+ "tux-sst-match-message": "Приказани су преводи који одговарају било којој речи из претраге. $1",
+ "tux-sst-case-sensitive": "Разликуј велика и мала слова"
}
diff --git a/MLEB/Translate/i18n/search/sr-el.json b/MLEB/Translate/i18n/search/sr-el.json
index d4e63961..e0e56ede 100644
--- a/MLEB/Translate/i18n/search/sr-el.json
+++ b/MLEB/Translate/i18n/search/sr-el.json
@@ -4,6 +4,23 @@
"Obsuser"
]
},
+ "searchtranslations": "Pretraga prevoda",
+ "tux-sst-edit": "Uredi prevod",
+ "tux-sst-search": "Pretraži",
+ "tux-sst-search-ph": "Pretraga prevoda",
"tux-sst-count": "{{PLURAL:$1|Jedan rezultat pronađen|$1 rezultata pronađena|$1 rezultata pronađeno}}",
+ "tux-sst-facet-language": "Jezici",
+ "tux-sst-facet-group": "Grupe poruka",
+ "tux-sst-nosolr-title": "Pretraga nedostupna",
+ "tux-sst-nosolr-body": "Ovaj viki nema servis za pretragu prevoda.",
+ "tux-sst-solr-offline-title": "Pretraga nedostupna",
+ "tux-sst-solr-offline-body": "Servis za pretragu je privremeno nedostupan.",
+ "tux-sst-next": "Napred ›",
+ "tux-sst-prev": "‹ Nazad",
+ "tux-sst-default": "Prevodi",
+ "tux-sst-translated": "Prevodi za $1",
+ "tux-sst-untranslated": "Neprevedeno za $1",
+ "tux-sst-link-all-match": "Ograniči na sve reči pretrage.",
+ "tux-sst-match-message": "Prikazani su prevodi u kojima je pronađena bilo koja od reči pretrage. $1",
"tux-sst-case-sensitive": "Uvažavanje verzala"
}
diff --git a/MLEB/Translate/insertables/CombinedInsertablesSuggester.php b/MLEB/Translate/insertables/CombinedInsertablesSuggester.php
index 7a99dda4..5f3c468a 100644
--- a/MLEB/Translate/insertables/CombinedInsertablesSuggester.php
+++ b/MLEB/Translate/insertables/CombinedInsertablesSuggester.php
@@ -4,11 +4,14 @@
* A class to combine multiple insertables suggesters.
*/
class CombinedInsertablesSuggester implements InsertablesSuggester {
+
+ /**
+ * @var InsertablesSuggester[]
+ */
protected $suggesters = [];
/**
- * CombinedInsertablesSuggester constructor.
- * @param array $suggesters Array of InsertablesSuggester objects to combine.
+ * @param InsertablesSuggester[] $suggesters Array of InsertablesSuggester objects to combine.
*/
public function __construct( $suggesters = [] ) {
$this->suggesters = $suggesters;
diff --git a/MLEB/Translate/messagegroups/AggregateMessageGroup.php b/MLEB/Translate/messagegroups/AggregateMessageGroup.php
index 8dc9b4c5..040521d5 100644
--- a/MLEB/Translate/messagegroups/AggregateMessageGroup.php
+++ b/MLEB/Translate/messagegroups/AggregateMessageGroup.php
@@ -83,7 +83,7 @@ class AggregateMessageGroup extends MessageGroupBase {
continue;
}
- if ( $group instanceof AggregateMessageGroup ) {
+ if ( $group instanceof self ) {
$messages += $this->loadMessagesFromCache( $group->getGroups() );
continue;
}
diff --git a/MLEB/Translate/messagegroups/FileBasedMessageGroup.php b/MLEB/Translate/messagegroups/FileBasedMessageGroup.php
index 4bf2bcc5..627a7f89 100644
--- a/MLEB/Translate/messagegroups/FileBasedMessageGroup.php
+++ b/MLEB/Translate/messagegroups/FileBasedMessageGroup.php
@@ -23,12 +23,12 @@ class FileBasedMessageGroup extends MessageGroupBase implements MetaYamlSchemaEx
* Constructs a FileBasedMessageGroup from any normal message group.
* Useful for doing special Gettext exports from any group.
* @param MessageGroup $group
- * @return FileBasedMessageGroup
+ * @return self
*/
public static function newFromMessageGroup( $group ) {
$conf = [
'BASIC' => [
- 'class' => 'FileBasedMessageGroup',
+ 'class' => self::class,
'id' => $group->getId(),
'label' => $group->getLabel(),
'namespace' => $group->getNamespace(),
diff --git a/MLEB/Translate/messagegroups/RecentMessageGroup.php b/MLEB/Translate/messagegroups/RecentMessageGroup.php
index 325501e2..c74710b8 100644
--- a/MLEB/Translate/messagegroups/RecentMessageGroup.php
+++ b/MLEB/Translate/messagegroups/RecentMessageGroup.php
@@ -93,7 +93,7 @@ class RecentMessageGroup extends WikiMessageGroup {
$db = wfGetDB( DB_REPLICA );
- if ( is_callable( [ 'RecentChange', 'getQueryInfo' ] ) ) {
+ if ( is_callable( RecentChange::class, 'getQueryInfo' ) ) {
$rcQuery = RecentChange::getQueryInfo();
$tables = $rcQuery['tables'];
$joins = $rcQuery['joins'];
diff --git a/MLEB/Translate/package.json b/MLEB/Translate/package.json
index bb287beb..be38268f 100644
--- a/MLEB/Translate/package.json
+++ b/MLEB/Translate/package.json
@@ -4,13 +4,13 @@
"test": "grunt test"
},
"devDependencies": {
- "eslint-config-wikimedia": "0.7.2",
+ "eslint-config-wikimedia": "0.8.1",
+ "eslint-plugin-qunit": "3.3.1",
"grunt": "1.0.3",
"grunt-banana-checker": "0.6.0",
"grunt-eslint": "21.0.0",
"grunt-jsonlint": "1.1.0",
- "grunt-stylelint": "0.10.0",
- "stylelint": "9.5.0",
- "stylelint-config-wikimedia": "0.4.3"
+ "grunt-stylelint": "0.10.1",
+ "stylelint-config-wikimedia": "0.5.0"
}
}
diff --git a/MLEB/Translate/resources/css/ext.translate.editor.css b/MLEB/Translate/resources/css/ext.translate.editor.css
index 868a6129..f981bf44 100644
--- a/MLEB/Translate/resources/css/ext.translate.editor.css
+++ b/MLEB/Translate/resources/css/ext.translate.editor.css
@@ -456,4 +456,5 @@
border-radius: 100%;
z-index: 110;
background-color: #fff;
+ padding: 3px;
}
diff --git a/MLEB/Translate/resources/css/ext.translate.groupselector.less b/MLEB/Translate/resources/css/ext.translate.groupselector.less
index f1d6764e..025dfa85 100644
--- a/MLEB/Translate/resources/css/ext.translate.groupselector.less
+++ b/MLEB/Translate/resources/css/ext.translate.groupselector.less
@@ -57,6 +57,7 @@
height: 28px;
border: 1px solid #c9c9c9;
padding: 2px;
+ margin: 0;
}
.tux-groupselector__filter__search__icon {
diff --git a/MLEB/Translate/resources/css/ext.translate.loader.css b/MLEB/Translate/resources/css/ext.translate.loader.css
index 2c6c5619..07d6dc18 100644
--- a/MLEB/Translate/resources/css/ext.translate.loader.css
+++ b/MLEB/Translate/resources/css/ext.translate.loader.css
@@ -4,6 +4,7 @@
from {
-webkit-transform: rotate( 0deg );
}
+
to {
-webkit-transform: rotate( 360deg );
}
@@ -13,6 +14,7 @@
from {
transform: rotate( 0deg );
}
+
to {
transform: rotate( 360deg );
}
diff --git a/MLEB/Translate/resources/css/ext.translate.messagetable.less b/MLEB/Translate/resources/css/ext.translate.messagetable.less
index 2a2e10a7..d01b6b10 100644
--- a/MLEB/Translate/resources/css/ext.translate.messagetable.less
+++ b/MLEB/Translate/resources/css/ext.translate.messagetable.less
@@ -243,7 +243,7 @@
.background-image( '../images/view-proofread-hi.svg' );
}
-.tux-message-filter-result {
+.tux-message-filter-result {
color: #222;
display: flex;
justify-content: space-between;
diff --git a/MLEB/Translate/resources/css/ext.translate.navitoggle.css b/MLEB/Translate/resources/css/ext.translate.navitoggle.css
index 4ac921a7..afe45f4b 100644
--- a/MLEB/Translate/resources/css/ext.translate.navitoggle.css
+++ b/MLEB/Translate/resources/css/ext.translate.navitoggle.css
@@ -5,6 +5,9 @@
*/
.tux-navitoggle {
+ background: no-repeat scroll right center transparent;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/expand-rtl.svg );
height: 40px;
width: 20px;
position: absolute;
@@ -13,16 +16,11 @@
cursor: pointer;
}
-.tux-navitoggle {
- background: no-repeat scroll right center transparent;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( ../images/expand-rtl.svg );
-}
-
.tux-navi-collapsed .tux-navitoggle {
background: no-repeat scroll right center transparent;
/* @embed */
background-image: linear-gradient( transparent, transparent ), url( ../images/expand-ltr.svg );
+ left: 40px !important;
}
.tux-navi-collapsed #mw-panel {
@@ -37,10 +35,6 @@
left: 0;
}
-.tux-navi-collapsed .tux-navitoggle {
- left: 40px !important;
-}
-
.tux-navi-minilogo {
display: none;
position: absolute;
diff --git a/MLEB/Translate/resources/css/ext.translate.quickedit.css b/MLEB/Translate/resources/css/ext.translate.quickedit.css
index c64d03fa..37b9c4d3 100644
--- a/MLEB/Translate/resources/css/ext.translate.quickedit.css
+++ b/MLEB/Translate/resources/css/ext.translate.quickedit.css
@@ -24,14 +24,11 @@
}
.mw-translate-legend {
- font-weight: bold;
-}
-
-.mw-translate-legend {
border-left: 1px solid #000;
float: right;
margin-left: 1em;
padding-left: 5pt;
+ font-weight: bold;
}
/* Align the adder according to the target language */
diff --git a/MLEB/Translate/resources/css/ext.translate.special.languagestats.css b/MLEB/Translate/resources/css/ext.translate.special.languagestats.css
deleted file mode 100644
index 0e9a7bb0..00000000
--- a/MLEB/Translate/resources/css/ext.translate.special.languagestats.css
+++ /dev/null
@@ -1,21 +0,0 @@
-.statstable tr:hover td {
- background: #fff;
-}
-
-.groupexpander-all {
- text-align: right;
-}
-
-.groupexpander {
- float: right;
-}
-
-.statstable .expanded,
-.statstable .expanded a {
- cursor: n-resize;
-}
-
-.statstable .collapsed,
-.statstable .collapsed a {
- cursor: s-resize;
-}
diff --git a/MLEB/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css b/MLEB/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css
index bd463a29..4f5aa752 100644
--- a/MLEB/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css
+++ b/MLEB/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css
@@ -130,6 +130,7 @@
.tsb-details-no-translations {
color: #72777d;
}
+
.signup-comment-label {
color: #e85355;
font-size: 14px;
diff --git a/MLEB/Translate/resources/css/ext.translate.special.pagemigration.css b/MLEB/Translate/resources/css/ext.translate.special.pagemigration.css
index 09c313b0..06c061cf 100644
--- a/MLEB/Translate/resources/css/ext.translate.special.pagemigration.css
+++ b/MLEB/Translate/resources/css/ext.translate.special.pagemigration.css
@@ -38,7 +38,6 @@
cursor: pointer;
display: inline-block;
margin-left: 20px;
-
background-position: center;
background-repeat: no-repeat;
background-size: 25px 25px;
diff --git a/MLEB/Translate/resources/css/ext.translate.statstable.less b/MLEB/Translate/resources/css/ext.translate.statstable.less
new file mode 100644
index 00000000..a33400f1
--- /dev/null
+++ b/MLEB/Translate/resources/css/ext.translate.statstable.less
@@ -0,0 +1,63 @@
+.groupexpander-all {
+ text-align: right;
+}
+
+.groupexpander {
+ float: right;
+}
+
+.statstable {
+ border-collapse: collapse;
+ border-style: hidden;
+ box-shadow: 0 1px 1px rgba( 0, 0, 0, 0.15 );
+
+ .expanded,
+ .expanded a {
+ cursor: n-resize;
+ }
+
+ .collapsed,
+ .collapsed a {
+ cursor: s-resize;
+ }
+
+ /* Small zebra rows effect */
+ > * > tr {
+ &.tux-statstable-even > td {
+ background-color: #f8f9fa;
+ }
+
+ &:hover > td {
+ // Work-around a Firefox issue:
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=688556
+ background-clip: padding-box;
+ filter: brightness( 0.95 );
+ }
+
+ > th {
+ background-color: #eaecf0;
+ border: 1px solid #fff;
+ padding: 0.5em;
+ font-weight: normal;
+ letter-spacing: 1px;
+ }
+
+ > td {
+ background-color: #fff;
+ padding: 0.5em;
+ border-left: 1px solid #f8f9fa;
+ border-right: 1px solid #f8f9fa;
+ }
+
+ /* Align numbers to the right */
+ > td:nth-child( n+2 ):nth-child( -n+6 ) {
+ text-align: right;
+ padding-right: 1em;
+ }
+
+ /* De-emphasize 0% oudated */
+ > td:nth-child( 6 )[ data-sort-value='0.00000' ] {
+ color: #54595d;
+ }
+ }
+}
diff --git a/MLEB/Translate/resources/js/ext.translate.base.js b/MLEB/Translate/resources/js/ext.translate.base.js
index d11d47b1..4437556e 100644
--- a/MLEB/Translate/resources/js/ext.translate.base.js
+++ b/MLEB/Translate/resources/js/ext.translate.base.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
mw.translate = mw.translate || {};
@@ -188,4 +188,4 @@
$( function () {
translateOnBeforeUnloadRegister();
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.dropdownmenu.js b/MLEB/Translate/resources/js/ext.translate.dropdownmenu.js
index 34db251a..a3333801 100644
--- a/MLEB/Translate/resources/js/ext.translate.dropdownmenu.js
+++ b/MLEB/Translate/resources/js/ext.translate.dropdownmenu.js
@@ -1,4 +1,4 @@
-( function ( $ ) {
+( function () {
'use strict';
$( function () {
@@ -9,4 +9,4 @@
}
} );
} );
-}( jQuery ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.editor.helpers.js b/MLEB/Translate/resources/js/ext.translate.editor.helpers.js
index 0d507a16..2b1bf325 100644
--- a/MLEB/Translate/resources/js/ext.translate.editor.helpers.js
+++ b/MLEB/Translate/resources/js/ext.translate.editor.helpers.js
@@ -1,7 +1,7 @@
/*!
* Translate editor additional helper functionality
*/
-( function ( $, mw ) {
+( function () {
'use strict';
var translateEditorHelpers = {
@@ -539,4 +539,4 @@
mw.translate.editor = mw.translate.editor || {};
$.extend( mw.translate.editor, translateEditorHelpers );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.editor.js b/MLEB/Translate/resources/js/ext.translate.editor.js
index 6d7e56df..27b888c9 100644
--- a/MLEB/Translate/resources/js/ext.translate.editor.js
+++ b/MLEB/Translate/resources/js/ext.translate.editor.js
@@ -1,6 +1,6 @@
/* global autosize */
-( function ( $, mw, autosize ) {
+( function () {
'use strict';
/**
@@ -1319,4 +1319,4 @@
};
}() );
}
-}( jQuery, mediaWiki, autosize ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.editor.shortcuts.js b/MLEB/Translate/resources/js/ext.translate.editor.shortcuts.js
index bb1a49b8..95dc9a47 100644
--- a/MLEB/Translate/resources/js/ext.translate.editor.shortcuts.js
+++ b/MLEB/Translate/resources/js/ext.translate.editor.shortcuts.js
@@ -1,9 +1,8 @@
/*!
* Translate editor shortcuts
*/
-( function ( $, mw ) {
+( function () {
'use strict';
-
var translateEditorShortcuts = {
showShortcuts: function () {
var editorOffset, minTop, maxTop, maxLeft, middle, rtl;
@@ -15,11 +14,7 @@
minTop = editorOffset.top;
maxTop = minTop + this.$editor.outerHeight();
middle = minTop + ( maxTop - minTop ) / 2;
-
- maxLeft = editorOffset.left;
- if ( !rtl ) {
- maxLeft += this.$editor.outerWidth();
- }
+ maxLeft = rtl ? editorOffset.left : editorOffset.left + this.$editor.outerWidth();
this.hideShortcuts();
@@ -28,21 +23,18 @@
.text( '↑' )
.addClass( 'shortcut-popup' )
.appendTo( 'body' )
- .offset( { top: middle - 10, left: maxLeft - 10 } );
+ .offset( { top: middle - 15, left: maxLeft } )
+ .css( 'transform', 'translate( -50%, 0 )' );
$( '<div>' )
.text( '↓' )
.addClass( 'shortcut-popup' )
.appendTo( 'body' )
- .offset( { top: middle + 10, left: maxLeft - 10 } );
+ .offset( { top: middle + 15, left: maxLeft } )
+ .css( 'transform', 'translate( -50%, 0 )' );
this.$editor.find( '.shortcut-activated:visible' ).each( function ( index ) {
- var $this = $( this ),
- offset = $this.offset();
-
- if ( rtl ) {
- offset.left += $this.outerWidth();
- }
+ var offset = getStartCornerOffsetOf( $( this ), rtl );
// Let's not have numbers appear outside the editor over other content
if ( offset.top > maxTop || offset.top < minTop ) {
@@ -53,7 +45,8 @@
.text( index + 1 )
.addClass( 'shortcut-popup' )
.appendTo( 'body' )
- .offset( { top: offset.top - 10, left: offset.left - 10 } );
+ .offset( offset )
+ .css( 'transform', 'translate( -50%, -50% )' );
} );
},
@@ -62,7 +55,17 @@
}
};
+ function getStartCornerOffsetOf( $element, rtl ) {
+ var offset = $element.offset();
+
+ if ( rtl ) {
+ offset.left += $element.outerWidth();
+ }
+
+ return offset;
+ }
+
mw.translate.editor = mw.translate.editor || {};
$.extend( mw.translate.editor, translateEditorShortcuts );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.groupselector.js b/MLEB/Translate/resources/js/ext.translate.groupselector.js
index 1bfd27b2..eda0a43b 100644
--- a/MLEB/Translate/resources/js/ext.translate.groupselector.js
+++ b/MLEB/Translate/resources/js/ext.translate.groupselector.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
var groupsLoader, delay;
@@ -630,4 +630,4 @@
timer = setTimeout( callback, milliseconds );
};
}() );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.hooks.js b/MLEB/Translate/resources/js/ext.translate.hooks.js
index 855e735c..c976bfb2 100644
--- a/MLEB/Translate/resources/js/ext.translate.hooks.js
+++ b/MLEB/Translate/resources/js/ext.translate.hooks.js
@@ -7,7 +7,7 @@
* @since 2012-08-22
*/
-( function ( mw ) {
+( function () {
'use strict';
var registry = {};
@@ -35,4 +35,4 @@
}
}
};
-}( mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.messagetable.js b/MLEB/Translate/resources/js/ext.translate.messagetable.js
index 09b3824d..f2ac9a0f 100644
--- a/MLEB/Translate/resources/js/ext.translate.messagetable.js
+++ b/MLEB/Translate/resources/js/ext.translate.messagetable.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
var itemsClass = {
@@ -151,6 +151,8 @@
$messageWrapper = $( '<div>' ).addClass( 'row tux-message' ),
statusMsg = '';
+ message.proofreadable = false;
+
if ( message.tags.length &&
message.tags.indexOf( 'optional' ) >= 0 &&
status === 'untranslated'
@@ -243,7 +245,8 @@
addProofread: function ( message ) {
var $message, $icon;
- $message = $( '<div>' ).addClass( 'row tux-message-proofread' );
+ $message = $( '<div>' )
+ .addClass( 'row tux-message tux-message-proofread' );
this.$container.append( $message );
$message.proofread( {
@@ -876,4 +879,4 @@
return elementTop - viewportBottom < 200;
}
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.multiselectautocomplete.js b/MLEB/Translate/resources/js/ext.translate.multiselectautocomplete.js
index f77de7f9..6d6a8201 100644
--- a/MLEB/Translate/resources/js/ext.translate.multiselectautocomplete.js
+++ b/MLEB/Translate/resources/js/ext.translate.multiselectautocomplete.js
@@ -6,7 +6,7 @@
* The input field is created in PHP code.
* Credits: https://jqueryui.com/autocomplete/#multiple
*/
-jQuery( function ( $ ) {
+$( function () {
'use strict';
/* eslint-disable no-underscore-dangle */
diff --git a/MLEB/Translate/resources/js/ext.translate.navitoggle.js b/MLEB/Translate/resources/js/ext.translate.navitoggle.js
index 0cf448ae..dadaee7c 100644
--- a/MLEB/Translate/resources/js/ext.translate.navitoggle.js
+++ b/MLEB/Translate/resources/js/ext.translate.navitoggle.js
@@ -3,7 +3,7 @@
* @author Niklas Laxström
* @license GPL-2.0-or-later
*/
-( function ( mw, $ ) {
+( function () {
'use strict';
var $body = $( 'body' );
@@ -38,4 +38,4 @@
$body.append( $miniLogo, $toggle );
} );
-}( mediaWiki, jQuery ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.pagemode.js b/MLEB/Translate/resources/js/ext.translate.pagemode.js
index 84f9799c..ef494278 100644
--- a/MLEB/Translate/resources/js/ext.translate.pagemode.js
+++ b/MLEB/Translate/resources/js/ext.translate.pagemode.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
/**
* Page mode plugin
@@ -37,6 +37,8 @@
init: function () {
var pagemode = this;
+ this.message.proofreadable = false;
+
this.render();
pagemode.$message.translateeditor( {
@@ -131,4 +133,4 @@
};
$.fn.pagemode.Constructor = PageMode;
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.pagetranslation.uls.js b/MLEB/Translate/resources/js/ext.translate.pagetranslation.uls.js
index 993e6497..00c67e9e 100644
--- a/MLEB/Translate/resources/js/ext.translate.pagetranslation.uls.js
+++ b/MLEB/Translate/resources/js/ext.translate.pagetranslation.uls.js
@@ -1,4 +1,4 @@
-( function ( mw ) {
+( function () {
'use strict';
mw.uls.changeLanguage = function ( language ) {
@@ -12,4 +12,4 @@
location.href = mw.util.getUrl( page, { setlang: language } );
};
-}( mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.parsers.js b/MLEB/Translate/resources/js/ext.translate.parsers.js
index 2b135741..afcf0c8e 100644
--- a/MLEB/Translate/resources/js/ext.translate.parsers.js
+++ b/MLEB/Translate/resources/js/ext.translate.parsers.js
@@ -6,7 +6,7 @@
* @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
mw.translate = mw.translate || {};
@@ -78,4 +78,4 @@
}
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.proofread.js b/MLEB/Translate/resources/js/ext.translate.proofread.js
index 9c5f00fc..c4ee5b08 100644
--- a/MLEB/Translate/resources/js/ext.translate.proofread.js
+++ b/MLEB/Translate/resources/js/ext.translate.proofread.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
/**
@@ -279,4 +279,4 @@
$.fn.proofread.Constructor = Proofread;
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.recentgroups.js b/MLEB/Translate/resources/js/ext.translate.recentgroups.js
index 678916a2..360739d1 100644
--- a/MLEB/Translate/resources/js/ext.translate.recentgroups.js
+++ b/MLEB/Translate/resources/js/ext.translate.recentgroups.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
mw.translate = mw.translate || {};
@@ -28,4 +28,4 @@
mw.storage.set( 'translate-recentgroups', JSON.stringify( items ) );
}
};
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.aggregategroups.js b/MLEB/Translate/resources/js/ext.translate.special.aggregategroups.js
index 547fe264..11a34a12 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.aggregategroups.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.aggregategroups.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
function getApiParams( $target ) {
@@ -361,4 +361,4 @@
} );
} );
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.importtranslations.js b/MLEB/Translate/resources/js/ext.translate.special.importtranslations.js
index 2dc070f4..1ba24709 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.importtranslations.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.importtranslations.js
@@ -1,4 +1,4 @@
-( function ( $ ) {
+( function () {
'use strict';
function buttoner( $input ) {
@@ -17,4 +17,4 @@
buttoner( $input );
} );
-}( jQuery ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.languagestats.js b/MLEB/Translate/resources/js/ext.translate.special.languagestats.js
index 73b37c77..979242d8 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.languagestats.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.languagestats.js
@@ -5,9 +5,18 @@
* @license GPL-2.0-or-later, CC-BY-SA-3.0
*/
-( function ( mw, $ ) {
+( function () {
'use strict';
+ /**
+ * Add css class to every other visible row.
+ * It's not possible to do zebra colors with CSS only if there are hidden rows.
+ */
+ function doZebra() {
+ $( '.statstable tr:visible:odd' ).toggleClass( 'tux-statstable-even', false );
+ $( '.statstable tr:visible:even' ).toggleClass( 'tux-statstable-even', true );
+ }
+
$( function () {
var $allChildRows, $allTogglesCache, $toggleAllButton,
$translateTable = $( '.statstable' ),
@@ -38,11 +47,11 @@
var $el = $( this );
// Switch the state and toggle the rows
if ( $el.hasClass( 'collapsed' ) ) {
- $children.fadeIn().trigger( 'show' );
+ $children.fadeIn( { start: doZebra } ).trigger( 'show' );
$el.removeClass( 'collapsed' ).addClass( 'expanded' );
$el.find( '> a' ).text( mw.msg( 'translate-langstats-collapse' ) );
} else {
- $children.fadeOut().trigger( 'hide' );
+ $children.fadeOut( { done: doZebra } ).trigger( 'hide' );
$el.addClass( 'collapsed' ).removeClass( 'expanded' );
$el.find( '> a' ).text( mw.msg( 'translate-langstats-expand' ) );
}
@@ -88,49 +97,18 @@
$allToggles.find( '> a' ).text( mw.msg( 'translate-langstats-expand' ) );
}
+ doZebra();
e.preventDefault();
} );
// Initially hide them
$allChildRows.hide();
+ doZebra();
// Add the toggle-all button above the table
$( '<p class="groupexpander-all"></p>' ).append( $toggleAllButton ).insertBefore( $translateTable );
} );
- // When hovering a row, adjust brightness of the last two custom-colored cells as well
- // See also translate.langstats.css for the highlighting for the other normal rows
- mw.loader.using( 'jquery.colorUtil', function () {
- $( function () {
- // It is possible that the first event we get is hover-out, in
- // which case the colors will get stuck wrong. Ignore it.
- var eventHandlers, seenHoverIn = false;
-
- eventHandlers = {
- mouseenter: function () {
- seenHoverIn = true;
- $( this ).children( '.hover-color' )
- // 30% more brightness
- .css( 'background-color', function ( i, val ) {
- return $.colorUtil.getColorBrightness( val, +0.3 );
- } );
- },
- mouseleave: function () {
- if ( !seenHoverIn ) {
- return;
- }
- $( this ).children( '.hover-color' )
- // 30% less brightness
- .css( 'background-color', function ( i, val ) {
- return $.colorUtil.getColorBrightness( val, -0.3 );
- } );
- }
- };
-
- $( '.statstable' ).on( eventHandlers, 'tr' );
- } );
- } );
-
$( function () {
var index,
sort = {},
@@ -150,7 +128,9 @@
var index = $table.find( 'th' ).index( $( this ) ),
dir = $( this ).hasClass( 'headerSortUp' ) ? 'asc' : 'desc';
window.location.hash = 'sortable:' + index + '=' + dir;
+
+ doZebra();
} );
} );
} );
-}( mediaWiki, jQuery ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js b/MLEB/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js
index 5aef9ac7..36393bbd 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js
@@ -7,7 +7,7 @@
* @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
var delay;
@@ -752,4 +752,4 @@
updateRequestCount();
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.operatorsuggest.js b/MLEB/Translate/resources/js/ext.translate.special.operatorsuggest.js
index 362a259e..1115824f 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.operatorsuggest.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.operatorsuggest.js
@@ -1,7 +1,7 @@
/*
* Autocomplete search operators.
*/
-( function ( mw, $ ) {
+( function () {
'use strict';
function autocompleteOperators( request, response ) {
@@ -36,4 +36,4 @@
event.preventDefault();
}
} );
-}( mediaWiki, jQuery ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.pagemigration.js b/MLEB/Translate/resources/js/ext.translate.special.pagemigration.js
index 89735436..3713ac56 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.pagemigration.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.pagemigration.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
var noOfSourceUnits, noOfTranslationUnits,
pageName = '',
@@ -520,4 +520,4 @@
alignHeaders: alignHeaders
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.pagepreparation.js b/MLEB/Translate/resources/js/ext.translate.special.pagepreparation.js
index 8ad8a9ec..03c4385d 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.pagepreparation.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.pagepreparation.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
/**
@@ -423,4 +423,4 @@
} );
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.pagetranslation.js b/MLEB/Translate/resources/js/ext.translate.special.pagetranslation.js
index 4897189f..67610f52 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.pagetranslation.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.pagetranslation.js
@@ -4,7 +4,7 @@
* @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
$( function () {
@@ -23,4 +23,4 @@
e.preventDefault();
} );
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.searchtranslations.js b/MLEB/Translate/resources/js/ext.translate.special.searchtranslations.js
index 66bfa65c..266d37c4 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.searchtranslations.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.searchtranslations.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
var resultGroups;
@@ -394,4 +394,4 @@
)
);
}
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.translate.js b/MLEB/Translate/resources/js/ext.translate.special.translate.js
index d5b43bc3..98694dbb 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.translate.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.translate.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
var state = {
@@ -382,4 +382,4 @@
} );
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.translationstash.js b/MLEB/Translate/resources/js/ext.translate.special.translationstash.js
index cfc7ef05..a6a94120 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.translationstash.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.translationstash.js
@@ -6,7 +6,7 @@
* @since 2013.10
*/
-( function ( $, mw ) {
+( function () {
'use strict';
var userTranslations = {},
@@ -247,4 +247,4 @@
loadMessages();
} );
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.special.translationstats.js b/MLEB/Translate/resources/js/ext.translate.special.translationstats.js
index d935619b..701b5fba 100644
--- a/MLEB/Translate/resources/js/ext.translate.special.translationstats.js
+++ b/MLEB/Translate/resources/js/ext.translate.special.translationstats.js
@@ -9,7 +9,7 @@
* @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
$( function () {
@@ -58,4 +58,4 @@
} );
}
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.statsbar.js b/MLEB/Translate/resources/js/ext.translate.statsbar.js
index ea193209..4ffc4412 100644
--- a/MLEB/Translate/resources/js/ext.translate.statsbar.js
+++ b/MLEB/Translate/resources/js/ext.translate.statsbar.js
@@ -15,7 +15,7 @@
* } );
* The status bar will be rendered to the newly created div. Or use any container.
*/
-( function ( mw, $ ) {
+( function () {
'use strict';
var LanguageStatsBar = function ( container, options ) {
@@ -184,4 +184,4 @@
mw.translate = mw.translate || {};
-}( mediaWiki, jQuery ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.storage.js b/MLEB/Translate/resources/js/ext.translate.storage.js
index c17e8e26..85e9cb9e 100644
--- a/MLEB/Translate/resources/js/ext.translate.storage.js
+++ b/MLEB/Translate/resources/js/ext.translate.storage.js
@@ -1,4 +1,4 @@
-( function ( mw ) {
+( function () {
'use strict';
/**
@@ -39,4 +39,4 @@
mw.translate = mw.translate || {};
mw.translate.TranslationApiStorage = TranslationApiStorage;
-}( mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.translationstashstorage.js b/MLEB/Translate/resources/js/ext.translate.translationstashstorage.js
index 39eb506f..17350cf2 100644
--- a/MLEB/Translate/resources/js/ext.translate.translationstashstorage.js
+++ b/MLEB/Translate/resources/js/ext.translate.translationstashstorage.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
/**
@@ -54,4 +54,4 @@
mw.translate = mw.translate || {};
mw.translate.TranslationStashStorage = TranslationStashStorage;
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/ext.translate.workflowselector.js b/MLEB/Translate/resources/js/ext.translate.workflowselector.js
index 0bb4621d..d3d28fcc 100644
--- a/MLEB/Translate/resources/js/ext.translate.workflowselector.js
+++ b/MLEB/Translate/resources/js/ext.translate.workflowselector.js
@@ -6,7 +6,7 @@
* @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
function WorkflowSelector( container ) {
@@ -164,4 +164,4 @@
};
$.fn.workflowselector.Constructor = WorkflowSelector;
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/resources/js/jquery.ajaxdispatcher.js b/MLEB/Translate/resources/js/jquery.ajaxdispatcher.js
index 9f45697c..68d48e74 100644
--- a/MLEB/Translate/resources/js/jquery.ajaxdispatcher.js
+++ b/MLEB/Translate/resources/js/jquery.ajaxdispatcher.js
@@ -1,4 +1,4 @@
-( function ( $ ) {
+( function () {
'use strict';
/**
@@ -64,4 +64,4 @@
$.extend( $, { ajaxDispatcher: ajaxDispatcher } );
-}( jQuery ) );
+}() );
diff --git a/MLEB/Translate/resources/js/jquery.textchange.js b/MLEB/Translate/resources/js/jquery.textchange.js
index 5f145f02..65886c43 100644
--- a/MLEB/Translate/resources/js/jquery.textchange.js
+++ b/MLEB/Translate/resources/js/jquery.textchange.js
@@ -5,7 +5,7 @@
* @author Santhosh Thottingal, 2013
* @see https://gist.github.com/mkelly12/424774
*/
-( function ( $ ) {
+( function () {
'use strict';
$.event.special.textchange = {
@@ -41,4 +41,4 @@
}
};
-}( jQuery ) );
+}() );
diff --git a/MLEB/Translate/scripts/TranslateStatsOutput.php b/MLEB/Translate/scripts/TranslateStatsOutput.php
index 24398b1b..cbeea176 100644
--- a/MLEB/Translate/scripts/TranslateStatsOutput.php
+++ b/MLEB/Translate/scripts/TranslateStatsOutput.php
@@ -7,19 +7,19 @@
* @ingroup Stats
*/
class TranslateStatsOutput extends WikiStatsOutput {
- function heading() {
+ public function heading() {
echo '{| class="mw-ext-translate-groupstatistics sortable wikitable" border="2" ' .
'cellpadding="4" cellspacing="0" style="background-color: #F9F9F9; border: ' .
'1px #AAAAAA solid; border-collapse: collapse; clear:both;" width="100%"' . "\n";
}
- function summaryheading() {
+ public function summaryheading() {
echo "\n" . '{| class="mw-ext-translate-groupstatistics sortable wikitable" ' .
'border="2" cellpadding="4" cellspacing="0" style="background-color: #F9F9F9; ' .
'border: 1px #AAAAAA solid; border-collapse: collapse; clear:both;"' . "\n";
}
- function addFreeText( $freeText ) {
+ public function addFreeText( $freeText ) {
echo $freeText;
}
}
diff --git a/MLEB/Translate/scripts/characterEditStats.php b/MLEB/Translate/scripts/characterEditStats.php
index 775a9649..4d5bc87c 100644
--- a/MLEB/Translate/scripts/characterEditStats.php
+++ b/MLEB/Translate/scripts/characterEditStats.php
@@ -113,7 +113,7 @@ class CharacterEditStats extends Maintenance {
$cutoff = $dbr->addQuotes( $dbr->timestamp( time() - $days * 24 * 3600 ) );
// The field renames are to be compatible with recentchanges table query
- if ( is_callable( [ 'Revision', 'getQueryInfo' ] ) ) {
+ if ( is_callable( Revision::class, 'getQueryInfo' ) ) {
$revQuery = Revision::getQueryInfo( [ 'page' ] );
$revUserText = isset( $revQuery['fields']['rev_user_text'] )
? $revQuery['fields']['rev_user_text']
@@ -148,5 +148,5 @@ class CharacterEditStats extends Maintenance {
}
}
-$maintClass = 'CharacterEditStats';
+$maintClass = CharacterEditStats::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/scripts/create-language-models.php b/MLEB/Translate/scripts/create-language-models.php
index 7be45a58..71a1ce72 100644
--- a/MLEB/Translate/scripts/create-language-models.php
+++ b/MLEB/Translate/scripts/create-language-models.php
@@ -230,5 +230,5 @@ TXT;
}
}
-$maintClass = 'LanguageModelCreator';
+$maintClass = LanguageModelCreator::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/scripts/createCheckIndex.php b/MLEB/Translate/scripts/createCheckIndex.php
index d215bbbd..6b6f4296 100644
--- a/MLEB/Translate/scripts/createCheckIndex.php
+++ b/MLEB/Translate/scripts/createCheckIndex.php
@@ -138,5 +138,5 @@ class CreateCheckIndex extends Maintenance {
}
}
-$maintClass = 'CreateCheckIndex';
+$maintClass = CreateCheckIndex::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/scripts/createMessageIndex.php b/MLEB/Translate/scripts/createMessageIndex.php
index 72a3f4f2..9005fef4 100644
--- a/MLEB/Translate/scripts/createMessageIndex.php
+++ b/MLEB/Translate/scripts/createMessageIndex.php
@@ -30,5 +30,5 @@ class CreateMessageIndex extends Maintenance {
}
}
-$maintClass = 'CreateMessageIndex';
+$maintClass = CreateMessageIndex::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/scripts/expand-groupspec.php b/MLEB/Translate/scripts/expand-groupspec.php
index 57f0b365..a8627cbb 100644
--- a/MLEB/Translate/scripts/expand-groupspec.php
+++ b/MLEB/Translate/scripts/expand-groupspec.php
@@ -54,5 +54,5 @@ class TranslateExpandGroupSpec extends Maintenance {
}
}
-$maintClass = 'TranslateExpandGroupSpec';
+$maintClass = TranslateExpandGroupSpec::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/scripts/export.php b/MLEB/Translate/scripts/export.php
index 867359d0..469bd2ac 100644
--- a/MLEB/Translate/scripts/export.php
+++ b/MLEB/Translate/scripts/export.php
@@ -297,5 +297,5 @@ class CommandlineExport extends Maintenance {
}
}
-$maintClass = 'CommandlineExport';
+$maintClass = CommandlineExport::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/scripts/fallbacks-graph.php b/MLEB/Translate/scripts/fallbacks-graph.php
index 0209747c..e625467b 100644
--- a/MLEB/Translate/scripts/fallbacks-graph.php
+++ b/MLEB/Translate/scripts/fallbacks-graph.php
@@ -83,5 +83,5 @@ XML;
}
}
-$maintClass = 'FallbacksCompare';
+$maintClass = FallbacksCompare::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/scripts/fuzzy.php b/MLEB/Translate/scripts/fuzzy.php
index 977011c3..30aff9c9 100644
--- a/MLEB/Translate/scripts/fuzzy.php
+++ b/MLEB/Translate/scripts/fuzzy.php
@@ -285,7 +285,7 @@ class FuzzyScript {
$content = ContentHandler::makeContent( $text, $title );
$status = $wikipage->doEditContent(
$content,
- $comment ? $comment : 'Marking as fuzzy',
+ $comment ?: 'Marking as fuzzy',
EDIT_FORCE_BOT | EDIT_UPDATE,
false, /*base revision id*/
FuzzyBot::getUser()
@@ -296,5 +296,5 @@ class FuzzyScript {
}
}
-$maintClass = 'Fuzzy';
+$maintClass = Fuzzy::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/scripts/groupStatistics.php b/MLEB/Translate/scripts/groupStatistics.php
index 0cec6bea..cc685e0f 100644
--- a/MLEB/Translate/scripts/groupStatistics.php
+++ b/MLEB/Translate/scripts/groupStatistics.php
@@ -359,7 +359,7 @@ class GroupStatistics extends Maintenance {
}
// List of all languages.
- $languages = Language::fetchLanguageNames( false );
+ $languages = TranslateUtils::getLanguageNames( null );
// Default sorting order by language code, users can sort wiki output.
ksort( $languages );
@@ -677,5 +677,5 @@ class GroupStatistics extends Maintenance {
}
}
-$maintClass = 'GroupStatistics';
+$maintClass = GroupStatistics::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/scripts/languageeditstats.php b/MLEB/Translate/scripts/languageeditstats.php
index 1c177a17..7f67a1c4 100644
--- a/MLEB/Translate/scripts/languageeditstats.php
+++ b/MLEB/Translate/scripts/languageeditstats.php
@@ -48,12 +48,8 @@ class Languageeditstats extends Maintenance {
}
public function execute() {
- $hours = (int)$this->getOption( 'days' );
- $hours = $hours ? $hours * 7 : 7 * 24;
-
- $top = (int)$this->getOption( 'top' );
- $top = $top ? $top : 10;
-
+ $hours = ( $this->getOption( 'days' ) ?: 7 ) * 24;
+ $top = (int)$this->getOption( 'top' ) ?: 10;
$bots = $this->hasOption( 'bots' );
$namespaces = [];
@@ -107,5 +103,5 @@ class Languageeditstats extends Maintenance {
}
}
-$maintClass = 'Languageeditstats';
+$maintClass = Languageeditstats::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/scripts/magic-export.php b/MLEB/Translate/scripts/magic-export.php
index 371b4d66..ec493c14 100644
--- a/MLEB/Translate/scripts/magic-export.php
+++ b/MLEB/Translate/scripts/magic-export.php
@@ -359,5 +359,5 @@ PHP
}
}
-$maintClass = 'MagicExport';
+$maintClass = MagicExport::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/scripts/test-mt.php b/MLEB/Translate/scripts/test-mt.php
index 429cab6b..2ae947a4 100644
--- a/MLEB/Translate/scripts/test-mt.php
+++ b/MLEB/Translate/scripts/test-mt.php
@@ -55,7 +55,7 @@ class TestMT extends Maintenance {
$name = $this->getOption( 'service' );
if ( !isset( $wgTranslateTranslationServices[ $name ] ) ) {
- $this->error( "Unknown service.\n", 1 );
+ $this->fatalError( "Unknown service.\n" );
}
$service = TranslationWebService::factory( $name, $wgTranslateTranslationServices[ $name ] );
@@ -68,12 +68,12 @@ class TestMT extends Maintenance {
$text = $this->getArg( 0 );
if ( !$service->isSupportedLanguagePair( $from, $to ) ) {
- $this->error( "Unsupported language pair.\n", 1 );
+ $this->fatalError( "Unsupported language pair.\n" );
}
$query = $service->getQueries( $text, $from, $to );
if ( $query === [] ) {
- $this->error( "Service query error.\n", 1 );
+ $this->fatalError( "Service query error.\n" );
}
$agg = new QueryAggregator();
@@ -81,7 +81,7 @@ class TestMT extends Maintenance {
$agg->run();
$res = $agg->getResponse( $id );
if ( $res === null ) {
- $this->error( "Service response error.\n", 1 );
+ $this->fatalError( "Service response error.\n" );
}
$this->output( $service->getResultData( $res ), 1 );
diff --git a/MLEB/Translate/scripts/translator-stats.php b/MLEB/Translate/scripts/translator-stats.php
index 6ee2c312..9bc1f1b0 100644
--- a/MLEB/Translate/scripts/translator-stats.php
+++ b/MLEB/Translate/scripts/translator-stats.php
@@ -127,5 +127,5 @@ class TS extends Maintenance {
}
}
-$maintClass = 'TS';
+$maintClass = TS::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/MLEB/Translate/specials/SpecialExportTranslations.php b/MLEB/Translate/specials/SpecialExportTranslations.php
index 8181eee0..8c7b3d2e 100644
--- a/MLEB/Translate/specials/SpecialExportTranslations.php
+++ b/MLEB/Translate/specials/SpecialExportTranslations.php
@@ -39,8 +39,10 @@ class SpecialExportTranslations extends SpecialPage {
if ( $this->groupId ) {
$status = $this->checkInput();
if ( !$status->isGood() ) {
- $errors = $out->parse( $status->getWikiText( false, false, $lang ) );
- $out->addHTML( Html::rawElement( 'div', [ 'class' => 'error' ], $errors ) );
+ TranslateUtils::wrapWikiTextAsInterface(
+ $out, 'error',
+ $status->getWikiText( false, false, $lang )
+ );
return;
}
diff --git a/MLEB/Translate/specials/SpecialLanguageStats.php b/MLEB/Translate/specials/SpecialLanguageStats.php
index 3fc58c22..d1b1e2d0 100644
--- a/MLEB/Translate/specials/SpecialLanguageStats.php
+++ b/MLEB/Translate/specials/SpecialLanguageStats.php
@@ -116,6 +116,7 @@ class SpecialLanguageStats extends SpecialPage {
$out = $this->getOutput();
$out->addModules( 'ext.translate.special.languagestats' );
+ $out->addModuleStyles( 'ext.translate.statstable' );
$params = explode( '/', $par );
@@ -159,11 +160,29 @@ class SpecialLanguageStats extends SpecialPage {
"<div class='error'>$1</div>",
'translate-langstats-incomplete'
);
+ }
- // $this->purge is only true if request was posted
+ if ( $this->incomplete || $this->purge ) {
DeferredUpdates::addCallableUpdate( function () {
- $flags = $this->purge ? MessageGroupStats::FLAG_NO_CACHE : 0;
- $this->loadStatistics( $this->target, $flags );
+ // Attempt to recache on the fly the missing stats, unless a
+ // purge was requested, because that is likely to time out.
+ // Even though this is executed inside a deferred update, it
+ // counts towards the maximum execution time limit. If that is
+ // reached, or any other failure happens, no updates at all
+ // will be written into the database, as it does only single
+ // update at the end. Hence we always add a job too, so that
+ // even the slower updates will get done at some point. In
+ // regular case (no purge), the job sees that the stats are
+ // already updated, so it is not much of an overhead.
+ $jobParams = $this->getCacheRebuildJobParameters( $this->target );
+ $jobParams[ 'purge' ] = $this->purge;
+ $job = MessageGroupStatsRebuildJob::newJob( $jobParams );
+ JobQueueGroup::singleton()->push( $job );
+
+ // $this->purge is only true if request was posted
+ if ( !$this->purge ) {
+ $this->loadStatistics( $this->target );
+ }
} );
}
if ( $this->nothing ) {
@@ -176,19 +195,23 @@ class SpecialLanguageStats extends SpecialPage {
}
/**
- * Get stats
+ * Get stats.
* @param string $target For which target to get stats
* @param int $flags See MessageGroupStats for possible flags
* @return array[]
*/
- protected function loadStatistics( $target, $flags ) {
+ protected function loadStatistics( $target, $flags = 0 ) {
return MessageGroupStats::forLanguage( $target, $flags );
}
+ protected function getCacheRebuildJobParameters( $target ) {
+ return [ 'languagecode' => $target ];
+ }
+
/**
- * Return the list of allowed values for target here.
+ * Return true if language exist in the list of allowed languages or false otherwise.
* @param string $value
- * @return array
+ * @return bool
*/
protected function isValidValue( $value ) {
$langs = Language::fetchLanguageNames();
@@ -481,7 +504,7 @@ class SpecialLanguageStats extends SpecialPage {
$params[] = md5( $groupId );
$params[] = $this->getLanguage()->getCode();
$params[] = md5( $this->target );
- $cachekey = wfMemcKey( __METHOD__, implode( '-', $params ) );
+ $cachekey = wfMemcKey( __METHOD__ . '-v3', implode( '-', $params ) );
$cacheval = wfGetCache( CACHE_ANYTHING )->get( $cachekey );
if ( is_string( $cacheval ) ) {
return $cacheval;
diff --git a/MLEB/Translate/specials/SpecialMagic.php b/MLEB/Translate/specials/SpecialMagic.php
index 11d42249..dbf9be19 100644
--- a/MLEB/Translate/specials/SpecialMagic.php
+++ b/MLEB/Translate/specials/SpecialMagic.php
@@ -52,7 +52,7 @@ class SpecialMagic extends SpecialPage {
*
* @return string
*/
- function getDescription() {
+ public function getDescription() {
return $this->msg( 'translate-magic-pagename' )->text();
}
diff --git a/MLEB/Translate/specials/SpecialManageGroups.php b/MLEB/Translate/specials/SpecialManageGroups.php
index c266d33d..eec1d4be 100644
--- a/MLEB/Translate/specials/SpecialManageGroups.php
+++ b/MLEB/Translate/specials/SpecialManageGroups.php
@@ -44,7 +44,7 @@ class SpecialManageGroups extends SpecialPage {
return 'wiki';
}
- function getDescription() {
+ public function getDescription() {
return $this->msg( 'managemessagegroups' )->text();
}
diff --git a/MLEB/Translate/specials/SpecialMessageGroupStats.php b/MLEB/Translate/specials/SpecialMessageGroupStats.php
index cb8c0b63..8698a7f9 100644
--- a/MLEB/Translate/specials/SpecialMessageGroupStats.php
+++ b/MLEB/Translate/specials/SpecialMessageGroupStats.php
@@ -42,6 +42,11 @@ class SpecialMessageGroupStats extends SpecialLanguageStats {
}
/// Overwritten from SpecialLanguageStats
+ protected function getCacheRebuildJobParameters( $target ) {
+ return [ 'groupid' => $target ];
+ }
+
+ /// Overwritten from SpecialLanguageStats
protected function isValidValue( $value ) {
$group = MessageGroups::getGroup( $value );
if ( $group ) {
diff --git a/MLEB/Translate/specials/SpecialSupportedLanguages.php b/MLEB/Translate/specials/SpecialSupportedLanguages.php
index d7f454f1..63f78109 100644
--- a/MLEB/Translate/specials/SpecialSupportedLanguages.php
+++ b/MLEB/Translate/specials/SpecialSupportedLanguages.php
@@ -33,7 +33,7 @@ class SpecialSupportedLanguages extends SpecialPage {
return 'wiki';
}
- function getDescription() {
+ public function getDescription() {
return $this->msg( 'supportedlanguages' )->text();
}
@@ -354,7 +354,7 @@ class SpecialSupportedLanguages extends SpecialPage {
->numParams( $count, $last )->text();
$last = max( 1, min( $period, $last ) );
$styles['border-bottom'] = '3px solid #' .
- $statsTable->getBackgroundColor( $period - $last, $period );
+ $statsTable->getBackgroundColor( ( $period - $last ) / $period );
} else {
$enc = "<del>$enc</del>";
}
@@ -457,7 +457,7 @@ class SpecialSupportedLanguages extends SpecialPage {
for ( $i = 0; $i <= $period; $i += 30 ) {
$iFormatted = htmlspecialchars( $this->getLanguage()->formatNum( $i ) );
$legend .= '<span style="background-color:#' .
- $statsTable->getBackgroundColor( $period - $i, $period ) .
+ $statsTable->getBackgroundColor( ( $period - $i ) / $period ) .
"\"> $iFormatted</span>";
}
diff --git a/MLEB/Translate/specials/SpecialTranslate.php b/MLEB/Translate/specials/SpecialTranslate.php
index 8eb31229..305c1e00 100644
--- a/MLEB/Translate/specials/SpecialTranslate.php
+++ b/MLEB/Translate/specials/SpecialTranslate.php
@@ -329,7 +329,9 @@ class SpecialTranslate extends SpecialPage {
protected function getGroupDescription( MessageGroup $group ) {
$description = $group->getDescription( $this->getContext() );
if ( $description !== null ) {
- return $this->getOutput()->parse( $description, true, true );
+ return TranslateUtils::parseAsInterface(
+ $this->getOutput(), $description
+ );
}
return '';
}
diff --git a/MLEB/Translate/specials/SpecialTranslations.php b/MLEB/Translate/specials/SpecialTranslations.php
index 5329e7a4..d94d4fde 100644
--- a/MLEB/Translate/specials/SpecialTranslations.php
+++ b/MLEB/Translate/specials/SpecialTranslations.php
@@ -23,7 +23,7 @@ class SpecialTranslations extends SpecialAllPages {
return 'pages';
}
- function getDescription() {
+ public function getDescription() {
return $this->msg( 'translations' )->text();
}
diff --git a/MLEB/Translate/stash/StashedTranslation.php b/MLEB/Translate/stash/StashedTranslation.php
index 773d3069..3eaf1f3b 100644
--- a/MLEB/Translate/stash/StashedTranslation.php
+++ b/MLEB/Translate/stash/StashedTranslation.php
@@ -12,11 +12,24 @@
* @since 2013.06
*/
class StashedTranslation {
+ /** @var User */
protected $user;
+
+ /** @var Title */
protected $title;
+
+ /** @var string */
protected $value;
+
+ /** @var array|null */
protected $metadata;
+ /**
+ * @param User $user
+ * @param Title $title
+ * @param string $value
+ * @param array|null $metadata
+ */
public function __construct( User $user, Title $title, $value, array $metadata = null ) {
$this->user = $user;
$this->title = $title;
@@ -46,7 +59,7 @@ class StashedTranslation {
}
/**
- * @return array
+ * @return array|null
*/
public function getMetadata() {
return $this->metadata;
diff --git a/MLEB/Translate/stash/TranslationStashStorage.php b/MLEB/Translate/stash/TranslationStashStorage.php
index 75809710..fb67449f 100644
--- a/MLEB/Translate/stash/TranslationStashStorage.php
+++ b/MLEB/Translate/stash/TranslationStashStorage.php
@@ -14,9 +14,16 @@ use Wikimedia\Rdbms\IDatabase;
* @since 2013.06
*/
class TranslationStashStorage {
+ /** @var IDatabase */
protected $db;
+
+ /** @var string */
protected $dbTable;
+ /**
+ * @param IDatabase $db
+ * @param string $table
+ */
public function __construct( IDatabase $db, $table = 'translate_stash' ) {
$this->db = $db;
$this->dbTable = $table;
diff --git a/MLEB/Translate/stringmangler/StringMatcher.php b/MLEB/Translate/stringmangler/StringMatcher.php
index 630ea144..e238062d 100644
--- a/MLEB/Translate/stringmangler/StringMatcher.php
+++ b/MLEB/Translate/stringmangler/StringMatcher.php
@@ -24,10 +24,10 @@ class StringMatcher implements StringMangler, MetaYamlSchemaExtender {
/**
* Alias for making NO-OP string mangler.
*
- * @return StringMatcher
+ * @return self
*/
public static function EmptyMatcher() {
- return new StringMatcher();
+ return new self();
}
/**
diff --git a/MLEB/Translate/tag/PageTranslationHooks.php b/MLEB/Translate/tag/PageTranslationHooks.php
index bc134bc3..76d03c8c 100644
--- a/MLEB/Translate/tag/PageTranslationHooks.php
+++ b/MLEB/Translate/tag/PageTranslationHooks.php
@@ -1107,7 +1107,7 @@ class PageTranslationHooks {
* @param OutputPage $out
* @return bool
*/
- public static function replaceSubtitle( &$subpages, $skin = null, OutputPage $out ) {
+ public static function replaceSubtitle( &$subpages, Skin $skin = null, OutputPage $out ) {
$isTranslationPage = TranslatablePage::isTranslationPage( $out->getTitle() );
if ( !$isTranslationPage
&& !TranslatablePage::isSourcePage( $out->getTitle() )
diff --git a/MLEB/Translate/tag/SpecialPageMigration.php b/MLEB/Translate/tag/SpecialPageMigration.php
index e339f4f1..a0d1321b 100644
--- a/MLEB/Translate/tag/SpecialPageMigration.php
+++ b/MLEB/Translate/tag/SpecialPageMigration.php
@@ -17,7 +17,7 @@ class SpecialPageMigration extends SpecialPage {
return 'wiki';
}
- function getDescription() {
+ public function getDescription() {
return $this->msg( 'pagemigration' )->text();
}
diff --git a/MLEB/Translate/tag/SpecialPageTranslation.php b/MLEB/Translate/tag/SpecialPageTranslation.php
index c0a021e8..98eb5d6a 100644
--- a/MLEB/Translate/tag/SpecialPageTranslation.php
+++ b/MLEB/Translate/tag/SpecialPageTranslation.php
@@ -116,7 +116,7 @@ class SpecialPageTranslation extends SpecialPage {
$group = MessageGroups::getGroup( $id );
$parents = MessageGroups::getSharedGroups( $group );
- MessageGroupStats::forGroup( $parents, MessageGroupStats::FLAG_NO_CACHE );
+ MessageGroupStats::clearGroup( $parents );
return;
}
diff --git a/MLEB/Translate/tag/SpecialPageTranslationMovePage.php b/MLEB/Translate/tag/SpecialPageTranslationMovePage.php
index e7153469..452f65fb 100644
--- a/MLEB/Translate/tag/SpecialPageTranslationMovePage.php
+++ b/MLEB/Translate/tag/SpecialPageTranslationMovePage.php
@@ -206,9 +206,10 @@ class SpecialPageTranslationMovePage extends MovePageForm {
/**
* The query form.
*
- * @param array $par
+ * @param array $err Unused.
+ * @param bool $isPermError Unused.
*/
- public function showForm( $par ) {
+ public function showForm( $err, $isPermError = false ) {
$this->getOutput()->addWikiMsg( 'pt-movepage-intro' );
$formDescriptor = [
@@ -299,11 +300,15 @@ class SpecialPageTranslationMovePage extends MovePageForm {
'pt-movepage-list-pages' => [ $this->oldTitle ],
'pt-movepage-list-translation' => $this->getTranslationPages(),
'pt-movepage-list-section' => $this->getSectionPages(),
- 'pt-movepage-list-other' => $this->getSubpages(),
+ 'pt-movepage-list-translatable' => $this->getTranslatableSubpages(),
+ 'pt-movepage-list-other' => $this->getNormalSubpages(),
];
foreach ( $types as $type => $pages ) {
$out->wrapWikiMsg( '=== $1 ===', [ $type, count( $pages ) ] );
+ if ( $type === 'pt-movepage-list-translatable' ) {
+ $out->addWikiMsg( 'pt-movepage-list-translatable-note' );
+ }
$lines = [];
foreach ( $pages as $old ) {
@@ -312,10 +317,10 @@ class SpecialPageTranslationMovePage extends MovePageForm {
// These pages need specific checks
if ( $type === 'pt-movepage-list-other' ) {
$toBeMoved = $this->moveSubpages;
+ }
- if ( TranslatablePage::isTranslationPage( $old ) ) {
- continue;
- }
+ if ( $type === 'pt-movepage-list-translatable' ) {
+ $toBeMoved = false;
}
if ( $toBeMoved ) {
@@ -416,12 +421,8 @@ class SpecialPageTranslationMovePage extends MovePageForm {
}
if ( $this->moveSubpages ) {
- $subpages = $this->getSubpages();
+ $subpages = $this->getNormalSubpages();
foreach ( $subpages as $from ) {
- if ( TranslatablePage::isTranslationPage( $from ) ) {
- continue;
- }
-
$to = $this->newPageTitle( $base, $from, $target );
$moves[$from->getPrefixedText()] = $to->getPrefixedText();
}
@@ -483,14 +484,9 @@ class SpecialPageTranslationMovePage extends MovePageForm {
$titles['section'][] = [ $old, $this->newPageTitle( $base, $old, $target ) ];
}
- $subpages = [];
- if ( $this->moveSubpages ) {
- $subpages = $this->getSubpages();
- }
+ $subpages = $this->moveSubpages ? $this->getNormalSubpages() : [];
foreach ( $subpages as $old ) {
- if ( !TranslatablePage::isTranslationPage( $old ) ) {
- $titles['subpage'][] = [ $old, $this->newPageTitle( $base, $old, $target ) ];
- }
+ $titles['subpage'][] = [ $old, $this->newPageTitle( $base, $old, $target ) ];
}
// Check that all new titles are valid
@@ -579,7 +575,7 @@ class SpecialPageTranslationMovePage extends MovePageForm {
/**
* Returns all section pages, including those which are currently not active.
- * @return TitleArray
+ * @return Title[]
*/
protected function getSectionPages() {
if ( !isset( $this->sectionPages ) ) {
@@ -608,4 +604,25 @@ class SpecialPageTranslationMovePage extends MovePageForm {
protected function getSubpages() {
return $this->page->getTitle()->getSubpages();
}
+
+ private function getNormalSubpages() {
+ return array_filter(
+ iterator_to_array( $this->getSubpages() ),
+ function ( $page ) {
+ return !(
+ TranslatablePage::isTranslationPage( $page ) ||
+ TranslatablePage::isSourcePage( $page )
+ );
+ }
+ );
+ }
+
+ private function getTranslatableSubpages() {
+ return array_filter(
+ iterator_to_array( $this->getSubpages() ),
+ function ( $page ) {
+ return TranslatablePage::isSourcePage( $page );
+ }
+ );
+ }
}
diff --git a/MLEB/Translate/tag/TPSection.php b/MLEB/Translate/tag/TPSection.php
index f63f6db4..49b3f104 100644
--- a/MLEB/Translate/tag/TPSection.php
+++ b/MLEB/Translate/tag/TPSection.php
@@ -161,7 +161,7 @@ class TPSection {
/**
* Construct an object from previously serialized array.
* @param array $data
- * @return TPSection
+ * @return self
* @since 2018.07
*/
public static function unserializeFromArray( $data ) {
diff --git a/MLEB/Translate/tag/TranslatablePage.php b/MLEB/Translate/tag/TranslatablePage.php
index 21b06a5f..51a32db9 100644
--- a/MLEB/Translate/tag/TranslatablePage.php
+++ b/MLEB/Translate/tag/TranslatablePage.php
@@ -63,8 +63,6 @@ class TranslatablePage {
$this->title = $title;
}
- // Public constructors //
-
/**
* Constructs a translatable page from given text.
* Some functions will fail unless you set revision
@@ -73,7 +71,7 @@ class TranslatablePage {
* @param Title $title
* @param string $text
*
- * @return TranslatablePage
+ * @return self
*/
public static function newFromText( Title $title, $text ) {
$obj = new self( $title );
@@ -91,7 +89,7 @@ class TranslatablePage {
* @param Title $title
* @param int $revision Revision number
* @throws MWException
- * @return TranslatablePage
+ * @return self
*/
public static function newFromRevision( Title $title, $revision ) {
$rev = Revision::newFromTitle( $title, $revision );
@@ -111,7 +109,7 @@ class TranslatablePage {
* The text of last marked revision is loaded when neded.
*
* @param Title $title
- * @return TranslatablePage
+ * @return self
*/
public static function newFromTitle( Title $title ) {
$obj = new self( $title );
@@ -120,8 +118,6 @@ class TranslatablePage {
return $obj;
}
- // Getters //
-
/**
* Returns the title for this translatable page.
* @return Title
@@ -177,8 +173,6 @@ class TranslatablePage {
$this->init = false;
}
- // Public functions //
-
/**
* Returns the source language of this translatable page. In other words
* the language in which the page without language code is written.
@@ -377,8 +371,6 @@ class TranslatablePage {
return $text;
}
- // Inner functionality //
-
/**
* @param array &$holders
* @param string $text
@@ -505,8 +497,6 @@ class TranslatablePage {
return $section;
}
- // Tag methods //
-
protected static $tagCache = [];
/**
@@ -822,7 +812,7 @@ class TranslatablePage {
/**
* @param Title $title
- * @return bool|TranslatablePage
+ * @return bool|self
*/
public static function isTranslationPage( Title $title ) {
$handle = new MessageHandle( $title );
@@ -875,7 +865,7 @@ class TranslatablePage {
$dbr = wfGetDB( DB_REPLICA );
$setOpts += Database::getCacheSetOptions( $dbr );
- return TranslatablePage::getTranslatablePages();
+ return self::getTranslatablePages();
},
[ 'pcTTL' => $pcTTL, 'pcGroup' => __CLASS__ . ':30' ]
);
diff --git a/MLEB/Translate/tag/TranslatablePageMoveJob.php b/MLEB/Translate/tag/TranslatablePageMoveJob.php
index 47f71d48..47736e82 100644
--- a/MLEB/Translate/tag/TranslatablePageMoveJob.php
+++ b/MLEB/Translate/tag/TranslatablePageMoveJob.php
@@ -21,7 +21,7 @@ class TranslatablePageMoveJob extends Job {
* @param array $moves should include base-source and base-target
* @param string $summary
* @param User $performer
- * @return TranslateMoveJob
+ * @return TranslatablePageMoveJob
*/
public static function newJob(
Title $source, Title $target, array $moves, $summary, User $performer
diff --git a/MLEB/Translate/tag/TranslateDeleteJob.php b/MLEB/Translate/tag/TranslateDeleteJob.php
index b994ed7e..38d32f89 100644
--- a/MLEB/Translate/tag/TranslateDeleteJob.php
+++ b/MLEB/Translate/tag/TranslateDeleteJob.php
@@ -20,7 +20,7 @@ class TranslateDeleteJob extends Job {
* @param string $full
* @param User $performer
* @param string $reason
- * @return TranslateDeleteJob
+ * @return self
*/
public static function newJob( Title $target, $base, $full, /*User*/$performer, $reason ) {
$job = new self( $target );
diff --git a/MLEB/Translate/tag/TranslateMoveJob.php b/MLEB/Translate/tag/TranslateMoveJob.php
index 45d8072a..8a06258b 100644
--- a/MLEB/Translate/tag/TranslateMoveJob.php
+++ b/MLEB/Translate/tag/TranslateMoveJob.php
@@ -20,7 +20,7 @@ class TranslateMoveJob extends Job {
* @param Title $target
* @param array $params should include base-source and base-target
* @param User $performer
- * @return TranslateMoveJob
+ * @return self
*/
public static function newJob( Title $source, Title $target, array $params,
/*User*/$performer
@@ -136,6 +136,9 @@ class TranslateMoveJob extends Job {
return $this->params['performer'];
}
+ /**
+ * @param Title|string $target
+ */
public function setTarget( $target ) {
if ( $target instanceof Title ) {
$this->params['target'] = $target->getPrefixedText();
diff --git a/MLEB/Translate/tag/TranslateRenderJob.php b/MLEB/Translate/tag/TranslateRenderJob.php
index 5927fc8c..a8ccf3c0 100644
--- a/MLEB/Translate/tag/TranslateRenderJob.php
+++ b/MLEB/Translate/tag/TranslateRenderJob.php
@@ -16,7 +16,7 @@ class TranslateRenderJob extends Job {
/**
* @param Title $target
- * @return TranslateRenderJob
+ * @return self
*/
public static function newJob( Title $target ) {
$job = new self( $target );
diff --git a/MLEB/Translate/tag/TranslationsUpdateJob.php b/MLEB/Translate/tag/TranslationsUpdateJob.php
index 41670995..f3020f41 100644
--- a/MLEB/Translate/tag/TranslationsUpdateJob.php
+++ b/MLEB/Translate/tag/TranslationsUpdateJob.php
@@ -23,7 +23,7 @@ class TranslationsUpdateJob extends Job {
* If a list of sections is provided, then the job will also update translation
* unit pages.
*
- * @param Title $page
+ * @param TranslatablePage $page
* @param TPSection[] $sections
* @return TranslationsUpdateJob
* @since 2018.07
diff --git a/MLEB/Translate/tests/phpunit/HookDocTest.php b/MLEB/Translate/tests/phpunit/HookDocTest.php
index d2cb6aaa..616a6a53 100644
--- a/MLEB/Translate/tests/phpunit/HookDocTest.php
+++ b/MLEB/Translate/tests/phpunit/HookDocTest.php
@@ -73,9 +73,9 @@ class HookDocTest extends MediaWikiTestCase {
protected static function getJSHooksFromFile( $file ) {
$content = file_get_contents( $file );
$m = [];
- preg_match_all( '/(?:mw\.translateHooks\.run)\(\s*([\'"])(.*?)\1/', $content, $m );
+ preg_match_all( '/\bmw\.translateHooks\.run\(\s*[\'"]([^\'"]+)/', $content, $m );
$hooks = [];
- foreach ( $m[2] as $hook ) {
+ foreach ( $m[1] as $hook ) {
$hooks[$hook] = [];
}
@@ -85,9 +85,9 @@ class HookDocTest extends MediaWikiTestCase {
protected static function getPHPHooksFromFile( $file ) {
$content = file_get_contents( $file );
$m = [];
- preg_match_all( '/(?:wfRunHooks|Hooks\:\:run)\(\s*([\'"])(.*?)\1/', $content, $m );
+ preg_match_all( '/\bHooks::run\(\s*[\'"]([^\'"]+)/', $content, $m );
$hooks = [];
- foreach ( $m[2] as $hook ) {
+ foreach ( $m[1] as $hook ) {
$hooks[$hook] = [];
}
diff --git a/MLEB/Translate/tests/phpunit/MessageCollectionTest.php b/MLEB/Translate/tests/phpunit/MessageCollectionTest.php
index e73eb4ff..4d819377 100644
--- a/MLEB/Translate/tests/phpunit/MessageCollectionTest.php
+++ b/MLEB/Translate/tests/phpunit/MessageCollectionTest.php
@@ -23,7 +23,7 @@ class MessageCollectionTest extends MediaWikiTestCase {
$wgHooks['TranslatePostInitGroups'] = [ [ $this, 'getTestGroups' ] ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
@@ -41,8 +41,7 @@ class MessageCollectionTest extends MediaWikiTestCase {
}
public function testMessage() {
- $user = new MockSuperUser();
- $user->setId( 123 );
+ $user = $this->getTestSysop()->getUser();
$title = Title::newFromText( 'MediaWiki:translated/fi' );
$page = WikiPage::factory( $title );
$content = ContentHandler::makeContent( 'pupuliini', $title );
@@ -63,8 +62,8 @@ class MessageCollectionTest extends MediaWikiTestCase {
$this->assertEquals( 'translated', $translated->key() );
$this->assertEquals( 'bunny', $translated->definition() );
$this->assertEquals( 'pupuliini', $translated->translation() );
- $this->assertEquals( 'SuperUser', $translated->getProperty( 'last-translator-text' ) );
- $this->assertEquals( 123, $translated->getProperty( 'last-translator-id' ) );
+ $this->assertEquals( $user->getName(), $translated->getProperty( 'last-translator-text' ) );
+ $this->assertEquals( $user->getId(), $translated->getProperty( 'last-translator-id' ) );
$this->assertEquals(
'translated',
$translated->getProperty( 'status' ),
diff --git a/MLEB/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php b/MLEB/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php
index 078868ce..e96e8bee 100644
--- a/MLEB/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php
+++ b/MLEB/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php
@@ -17,7 +17,7 @@ class MessageGroupStatesUpdaterJobTest extends MediaWikiTestCase {
$wgHooks['TranslatePostInitGroups'] = [ [ $this, 'getTestGroups' ] ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
}
@@ -110,7 +110,7 @@ class MessageGroupStatesUpdaterJobTest extends MediaWikiTestCase {
* This tests fails regularly on WMF CI but haven't been able to reproduce locally.
*/
public function testHooks() {
- $user = new MockSuperUser();
+ $user = $this->getTestSysop()->getUser();
$group = MessageGroups::getGroup( 'group-trans' );
// In the beginning...
diff --git a/MLEB/Translate/tests/phpunit/MessageGroupsTest.php b/MLEB/Translate/tests/phpunit/MessageGroupsTest.php
index 1ab9fad5..2770683c 100644
--- a/MLEB/Translate/tests/phpunit/MessageGroupsTest.php
+++ b/MLEB/Translate/tests/phpunit/MessageGroupsTest.php
@@ -29,7 +29,7 @@ class MessageGroupsTest extends MediaWikiTestCase {
$wgHooks['TranslatePostInitGroups'] = [ 'MessageGroups::getConfiguredGroups' ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
diff --git a/MLEB/Translate/tests/phpunit/MessageIndexRebuildJobTest.php b/MLEB/Translate/tests/phpunit/MessageIndexRebuildJobTest.php
index a756c069..7b77723e 100644
--- a/MLEB/Translate/tests/phpunit/MessageIndexRebuildJobTest.php
+++ b/MLEB/Translate/tests/phpunit/MessageIndexRebuildJobTest.php
@@ -27,7 +27,7 @@ class MessageIndexRebuildJobTest extends MediaWikiTestCase {
$wgHooks['TranslatePostInitGroups'] = [];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
diff --git a/MLEB/Translate/tests/phpunit/MockSuperUser.php b/MLEB/Translate/tests/phpunit/MockSuperUser.php
deleted file mode 100644
index 0ebe1356..00000000
--- a/MLEB/Translate/tests/phpunit/MockSuperUser.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/**
- * Just call SuperUser when you need to be able to do everything.
- */
-class MockSuperUser extends User {
- protected $id = 666;
-
- public function setId( $id ) {
- $this->id = $id;
- }
-
- public function getId() {
- return $this->id;
- }
-
- public function getName() {
- return 'SuperUser';
- }
-
- public function isAllowed( $right = '' ) {
- return true;
- }
-}
diff --git a/MLEB/Translate/tests/phpunit/PageTranslationTaggingTest.php b/MLEB/Translate/tests/phpunit/PageTranslationTaggingTest.php
index 2e2a6c20..e457aa70 100644
--- a/MLEB/Translate/tests/phpunit/PageTranslationTaggingTest.php
+++ b/MLEB/Translate/tests/phpunit/PageTranslationTaggingTest.php
@@ -18,7 +18,7 @@ class PageTranslationTaggingTest extends MediaWikiTestCase {
$wgHooks['TranslatePostInitGroups'] = [ 'MessageGroups::getTranslatablePages' ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
@@ -95,7 +95,7 @@ class PageTranslationTaggingTest extends MediaWikiTestCase {
}
public function testTranslationPageRestrictions() {
- $superUser = new MockSuperUser();
+ $superUser = $this->getTestSysop()->getUser();
$title = Title::newFromText( 'Translatable page' );
$page = WikiPage::factory( $title );
$content = ContentHandler::makeContent( '<translate>Hello</translate>', $title );
diff --git a/MLEB/Translate/tests/phpunit/SolrTTMServerTest.php b/MLEB/Translate/tests/phpunit/SolrTTMServerTest.php
index ac0a19d6..dbd22df6 100644
--- a/MLEB/Translate/tests/phpunit/SolrTTMServerTest.php
+++ b/MLEB/Translate/tests/phpunit/SolrTTMServerTest.php
@@ -30,7 +30,7 @@ class SolrTTMServerTest extends MediaWikiTestCase {
$wgHooks['TranslatePostInitGroups'] = [ [ $this, 'addGroups' ] ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
diff --git a/MLEB/Translate/tests/phpunit/SpecialPagesTest.php b/MLEB/Translate/tests/phpunit/SpecialPagesTest.php
index 4a412da8..e4bf26ef 100644
--- a/MLEB/Translate/tests/phpunit/SpecialPagesTest.php
+++ b/MLEB/Translate/tests/phpunit/SpecialPagesTest.php
@@ -26,7 +26,7 @@ class SpecialPagesTest extends MediaWikiTestCase {
$wgHooks['TranslatePostInitGroups'] = [];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
@@ -69,7 +69,7 @@ class SpecialPagesTest extends MediaWikiTestCase {
$this->assertTrue( true, "Special page $name was executed successfully with anon user" );
- $user = new MockSuperUser();
+ $user = $this->getTestSysop()->getUser();
$context->setUser( $user );
$page->setContext( $context );
diff --git a/MLEB/Translate/tests/phpunit/TranslateHooksTest.php b/MLEB/Translate/tests/phpunit/TranslateHooksTest.php
index e591fc81..c711c557 100644
--- a/MLEB/Translate/tests/phpunit/TranslateHooksTest.php
+++ b/MLEB/Translate/tests/phpunit/TranslateHooksTest.php
@@ -25,7 +25,7 @@ class TranslateHooksTest extends MediaWikiLangTestCase {
$wgHooks['TranslatePostInitGroups'] = [ [ $this, 'getTestGroups' ] ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
@@ -44,7 +44,7 @@ class TranslateHooksTest extends MediaWikiLangTestCase {
}
public function testPreventCategorization() {
- $user = new MockSuperUser();
+ $user = $this->getTestSysop()->getUser();
$title = Title::makeTitle( NS_MEDIAWIKI, 'ugakey1/fi' );
$wikipage = WikiPage::factory( $title );
$content = ContentHandler::makeContent( '[[Category:Shouldnotbe]]', $title );
diff --git a/MLEB/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php b/MLEB/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php
index ec4368e2..5bf8eff5 100644
--- a/MLEB/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php
+++ b/MLEB/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php
@@ -24,7 +24,7 @@ class TranslationFuzzyUpdaterTest extends MediaWikiTestCase {
$wgHooks['TranslatePostInitGroups'] = [ [ $this, 'getTestGroups' ] ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
diff --git a/MLEB/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php b/MLEB/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php
index 670c2def..4ce7eebe 100644
--- a/MLEB/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php
+++ b/MLEB/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php
@@ -24,7 +24,7 @@ class ApiQueryMessageGroupsTest extends ApiTestCase {
$wgHooks['TranslatePostInitGroups'] = [ [ $this, 'getTestGroups' ] ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
}
diff --git a/MLEB/Translate/tests/phpunit/api/ApiTranslationReviewTest.php b/MLEB/Translate/tests/phpunit/api/ApiTranslationReviewTest.php
index 8266c0d4..930dad0e 100644
--- a/MLEB/Translate/tests/phpunit/api/ApiTranslationReviewTest.php
+++ b/MLEB/Translate/tests/phpunit/api/ApiTranslationReviewTest.php
@@ -16,12 +16,16 @@ class ApiTranslationReviewTest extends MediaWikiTestCase {
global $wgHooks;
$this->setMwGlobals( [
'wgHooks' => $wgHooks,
- 'wgGroupPermissions' => [],
+ 'wgGroupPermissions' => [
+ 'sysop' => [
+ 'translate-messagereview' => true,
+ ],
+ ],
'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ],
] );
$wgHooks['TranslatePostInitGroups'] = [ [ $this, 'getTestGroups' ] ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
@@ -40,13 +44,11 @@ class ApiTranslationReviewTest extends MediaWikiTestCase {
}
public function testgetReviewBlockers() {
- $superUser1 = new MockSuperUser();
- $superUser1->setId( 1 );
+ $superUser1 = $this->getMutableTestUser( [ 'sysop', 'bureaucrat' ] )->getUser();
- $superUser2 = new MockSuperUser();
- $superUser2->setId( 2 );
+ $superUser2 = $this->getMutableTestUser( [ 'sysop', 'bureaucrat' ] )->getUser();
- $plainUser = User::newFromName( 'PlainUser' );
+ $plainUser = $this->getMutableTestUser()->getUser();
$title = Title::makeTitle( NS_MEDIAWIKI, 'Ugakey1/fi' );
$content = ContentHandler::makeContent( 'trans1', $title );
diff --git a/MLEB/Translate/tests/phpunit/tag/PageTranslationHooksTest.php b/MLEB/Translate/tests/phpunit/tag/PageTranslationHooksTest.php
index 375458b0..5aca5862 100644
--- a/MLEB/Translate/tests/phpunit/tag/PageTranslationHooksTest.php
+++ b/MLEB/Translate/tests/phpunit/tag/PageTranslationHooksTest.php
@@ -25,7 +25,7 @@ class PageTranslationHooksTest extends MediaWikiTestCase {
$wgHooks['TranslatePostInitGroups'] = [ 'MessageGroups::getTranslatablePages' ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
@@ -36,7 +36,7 @@ class PageTranslationHooksTest extends MediaWikiTestCase {
global $wgParser;
// Setup objects
- $superUser = new MockSuperUser();
+ $superUser = $this->getTestSysop()->getUser();
$translatablePageTitle = Title::newFromText( 'Vuosaari' );
$page = WikiPage::factory( $translatablePageTitle );
$text = '<translate>pupu</translate>';
diff --git a/MLEB/Translate/tests/qunit/.eslintrc.json b/MLEB/Translate/tests/qunit/.eslintrc.json
new file mode 100644
index 00000000..348a1b7f
--- /dev/null
+++ b/MLEB/Translate/tests/qunit/.eslintrc.json
@@ -0,0 +1,6 @@
+{
+ "extends": [
+ "wikimedia/qunit",
+ "../../.eslintrc.json"
+ ]
+}
diff --git a/MLEB/Translate/tests/qunit/ext.translate.parsers.test.js b/MLEB/Translate/tests/qunit/ext.translate.parsers.test.js
index 004d7dff..cc86ed1f 100644
--- a/MLEB/Translate/tests/qunit/ext.translate.parsers.test.js
+++ b/MLEB/Translate/tests/qunit/ext.translate.parsers.test.js
@@ -4,7 +4,7 @@
* @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
QUnit.module( 'ext.translate.parsers', QUnit.newMwEnvironment() );
@@ -13,21 +13,21 @@
mw.config.set( 'wgArticlePath', '/wiki/$1' );
assert.strictEqual(
- 'This page is [in English]',
mw.translate.formatMessageGently( 'This page is [in English]' ),
+ 'This page is [in English]',
'Brackets without protocol doesn\'t make a link'
);
assert.strictEqual(
- 'This page has <a href="https://www.mediawiki.org">a link</a>',
mw.translate.formatMessageGently( 'This page has [https://www.mediawiki.org a link]' ),
+ 'This page has <a href="https://www.mediawiki.org">a link</a>',
'Brackets with https:// protocol creates a link'
);
assert.strictEqual(
- 'No kun <a href="/wiki/m:MassMessage">m:MassMessage</a> ja plum <a href="/wiki/m:">Meta-Wiki</a>.',
mw.translate.formatMessageGently( 'No kun [[m:MassMessage]] ja plum [[m:|Meta-Wiki]].' ),
+ 'No kun <a href="/wiki/m:MassMessage">m:MassMessage</a> ja plum <a href="/wiki/m:">Meta-Wiki</a>.',
'Link parsing is non-greedy'
);
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/tests/qunit/ext.translate.special.pagemigration.test.js b/MLEB/Translate/tests/qunit/ext.translate.special.pagemigration.test.js
index e5c97ae5..f2218ba2 100644
--- a/MLEB/Translate/tests/qunit/ext.translate.special.pagemigration.test.js
+++ b/MLEB/Translate/tests/qunit/ext.translate.special.pagemigration.test.js
@@ -4,7 +4,7 @@
* @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
QUnit.module( 'ext.translate.special.pagemigration', QUnit.newMwEnvironment( {
@@ -20,7 +20,7 @@
done = assert.async();
mw.translate.getSourceUnits( 'Help:Special pages' ).done( function ( sourceUnits ) {
- assert.strictEqual( 1, sourceUnits.length, 'Source units retrieved' );
+ assert.strictEqual( sourceUnits.length, 1, 'Source units retrieved' );
done();
} );
@@ -34,7 +34,7 @@
done = assert.async();
mw.translate.getFuzzyTimestamp( 'ugagagagagaga/uga' ).fail( function ( timestamp ) {
- assert.strictEqual( undefined, timestamp, 'Page does not exist' );
+ assert.strictEqual( timestamp, undefined, 'Page does not exist' );
done();
} );
@@ -49,7 +49,7 @@
done = assert.async();
mw.translate.getFuzzyTimestamp( 'Help:Special pages/fr' ).done( function ( timestamp ) {
- assert.strictEqual( '2014-02-18T20:59:57.000Z', timestamp, 'Fuzzy timestamp retrieved' );
+ assert.strictEqual( timestamp, '2014-02-18T20:59:57.000Z', 'Fuzzy timestamp retrieved' );
done();
} );
@@ -65,7 +65,7 @@
done = assert.async();
mw.translate.splitTranslationPage( '2014-02-18T20:59:57.000Z', 'Help:Special pages/fr' )
.done( function ( translationUnits ) {
- assert.strictEqual( 3, translationUnits.length, 'Translation page split into units' );
+ assert.strictEqual( translationUnits.length, 3, 'Translation page split into units' );
done();
} );
@@ -91,9 +91,9 @@
result2 = [ 'abc\nlmn\n', '==123==', 'pqr', '', '', '==456==' ];
translationUnits1 = mw.translate.alignHeaders( sourceUnits, translationUnits1 );
- assert.deepEqual( translationUnits1, result1, 'h2 headers aligned without merging' );
+ assert.deepEqual( result1, translationUnits1, 'h2 headers aligned without merging' );
translationUnits2 = mw.translate.alignHeaders( sourceUnits, translationUnits2 );
- assert.deepEqual( translationUnits2, result2, 'h2 headers aligned with merging' );
+ assert.deepEqual( result2, translationUnits2, 'h2 headers aligned with merging' );
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/MLEB/Translate/translationaids/DocumentationAid.php b/MLEB/Translate/translationaids/DocumentationAid.php
index 48d330eb..f19c03ba 100644
--- a/MLEB/Translate/translationaids/DocumentationAid.php
+++ b/MLEB/Translate/translationaids/DocumentationAid.php
@@ -29,7 +29,9 @@ class DocumentationAid extends TranslationAid {
return [
'language' => $wgContLang->getCode(),
'value' => $info,
- 'html' => $this->context->getOutput()->parse( $info ),
+ 'html' => TranslateUtils::parseAsInterface(
+ $this->context->getOutput(), $info
+ ),
];
}
}
diff --git a/MLEB/Translate/ttmserver/TTMServerMessageUpdateJob.php b/MLEB/Translate/ttmserver/TTMServerMessageUpdateJob.php
index 9eb379ec..7a6a91d7 100644
--- a/MLEB/Translate/ttmserver/TTMServerMessageUpdateJob.php
+++ b/MLEB/Translate/ttmserver/TTMServerMessageUpdateJob.php
@@ -52,7 +52,7 @@ class TTMServerMessageUpdateJob extends Job {
/**
* @param MessageHandle $handle
* @param string $command
- * @return TTMServerMessageUpdateJob
+ * @return self
*/
public static function newJob( MessageHandle $handle, $command ) {
$job = new self( $handle->getTitle(), [ 'command' => $command ] );
@@ -243,9 +243,9 @@ class TTMServerMessageUpdateJob extends Job {
/**
* Extracted for testing purpose
- * @param TTMServerMessageUpdateJob $job
+ * @param self $job
*/
- protected function resend( TTMServerMessageUpdateJob $job ) {
+ protected function resend( self $job ) {
JobQueueGroup::singleton()->push( $job );
}
diff --git a/MLEB/Translate/utils/HTMLJsSelectToInputField.php b/MLEB/Translate/utils/HTMLJsSelectToInputField.php
index ad7dedb2..57f4443c 100644
--- a/MLEB/Translate/utils/HTMLJsSelectToInputField.php
+++ b/MLEB/Translate/utils/HTMLJsSelectToInputField.php
@@ -15,7 +15,7 @@ class HTMLJsSelectToInputField extends HTMLTextField {
* @param string $value
* @return string
*/
- function getInputHTML( $value ) {
+ public function getInputHTML( $value ) {
$input = parent::getInputHTML( $value );
if ( isset( $this->mParams['select'] ) ) {
@@ -45,7 +45,7 @@ class HTMLJsSelectToInputField extends HTMLTextField {
* @param array $alldata
* @return bool|string
*/
- function validate( $value, $alldata ) {
+ public function validate( $value, $alldata ) {
$p = parent::validate( $value, $alldata );
if ( $p !== true ) {
@@ -77,7 +77,7 @@ class HTMLJsSelectToInputField extends HTMLTextField {
* @param array $alldata
* @return string
*/
- function filter( $value, $alldata ) {
+ public function filter( $value, $alldata ) {
$value = parent::filter( $value, $alldata );
return implode( ', ', $this->tidy( $value ) );
diff --git a/MLEB/Translate/utils/MessageGroupCache.php b/MLEB/Translate/utils/MessageGroupCache.php
index fa44f561..f0b9c4bd 100644
--- a/MLEB/Translate/utils/MessageGroupCache.php
+++ b/MLEB/Translate/utils/MessageGroupCache.php
@@ -135,7 +135,7 @@ class MessageGroupCache {
$cache->set( $key, $value );
}
- $cache->set( '#created', $created ? $created : wfTimestamp() );
+ $cache->set( '#created', $created ?: wfTimestamp() );
$cache->set( '#updated', wfTimestamp() );
$cache->set( '#filehash', $hash );
$cache->set( '#msgcount', count( $messages ) );
@@ -230,7 +230,7 @@ class MessageGroupCache {
/**
* Open the cache for reading.
- * @return MessageGroupCache
+ * @return self
*/
protected function open() {
if ( $this->cache === null ) {
diff --git a/MLEB/Translate/utils/MessageGroupStatesUpdaterJob.php b/MLEB/Translate/utils/MessageGroupStatesUpdaterJob.php
index 7ad6ddd0..c40bc4ec 100644
--- a/MLEB/Translate/utils/MessageGroupStatesUpdaterJob.php
+++ b/MLEB/Translate/utils/MessageGroupStatesUpdaterJob.php
@@ -38,7 +38,7 @@ class MessageGroupStatesUpdaterJob extends Job {
/**
* @param Title $title
- * @return MessageGroupStatesUpdaterJob
+ * @return self
*/
public static function newJob( $title ) {
$job = new self( $title );
diff --git a/MLEB/Translate/utils/MessageGroupStats.php b/MLEB/Translate/utils/MessageGroupStats.php
index dd40af82..2fbcf9f9 100644
--- a/MLEB/Translate/utils/MessageGroupStats.php
+++ b/MLEB/Translate/utils/MessageGroupStats.php
@@ -5,7 +5,6 @@
* @file
* @author Wikia (trac.wikia-code.com/browser/wikia/trunk/extensions/wikia/TranslationStatistics)
* @author Niklas Laxström
- * @copyright Copyright © 2012-2013 Niklas Laxström
* @license GPL-2.0-or-later
*/
@@ -28,7 +27,9 @@ class MessageGroupStats {
const FUZZY = 2; ///< Array index
const PROOFREAD = 3; ///< Array index
+ /// If stats are not cached, do not attempt to calculate them on the fly
const FLAG_CACHE_ONLY = 1;
+ /// Ignore cached values. Useful for updating stale values.
const FLAG_NO_CACHE = 2;
/**
@@ -37,6 +38,11 @@ class MessageGroupStats {
protected static $updates = [];
/**
+ * @var string[]
+ */
+ private static $languages;
+
+ /**
* Returns empty stats array. Useful because the number of elements
* may change.
* @return int[]
@@ -56,6 +62,17 @@ class MessageGroupStats {
return [ null, null, null, null ];
}
+ private static function isValidLanguage( $code ) {
+ $languages = self::getLanguages();
+ return in_array( $code, $languages );
+ }
+
+ private static function isValidMessageGroup( MessageGroup $group = null ) {
+ /* In case some code calls stats for dynamic groups. Calculating these numbers
+ * don't make sense for dynamic groups, and would just throw an exception. */
+ return $group && !MessageGroups::isDynamic( $group );
+ }
+
/**
* Returns stats for given group in given language.
* @param string $id Group id
@@ -64,22 +81,19 @@ class MessageGroupStats {
* @return null[]|int[]
*/
public static function forItem( $id, $code, $flags = 0 ) {
- $res = self::selectRowsIdLang( [ $id ], $code, $flags );
- $stats = self::extractResults( $res, [ $id ] );
-
- /* In case some code calls this for dynamic groups, return the default
- * values for unknown/incomplete stats. Calculating these numbers don't
- * make sense for dynamic groups, and would just throw an exception. */
$group = MessageGroups::getGroup( $id );
- if ( MessageGroups::isDynamic( $group ) ) {
- $stats[$id][$code] = self::getUnknownStats();
+ if ( !self::isValidMessageGroup( $group ) || !self::isValidLanguage( $code ) ) {
+ return self::getUnknownStats();
}
+ $res = self::selectRowsIdLang( [ $id ], [ $code ], $flags );
+ $stats = self::extractResults( $res, [ $id ] );
+
if ( !isset( $stats[$id][$code] ) ) {
$stats[$id][$code] = self::forItemInternal( $stats, $group, $code, $flags );
}
- self::queueUpdates();
+ self::queueUpdates( $flags );
return $stats[$id][$code];
}
@@ -91,13 +105,17 @@ class MessageGroupStats {
* @return array[]
*/
public static function forLanguage( $code, $flags = 0 ) {
+ if ( !self::isValidLanguage( $code ) ) {
+ return self::getUnknownStats();
+ }
+
$stats = self::forLanguageInternal( $code, [], $flags );
$flattened = [];
foreach ( $stats as $group => $languages ) {
$flattened[$group] = $languages[$code];
}
- self::queueUpdates();
+ self::queueUpdates( $flags );
return $flattened;
}
@@ -110,12 +128,13 @@ class MessageGroupStats {
*/
public static function forGroup( $id, $flags = 0 ) {
$group = MessageGroups::getGroup( $id );
- if ( $group === null ) {
+ if ( !self::isValidMessageGroup( $group ) ) {
return [];
}
+
$stats = self::forGroupInternal( $group, [], $flags );
- self::queueUpdates();
+ self::queueUpdates( $flags );
return $stats[$id];
}
@@ -134,40 +153,95 @@ class MessageGroupStats {
$stats = self::forGroupInternal( $g, $stats, $flags );
}
- self::queueUpdates();
+ self::queueUpdates( $flags );
return $stats;
}
/**
- * Clears the cache for all groups associated with the message.
+ * Recalculate stats for all groups associated with the message.
*
* Hook: TranslateEventTranslationReview
* @param MessageHandle $handle
*/
public static function clear( MessageHandle $handle ) {
$code = $handle->getCode();
- $dbids = array_map( 'self::getDatabaseIdForGroupId', $handle->getGroupIds() );
-
- $dbw = wfGetDB( DB_MASTER );
- $conds = [ 'tgs_group' => $dbids, 'tgs_lang' => $code ];
- $dbw->delete( self::TABLE, $conds, __METHOD__ );
- wfDebugLog( 'messagegroupstats', 'Cleared ' . serialize( $conds ) );
+ $groups = self::getSortedGroupsForClearing( $handle->getGroupIds() );
+ self::internalClearGroups( $code, $groups );
}
+ /**
+ * Recalculate stats for given group(s).
+ *
+ * @param string|string[] $id Message group ids.
+ */
public static function clearGroup( $id ) {
- // T206904: Fix countable error for group id
- // NOTE: An empty string ('') is not a valid group id
- if ( $id === [] ) {
- return;
+ $languages = self::getLanguages();
+ $groups = self::getSortedGroupsForClearing( (array)$id );
+
+ // Do one language at a time, to save memory
+ foreach ( $languages as $code ) {
+ self::internalClearGroups( $code, $groups );
+ }
+ }
+
+ /**
+ * Helper for clear and clearGroup that caches already loaded statistics.
+ *
+ * @param string $code
+ * @param MessageGroup[] $groups
+ */
+ private static function internalClearGroups( $code, array $groups ) {
+ $stats = [];
+ foreach ( $groups as $id => $group ) {
+ // $stats is modified by reference
+ self::forItemInternal( $stats, $group, $code, 0 );
}
+ self::queueUpdates( 0 );
+ }
- $dbids = array_map( 'self::getDatabaseIdForGroupId', (array)$id );
+ /**
+ * Get sorted message groups ids that can be used for efficient clearing.
+ *
+ * To optimize performance, we first need to process all non-aggregate groups.
+ * Because aggregate groups are flattened (see self::expandAggregates), we can
+ * process them any order and allow use of cache, except for the aggregate groups
+ * itself.
+ *
+ * @param string[] $ids
+ * @return string[]
+ */
+ private static function getSortedGroupsForClearing( array $ids ) {
+ $groups = array_map( [ MessageGroups::class, 'getGroup' ], $ids );
+ // Sanity: Remove any invalid groups
+ $groups = array_filter( $groups );
+
+ $sorted = [];
+ $aggs = [];
+ foreach ( $groups as $group ) {
+ if ( $group instanceof AggregateMessageGroup ) {
+ $aggs[$group->getId()] = $group;
+ } else {
+ $sorted[$group->getId()] = $group;
+ }
+ }
- $dbw = wfGetDB( DB_MASTER );
- $conds = [ 'tgs_group' => $dbids ];
- $dbw->delete( self::TABLE, $conds, __METHOD__ );
- wfDebugLog( 'messagegroupstats', 'Cleared ' . serialize( $conds ) );
+ return array_merge( $sorted, $aggs );
+ }
+
+ /**
+ * Get list of supported languages for statistics.
+ *
+ * @return string[]
+ */
+ private static function getLanguages() {
+ if ( self::$languages === null ) {
+ $languages = array_keys( TranslateUtils::getLanguageNames( 'en' ) );
+ sort( $languages );
+ self::$languages = $languages;
+ }
+
+ return self::$languages;
}
public static function clearLanguage( $code ) {
@@ -260,7 +334,7 @@ class MessageGroupStats {
$groups = MessageGroups::singleton()->getGroups();
$ids = array_keys( $groups );
- $res = self::selectRowsIdLang( null, $code, $flags );
+ $res = self::selectRowsIdLang( null, [ $code ], $flags );
$stats = self::extractResults( $res, $ids, $stats );
foreach ( $groups as $id => $group ) {
@@ -298,15 +372,14 @@ class MessageGroupStats {
* @param int $flags Combination of FLAG_* constants.
* @return array[]
*/
- protected static function forGroupInternal( $group, array $stats = [], $flags ) {
+ protected static function forGroupInternal( MessageGroup $group, array $stats = [], $flags ) {
$id = $group->getId();
+
$res = self::selectRowsIdLang( [ $id ], null, $flags );
$stats = self::extractResults( $res, [ $id ], $stats );
# Go over each language filling missing entries
- $languages = array_keys( TranslateUtils::getLanguageNames( 'en' ) );
- // This is for calculating things in correct order
- sort( $languages );
+ $languages = self::getLanguages();
foreach ( $languages as $code ) {
if ( isset( $stats[$id][$code] ) ) {
continue;
@@ -330,7 +403,7 @@ class MessageGroupStats {
* @param int $flags Combination of FLAG_* constants.
* @return Traversable Database result object
*/
- protected static function selectRowsIdLang( $ids = null, $codes = null, $flags ) {
+ protected static function selectRowsIdLang( array $ids = null, array $codes = null, $flags ) {
if ( $flags & self::FLAG_NO_CACHE ) {
return [];
}
@@ -358,7 +431,7 @@ class MessageGroupStats {
* @param int $flags Combination of FLAG_* constants.
* @return null[]|int[]
*/
- protected static function forItemInternal( &$stats, $group, $code, $flags ) {
+ protected static function forItemInternal( &$stats, MessageGroup $group, $code, $flags ) {
$id = $group->getId();
if ( $flags & self::FLAG_CACHE_ONLY ) {
@@ -388,6 +461,12 @@ class MessageGroupStats {
'tgs_proofread' => $aggregates[self::PROOFREAD],
];
+ // For big and lengthy updates, attempt some interim saves. This might not have
+ // any effect, because writes to the database may be deferred.
+ if ( count( self::$updates ) % 100 === 0 ) {
+ self::queueUpdates( $flags );
+ }
+
return $aggregates;
}
@@ -395,13 +474,19 @@ class MessageGroupStats {
$aggregates = self::getEmptyStats();
$expanded = self::expandAggregates( $group );
- if ( $expanded === [] ) {
- return $aggregates;
+ $subGroupIds = array_keys( $expanded );
+
+ // Performance: if we have per-call cache of stats, do not query them again.
+ foreach ( $subGroupIds as $index => $sid ) {
+ if ( isset( $stats[$sid][$code] ) ) {
+ unset( $subGroupIds[ $index ] );
+ }
}
- $subGroupIds = array_keys( $expanded );
- $res = self::selectRowsIdLang( $subGroupIds, $code, $flags );
- $stats = self::extractResults( $res, $subGroupIds, $stats );
+ if ( $subGroupIds !== [] ) {
+ $res = self::selectRowsIdLang( $subGroupIds, [ $code ], $flags );
+ $stats = self::extractResults( $res, $subGroupIds, $stats );
+ }
foreach ( $expanded as $sid => $subgroup ) {
# Discouraged groups may belong to another group, usually if there
@@ -439,7 +524,7 @@ class MessageGroupStats {
* @param string $code Language code
* @return int[] ( total, translated, fuzzy, proofread )
*/
- protected static function calculateGroup( $group, $code ) {
+ protected static function calculateGroup( MessageGroup $group, $code ) {
global $wgTranslateDocumentationLanguageCode;
// Calculate if missing and store in the db
$collection = $group->initCollection( $code );
@@ -495,12 +580,12 @@ class MessageGroupStats {
return $number < 0 ? "$number" : "+$number";
}
- protected static function queueUpdates() {
+ protected static function queueUpdates( $flags ) {
if ( wfReadOnly() ) {
return;
}
- if ( !count( self::$updates ) ) {
+ if ( self::$updates === [] ) {
return;
}
@@ -509,26 +594,32 @@ class MessageGroupStats {
$table = self::TABLE;
$updates = &self::$updates;
- self::queueWithLock(
+ $updateOp = self::withLock(
$dbw,
'updates',
__METHOD__,
- function ( IDatabase $dbw, $method ) use( $table, &$updates ) {
- $dbw->insert(
- $table,
- $updates,
- $method,
- [ 'IGNORE' ]
- );
+ function ( IDatabase $dbw, $method ) use ( $table, &$updates ) {
+ // Maybe another deferred update already processed these
+ if ( $updates === [] ) {
+ return;
+ }
+ $primaryKey = [ 'tgs_group', 'tgs_lang' ];
+ $dbw->replace( $table, $primaryKey, $updates, $method );
$updates = [];
}
);
+
+ if ( defined( 'MEDIAWIKI_JOB_RUNNER' ) ) {
+ call_user_func( $updateOp );
+ } else {
+ DeferredUpdates::addCallableUpdate( $updateOp );
+ }
}
- protected static function queueWithLock( IDatabase $dbw, $key, $method, $callback ) {
+ protected static function withLock( IDatabase $dbw, $key, $method, $callback ) {
$fname = __METHOD__;
- DeferredUpdates::addCallableUpdate( function () use ( $dbw, $key, $method, $callback, $fname ) {
+ return function () use ( $dbw, $key, $method, $callback, $fname ) {
$lockName = 'MessageGroupStats:' . $key;
if ( !$dbw->lock( $lockName, $fname, 1 ) ) {
return; // raced out
@@ -539,7 +630,7 @@ class MessageGroupStats {
$dbw->commit( $fname, 'flush' );
$dbw->unlock( $lockName, $fname );
- } );
+ };
}
public static function getDatabaseIdForGroupId( $id ) {
diff --git a/MLEB/Translate/utils/MessageGroupStatsRebuildJob.php b/MLEB/Translate/utils/MessageGroupStatsRebuildJob.php
new file mode 100644
index 00000000..d6d3b448
--- /dev/null
+++ b/MLEB/Translate/utils/MessageGroupStatsRebuildJob.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Contains class with job for rebuilding message group stats.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Job for rebuilding message index.
+ *
+ * @ingroup JobQueue
+ */
+class MessageGroupStatsRebuildJob extends Job {
+ /**
+ * @param array $params
+ * @return self
+ */
+ public static function newJob( $params ) {
+ $job = new self( Title::newMainPage(), $params );
+ return $job;
+ }
+
+ /**
+ * @param Title $title
+ * @param array $params
+ */
+ public function __construct( $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
+ }
+
+ public function run() {
+ $params = $this->params;
+ $flags = 0;
+
+ if ( isset( $params[ 'purge' ] ) && $params[ 'purge' ] ) {
+ $flags |= MessageGroupStats::FLAG_NO_CACHE;
+ }
+
+ if ( isset( $params[ 'groupid' ] ) ) {
+ MessageGroupStats::forGroup( $params[ 'groupid' ], $flags );
+ }
+ if ( isset( $params[ 'languagecode' ] ) ) {
+ MessageGroupStats::forGroup( $params[ 'languagecode' ], $flags );
+ }
+
+ return true;
+ }
+}
diff --git a/MLEB/Translate/utils/MessageIndex.php b/MLEB/Translate/utils/MessageIndex.php
index 6d0bb520..0015d0aa 100644
--- a/MLEB/Translate/utils/MessageIndex.php
+++ b/MLEB/Translate/utils/MessageIndex.php
@@ -275,7 +275,7 @@ abstract class MessageIndex {
* @param array $diff
*/
protected function clearMessageGroupStats( array $diff ) {
- MessageGroupStats::forGroup( $diff['values'], MessageGroupStats::FLAG_NO_CACHE );
+ MessageGroupStats::clearGroup( $diff['values'] );
foreach ( $diff['keys'] as $keys ) {
foreach ( $keys as $key => $data ) {
diff --git a/MLEB/Translate/utils/MessageIndexRebuildJob.php b/MLEB/Translate/utils/MessageIndexRebuildJob.php
index a3cc905f..2b66205f 100644
--- a/MLEB/Translate/utils/MessageIndexRebuildJob.php
+++ b/MLEB/Translate/utils/MessageIndexRebuildJob.php
@@ -16,7 +16,7 @@
class MessageIndexRebuildJob extends Job {
/**
- * @return MessageIndexRebuildJob
+ * @return self
*/
public static function newJob() {
$job = new self( Title::newMainPage() );
@@ -52,12 +52,4 @@ class MessageIndexRebuildJob extends Job {
$this->run();
}
}
-
- /**
- * @deprecated since 2017-11-03 alias for insertIntoJobQueue()
- */
- public function insert() {
- $this->insertIntoJobQueue();
- }
-
}
diff --git a/MLEB/Translate/utils/MessageWebImporter.php b/MLEB/Translate/utils/MessageWebImporter.php
index f94d94eb..fb874dc5 100644
--- a/MLEB/Translate/utils/MessageWebImporter.php
+++ b/MLEB/Translate/utils/MessageWebImporter.php
@@ -73,7 +73,7 @@ class MessageWebImporter {
* @return User
*/
public function getUser() {
- return $this->user ? $this->user : RequestContext::getMain()->getUser();
+ return $this->user ?: RequestContext::getMain()->getUser();
}
/**
diff --git a/MLEB/Translate/utils/StatsTable.php b/MLEB/Translate/utils/StatsTable.php
index b06a0f6e..0e9bc937 100644
--- a/MLEB/Translate/utils/StatsTable.php
+++ b/MLEB/Translate/utils/StatsTable.php
@@ -1,7 +1,5 @@
<?php
/**
- * Contains logic for special page Special:LanguageStats.
- *
* @file
* @author Siebrand Mazeland
* @author Niklas Laxström
@@ -10,14 +8,10 @@
*/
/**
- * Implements includable special page Special:LanguageStats which provides
- * translation statistics for all defined message groups.
+ * Implements generation of HTML stats table.
*
* Loosely based on the statistics code in phase3/maintenance/language
*
- * Use {{Special:LanguageStats/nl/1}} to show for 'nl' and suppres completely
- * translated groups.
- *
* @ingroup Stats
*/
class StatsTable {
@@ -63,7 +57,6 @@ class StatsTable {
if ( $bgcolor ) {
$attributes['style'] = 'background-color: #' . $bgcolor;
- $attributes['class'] = 'hover-color';
}
$element = Html::element( 'td', $attributes, $in );
@@ -71,35 +64,28 @@ class StatsTable {
return $element;
}
- public function getBackgroundColor( $subset, $total, $fuzzy = false ) {
- MediaWiki\suppressWarnings();
- $v = round( 255 * $subset / $total );
- MediaWiki\restoreWarnings();
-
+ public function getBackgroundColor( $percentage, $fuzzy = false ) {
if ( $fuzzy ) {
- // Weigh fuzzy with factor 20.
- $v = $v * 20;
-
- if ( $v > 255 ) {
- $v = 255;
- }
-
- $v = 255 - $v;
+ // Steeper scale for fuzzy
+ // (0), [0-2), [2-4), ... [12-100)
+ $index = min( 7, ceil( 50 * $percentage ) );
+ $colors = [
+ '', 'fedbd7', 'fecec8', 'fec1b9',
+ 'fcb5ab', 'fba89d', 'f89b8f', 'f68d81'
+ ];
+ return $colors[ $index ];
}
- if ( $v < 128 ) {
- // Red to Yellow
- $red = 0.26 * $v + 221;
- $green = 1.33 * $v + 33;
- $blue = 51;
- } else {
- // Yellow to Green
- $red = 2 * ( 255 - $v );
- $green = 0.22 * ( 255 - $v ) + 175;
- $blue = 0.67 * $v - 34;
- }
+ // https://gka.github.io/palettes/#colors=#36c,#eaf3ff|steps=20|bez=1|coL=1
+ // Color groups for (0-10], (10-20], ... (90-100], (100)
+ $index = floor( $percentage * 10 );
+ $colors = [
+ 'eaf3ff', 'e2ebfc', 'dae3fa', 'd2dbf7', 'c9d4f5',
+ 'c1ccf2', 'b8c4ef', 'b1bced', 'a8b4ea', '9fade8',
+ '96a6e5'
+ ];
- return sprintf( '%02X%02X%02X', $red, $green, $blue );
+ return $colors[ $index ];
}
/**
@@ -136,6 +122,7 @@ class StatsTable {
wfMessage( 'translate-total' ),
wfMessage( 'translate-untranslated' ),
wfMessage( 'translate-percentage-complete' ),
+ wfMessage( 'translate-percentage-proofread' ),
wfMessage( 'translate-percentage-fuzzy' ),
], $this->extraColumns );
}
@@ -147,7 +134,7 @@ class StatsTable {
// Create table header
$out = Html::openElement(
'table',
- [ 'class' => 'statstable wikitable' ]
+ [ 'class' => 'statstable' ]
);
$out .= "\n\t" . Html::openElement( 'thead' );
@@ -188,6 +175,7 @@ class StatsTable {
$total = $stats[MessageGroupStats::TOTAL];
$translated = $stats[MessageGroupStats::TRANSLATED];
$fuzzy = $stats[MessageGroupStats::FUZZY];
+ $proofread = $stats[MessageGroupStats::PROOFREAD];
if ( $total === null ) {
$na = "\n\t\t" . Html::element( 'td', [ 'data-sort-value' => -1 ], '...' );
@@ -208,17 +196,23 @@ class StatsTable {
if ( $total === 0 ) {
$transRatio = 0;
$fuzzyRatio = 0;
+ $proofRatio = 0;
} else {
$transRatio = $translated / $total;
$fuzzyRatio = $fuzzy / $total;
+ $proofRatio = $translated === 0 ? 0 : $proofread / $translated;
}
$out .= "\n\t\t" . $this->element( $this->formatPercentage( $transRatio, 'floor' ),
- $this->getBackgroundColor( $translated, $total ),
+ $this->getBackgroundColor( $transRatio ),
sprintf( '%1.5f', $transRatio ) );
+ $out .= "\n\t\t" . $this->element( $this->formatPercentage( $proofRatio, 'floor' ),
+ $this->getBackgroundColor( $proofRatio ),
+ sprintf( '%1.5f', $proofRatio ) );
+
$out .= "\n\t\t" . $this->element( $this->formatPercentage( $fuzzyRatio, 'ceil' ),
- $this->getBackgroundColor( $fuzzy, $total, true ),
+ $this->getBackgroundColor( $fuzzyRatio, true ),
sprintf( '%1.5f', $fuzzyRatio ) );
return $out;
diff --git a/MLEB/Translate/utils/TranslateSandboxEmailJob.php b/MLEB/Translate/utils/TranslateSandboxEmailJob.php
index 7ffb7513..955e7156 100644
--- a/MLEB/Translate/utils/TranslateSandboxEmailJob.php
+++ b/MLEB/Translate/utils/TranslateSandboxEmailJob.php
@@ -3,7 +3,7 @@
class TranslateSandboxEmailJob extends Job {
/**
* @param array $params
- * @return TranslateSandboxEmailJob
+ * @return self
*/
public static function newJob( array $params ) {
return new self( Title::newMainPage(), $params );
diff --git a/MLEB/Translate/utils/TranslationHelpers.php b/MLEB/Translate/utils/TranslationHelpers.php
index 4cb2ca8c..1551a1a8 100644
--- a/MLEB/Translate/utils/TranslationHelpers.php
+++ b/MLEB/Translate/utils/TranslationHelpers.php
@@ -372,7 +372,7 @@ class TranslationHelpers {
$divAttribs = [ 'dir' => 'ltr', 'lang' => 'en', 'class' => 'mw-content-ltr' ];
if ( (string)$info === '' ) {
- $info = $context->msg( 'translate-edit-no-information' )->text();
+ $info = $context->msg( 'translate-edit-no-information' )->plain();
$class = 'mw-sp-translate-edit-noinfo';
$lang = $context->getLanguage();
// The message saying that there's no info, should be translated
@@ -380,9 +380,9 @@ class TranslationHelpers {
}
$class .= ' mw-sp-translate-message-documentation';
- $contents = $context->getOutput()->parse( $info );
- // Remove whatever block element wrapup the parser likes to add
- $contents = preg_replace( '~^<([a-z]+)>(.*)</\1>$~us', '\2', $contents );
+ $contents = TranslateUtils::parseInlineAsInterface(
+ $context->getOutput(), $info
+ );
return TranslateUtils::fieldset(
$context->msg( 'translate-edit-information' )->rawParams( $edit )->escaped(),
diff --git a/MLEB/Translate/webservices/MicrosoftWebService.php b/MLEB/Translate/webservices/MicrosoftWebService.php
index f559bac7..88dcf53c 100644
--- a/MLEB/Translate/webservices/MicrosoftWebService.php
+++ b/MLEB/Translate/webservices/MicrosoftWebService.php
@@ -9,8 +9,8 @@
*/
/**
- * Implements support for Microsoft translation api v2.
- * @see https://msdn.microsoft.com/en-us/library/ff512421.aspx
+ * Implements support for Microsoft translation api v3.
+ * @see https://docs.microsoft.com/fi-fi/azure/cognitive-services/Translator/reference/v3-0-reference
* @ingroup TranslationWebService
* @since 2013-01-01
*/
@@ -21,69 +21,32 @@ class MicrosoftWebService extends TranslationWebService {
protected function mapCode( $code ) {
$map = [
- 'zh-hant' => 'zh-CHT',
- 'zh-hans' => 'zh-CHS',
+ 'tl' => 'fil',
+ 'zh-hant' => 'zh-Hant',
+ 'zh-hans' => 'zh-Hans',
+ 'sr-ec' => 'sr-Cyrl',
+ 'sr-el' => 'sr-Latn',
+ 'pt-br' => 'pt',
];
return isset( $map[$code] ) ? $map[$code] : $code;
}
- protected function getMSTokens( $clientID, $clientSecret ) {
- $authUrl = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/";
-
- $params = [
- 'grant_type' => "client_credentials",
- 'scope' => "http://api.microsofttranslator.com",
- 'client_id' => $clientID,
- 'client_secret' => $clientSecret
- ];
-
- $params = wfArrayToCgi( $params );
-
- $options['method'] = 'POST';
- $options['timeout'] = $this->config['timeout'];
- $options['postData'] = $params;
-
- $req = MWHttpRequest::factory( $authUrl, $options );
-
- $status = $req->execute();
-
- if ( !$status->isOK() ) {
- $error = $req->getContent();
- // Most likely a timeout or other general error
- throw new TranslationWebServiceException(
- 'Http::get failed: ' . $authUrl . serialize( $error ) . serialize( $status )
- );
- }
- $ret = $req->getContent();
-
- $response = json_decode( $ret, true );
- if ( isset( $response['error'] ) ) {
- throw new TranslationWebServiceException( $response['error_description'] );
- }
-
- return $response['access_token'];
- }
-
protected function doPairs() {
- if ( !isset( $this->config['clientId'] ) || !isset( $this->config['clientSecret'] ) ) {
- throw new TranslationWebServiceConfigurationException( 'clientId or clientSecret is not set' );
+ if ( !isset( $this->config['key'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'key is not set' );
}
- $clientID = $this->config['clientId'];
- $clientSecret = $this->config['clientSecret'];
-
- // get access token from service
- $accessToken = $this->getMSTokens( $clientID, $clientSecret );
+ $key = $this->config['key'];
$options = [];
$options['method'] = 'GET';
$options['timeout'] = $this->config['timeout'];
- $url = 'http://api.microsofttranslator.com/V2/Http.svc/GetLanguagesForTranslate?';
+ $url = $this->config['url'] . '/languages?api-version=3.0';
$req = MWHttpRequest::factory( $url, $options );
- $req->setHeader( 'Authorization', "Bearer $accessToken" );
+ $req->setHeader( 'Ocp-Apim-Subscription-Key', $key );
$status = $req->execute();
if ( !$status->isOK() ) {
@@ -93,13 +56,17 @@ class MicrosoftWebService extends TranslationWebService {
'Http::get failed:' . serialize( $error ) . serialize( $status )
);
}
- $xml = simplexml_load_string( $req->getContent() );
- $languages = [];
- foreach ( $xml->string as $language ) {
- $languages[] = (string)$language;
+ $json = $req->getContent();
+ $response = json_decode( $json, true );
+ if ( !isset( $response[ 'translation' ] ) ) {
+ throw new TranslationWebServiceException(
+ 'Unable to fetch list of available languages: ' . $json
+ );
}
+ $languages = array_keys( $response[ 'translation' ] );
+
// Let's make a cartesian product, assuming we can translate from any language to any language
$pairs = [];
foreach ( $languages as $from ) {
@@ -112,41 +79,49 @@ class MicrosoftWebService extends TranslationWebService {
}
protected function getQuery( $text, $from, $to ) {
- if ( !isset( $this->config['clientId'] ) || !isset( $this->config['clientSecret'] ) ) {
- throw new TranslationWebServiceConfigurationException(
- 'clientId or clientSecret is not set'
- );
+ if ( !isset( $this->config['key'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'key is not set' );
}
+ $key = $this->config['key'];
$text = trim( $text );
$text = $this->wrapUntranslatable( $text );
- // get access token from service
- $accessToken = $this->getMSTokens(
- $this->config['clientId'],
- $this->config['clientSecret']
- );
-
+ $url = $this->config['url'] . '/translate';
$params = [
- 'text' => $text,
+ 'api-version' => '3.0',
'from' => $from,
'to' => $to,
+ 'textType' => 'html',
];
$headers = [
- 'Authorization' => 'Bearer ' . $accessToken,
+ 'Ocp-Apim-Subscription-Key' => $key,
+ 'Content-Type' => 'application/json',
];
+ $body = json_encode( [ [ 'Text' => $text ] ] );
+
+ if ( strlen( $body ) > 5000 ) {
+ throw new TranslationWebServiceInvalidInputException( 'Source text too long' );
+ }
- return TranslationQuery::factory( $this->config['url'] )
+ return TranslationQuery::factory( $url )
->timeout( $this->config['timeout'] )
->queryParameters( $params )
- ->queryHeaders( $headers );
+ ->queryHeaders( $headers )
+ ->postWithData( $body );
}
protected function parseResponse( TranslationQueryResponse $reply ) {
$body = $reply->getBody();
- $text = preg_replace( '~<string.*>(.*)</string>~s', '\\1', $body );
- $text = Sanitizer::decodeCharReferences( $text );
+ $response = json_decode( $body, true );
+ if ( !isset( $response[ 0 ][ 'translations' ][ 0 ][ 'text' ] ) ) {
+ throw new TranslationWebServiceException(
+ 'Unable to parse translation response: ' . $body
+ );
+ }
+
+ $text = $response[ 0 ][ 'translations' ][ 0 ][ 'text' ];
$text = $this->unwrapUntranslatable( $text );
return $text;
@@ -155,13 +130,13 @@ class MicrosoftWebService extends TranslationWebService {
/// Override from parent
protected function wrapUntranslatable( $text ) {
$pattern = '~%[^% ]+%|\$\d|{VAR:[^}]+}|{?{(PLURAL|GRAMMAR|GENDER):[^|]+\||%(\d\$)?[sd]~';
- $wrap = '<span translate="no">\0</span>';
+ $wrap = '<span class="notranslate">\0</span>';
return preg_replace( $pattern, $wrap, $text );
}
/// Override from parent
protected function unwrapUntranslatable( $text ) {
- $pattern = '~<span translate="no">(.*?)</span>~';
+ $pattern = '~<span class="notranslate">\s*(.*?)\s*</span>~';
return preg_replace( $pattern, '\1', $text );
}
}
diff --git a/MLEB/Translate/webservices/TranslationQuery.php b/MLEB/Translate/webservices/TranslationQuery.php
index 5b6a8174..3e0fbf31 100644
--- a/MLEB/Translate/webservices/TranslationQuery.php
+++ b/MLEB/Translate/webservices/TranslationQuery.php
@@ -27,7 +27,7 @@ class TranslationQuery {
// URL is mandatory, so using it here
public static function factory( $url ) {
- $obj = new TranslationQuery();
+ $obj = new self();
$obj->url = $url;
return $obj;
}
diff --git a/MLEB/Translate/webservices/TranslationQueryResponse.php b/MLEB/Translate/webservices/TranslationQueryResponse.php
index 13540eda..a8f9f6dd 100644
--- a/MLEB/Translate/webservices/TranslationQueryResponse.php
+++ b/MLEB/Translate/webservices/TranslationQueryResponse.php
@@ -28,7 +28,7 @@ class TranslationQueryResponse {
public static function newFromMultiHttp( array $data, TranslationQuery $query ) {
$response = $data['response'];
- $obj = new TranslationQueryResponse();
+ $obj = new self();
$obj->code = (int)$response['code'];
$obj->reason = $response['reason'];
$obj->headers = $response['headers'];
diff --git a/MLEB/Translate/webservices/TranslationWebService.php b/MLEB/Translate/webservices/TranslationWebService.php
index 77f0d13d..a72be868 100644
--- a/MLEB/Translate/webservices/TranslationWebService.php
+++ b/MLEB/Translate/webservices/TranslationWebService.php
@@ -93,6 +93,9 @@ abstract class TranslationWebService implements LoggerAwareInterface {
* @throws TranslationWebServiceConfigurationException
*/
public function getQueries( $text, $from, $to ) {
+ $from = $this->mapCode( $from );
+ $to = $this->mapCode( $to );
+
try {
return [ $this->getQuery( $text, $from, $to ) ];
} catch ( TranslationWebServiceException $e ) {
@@ -113,7 +116,10 @@ abstract class TranslationWebService implements LoggerAwareInterface {
*/
public function getResultData( TranslationQueryResponse $response ) {
if ( $response->getStatusCode() !== 200 ) {
- $this->reportTranslationServiceFailure( $response->getStatusMessage() );
+ $this->reportTranslationServiceFailure(
+ 'STATUS: ' . $response->getStatusMessage() . "\n" .
+ 'BODY: ' . $response->getBody()
+ );
return null;
}
@@ -191,7 +197,6 @@ abstract class TranslationWebService implements LoggerAwareInterface {
protected $config;
/**
- * TranslationWebService constructor.
* @param string $service Name of the webservice
* @param array $config
*/
@@ -211,6 +216,9 @@ abstract class TranslationWebService implements LoggerAwareInterface {
*/
public function isSupportedLanguagePair( $from, $to ) {
$pairs = $this->getSupportedLanguagePairs();
+ $from = $this->mapCode( $from );
+ $to = $this->mapCode( $to );
+
return isset( $pairs[$from][$to] );
}