summaryrefslogtreecommitdiff
path: root/www/wiki
diff options
context:
space:
mode:
authorYaco <franco@reevo.org>2019-09-05 03:38:33 -0300
committerYaco <franco@reevo.org>2019-09-05 03:38:33 -0300
commit873e7fe4eae4dce45487f280b9d349431d2100bc (patch)
treeb1f502217abcb7d75e596fd3f9e63ef672a4e44d /www/wiki
parente675e9cc189218d8c3d07611789bd8c93e5958c4 (diff)
Actualiza extensiones para traduccion (no usadas en este momento)
Diffstat (limited to 'www/wiki')
-rw-r--r--www/wiki/extensions/SimpleLanguageSelector/extension.json3
-rw-r--r--www/wiki/extensions/SimpleLanguageSelector/includes/Hooks.php7
-rw-r--r--www/wiki/extensions/Translate/.eslintrc.json16
-rw-r--r--www/wiki/extensions/Translate/.phpcs.xml29
-rw-r--r--www/wiki/extensions/Translate/.stylelintrc.json8
-rw-r--r--www/wiki/extensions/Translate/CODE_OF_CONDUCT.md1
-rw-r--r--www/wiki/extensions/Translate/Gruntfile.js31
-rw-r--r--www/wiki/extensions/Translate/HISTORY2
-rw-r--r--www/wiki/extensions/Translate/MediaWikiMessageChecker.php117
-rw-r--r--www/wiki/extensions/Translate/Message.php42
-rw-r--r--www/wiki/extensions/Translate/MessageChecks.php130
-rw-r--r--www/wiki/extensions/Translate/MessageCollection.php202
-rw-r--r--www/wiki/extensions/Translate/MessageGroupConfigurationParser.php14
-rw-r--r--www/wiki/extensions/Translate/MessageGroups.php375
-rw-r--r--www/wiki/extensions/Translate/MetaYamlSchemaExtender.php2
-rw-r--r--www/wiki/extensions/Translate/RELEASE-NOTES15
-rw-r--r--www/wiki/extensions/Translate/Translate.alias.php1988
-rw-r--r--www/wiki/extensions/Translate/Translate.i18n.magic.php12
-rw-r--r--www/wiki/extensions/Translate/Translate.php300
-rw-r--r--www/wiki/extensions/Translate/TranslateEditAddons.php183
-rw-r--r--www/wiki/extensions/Translate/TranslateHooks.php411
-rw-r--r--www/wiki/extensions/Translate/TranslateUtils.php286
-rw-r--r--www/wiki/extensions/Translate/api/ApiAggregateGroups.php86
-rw-r--r--www/wiki/extensions/Translate/api/ApiGroupReview.php65
-rw-r--r--www/wiki/extensions/Translate/api/ApiQueryLanguageStats.php27
-rw-r--r--www/wiki/extensions/Translate/api/ApiQueryMessageCollection.php124
-rw-r--r--www/wiki/extensions/Translate/api/ApiQueryMessageGroupStats.php25
-rw-r--r--www/wiki/extensions/Translate/api/ApiQueryMessageGroups.php107
-rw-r--r--www/wiki/extensions/Translate/api/ApiQueryMessageTranslations.php51
-rw-r--r--www/wiki/extensions/Translate/api/ApiQueryTranslationAids.php53
-rw-r--r--www/wiki/extensions/Translate/api/ApiSearchTranslations.php80
-rw-r--r--www/wiki/extensions/Translate/api/ApiStatsQuery.php54
-rw-r--r--www/wiki/extensions/Translate/api/ApiTTMServer.php43
-rw-r--r--www/wiki/extensions/Translate/api/ApiTranslateSandbox.php71
-rw-r--r--www/wiki/extensions/Translate/api/ApiTranslationCheck.php78
-rw-r--r--www/wiki/extensions/Translate/api/ApiTranslationReview.php56
-rw-r--r--www/wiki/extensions/Translate/api/ApiTranslationStash.php52
-rw-r--r--www/wiki/extensions/Translate/composer.json30
-rw-r--r--www/wiki/extensions/Translate/data/group-yaml-schema.yaml13
-rw-r--r--www/wiki/extensions/Translate/data/plural-gettext.txt2
-rw-r--r--www/wiki/extensions/Translate/extension-wip.json1013
-rw-r--r--www/wiki/extensions/Translate/ffs/AmdFFS.php28
-rw-r--r--www/wiki/extensions/Translate/ffs/AndroidXmlFFS.php165
-rw-r--r--www/wiki/extensions/Translate/ffs/AppleFFS.php22
-rw-r--r--www/wiki/extensions/Translate/ffs/DtdFFS.php18
-rw-r--r--www/wiki/extensions/Translate/ffs/FFS.php28
-rw-r--r--www/wiki/extensions/Translate/ffs/FlatPhpFFS.php46
-rw-r--r--www/wiki/extensions/Translate/ffs/GettextFFS.php139
-rw-r--r--www/wiki/extensions/Translate/ffs/IniFFS.php18
-rw-r--r--www/wiki/extensions/Translate/ffs/IntuitionTextdomains.php20
-rw-r--r--www/wiki/extensions/Translate/ffs/JavaFFS.php56
-rw-r--r--www/wiki/extensions/Translate/ffs/JavaScriptFFS.php44
-rw-r--r--www/wiki/extensions/Translate/ffs/JsonFFS.php98
-rw-r--r--www/wiki/extensions/Translate/ffs/MediaWikiComplexMessages.php117
-rw-r--r--www/wiki/extensions/Translate/ffs/MediaWikiExtensions.php96
-rw-r--r--www/wiki/extensions/Translate/ffs/SimpleFFS.php43
-rw-r--r--www/wiki/extensions/Translate/ffs/XliffFFS.php10
-rw-r--r--www/wiki/extensions/Translate/ffs/YamlFFS.php186
-rw-r--r--www/wiki/extensions/Translate/hooks.txt52
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ar.json116
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ast.json46
-rw-r--r--www/wiki/extensions/Translate/i18n/api/be-tarask.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/api/bg.json61
-rw-r--r--www/wiki/extensions/Translate/i18n/api/bn.json12
-rw-r--r--www/wiki/extensions/Translate/i18n/api/bs.json122
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ca.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ckb.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/api/cs.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/api/da.json32
-rw-r--r--www/wiki/extensions/Translate/i18n/api/de.json42
-rw-r--r--www/wiki/extensions/Translate/i18n/api/diq.json27
-rw-r--r--www/wiki/extensions/Translate/i18n/api/en.json45
-rw-r--r--www/wiki/extensions/Translate/i18n/api/es.json45
-rw-r--r--www/wiki/extensions/Translate/i18n/api/eu.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/api/fa.json37
-rw-r--r--www/wiki/extensions/Translate/i18n/api/fi.json36
-rw-r--r--www/wiki/extensions/Translate/i18n/api/fr.json52
-rw-r--r--www/wiki/extensions/Translate/i18n/api/fy.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/api/gl.json40
-rw-r--r--www/wiki/extensions/Translate/i18n/api/he.json44
-rw-r--r--www/wiki/extensions/Translate/i18n/api/hi.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/api/hr.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/api/hu.json88
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ia.json24
-rw-r--r--www/wiki/extensions/Translate/i18n/api/id.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/api/is.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/api/it.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ja.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/api/kab.json37
-rw-r--r--www/wiki/extensions/Translate/i18n/api/kjp.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ko.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ksh.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ku-latn.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/api/lb.json23
-rw-r--r--www/wiki/extensions/Translate/i18n/api/li.json61
-rw-r--r--www/wiki/extensions/Translate/i18n/api/lt.json36
-rw-r--r--www/wiki/extensions/Translate/i18n/api/lv.json16
-rw-r--r--www/wiki/extensions/Translate/i18n/api/mk.json56
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ms.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/api/my.json27
-rw-r--r--www/wiki/extensions/Translate/i18n/api/nb.json106
-rw-r--r--www/wiki/extensions/Translate/i18n/api/nl.json24
-rw-r--r--www/wiki/extensions/Translate/i18n/api/nn.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/api/oc.json20
-rw-r--r--www/wiki/extensions/Translate/i18n/api/pam.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/api/pl.json33
-rw-r--r--www/wiki/extensions/Translate/i18n/api/pt-br.json129
-rw-r--r--www/wiki/extensions/Translate/i18n/api/pt.json128
-rw-r--r--www/wiki/extensions/Translate/i18n/api/qqq.json48
-rw-r--r--www/wiki/extensions/Translate/i18n/api/qu.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/api/roa-tara.json54
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ru.json62
-rw-r--r--www/wiki/extensions/Translate/i18n/api/sah.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/api/skr-arab.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/api/sq.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/api/sr-ec.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/api/sr-el.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/api/sv.json34
-rw-r--r--www/wiki/extensions/Translate/i18n/api/ta.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/api/th.json17
-rw-r--r--www/wiki/extensions/Translate/i18n/api/tl.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/api/tr.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/api/tt-cyrl.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/api/uk.json41
-rw-r--r--www/wiki/extensions/Translate/i18n/api/yi.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/api/yue.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/api/zh-hans.json55
-rw-r--r--www/wiki/extensions/Translate/i18n/api/zh-hant.json119
-rw-r--r--www/wiki/extensions/Translate/i18n/core/abs.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ace.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/core/aeb-arab.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/af.json46
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ais.json24
-rw-r--r--www/wiki/extensions/Translate/i18n/core/aln.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ami.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ar.json161
-rw-r--r--www/wiki/extensions/Translate/i18n/core/arc.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ary.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/core/arz.json46
-rw-r--r--www/wiki/extensions/Translate/i18n/core/as.json18
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ast.json54
-rw-r--r--www/wiki/extensions/Translate/i18n/core/atj.json16
-rw-r--r--www/wiki/extensions/Translate/i18n/core/av.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/core/avk.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/awa.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/core/az.json17
-rw-r--r--www/wiki/extensions/Translate/i18n/core/azb.json35
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ba.json14
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ban.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/bar.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/core/be-tarask.json43
-rw-r--r--www/wiki/extensions/Translate/i18n/core/be.json37
-rw-r--r--www/wiki/extensions/Translate/i18n/core/bg.json193
-rw-r--r--www/wiki/extensions/Translate/i18n/core/bgn.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/core/bho.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/core/bn.json119
-rw-r--r--www/wiki/extensions/Translate/i18n/core/bo.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/core/bqi.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/br.json44
-rw-r--r--www/wiki/extensions/Translate/i18n/core/bs.json166
-rw-r--r--www/wiki/extensions/Translate/i18n/core/btm.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ca.json68
-rw-r--r--www/wiki/extensions/Translate/i18n/core/cak.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/cdo.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ce.json50
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ceb.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ckb.json30
-rw-r--r--www/wiki/extensions/Translate/i18n/core/cs.json48
-rw-r--r--www/wiki/extensions/Translate/i18n/core/csb.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/core/cv.json15
-rw-r--r--www/wiki/extensions/Translate/i18n/core/cy.json23
-rw-r--r--www/wiki/extensions/Translate/i18n/core/da.json58
-rw-r--r--www/wiki/extensions/Translate/i18n/core/de-ch.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/core/de-formal.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/core/de.json69
-rw-r--r--www/wiki/extensions/Translate/i18n/core/din.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/core/diq.json243
-rw-r--r--www/wiki/extensions/Translate/i18n/core/dsb.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/core/dty.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ee.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/el.json68
-rw-r--r--www/wiki/extensions/Translate/i18n/core/en-gb.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/core/en.json57
-rw-r--r--www/wiki/extensions/Translate/i18n/core/eo.json108
-rw-r--r--www/wiki/extensions/Translate/i18n/core/es.json80
-rw-r--r--www/wiki/extensions/Translate/i18n/core/et.json52
-rw-r--r--www/wiki/extensions/Translate/i18n/core/eu.json34
-rw-r--r--www/wiki/extensions/Translate/i18n/core/fa.json123
-rw-r--r--www/wiki/extensions/Translate/i18n/core/fi.json68
-rw-r--r--www/wiki/extensions/Translate/i18n/core/fo.json25
-rw-r--r--www/wiki/extensions/Translate/i18n/core/fon.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/fr.json126
-rw-r--r--www/wiki/extensions/Translate/i18n/core/frp.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/core/frr.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/fur.json12
-rw-r--r--www/wiki/extensions/Translate/i18n/core/fy.json29
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ga.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/core/gaa.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/gcr.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/gl.json114
-rw-r--r--www/wiki/extensions/Translate/i18n/core/gom-latn.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/core/gor.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/got.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/gsw.json28
-rw-r--r--www/wiki/extensions/Translate/i18n/core/gu.json37
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ha.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/core/hak.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/core/he.json76
-rw-r--r--www/wiki/extensions/Translate/i18n/core/hi.json30
-rw-r--r--www/wiki/extensions/Translate/i18n/core/hif-latn.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/hr.json246
-rw-r--r--www/wiki/extensions/Translate/i18n/core/hsb.json28
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ht.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/core/hu.json66
-rw-r--r--www/wiki/extensions/Translate/i18n/core/hyw.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ia.json65
-rw-r--r--www/wiki/extensions/Translate/i18n/core/id.json189
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ig.json25
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ilo.json47
-rw-r--r--www/wiki/extensions/Translate/i18n/core/inh.json18
-rw-r--r--www/wiki/extensions/Translate/i18n/core/io.json99
-rw-r--r--www/wiki/extensions/Translate/i18n/core/is.json91
-rw-r--r--www/wiki/extensions/Translate/i18n/core/it.json64
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ja.json73
-rw-r--r--www/wiki/extensions/Translate/i18n/core/jam.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/core/jbo.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/core/jv.json448
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ka.json22
-rw-r--r--www/wiki/extensions/Translate/i18n/core/kaa.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/kab.json238
-rw-r--r--www/wiki/extensions/Translate/i18n/core/kbp.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/kiu.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/core/kjp.json90
-rw-r--r--www/wiki/extensions/Translate/i18n/core/kk-arab.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/kk-cyrl.json29
-rw-r--r--www/wiki/extensions/Translate/i18n/core/kk-latn.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/km.json45
-rw-r--r--www/wiki/extensions/Translate/i18n/core/kn.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ko.json84
-rw-r--r--www/wiki/extensions/Translate/i18n/core/krl.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ksh.json28
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ku-latn.json24
-rw-r--r--www/wiki/extensions/Translate/i18n/core/kum.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/kw.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ky.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/core/la.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lag.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lb.json52
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lfn.json20
-rw-r--r--www/wiki/extensions/Translate/i18n/core/li.json80
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lij.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lki.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lld.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lmo.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lrc.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lt.json87
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ltg.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lus.json28
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lv.json56
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lzh.json20
-rw-r--r--www/wiki/extensions/Translate/i18n/core/lzz.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/core/mai.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/core/map-bms.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/core/mg.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/core/min.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/core/mk.json86
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ml.json35
-rw-r--r--www/wiki/extensions/Translate/i18n/core/mni.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/mnw.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/mo.json37
-rw-r--r--www/wiki/extensions/Translate/i18n/core/mr.json31
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ms.json30
-rw-r--r--www/wiki/extensions/Translate/i18n/core/mt.json12
-rw-r--r--www/wiki/extensions/Translate/i18n/core/mui.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/mwl.json20
-rw-r--r--www/wiki/extensions/Translate/i18n/core/my.json271
-rw-r--r--www/wiki/extensions/Translate/i18n/core/myv.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/core/nah.json15
-rw-r--r--www/wiki/extensions/Translate/i18n/core/nan.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/nb.json79
-rw-r--r--www/wiki/extensions/Translate/i18n/core/nds.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ne.json47
-rw-r--r--www/wiki/extensions/Translate/i18n/core/nl.json83
-rw-r--r--www/wiki/extensions/Translate/i18n/core/nn.json48
-rw-r--r--www/wiki/extensions/Translate/i18n/core/nqo.json15
-rw-r--r--www/wiki/extensions/Translate/i18n/core/nys.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/oc.json166
-rw-r--r--www/wiki/extensions/Translate/i18n/core/or.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/core/pa.json18
-rw-r--r--www/wiki/extensions/Translate/i18n/core/pam.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/core/pdc.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/pfl.json28
-rw-r--r--www/wiki/extensions/Translate/i18n/core/pl.json86
-rw-r--r--www/wiki/extensions/Translate/i18n/core/pms.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/core/pnb.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ps.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/core/pt-br.json137
-rw-r--r--www/wiki/extensions/Translate/i18n/core/pt.json95
-rw-r--r--www/wiki/extensions/Translate/i18n/core/qqq.json70
-rw-r--r--www/wiki/extensions/Translate/i18n/core/qu.json28
-rw-r--r--www/wiki/extensions/Translate/i18n/core/rif.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/core/rm.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ro.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/core/roa-tara.json80
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ru.json87
-rw-r--r--www/wiki/extensions/Translate/i18n/core/rue.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sa.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sah.json21
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sat.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sc.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sco.json25
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sd.json50
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sdh.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ses.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sgs.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/shn.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/shy-latn.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/core/si.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sk.json68
-rw-r--r--www/wiki/extensions/Translate/i18n/core/skr-arab.json76
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sl.json64
-rw-r--r--www/wiki/extensions/Translate/i18n/core/so.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sq.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sr-ec.json431
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sr-el.json420
-rw-r--r--www/wiki/extensions/Translate/i18n/core/stq.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sty.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/su.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sv.json68
-rw-r--r--www/wiki/extensions/Translate/i18n/core/sw.json14
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ta.json33
-rw-r--r--www/wiki/extensions/Translate/i18n/core/tay.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/core/tcy.json47
-rw-r--r--www/wiki/extensions/Translate/i18n/core/te.json45
-rw-r--r--www/wiki/extensions/Translate/i18n/core/tg-cyrl.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/core/tg-latn.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/th.json281
-rw-r--r--www/wiki/extensions/Translate/i18n/core/tk.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/core/tl.json22
-rw-r--r--www/wiki/extensions/Translate/i18n/core/tly.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/core/tr.json72
-rw-r--r--www/wiki/extensions/Translate/i18n/core/trv.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/tt-cyrl.json114
-rw-r--r--www/wiki/extensions/Translate/i18n/core/tyv.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/core/udm.json16
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ug-arab.json47
-rw-r--r--www/wiki/extensions/Translate/i18n/core/uk.json70
-rw-r--r--www/wiki/extensions/Translate/i18n/core/ur.json198
-rw-r--r--www/wiki/extensions/Translate/i18n/core/uz.json72
-rw-r--r--www/wiki/extensions/Translate/i18n/core/vec.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/core/vep.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/core/vi.json61
-rw-r--r--www/wiki/extensions/Translate/i18n/core/vo.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/wa.json25
-rw-r--r--www/wiki/extensions/Translate/i18n/core/xal.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/core/xh.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/xsy.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/yi.json46
-rw-r--r--www/wiki/extensions/Translate/i18n/core/yo.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/core/yue.json45
-rw-r--r--www/wiki/extensions/Translate/i18n/core/zgh.json31
-rw-r--r--www/wiki/extensions/Translate/i18n/core/zh-hans.json82
-rw-r--r--www/wiki/extensions/Translate/i18n/core/zh-hant.json117
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/abs.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ace.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/af.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ais.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ami.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ar.json126
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/arz.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/as.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ast.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/atj.json12
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/av.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/avk.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/awa.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/az.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/azb.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ba.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/bar.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/bcl.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/be-tarask.json33
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/be.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/bg.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/bho.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/bn.json46
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/bqi.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/br.json16
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/bs.json164
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/btm.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ca.json48
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/cdo.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ce.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ckb.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/cs.json17
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/csb.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/da.json56
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/de.json29
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/diq.json18
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/dsb.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/el.json19
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/en.json31
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/eo.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/es.json30
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/et.json19
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/eu.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/fa.json144
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/fi.json47
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/fr.json38
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/frp.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/fy.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ga.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/gaa.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/gcr.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/gl.json20
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/glk.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/gom-latn.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/gor.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/got.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/gsw.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/gu.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/hak.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/he.json35
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/hi.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/hif-latn.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/hr.json54
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/hsb.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ht.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/hu.json101
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/hyw.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ia.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/id.json19
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ie.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ig.json24
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/inh.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/io.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/is.json179
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/it.json30
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ja.json39
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/jv.json165
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ka.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/kab.json64
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/kbp.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/kiu.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/kjp.json16
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/kk-cyrl.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/km.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/kn.json30
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ko.json83
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ksh.json15
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ku-latn.json20
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/kum.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/kw.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ky.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/lag.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/lb.json28
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/lfn.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/li.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/lo.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/lrc.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/lt.json79
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/lv.json19
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/lzz.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/mai.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/min.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/mk.json42
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ml.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/mni.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/mnw.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/mo.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/mr.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ms.json14
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/mwl.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/my.json102
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/myv.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/nah.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/nb.json84
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/nds-nl.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ne.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/nl.json59
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/nn.json28
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/nqo.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/nys.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/oc.json44
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/or.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/pam.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/pdc.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/pfl.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/pl.json51
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/pms.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ps.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/pt-br.json107
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/pt.json68
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/qqq.json69
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/qu.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/rm.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ro.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/roa-tara.json44
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ru.json31
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/rue.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sa.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sah.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sat.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sco.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sd.json14
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sdh.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ses.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/shi.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/shn.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/shy-latn.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/si.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sk.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/skr-arab.json25
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sl.json29
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sr-ec.json171
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sr-el.json163
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sty.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/su.json12
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sv.json30
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/sw.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ta.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/tay.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/tcy.json42
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/te.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/th.json52
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/tl.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/tr.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/trv.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/tzm.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/udm.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ug-arab.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/uk.json31
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/ur.json31
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/vep.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/vi.json12
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/xsy.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/yi.json18
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/yo.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/zgh.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/zh-hans.json42
-rw-r--r--www/wiki/extensions/Translate/i18n/pagetranslation/zh-hant.json95
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/af.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ar.json33
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ast.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/bg.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/bn.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/bs.json46
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/da.json24
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/de.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/diq.json21
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/en.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/es.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/eu.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/fa.json12
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/fi.json23
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/fr.json12
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/fy.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/gl.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/he.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/hi.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/hr.json14
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/hu.json46
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ia.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/is.json14
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ja.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/kab.json28
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/kjp.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ko.json15
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ksh.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ku-latn.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/lag.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/lb.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/lki.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/lt.json46
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/mk.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/mr.json48
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ms.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/my.json46
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/nb.json53
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/nl.json15
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/oc.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/pl.json20
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ps.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/pt-br.json50
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/pt.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/qqq.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/qu.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ro.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ru.json14
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/sah.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/sd.json35
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/sk.json12
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/skr-arab.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/sr-ec.json14
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/sr-el.json17
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/sv.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/ta.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/tcy.json19
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/tg-cyrl.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/tr.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/uk.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/vi.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/zh-hans.json19
-rw-r--r--www/wiki/extensions/Translate/i18n/sandbox/zh-hant.json15
-rw-r--r--www/wiki/extensions/Translate/i18n/search/af.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ais.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ar.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ast.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/atj.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/search/az.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/be-tarask.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/be.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/search/bg.json15
-rw-r--r--www/wiki/extensions/Translate/i18n/search/bn.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/search/br.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/search/bs.json31
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ca.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ce.json15
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ckb.json12
-rw-r--r--www/wiki/extensions/Translate/i18n/search/cs.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/da.json16
-rw-r--r--www/wiki/extensions/Translate/i18n/search/de.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/search/diq.json31
-rw-r--r--www/wiki/extensions/Translate/i18n/search/dsb.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/el.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/en.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/search/eo.json27
-rw-r--r--www/wiki/extensions/Translate/i18n/search/es.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/search/et.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/search/eu.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/search/fa.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/search/fo.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/fr.json20
-rw-r--r--www/wiki/extensions/Translate/i18n/search/fy.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/search/gl.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/search/gu.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/he.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/search/hi.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/search/hr.json30
-rw-r--r--www/wiki/extensions/Translate/i18n/search/hsb.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/search/hu.json30
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ia.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ig.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ilo.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/search/inh.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/search/is.json30
-rw-r--r--www/wiki/extensions/Translate/i18n/search/it.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ja.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ka.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/kab.json29
-rw-r--r--www/wiki/extensions/Translate/i18n/search/kiu.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/search/kjp.json19
-rw-r--r--www/wiki/extensions/Translate/i18n/search/kk-cyrl.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/km.json24
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ko.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ksh.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ku-latn.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/lag.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/search/lb.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/lfn.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/search/lkt.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/search/lrc.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/lt.json28
-rw-r--r--www/wiki/extensions/Translate/i18n/search/mk.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/search/mr.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ms.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/mwl.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/search/my.json31
-rw-r--r--www/wiki/extensions/Translate/i18n/search/nb.json27
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ne.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/search/nl.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/search/nn.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/search/oc.json14
-rw-r--r--www/wiki/extensions/Translate/i18n/search/pl.json2
-rw-r--r--www/wiki/extensions/Translate/i18n/search/pms.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ps.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/pt-br.json31
-rw-r--r--www/wiki/extensions/Translate/i18n/search/pt.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/search/qqq.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/search/qu.json6
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ro.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/roa-tara.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/search/ru.json17
-rw-r--r--www/wiki/extensions/Translate/i18n/search/sd.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/search/sk.json4
-rw-r--r--www/wiki/extensions/Translate/i18n/search/sl.json30
-rw-r--r--www/wiki/extensions/Translate/i18n/search/sr-ec.json33
-rw-r--r--www/wiki/extensions/Translate/i18n/search/sr-el.json26
-rw-r--r--www/wiki/extensions/Translate/i18n/search/sv.json5
-rw-r--r--www/wiki/extensions/Translate/i18n/search/tay.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/search/tcy.json11
-rw-r--r--www/wiki/extensions/Translate/i18n/search/te.json12
-rw-r--r--www/wiki/extensions/Translate/i18n/search/tg-cyrl.json9
-rw-r--r--www/wiki/extensions/Translate/i18n/search/th.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/search/tr.json10
-rw-r--r--www/wiki/extensions/Translate/i18n/search/tt-cyrl.json3
-rw-r--r--www/wiki/extensions/Translate/i18n/search/udm.json8
-rw-r--r--www/wiki/extensions/Translate/i18n/search/uk.json7
-rw-r--r--www/wiki/extensions/Translate/i18n/search/vi.json1
-rw-r--r--www/wiki/extensions/Translate/i18n/search/yi.json13
-rw-r--r--www/wiki/extensions/Translate/i18n/search/zh-hans.json22
-rw-r--r--www/wiki/extensions/Translate/i18n/search/zh-hant.json7
-rw-r--r--www/wiki/extensions/Translate/insertables/CombinedInsertablesSuggester.php29
-rw-r--r--www/wiki/extensions/Translate/insertables/Insertable.php2
-rw-r--r--www/wiki/extensions/Translate/insertables/InsertablesSuggester.php2
-rw-r--r--www/wiki/extensions/Translate/insertables/MediaWikiInsertablesSuggester.php19
-rw-r--r--www/wiki/extensions/Translate/insertables/NumericalParameterInsertablesSuggester.php29
-rw-r--r--www/wiki/extensions/Translate/insertables/TranslatablePageInsertablesSuggester.php4
-rw-r--r--www/wiki/extensions/Translate/messagegroups/AggregateMessageGroup.php30
-rw-r--r--www/wiki/extensions/Translate/messagegroups/FileBasedMessageGroup.php72
-rw-r--r--www/wiki/extensions/Translate/messagegroups/MediaWikiExtensionMessageGroup.php4
-rw-r--r--www/wiki/extensions/Translate/messagegroups/MessageGroup.php14
-rw-r--r--www/wiki/extensions/Translate/messagegroups/MessageGroupBase.php88
-rw-r--r--www/wiki/extensions/Translate/messagegroups/MessageGroupOld.php61
-rw-r--r--www/wiki/extensions/Translate/messagegroups/RecentAdditionsMessageGroup.php20
-rw-r--r--www/wiki/extensions/Translate/messagegroups/RecentMessageGroup.php48
-rw-r--r--www/wiki/extensions/Translate/messagegroups/SandboxMessageGroup.php10
-rw-r--r--www/wiki/extensions/Translate/messagegroups/WikiMessageGroup.php6
-rw-r--r--www/wiki/extensions/Translate/messagegroups/WikiPageMessageGroup.php115
-rw-r--r--www/wiki/extensions/Translate/messagegroups/WorkflowStatesMessageGroup.php4
-rw-r--r--www/wiki/extensions/Translate/package.json13
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.css4
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.dropdownmenu.css4
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.editor.css211
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.groupselector.less143
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.legacy.css6
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.loader.css20
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.messagetable.less283
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.navitoggle.css22
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.pagemode.css38
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.proofread.css60
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.quickedit.css63
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.special.aggregategroups.css33
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css75
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.special.pagemigration.css51
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.special.pagepreparation.css8
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.special.searchtranslations.css60
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.special.supportedlanguages.css3
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.special.translate.css103
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.special.translationstash.css21
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.statsbar.css13
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.statstable.less63
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.tag.languages.css34
-rw-r--r--www/wiki/extensions/Translate/resources/css/ext.translate.workflowselector.css17
-rw-r--r--www/wiki/extensions/Translate/resources/images/action-edit.svg38
-rw-r--r--www/wiki/extensions/Translate/resources/images/add.svg24
-rw-r--r--www/wiki/extensions/Translate/resources/images/check-small.svg30
-rw-r--r--www/wiki/extensions/Translate/resources/images/check-sprite-ltr.svg102
-rw-r--r--www/wiki/extensions/Translate/resources/images/check-sprite-rtl.svg97
-rw-r--r--www/wiki/extensions/Translate/resources/images/close.svg43
-rw-r--r--www/wiki/extensions/Translate/resources/images/contract-ltr.svg55
-rw-r--r--www/wiki/extensions/Translate/resources/images/contract-rtl.svg57
-rw-r--r--www/wiki/extensions/Translate/resources/images/edit-mark.svg34
-rw-r--r--www/wiki/extensions/Translate/resources/images/expand-ltr.svg55
-rw-r--r--www/wiki/extensions/Translate/resources/images/expand-rtl.svg57
-rw-r--r--www/wiki/extensions/Translate/resources/images/label-clock.svg33
-rw-r--r--www/wiki/extensions/Translate/resources/images/label-flag.svg33
-rw-r--r--www/wiki/extensions/Translate/resources/images/label-pen.svg33
-rw-r--r--www/wiki/extensions/Translate/resources/images/label-tick.svg33
-rw-r--r--www/wiki/extensions/Translate/resources/images/loading.svg44
-rw-r--r--www/wiki/extensions/Translate/resources/images/outdated-ltr.svg38
-rw-r--r--www/wiki/extensions/Translate/resources/images/outdated-rtl.svg38
-rw-r--r--www/wiki/extensions/Translate/resources/images/paste.svg20
-rw-r--r--www/wiki/extensions/Translate/resources/images/plus_darkgray.svg5
-rw-r--r--www/wiki/extensions/Translate/resources/images/project.svg75
-rw-r--r--www/wiki/extensions/Translate/resources/images/remove.svg24
-rw-r--r--www/wiki/extensions/Translate/resources/images/search.svg34
-rw-r--r--www/wiki/extensions/Translate/resources/images/switch.svg6
-rw-r--r--www/wiki/extensions/Translate/resources/images/translate-ltr.svg34
-rw-r--r--www/wiki/extensions/Translate/resources/images/translate-rtl.svg34
-rw-r--r--www/wiki/extensions/Translate/resources/images/trash_darkgray.svg5
-rw-r--r--www/wiki/extensions/Translate/resources/images/user-small.svg14
-rw-r--r--www/wiki/extensions/Translate/resources/images/view-list-hi.svg54
-rw-r--r--www/wiki/extensions/Translate/resources/images/view-list.svg55
-rw-r--r--www/wiki/extensions/Translate/resources/images/view-page-hi.svg42
-rw-r--r--www/wiki/extensions/Translate/resources/images/view-page.svg51
-rw-r--r--www/wiki/extensions/Translate/resources/images/view-proofread-hi.svg38
-rw-r--r--www/wiki/extensions/Translate/resources/images/view-proofread.svg38
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.base.js45
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.dropdownmenu.js6
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.editor.helpers.js40
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.editor.js297
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.editor.shortcuts.js43
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.groupselector.js84
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.hooks.js33
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.messagetable.js524
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.multiselectautocomplete.js18
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.navitoggle.js34
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.pagemode.js26
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.pagetranslation.uls.js6
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.parsers.js6
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.proofread.js59
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.recentgroups.js18
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.selecttoinput.js20
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.aggregategroups.js85
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.importtranslations.js6
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.languagestats.js67
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js59
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.operatorsuggest.js4
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.pagemigration.js75
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.pagepreparation.js118
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.pagetranslation.js8
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.searchtranslations.js109
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.translate.js261
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.translationstash.js14
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.translationstats.js73
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.statsbar.js33
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.storage.js11
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.translationstashstorage.js16
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.workflowselector.js17
-rw-r--r--www/wiki/extensions/Translate/resources/js/jquery.ajaxdispatcher.js17
-rw-r--r--www/wiki/extensions/Translate/resources/js/jquery.autosize.js222
-rw-r--r--www/wiki/extensions/Translate/resources/js/jquery.textchange.js6
-rw-r--r--www/wiki/extensions/Translate/scripts/TranslateCliLogger.php20
-rw-r--r--www/wiki/extensions/Translate/scripts/TranslateStatsOutput.php6
-rw-r--r--www/wiki/extensions/Translate/scripts/characterEditStats.php81
-rw-r--r--www/wiki/extensions/Translate/scripts/create-language-models.php35
-rw-r--r--www/wiki/extensions/Translate/scripts/createCheckIndex.php19
-rw-r--r--www/wiki/extensions/Translate/scripts/createMessageIndex.php6
-rw-r--r--www/wiki/extensions/Translate/scripts/expand-groupspec.php58
-rw-r--r--www/wiki/extensions/Translate/scripts/export.php14
-rw-r--r--www/wiki/extensions/Translate/scripts/fallbacks-graph.php32
-rw-r--r--www/wiki/extensions/Translate/scripts/fuzzy.php129
-rw-r--r--www/wiki/extensions/Translate/scripts/groupStatistics.php172
-rw-r--r--www/wiki/extensions/Translate/scripts/languageeditstats.php18
-rw-r--r--www/wiki/extensions/Translate/scripts/magic-export.php122
-rw-r--r--www/wiki/extensions/Translate/scripts/migrate-schema2.php14
-rw-r--r--www/wiki/extensions/Translate/scripts/mwcore-export.php6
-rw-r--r--www/wiki/extensions/Translate/scripts/plural-comparison.php16
-rw-r--r--www/wiki/extensions/Translate/scripts/poimport.php24
-rw-r--r--www/wiki/extensions/Translate/scripts/populateFuzzy.php20
-rw-r--r--www/wiki/extensions/Translate/scripts/processMessageChanges.php12
-rw-r--r--www/wiki/extensions/Translate/scripts/refresh-translatable-pages.php25
-rw-r--r--www/wiki/extensions/Translate/scripts/sync-group.php10
-rw-r--r--www/wiki/extensions/Translate/scripts/test-mt.php92
-rw-r--r--www/wiki/extensions/Translate/scripts/translator-stats-process.php18
-rw-r--r--www/wiki/extensions/Translate/scripts/translator-stats.php66
-rw-r--r--www/wiki/extensions/Translate/scripts/ttmserver-export.php39
-rw-r--r--www/wiki/extensions/Translate/scripts/yaml-tests.php18
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialAggregateGroups.php97
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialExportTranslations.php265
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialImportTranslations.php36
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialLanguageStats.php285
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialMagic.php34
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialManageGroups.php55
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialManageTranslatorSandbox.php43
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialMessageGroupStats.php189
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialSearchTranslations.php208
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialSupportedLanguages.php142
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialTranslate.php738
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialTranslationStash.php15
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialTranslationStats.php233
-rw-r--r--www/wiki/extensions/Translate/specials/SpecialTranslations.php153
-rw-r--r--www/wiki/extensions/Translate/sql/translate_reviews-patch-01-primary-key.sql3
-rw-r--r--www/wiki/extensions/Translate/sql/translate_reviews.sql7
-rw-r--r--www/wiki/extensions/Translate/sql/translate_tm.sql2
-rw-r--r--www/wiki/extensions/Translate/stash/StashedTranslation.php31
-rw-r--r--www/wiki/extensions/Translate/stash/TranslationStashStorage.php31
-rw-r--r--www/wiki/extensions/Translate/stringmangler/StringMangler.php5
-rw-r--r--www/wiki/extensions/Translate/stringmangler/StringMatcher.php81
-rw-r--r--www/wiki/extensions/Translate/tag/PageTranslationHooks.php851
-rw-r--r--www/wiki/extensions/Translate/tag/PageTranslationLogFormatter.php4
-rw-r--r--www/wiki/extensions/Translate/tag/SpecialPageMigration.php82
-rw-r--r--www/wiki/extensions/Translate/tag/SpecialPagePreparation.php71
-rw-r--r--www/wiki/extensions/Translate/tag/SpecialPageTranslation.php205
-rw-r--r--www/wiki/extensions/Translate/tag/SpecialPageTranslationDeletePage.php235
-rw-r--r--www/wiki/extensions/Translate/tag/SpecialPageTranslationMovePage.php336
-rw-r--r--www/wiki/extensions/Translate/tag/TPException.php2
-rw-r--r--www/wiki/extensions/Translate/tag/TPParse.php67
-rw-r--r--www/wiki/extensions/Translate/tag/TPSection.php87
-rw-r--r--www/wiki/extensions/Translate/tag/TranslatablePage.php231
-rw-r--r--www/wiki/extensions/Translate/tag/TranslatablePageMoveJob.php168
-rw-r--r--www/wiki/extensions/Translate/tag/TranslateDeleteJob.php38
-rw-r--r--www/wiki/extensions/Translate/tag/TranslateMoveJob.php36
-rw-r--r--www/wiki/extensions/Translate/tag/TranslateRenderJob.php25
-rw-r--r--www/wiki/extensions/Translate/tag/TranslationsUpdateJob.php127
-rw-r--r--www/wiki/extensions/Translate/tests/generateRandomSandboxData.php10
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/BlackListTest.php38
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/HookDocTest.php44
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/MediaWikiMessageCheckerTest.php105
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/MessageCollectionTest.php25
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/MessageGroupBaseTest.php118
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php86
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/MessageGroupsTest.php60
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/MessageIndexRebuildJobTest.php23
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/MessageIndexTest.php176
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/MockFileBasedMessageGroup.php4
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/MockMessageCollectionForExport.php10
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/MockWikiMessageGroup.php2
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/PageTranslationParserTest.php15
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/PageTranslationTaggingTest.php22
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/SolrTTMServerTest.php33
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/StringMatcherTest.php64
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/TPParseTest.php7
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/TPSectionTest.php120
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/TTMServerMessageUpdateJobTest.php438
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/TTMServerTest.php42
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/TranslatablePageTest.php109
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/TranslateHooksTest.php38
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/TranslateSandboxTest.php13
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/TranslateYamlTest.php72
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php22
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/TranslationStashStorageTest.php6
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/WikiPageMessageGroupSerializationTest.php61
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/api/ApiGroupReviewTest.php2
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageCollectionTest.php61
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php28
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/api/ApiTranslationReviewTest.php54
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf2.yaml5
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf3.yaml1
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf4.yaml3
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/data/mediawiki-extensions.txt11
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/ffs/AmdFFSTest.php44
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/ffs/AndroidXmlFFSTest.php67
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/ffs/AppleFFSTest.php60
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/ffs/DtdFFSTest.php20
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/ffs/GettextFFSTest.php152
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/ffs/IniFFSTest.php24
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/ffs/JavaFFSTest.php50
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/ffs/JsonFFSTest.php52
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/ffs/MediaWikiExtensionsTest.php45
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/ffs/XliffFFSTest.php28
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/insertables/CombinedInsertablesSuggesterTest.php88
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/insertables/MediaWikiInsertablesSuggesterTest.php26
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/insertables/NumericalParameterInsertablesSuggesterTest.php37
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/insertables/TranslatablePageInsertablesSuggesterTest.php26
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/pagetranslation/Inline.ptsource1
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/pagetranslation/Whitespace.ptsource19
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/tag/PageTranslationHooksTest.php97
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php230
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/utils/MessageGroupStatsTest.php34
-rw-r--r--www/wiki/extensions/Translate/tests/qunit/.eslintrc.json6
-rw-r--r--www/wiki/extensions/Translate/tests/qunit/ext.translate.parsers.test.js14
-rw-r--r--www/wiki/extensions/Translate/tests/qunit/ext.translate.special.pagemigration.test.js61
-rw-r--r--www/wiki/extensions/Translate/translationaids/CurrentTranslationAid.php9
-rw-r--r--www/wiki/extensions/Translate/translationaids/DocumentationAid.php10
-rw-r--r--www/wiki/extensions/Translate/translationaids/GettextDocumentationAid.php7
-rw-r--r--www/wiki/extensions/Translate/translationaids/InOtherLanguagesAid.php14
-rw-r--r--www/wiki/extensions/Translate/translationaids/InsertablesAid.php11
-rw-r--r--www/wiki/extensions/Translate/translationaids/MachineTranslationAid.php55
-rw-r--r--www/wiki/extensions/Translate/translationaids/MessageDefinitionAid.php8
-rw-r--r--www/wiki/extensions/Translate/translationaids/QueryAggregatorAwareTranslationAid.php10
-rw-r--r--www/wiki/extensions/Translate/translationaids/SupportAid.php12
-rw-r--r--www/wiki/extensions/Translate/translationaids/TTMServerAid.php21
-rw-r--r--www/wiki/extensions/Translate/translationaids/TranslationAid.php94
-rw-r--r--www/wiki/extensions/Translate/translationaids/TranslationAidDataProvider.php135
-rw-r--r--www/wiki/extensions/Translate/translationaids/UnsupportedTranslationAid.php2
-rw-r--r--www/wiki/extensions/Translate/translationaids/UpdatedDefinitionAid.php20
-rw-r--r--www/wiki/extensions/Translate/ttmserver/CrossLanguageTranslationSearchQuery.php100
-rw-r--r--www/wiki/extensions/Translate/ttmserver/DatabaseTTMServer.php59
-rw-r--r--www/wiki/extensions/Translate/ttmserver/ElasticSearchTTMServer.php608
-rw-r--r--www/wiki/extensions/Translate/ttmserver/FakeTTMServer.php12
-rw-r--r--www/wiki/extensions/Translate/ttmserver/FuzzyLikeThis.php222
-rw-r--r--www/wiki/extensions/Translate/ttmserver/Interfaces.php33
-rw-r--r--www/wiki/extensions/Translate/ttmserver/RemoteTTMServer.php4
-rw-r--r--www/wiki/extensions/Translate/ttmserver/SolrTTMServer.php47
-rw-r--r--www/wiki/extensions/Translate/ttmserver/TTMServer.php109
-rw-r--r--www/wiki/extensions/Translate/ttmserver/TTMServerMessageUpdateJob.php319
-rw-r--r--www/wiki/extensions/Translate/utils/ArrayFlattener.php236
-rw-r--r--www/wiki/extensions/Translate/utils/ExternalMessageSourceStateComparator.php45
-rw-r--r--www/wiki/extensions/Translate/utils/ExternalMessageSourceStateImporter.php12
-rw-r--r--www/wiki/extensions/Translate/utils/Font.php13
-rw-r--r--www/wiki/extensions/Translate/utils/FuzzyBot.php9
-rw-r--r--www/wiki/extensions/Translate/utils/HTMLJsSelectToInputField.php22
-rw-r--r--www/wiki/extensions/Translate/utils/JsSelectToInput.php36
-rw-r--r--www/wiki/extensions/Translate/utils/MemProfile.php10
-rw-r--r--www/wiki/extensions/Translate/utils/MessageChangeStorage.php2
-rw-r--r--www/wiki/extensions/Translate/utils/MessageGroupCache.php12
-rw-r--r--www/wiki/extensions/Translate/utils/MessageGroupStates.php4
-rw-r--r--www/wiki/extensions/Translate/utils/MessageGroupStatesUpdaterJob.php13
-rw-r--r--www/wiki/extensions/Translate/utils/MessageGroupStats.php457
-rw-r--r--www/wiki/extensions/Translate/utils/MessageGroupStatsRebuildJob.php50
-rw-r--r--www/wiki/extensions/Translate/utils/MessageHandle.php54
-rw-r--r--www/wiki/extensions/Translate/utils/MessageIndex.php170
-rw-r--r--www/wiki/extensions/Translate/utils/MessageIndexRebuildJob.php11
-rw-r--r--www/wiki/extensions/Translate/utils/MessageUpdateJob.php30
-rw-r--r--www/wiki/extensions/Translate/utils/MessageWebImporter.php130
-rw-r--r--www/wiki/extensions/Translate/utils/RcFilter.php191
-rw-r--r--www/wiki/extensions/Translate/utils/ResourceLoader.php10
-rw-r--r--www/wiki/extensions/Translate/utils/RevTag.php4
-rw-r--r--www/wiki/extensions/Translate/utils/StatsBar.php16
-rw-r--r--www/wiki/extensions/Translate/utils/StatsTable.php165
-rw-r--r--www/wiki/extensions/Translate/utils/ToolBox.php21
-rw-r--r--www/wiki/extensions/Translate/utils/TranslateLogFormatter.php10
-rw-r--r--www/wiki/extensions/Translate/utils/TranslateMetadata.php62
-rw-r--r--www/wiki/extensions/Translate/utils/TranslateSandbox.php146
-rw-r--r--www/wiki/extensions/Translate/utils/TranslateSandboxEmailJob.php14
-rw-r--r--www/wiki/extensions/Translate/utils/TranslateYaml.php71
-rw-r--r--www/wiki/extensions/Translate/utils/TranslationHelpers.php327
-rw-r--r--www/wiki/extensions/Translate/utils/TranslationStats.php14
-rw-r--r--www/wiki/extensions/Translate/utils/TuxMessageTable.php23
-rw-r--r--www/wiki/extensions/Translate/utils/UserToggles.php39
-rw-r--r--www/wiki/extensions/Translate/webservices/ApertiumWebService.php18
-rw-r--r--www/wiki/extensions/Translate/webservices/CaighdeanWebService.php93
-rw-r--r--www/wiki/extensions/Translate/webservices/CxserverWebService.php17
-rw-r--r--www/wiki/extensions/Translate/webservices/MicrosoftWebService.php114
-rw-r--r--www/wiki/extensions/Translate/webservices/QueryAggregator.php29
-rw-r--r--www/wiki/extensions/Translate/webservices/QueryAggregatorAware.php2
-rw-r--r--www/wiki/extensions/Translate/webservices/RESTBaseWebService.php80
-rw-r--r--www/wiki/extensions/Translate/webservices/RemoteTTMServerWebService.php8
-rw-r--r--www/wiki/extensions/Translate/webservices/TranslationQuery.php43
-rw-r--r--www/wiki/extensions/Translate/webservices/TranslationQueryResponse.php23
-rw-r--r--www/wiki/extensions/Translate/webservices/TranslationWebService.php75
-rw-r--r--www/wiki/extensions/Translate/webservices/TranslationWebServiceConfigurationException.php18
-rw-r--r--www/wiki/extensions/Translate/webservices/TranslationWebServiceException.php2
-rw-r--r--www/wiki/extensions/Translate/webservices/TranslationWebServiceInvalidInputException.php20
-rw-r--r--www/wiki/extensions/Translate/webservices/YandexWebService.php24
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/.eslintrc.json6
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/Gruntfile.js4
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/RELEASE-NOTES15
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/composer.json2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/LanguageNameIndexer.php4
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.ttfbin0 -> 320596 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.woffbin0 -> 176804 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.woff2bin0 -> 139268 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/font.ini6
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.ttfbin0 -> 435904 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.woffbin0 -> 228240 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.woff2bin0 -> 172288 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/font.ini6
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.ttfbin0 -> 558980 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.woffbin0 -> 204656 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.woff2bin0 -> 140268 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/font.ini6
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.ttfbin0 -> 502948 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.woffbin0 -> 257748 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.woff2bin0 -> 184280 bytes
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/font.ini6
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/data/langsamples.json2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/extension.json761
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/api/de.json1
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/api/diq.json2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/api/fy.json14
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/bqi.json37
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/da.json7
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/diq.json11
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/fy.json59
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/hy.json5
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/hyw.json21
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/is.json2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/kiu.json8
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/lv.json5
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/pt-br.json2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/th.json9
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/trv.json10
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/uz.json5
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/i18n/xsy.json10
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/includes/ResourceLoaderULSJsonMessageModule.php7
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/includes/UniversalLanguageSelectorHooks.php505
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/includes/api/ApiLanguageSearch.php60
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/includes/api/ApiULSLocalization.php73
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/css/jquery.ime.css30
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/jquery.ime.js780
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/bo/bo-sambhota.js6
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/byn/byn-geezim.js3
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/din/din-fqsx.js2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/eo/eo-transliteration.js4
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/kab/kab-tilde.js41
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/kbp/kbp-tilde.js35
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ki/ki-tilde.js22
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/km/km-nidakyk.js7
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/lg/lg-tilde.js20
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ln/ln-tilde.js25
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/lut/lut-tulalip.js74
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mg/mg-tilde.js25
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-todo.js224
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-todoali.js224
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-trad.js224
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-tradali.js222
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/phagspa.js224
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mnc/mnc-ali.js224
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mnc/mnc.js224
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/my/my-mm3.js262
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/nso/nso-tilde.js24
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/or/or-transliteration.js4
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/pms/pms.js36
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/roa-tara/roa-tara.js8
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ses/ses-tilde.js40
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/sg/sg-tilde.js24
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/si/si-singlish.js2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/sjo/sjo.js224
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/st/st-tilde.js22
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/te/te-transliteration.js2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ti/ti-geezim.js3
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/tig/tig-geezim.js3
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ve/ve-tilde.js28
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/zh/zh-pinyin-transliteration.js60
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/maintenance/ULSCompactLinksDisablePref.php2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/package.json6
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.compactlinks.js2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.displaysettings.js4
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.eventlogger.js406
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.ime.js6
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.inputsettings.js7
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.interface.js8
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.languagesettings.js8
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.preferences.js2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.webfonts.repository.js23
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/tests/all-fonts.html646
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/tests/phpunit/LanguageSearchTest.php2
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/tests/phpunit/ULSJsonMessageLoaderTest.php4
-rw-r--r--www/wiki/extensions/UniversalLanguageSelector/tests/webfonts.html6
1102 files changed, 33614 insertions, 18590 deletions
diff --git a/www/wiki/extensions/SimpleLanguageSelector/extension.json b/www/wiki/extensions/SimpleLanguageSelector/extension.json
index 46dc321b..9cb2106c 100644
--- a/www/wiki/extensions/SimpleLanguageSelector/extension.json
+++ b/www/wiki/extensions/SimpleLanguageSelector/extension.json
@@ -9,7 +9,8 @@
"license-name": "MIT",
"Hooks": {
"BeforePageDisplay": "SimpleLanguageSelector\\Hooks::addModules",
- "PersonalUrls": "SimpleLanguageSelector\\Hooks::addPersonalBarTrigger"
+ "PersonalUrls": "SimpleLanguageSelector\\Hooks::addPersonalBarTrigger",
+ "UserGetLanguageObject": "SimpleLanguageSelector\\Hooks::onUserGetLanguageObject"
},
"MessagesDirs": {
"SimplelLanguageSelector": [
diff --git a/www/wiki/extensions/SimpleLanguageSelector/includes/Hooks.php b/www/wiki/extensions/SimpleLanguageSelector/includes/Hooks.php
index a99bd1dc..f67e25f6 100644
--- a/www/wiki/extensions/SimpleLanguageSelector/includes/Hooks.php
+++ b/www/wiki/extensions/SimpleLanguageSelector/includes/Hooks.php
@@ -101,4 +101,11 @@ class Hooks {
return true;
}
+ public static function onUserGetLanguageObject($user, &$code){
+ global $wgSimpleLangageSelectionLangList;
+ if(!in_array($code, $wgSimpleLangageSelectionLangList)){
+ $code = 'en';
+ }
+ }
+
} \ No newline at end of file
diff --git a/www/wiki/extensions/Translate/.eslintrc.json b/www/wiki/extensions/Translate/.eslintrc.json
new file mode 100644
index 00000000..51e3d84e
--- /dev/null
+++ b/www/wiki/extensions/Translate/.eslintrc.json
@@ -0,0 +1,16 @@
+{
+ "root": true,
+ "extends": "wikimedia",
+ "env": {
+ "browser": true
+ },
+ "globals": {
+ "mw": false,
+ "$": false,
+ "OO": false
+ },
+ "rules": {
+ "max-len": 0,
+ "no-use-before-define": 0
+ }
+}
diff --git a/www/wiki/extensions/Translate/.phpcs.xml b/www/wiki/extensions/Translate/.phpcs.xml
new file mode 100644
index 00000000..0744ffb9
--- /dev/null
+++ b/www/wiki/extensions/Translate/.phpcs.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<ruleset>
+ <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
+ <exclude name="Generic.Files.OneObjectStructurePerFile.MultipleFound" />
+ <exclude name="MediaWiki.Commenting.FunctionAnnotations.UnrecognizedAnnotation" />
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected"/>
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic"/>
+ <exclude name="MediaWiki.Commenting.FunctionComment.WrongStyle" />
+ <exclude name="MediaWiki.Commenting.MissingCovers.MissingCovers" />
+ <exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
+ <exclude name="MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName" />
+ <exclude name="MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgContLang" />
+ <exclude name="MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgParser" />
+ <exclude name="MediaWiki.Usage.ForbiddenFunctions.escapeshellarg" />
+ <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" />
+ </rule>
+ <rule ref="Generic.Files.LineLength">
+ <exclude-pattern>Translate\.alias\.php</exclude-pattern>
+ </rule>
+ <rule ref="MediaWiki.NamingConventions.ValidGlobalName">
+ <properties>
+ <property name="ignoreList" type="array" value="$IP" />
+ </properties>
+ </rule>
+ <file>.</file>
+ <arg name="extensions" value="php,php5,inc"/>
+ <arg name="encoding" value="UTF-8"/>
+ <exclude-pattern type="relative">^extensions</exclude-pattern>
+</ruleset>
diff --git a/www/wiki/extensions/Translate/.stylelintrc.json b/www/wiki/extensions/Translate/.stylelintrc.json
new file mode 100644
index 00000000..afe8e1c5
--- /dev/null
+++ b/www/wiki/extensions/Translate/.stylelintrc.json
@@ -0,0 +1,8 @@
+{
+ "extends": "stylelint-config-wikimedia",
+ "rules": {
+ "selector-max-id": null,
+ "declaration-no-important": null,
+ "no-descending-specificity": null
+ }
+}
diff --git a/www/wiki/extensions/Translate/CODE_OF_CONDUCT.md b/www/wiki/extensions/Translate/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000..498acf76
--- /dev/null
+++ b/www/wiki/extensions/Translate/CODE_OF_CONDUCT.md
@@ -0,0 +1 @@
+The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct).
diff --git a/www/wiki/extensions/Translate/Gruntfile.js b/www/wiki/extensions/Translate/Gruntfile.js
index 32fd3a8e..8e8246aa 100644
--- a/www/wiki/extensions/Translate/Gruntfile.js
+++ b/www/wiki/extensions/Translate/Gruntfile.js
@@ -1,32 +1,37 @@
-/*jshint node:true */
+/* eslint-env node */
module.exports = function ( grunt ) {
'use strict';
- grunt.loadNpmTasks( 'grunt-contrib-jshint' );
- grunt.loadNpmTasks( 'grunt-jscs' );
+ grunt.loadNpmTasks( 'grunt-eslint' );
grunt.loadNpmTasks( 'grunt-jsonlint' );
grunt.loadNpmTasks( 'grunt-banana-checker' );
+ grunt.loadNpmTasks( 'grunt-stylelint' );
grunt.initConfig( {
- jshint: {
- options: {
- jshintrc: true
- },
+ eslint: {
all: [
'**/*.js',
'!node_modules/**',
'!extensions/**',
- '!resources/js/jquery.autosize.js'
+ '!resources/js/jquery.autosize.js',
+ '!vendor/**'
]
},
- jscs: {
- src: '<%= jshint.all %>'
- },
jsonlint: {
all: [
'**/*.json',
'!node_modules/**',
- '!extensions/**'
+ '!extensions/**',
+ '!vendor/**'
+ ]
+ },
+ stylelint: {
+ all: [
+ '**/*.css',
+ '**/*.less',
+ '!node_modules/**',
+ '!extensions/**',
+ '!vendor/**'
]
},
banana: {
@@ -40,6 +45,6 @@ module.exports = function ( grunt ) {
}
} );
- grunt.registerTask( 'test', [ 'jshint', 'jscs', 'jsonlint', 'banana' ] );
+ grunt.registerTask( 'test', [ 'eslint', 'jsonlint', 'banana', 'stylelint' ] );
grunt.registerTask( 'default', 'test' );
};
diff --git a/www/wiki/extensions/Translate/HISTORY b/www/wiki/extensions/Translate/HISTORY
index 89665fe8..8b6916f7 100644
--- a/www/wiki/extensions/Translate/HISTORY
+++ b/www/wiki/extensions/Translate/HISTORY
@@ -750,7 +750,7 @@ release announcements or the git log.
* Export task was erronously outputting as plain
* New variable $wgTranslateCC for adding custom groups
* WikiMessageGroup class, which is easy to use class for defining a message group for wiki's custom user interface elements
-* Array keys in $wgTranslateEC and $wgTranslateAC are not used for alphabetical sorting only. MessageGroup::$id and MessageGroup::getId() are used for everything else.
+* Array keys in $wgTranslateEC and $wgTranslateAC are now used for alphabetical sorting only. MessageGroup::$id and MessageGroup::getId() are used for everything else.
* Export documentation messages as "extracted comments" in po export
* Import fuzzy messages as fuzzy in po import
* Experimental support for some extensions in export.php
diff --git a/www/wiki/extensions/Translate/MediaWikiMessageChecker.php b/www/wiki/extensions/Translate/MediaWikiMessageChecker.php
index 43df31dd..14e06180 100644
--- a/www/wiki/extensions/Translate/MediaWikiMessageChecker.php
+++ b/www/wiki/extensions/Translate/MediaWikiMessageChecker.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2008-2010, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -20,7 +20,7 @@ class MediaWikiMessageChecker extends MessageChecker {
*
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code of the translations.
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
*/
protected function wikiParameterCheck( $messages, $code, &$warnings ) {
parent::parameterCheck( $messages, $code, $warnings, '/\$[1-9]/' );
@@ -34,7 +34,7 @@ class MediaWikiMessageChecker extends MessageChecker {
*
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code of the translations.
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
*/
protected function wikiLinksCheck( $messages, $code, &$warnings ) {
$tc = Title::legalChars() . '#%{}';
@@ -45,7 +45,7 @@ class MediaWikiMessageChecker extends MessageChecker {
$translation = $message->translation();
$subcheck = 'extra';
- $matches = $links = array();
+ $matches = $links = [];
preg_match_all( "/\[\[([{$tc}]+)(\\|(.+?))?]]/sDu", $translation, $matches );
$count = count( $matches[0] );
for ( $i = 0; $i < $count; $i++ ) {
@@ -59,16 +59,16 @@ class MediaWikiMessageChecker extends MessageChecker {
}
if ( count( $links ) ) {
- $warnings[$key][] = array(
- array( 'links', $subcheck, $key, $code ),
+ $warnings[$key][] = [
+ [ 'links', $subcheck, $key, $code ],
'translate-checks-links',
- array( 'PARAMS', $links ),
- array( 'COUNT', count( $links ) ),
- );
+ [ 'PARAMS', $links ],
+ [ 'COUNT', count( $links ) ],
+ ];
}
$subcheck = 'missing';
- $matches = $links = array();
+ $matches = $links = [];
preg_match_all( "/\[\[([{$tc}]+)(\\|(.+?))?]]/sDu", $definition, $matches );
$count = count( $matches[0] );
for ( $i = 0; $i < $count; $i++ ) {
@@ -82,12 +82,12 @@ class MediaWikiMessageChecker extends MessageChecker {
}
if ( count( $links ) ) {
- $warnings[$key][] = array(
- array( 'links', $subcheck, $key, $code ),
+ $warnings[$key][] = [
+ [ 'links', $subcheck, $key, $code ],
'translate-checks-links-missing',
- array( 'PARAMS', $links ),
- array( 'COUNT', count( $links ) ),
- );
+ [ 'PARAMS', $links ],
+ [ 'COUNT', count( $links ) ],
+ ];
}
}
}
@@ -97,7 +97,7 @@ class MediaWikiMessageChecker extends MessageChecker {
*
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code of the translations.
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
*/
protected function XhtmlCheck( $messages, $code, &$warnings ) {
foreach ( $messages as $message ) {
@@ -108,31 +108,38 @@ class MediaWikiMessageChecker extends MessageChecker {
}
$subcheck = 'invalid';
- $tags = array(
+ $tags = [
'~<hr *(\\\\)?>~suDi' => '<hr />', // Wrong syntax
'~<br *(\\\\)?>~suDi' => '<br />',
'~<hr/>~suDi' => '<hr />', // Wrong syntax
'~<br/>~suDi' => '<br />',
'~<(HR|Hr|hR) />~su' => '<hr />', // Case
'~<(BR|Br|bR) />~su' => '<br />',
- );
+ ];
- $wrongTags = array();
+ $definition = $message->definition();
+
+ $wrongTags = [];
foreach ( $tags as $wrong => $correct ) {
- $matches = array();
+ $matches = [];
preg_match_all( $wrong, $translation, $matches, PREG_PATTERN_ORDER );
foreach ( $matches[0] as $wrongMatch ) {
+ if ( strpos( $definition, $wrongMatch ) !== false ) {
+ // If the message definition contains a
+ // non-strict string, do not enforce it
+ continue;
+ }
$wrongTags[$wrongMatch] = "$wrongMatch → $correct";
}
}
if ( count( $wrongTags ) ) {
- $warnings[$key][] = array(
- array( 'xhtml', $subcheck, $key, $code ),
+ $warnings[$key][] = [
+ [ 'xhtml', $subcheck, $key, $code ],
'translate-checks-xhtml',
- array( 'PARAMS', $wrongTags ),
- array( 'COUNT', count( $wrongTags ) ),
- );
+ [ 'PARAMS', $wrongTags ],
+ [ 'COUNT', count( $wrongTags ) ],
+ ];
}
}
}
@@ -142,7 +149,7 @@ class MediaWikiMessageChecker extends MessageChecker {
*
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code of the translations.
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
*/
protected function pluralCheck( $messages, $code, &$warnings ) {
foreach ( $messages as $message ) {
@@ -155,10 +162,10 @@ class MediaWikiMessageChecker extends MessageChecker {
stripos( $definition, '{{plural:' ) !== false &&
stripos( $translation, '{{plural:' ) === false
) {
- $warnings[$key][] = array(
- array( 'plural', $subcheck, $key, $code ),
+ $warnings[$key][] = [
+ [ 'plural', $subcheck, $key, $code ],
'translate-checks-plural',
- );
+ ];
}
}
}
@@ -167,7 +174,7 @@ class MediaWikiMessageChecker extends MessageChecker {
* Checks if the translation uses too many plural forms
* @param TMessage[] $messages
* @param string $code
- * @param array $warnings
+ * @param array &$warnings
* @since 2012-09-19
*/
protected function pluralFormsCheck( $messages, $code, &$warnings ) {
@@ -188,18 +195,18 @@ class MediaWikiMessageChecker extends MessageChecker {
$provided = count( $forms );
if ( $provided > $allowed ) {
- $warnings[$key][] = array(
- array( 'plural', 'forms', $key, $code ),
+ $warnings[$key][] = [
+ [ 'plural', 'forms', $key, $code ],
'translate-checks-plural-forms', $provided, $allowed
- );
+ ];
}
// Are the last two forms identical?
if ( $provided > 1 && $forms[$provided - 1] === $forms[$provided - 2] ) {
- $warnings[$key][] = array(
- array( 'plural', 'dupe', $key, $code ),
+ $warnings[$key][] = [
+ [ 'plural', 'dupe', $key, $code ],
'translate-checks-plural-dupe'
- );
+ ];
}
}
}
@@ -225,14 +232,14 @@ class MediaWikiMessageChecker extends MessageChecker {
* returns array of invokations having array of forms.
* @since 2012-09-19
* @param string $translation
- * @return array[array]
+ * @return array[]
*/
public static function getPluralForms( $translation ) {
// Stores the forms from plural invocations
- $plurals = array();
+ $plurals = [];
$cb = function ( $parser, $frame, $args ) use ( &$plurals ) {
- $forms = array();
+ $forms = [];
foreach ( $args as $index => $form ) {
// The first arg is the number, we skip it
@@ -287,7 +294,7 @@ class MediaWikiMessageChecker extends MessageChecker {
*
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code of the translations.
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
*/
protected function pagenameMessagesCheck( $messages, $code, &$warnings ) {
foreach ( $messages as $message ) {
@@ -297,14 +304,14 @@ class MediaWikiMessageChecker extends MessageChecker {
$subcheck = 'namespace';
$namespaces = 'help|project|\{\{ns:project}}|mediawiki';
- $matches = array();
+ $matches = [];
if ( preg_match( "/^($namespaces):[\w\s]+$/ui", $definition, $matches ) &&
!preg_match( "/^{$matches[1]}:.+$/u", $translation )
) {
- $warnings[$key][] = array(
- array( 'pagename', $subcheck, $key, $code ),
+ $warnings[$key][] = [
+ [ 'pagename', $subcheck, $key, $code ],
'translate-checks-pagename',
- );
+ ];
}
}
}
@@ -314,10 +321,10 @@ class MediaWikiMessageChecker extends MessageChecker {
*
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code of the translations.
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
*/
protected function miscMWChecks( $messages, $code, &$warnings ) {
- $timeList = array( 'protect-expiry-options', 'ipboptions' );
+ $timeList = [ 'protect-expiry-options', 'ipboptions' ];
foreach ( $messages as $message ) {
$key = $message->key();
@@ -332,12 +339,12 @@ class MediaWikiMessageChecker extends MessageChecker {
$defCount = count( $defArray );
$traCount = count( $traArray );
if ( $defCount !== $traCount ) {
- $warnings[$key][] = array(
- array( 'miscmw', $subcheck, $key, $code ),
+ $warnings[$key][] = [
+ [ 'miscmw', $subcheck, $key, $code ],
'translate-checks-format',
wfMessage( 'translate-checks-parametersnotequal' )
->numParams( $traCount, $defCount )->text()
- );
+ ];
continue;
}
@@ -348,24 +355,24 @@ class MediaWikiMessageChecker extends MessageChecker {
$subcheck = 'timelist-format';
if ( count( $traItems ) !== 2 ) {
- $warnings[$key][] = array(
- array( 'miscmw', $subcheck, $key, $code ),
+ $warnings[$key][] = [
+ [ 'miscmw', $subcheck, $key, $code ],
'translate-checks-format',
wfMessage(
'translate-checks-malformed',
$traArray[$i]
)->text()
- );
+ ];
continue;
}
$subcheck = 'timelist-format-value';
if ( $traItems[1] !== $defItems[1] ) {
- $warnings[$key][] = array(
- array( 'miscmw', $subcheck, $key, $code ),
+ $warnings[$key][] = [
+ [ 'miscmw', $subcheck, $key, $code ],
'translate-checks-format',
"<samp><nowiki>$traItems[1] !== $defItems[1]</nowiki></samp>", // @todo FIXME: i18n missing.
- );
+ ];
continue;
}
}
diff --git a/www/wiki/extensions/Translate/Message.php b/www/wiki/extensions/Translate/Message.php
index 3a5b18de..9bc0ba4b 100644
--- a/www/wiki/extensions/Translate/Message.php
+++ b/www/wiki/extensions/Translate/Message.php
@@ -5,31 +5,31 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2008-2010, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
* Interface for message objects used by MessageCollection.
*/
abstract class TMessage {
- /// \string Message display key.
+ /** @var string Message display key. */
protected $key;
- /// \string Message definition.
+ /** @var string Message definition. */
protected $definition;
- /// \string Committed in-file translation.
+ /** @var string Committed in-file translation. */
protected $infile;
- /// \list{String} Message tags.
- protected $tags = array();
- /// \array Message properties.
- protected $props = array();
- /// \list{String} Message reviewers.
- protected $reviewers = array();
+ /** @var string[] Message tags. */
+ protected $tags = [];
+ /** @var array Message properties. */
+ protected $props = [];
+ /** @var string[] Message reviewers. */
+ protected $reviewers = [];
/**
* Creates new message object.
*
- * @param $key string Unique key identifying this message.
- * @param $definition string The authoritave definition of this message.
+ * @param string $key Unique key identifying this message.
+ * @param string $definition The authoritave definition of this message.
*/
public function __construct( $key, $definition ) {
$this->key = $key;
@@ -60,7 +60,7 @@ abstract class TMessage {
/**
* Set the committed translation.
- * @param $text \string
+ * @param string $text
*/
public function setInfile( $text ) {
$this->infile = $text;
@@ -76,7 +76,7 @@ abstract class TMessage {
/**
* Add a tag for this message.
- * @param $tag \string
+ * @param string $tag
*/
public function addTag( $tag ) {
$this->tags[] = $tag;
@@ -84,8 +84,8 @@ abstract class TMessage {
/**
* Check if this message has a given tag.
- * @param $tag \string
- * @return \bool
+ * @param string $tag
+ * @return bool
*/
public function hasTag( $tag ) {
return in_array( $tag, $this->tags, true );
@@ -105,13 +105,13 @@ abstract class TMessage {
public function appendProperty( $key, $value ) {
if ( !isset( $this->props[$key] ) ) {
- $this->props[$key] = array();
+ $this->props[$key] = [];
}
$this->props[$key][] = $value;
}
public function getProperty( $key ) {
- return isset( $this->props[$key] ) ? $this->props[$key] : null;
+ return $this->props[$key] ?? null;
}
/**
@@ -131,10 +131,10 @@ abstract class TMessage {
*/
class ThinMessage extends TMessage {
// This maps properties to fields in the database result row
- protected static $propertyMap = array(
+ protected static $propertyMap = [
'last-translator-text' => 'rev_user_text',
'last-translator-id' => 'rev_user',
- );
+ ];
/**
* @var stdClass Database Result Row
@@ -182,7 +182,7 @@ class ThinMessage extends TMessage {
* Hence the name fat. Authors are not supported.
*/
class FatMessage extends TMessage {
- /// \string Stored translation.
+ /** @var string Stored translation. */
protected $translation;
/**
diff --git a/www/wiki/extensions/Translate/MessageChecks.php b/www/wiki/extensions/Translate/MessageChecks.php
index df6d6046..27037847 100644
--- a/www/wiki/extensions/Translate/MessageChecks.php
+++ b/www/wiki/extensions/Translate/MessageChecks.php
@@ -5,8 +5,7 @@
* @file
* @defgroup MessageCheckers Message Checkers
* @author Niklas Laxström
- * @copyright Copyright © 2008-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -45,23 +44,23 @@
* @ingroup MessageCheckers
*/
class MessageChecker {
- protected $checks = array();
- protected $group = null;
- private static $globalBlacklist = null;
+ protected $checks = [];
+ protected $group;
+ private static $globalBlacklist;
/**
* Constructs a suitable checker for given message group.
- * @param $group MessageGroup
+ * @param MessageGroup $group
*/
public function __construct( MessageGroup $group ) {
global $wgTranslateCheckBlacklist;
if ( $wgTranslateCheckBlacklist === false ) {
- self::$globalBlacklist = array();
+ self::$globalBlacklist = [];
} elseif ( self::$globalBlacklist === null ) {
$file = $wgTranslateCheckBlacklist;
$list = PHPVariableLoader::loadVariableFromPHPFile( $file, 'checkBlacklist' );
- $keys = array( 'group', 'check', 'subcheck', 'code', 'message' );
+ $keys = [ 'group', 'check', 'subcheck', 'code', 'message' ];
foreach ( $list as $key => $pattern ) {
foreach ( $keys as $checkKey ) {
@@ -69,7 +68,7 @@ class MessageChecker {
$list[$key][$checkKey] = '#';
} elseif ( is_array( $pattern[$checkKey] ) ) {
$list[$key][$checkKey] =
- array_map( array( $this, 'foldValue' ), $pattern[$checkKey] );
+ array_map( [ $this, 'foldValue' ], $pattern[$checkKey] );
} else {
$list[$key][$checkKey] = $this->foldValue( $pattern[$checkKey] );
}
@@ -95,7 +94,7 @@ class MessageChecker {
* Set the tests for this checker. Array of callables with descriptive keys.
* @param array $checks List of checks (suitable methods in this class)
*/
- public function setChecks( $checks ) {
+ public function setChecks( array $checks ) {
foreach ( $checks as $k => $c ) {
if ( !is_callable( $c ) ) {
unset( $checks[$k] );
@@ -110,10 +109,8 @@ class MessageChecker {
* @see setChecks()
* @param callable $check
*/
- public function addCheck( $check ) {
- if ( is_callable( $check ) ) {
- $this->checks[] = $check;
- }
+ public function addCheck( callable $check ) {
+ $this->checks[] = $check;
}
/**
@@ -125,16 +122,16 @@ class MessageChecker {
* @return array
*/
public function checkMessage( TMessage $message, $code ) {
- $warningsArray = array();
- $messages = array( $message );
+ $warningsArray = [];
+ $messages = [ $message ];
foreach ( $this->checks as $check ) {
- call_user_func_array( $check, array( $messages, $code, &$warningsArray ) );
+ call_user_func_array( $check, [ $messages, $code, &$warningsArray ] );
}
$warningsArray = $this->filterWarnings( $warningsArray );
if ( !count( $warningsArray ) ) {
- return array();
+ return [];
}
$warnings = $warningsArray[$message->key()];
@@ -150,11 +147,11 @@ class MessageChecker {
* @return bool True if there is a problem, false otherwise.
*/
public function checkMessageFast( TMessage $message, $code ) {
- $warningsArray = array();
- $messages = array( $message );
+ $warningsArray = [];
+ $messages = [ $message ];
foreach ( $this->checks as $check ) {
- call_user_func_array( $check, array( $messages, $code, &$warningsArray ) );
+ call_user_func_array( $check, [ $messages, $code, &$warningsArray ] );
if ( count( $warningsArray ) ) {
return true;
}
@@ -168,7 +165,7 @@ class MessageChecker {
* @param array $warningsArray List of warnings produces by checkMessage().
* @return array List of filtered warnings.
*/
- protected function filterWarnings( $warningsArray ) {
+ protected function filterWarnings( array $warningsArray ) {
$groupId = $this->group->getId();
// There is an array of messages...
@@ -226,12 +223,12 @@ class MessageChecker {
* @throws MWException
* @return array List of warning messages with parameters.
*/
- protected function fixMessageParams( $warnings ) {
+ protected function fixMessageParams( array $warnings ) {
$lang = RequestContext::getMain()->getLanguage();
foreach ( $warnings as $wkey => $warning ) {
array_shift( $warning );
- $message = array( array_shift( $warning ) );
+ $message = [ array_shift( $warning ) ];
foreach ( $warning as $param ) {
if ( !is_array( $param ) ) {
@@ -259,8 +256,8 @@ class MessageChecker {
* @param array $trans
* @return array Items of $defs that are not in $trans.
*/
- protected static function compareArrays( $defs, $trans ) {
- $missing = array();
+ protected static function compareArrays( array $defs, array $trans ) {
+ $missing = [];
foreach ( $defs as $defVar ) {
if ( !in_array( $defVar, $trans ) ) {
@@ -276,7 +273,7 @@ class MessageChecker {
* translations.
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
*/
protected function printfCheck( $messages, $code, array &$warnings ) {
$this->parameterCheck( $messages, $code, $warnings, '/%(\d+\$)?[sduf]/U' );
@@ -287,7 +284,7 @@ class MessageChecker {
* translations.
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
*/
protected function rubyVariableCheck( $messages, $code, array &$warnings ) {
$this->parameterCheck( $messages, $code, $warnings, '/%{[a-zA-Z_]+}/' );
@@ -298,7 +295,7 @@ class MessageChecker {
* translations.
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
*/
protected function pythonInterpolationCheck( $messages, $code, array &$warnings ) {
$pattern = '/\%\([a-zA-Z0-9]*?\)[diouxXeEfFgGcrs]/U';
@@ -308,9 +305,12 @@ class MessageChecker {
/**
* Checks if the translation has even number of opening and closing
* parentheses. {, [ and ( are checked.
+ * Note that this will not add a warning if the message definition
+ * has an unbalanced amount of braces.
+ *
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
*/
protected function braceBalanceCheck( $messages, $code, array &$warnings ) {
foreach ( $messages as $message ) {
@@ -319,11 +319,11 @@ class MessageChecker {
$translation = preg_replace( '/[^{}[\]()]/u', '', $translation );
$subcheck = 'brace';
- $counts = array(
+ $counts = [
'{' => 0, '}' => 0,
'[' => 0, ']' => 0,
'(' => 0, ')' => 0,
- );
+ ];
$len = strlen( $translation );
for ( $i = 0; $i < $len; $i++ ) {
@@ -331,36 +331,48 @@ class MessageChecker {
$counts[$char]++;
}
- $balance = array();
- if ( $counts['['] !== $counts[']'] ) {
+ $definition = $message->definition();
+
+ $balance = [];
+ if ( $counts['['] !== $counts[']'] && self::checkStringCountEqual( $definition, '[', ']' ) ) {
$balance[] = '[]: ' . ( $counts['['] - $counts[']'] );
}
- if ( $counts['{'] !== $counts['}'] ) {
+ if ( $counts['{'] !== $counts['}'] && self::checkStringCountEqual( $definition, '{', '}' ) ) {
$balance[] = '{}: ' . ( $counts['{'] - $counts['}'] );
}
- if ( $counts['('] !== $counts[')'] ) {
+ if ( $counts['('] !== $counts[')'] && self::checkStringCountEqual( $definition, '(', ')' ) ) {
$balance[] = '(): ' . ( $counts['('] - $counts[')'] );
}
if ( count( $balance ) ) {
- $warnings[$key][] = array(
- array( 'balance', $subcheck, $key, $code ),
+ $warnings[$key][] = [
+ [ 'balance', $subcheck, $key, $code ],
'translate-checks-balance',
- array( 'PARAMS', $balance ),
- array( 'COUNT', count( $balance ) ),
- );
+ [ 'PARAMS', $balance ],
+ [ 'COUNT', count( $balance ) ],
+ ];
}
}
}
/**
+ * @param string $source
+ * @param string $str1
+ * @param string $str2
+ * @return bool whether $source has an equal number of occurences of $str1 and $str2
+ */
+ protected static function checkStringCountEqual( $source, $str1, $str2 ) {
+ return substr_count( $source, $str1 ) === substr_count( $source, $str2 );
+ }
+
+ /**
* Checks for missing and unknown printf formatting characters in
* translations.
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
* @param string $pattern Regular expression for matching variables.
*/
protected function parameterCheck( $messages, $code, array &$warnings, $pattern ) {
@@ -377,12 +389,12 @@ class MessageChecker {
$params = self::compareArrays( $defVars[0], $transVars[0] );
if ( count( $params ) ) {
- $warnings[$key][] = array(
- array( 'variable', $subcheck, $key, $code ),
+ $warnings[$key][] = [
+ [ 'variable', $subcheck, $key, $code ],
'translate-checks-parameters',
- array( 'PARAMS', $params ),
- array( 'COUNT', count( $params ) ),
- );
+ [ 'PARAMS', $params ],
+ [ 'COUNT', count( $params ) ],
+ ];
}
// Check for unknown variables in the translatio
@@ -390,12 +402,12 @@ class MessageChecker {
$params = self::compareArrays( $transVars[0], $defVars[0] );
if ( count( $params ) ) {
- $warnings[$key][] = array(
- array( 'variable', $subcheck, $key, $code ),
+ $warnings[$key][] = [
+ [ 'variable', $subcheck, $key, $code ],
'translate-checks-parameters-unknown',
- array( 'PARAMS', $params ),
- array( 'COUNT', count( $params ) ),
- );
+ [ 'PARAMS', $params ],
+ [ 'COUNT', count( $params ) ],
+ ];
}
}
}
@@ -403,7 +415,7 @@ class MessageChecker {
/**
* @param TMessage[] $messages Iterable list of TMessage objects.
* @param string $code Language code
- * @param array $warnings Array where warnings are appended to.
+ * @param array &$warnings Array where warnings are appended to.
*/
protected function balancedTagsCheck( $messages, $code, array &$warnings ) {
foreach ( $messages as $message ) {
@@ -418,7 +430,7 @@ class MessageChecker {
}
$errors = libxml_get_errors();
- $params = array();
+ $params = [];
foreach ( $errors as $error ) {
if ( $error->code !== 76 && $error->code !== 73 ) {
continue;
@@ -430,12 +442,12 @@ class MessageChecker {
continue;
}
- $warnings[$key][] = array(
- array( 'tags', 'balance', $key, $code ),
+ $warnings[$key][] = [
+ [ 'tags', 'balance', $key, $code ],
'translate-checks-format',
- array( 'PARAMS', $params ),
- array( 'COUNT', count( $params ) ),
- );
+ [ 'PARAMS', $params ],
+ [ 'COUNT', count( $params ) ],
+ ];
}
libxml_clear_errors();
diff --git a/www/wiki/extensions/Translate/MessageCollection.php b/www/wiki/extensions/Translate/MessageCollection.php
index c9597912..a0f2be3e 100644
--- a/www/wiki/extensions/Translate/MessageCollection.php
+++ b/www/wiki/extensions/Translate/MessageCollection.php
@@ -5,9 +5,11 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2007-2011, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
+use Wikimedia\Rdbms\IResultWrapper;
+
/**
* Core message collection class.
*
@@ -24,25 +26,25 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
/**
* @var MessageDefinitions
- * */
+ */
protected $definitions = null;
/**
* @var array array( %Message key => translation, ... )
*/
- protected $infile = array();
+ protected $infile = [];
// Keys and messages.
/**
* @var array array( %Message display key => database key, ... )
*/
- protected $keys = array();
+ protected $keys = [];
/**
* @var array array( %Message String => TMessage, ... )
*/
- protected $messages = array();
+ protected $messages = [];
/**
* @var array
@@ -51,30 +53,32 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
// Database resources
- /// \type{Database Result Resource} Stored message existence and fuzzy state.
+ /** @var IResultWrapper Stored message existence and fuzzy state. */
protected $dbInfo;
- /// \type{Database Result Resource} Stored translations in database.
+ /** @var IResultWrapper Stored translations in database. */
protected $dbData;
- /// \type{Database Result Resource} Stored reviews in database.
- protected $dbReviewData = array();
+ /** @var IResultWrapper Stored reviews in database. */
+ protected $dbReviewData = [];
/**
* Tags, copied to thin messages
* tagtype => keys
+ * @var array[]
*/
- protected $tags = array();
+ protected $tags = [];
/**
* Properties, copied to thin messages
+ * @var array[]
*/
- protected $properties = array();
+ protected $properties = [];
/**
* @var string[] Authors.
*/
- protected $authors = array();
+ protected $authors = [];
/**
* Constructors. Use newFromDefinitions() instead.
@@ -88,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 );
@@ -101,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 ) {
}
@@ -118,8 +122,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
/**
* Set translation from file, as opposed to translation which only exists
* in the wiki because they are not exported and committed yet.
- * @param array $messages \arrayof{String,String} Array of translations indexed
- * by display key.
+ * @param string[] $messages Array of translations indexed by display key.
*/
public function setInFile( array $messages ) {
$this->infile = $messages;
@@ -166,7 +169,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
* @return string[] List of keys with given tag.
*/
public function getTags( $type ) {
- return isset( $this->tags[$type] ) ? $this->tags[$type] : array();
+ return $this->tags[$type] ?? [];
}
/**
@@ -201,13 +204,14 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
# arsort( $authors, SORT_NUMERIC );
ksort( $authors );
$fuzzyBot = FuzzyBot::getName();
+ $filteredAuthors = [];
foreach ( $authors as $author => $edits ) {
if ( $author !== $fuzzyBot ) {
$filteredAuthors[] = $author;
}
}
- return isset( $filteredAuthors ) ? $filteredAuthors : array();
+ return $filteredAuthors;
}
/**
@@ -234,14 +238,12 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
/**
* Loads all message data. Must be called before accessing the messages
- * with ArrayAccess or iteration. Must be called before filtering for
- * $dbtype to have an effect.
- * @param int $dbtype One of DB_* constants.
- */
- public function loadTranslations( $dbtype = DB_SLAVE ) {
- $this->loadData( $this->keys, $dbtype );
- $this->loadInfo( $this->keys, $dbtype );
- $this->loadReviewInfo( $this->keys, $dbtype );
+ * with ArrayAccess or iteration.
+ */
+ public function loadTranslations() {
+ $this->loadData( $this->keys );
+ $this->loadInfo( $this->keys );
+ $this->loadReviewInfo( $this->keys );
$this->initMessages();
}
@@ -255,10 +257,10 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
$this->keys = $this->fixKeys();
$this->dbInfo = null;
$this->dbData = null;
- $this->dbReviewData = array();
+ $this->dbReviewData = [];
$this->messages = null;
- $this->infile = array();
- $this->authors = array();
+ $this->infile = [];
+ $this->authors = [];
unset( $this->tags['fuzzy'] );
$this->reverseMap = null;
@@ -321,7 +323,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
$this->keys = array_slice( $this->keys, $offset, $limit, true );
- return array( $backwardsOffset, $forwardsOffset, $offset );
+ return [ $backwardsOffset, $forwardsOffset, $offset ];
}
/**
@@ -344,7 +346,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
* (INFILE, TRANSLATIONS)
* @param bool $condition Whether to return messages which do not satisfy
* the given filter condition (true), or only which do (false).
- * @param mixed $value Value for properties filtering.
+ * @param mixed|null $value Value for properties filtering.
* @throws MWException If given invalid filter name.
*/
public function filter( $type, $condition = true, $value = null ) {
@@ -358,7 +360,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
* @return array
*/
public static function getAvailableFilters() {
- return array(
+ return [
'fuzzy',
'optional',
'ignored',
@@ -367,7 +369,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
'translated',
'reviewer',
'last-translator',
- );
+ ];
}
/**
@@ -402,7 +404,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
if ( $filter !== 'optional' && $filter !== 'ignored' ) {
throw new MWException( "No tagged messages for custom filter $filter" );
}
- $keys = $this->filterOnCondition( $keys, array(), $condition );
+ $keys = $this->filterOnCondition( $keys, [], $condition );
} else {
$taggedKeys = array_flip( $this->tags[$filter] );
$keys = $this->filterOnCondition( $keys, $taggedKeys, $condition );
@@ -455,7 +457,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
protected function filterFuzzy( array $keys, $condition ) {
$this->loadInfo( $keys );
- $origKeys = array();
+ $origKeys = [];
if ( $condition === false ) {
$origKeys = $keys;
}
@@ -483,7 +485,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
protected function filterHastranslation( array $keys, $condition ) {
$this->loadInfo( $keys );
- $origKeys = array();
+ $origKeys = [];
if ( $condition === false ) {
$origKeys = $keys;
}
@@ -516,7 +518,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
protected function filterChanged( array $keys, $condition ) {
$this->loadData( $keys );
- $origKeys = array();
+ $origKeys = [];
if ( $condition === false ) {
$origKeys = $keys;
}
@@ -600,13 +602,13 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
* @return array ( string => string ) Array of keys in database format indexed by display format.
*/
protected function fixKeys() {
- $newkeys = array();
+ $newkeys = [];
// array( namespace, pagename )
$pages = $this->definitions->getPages();
$code = $this->code;
foreach ( $pages as $key => $page ) {
- list ( $namespace, $pagename ) = $page;
+ list( $namespace, $pagename ) = $page;
$title = Title::makeTitleSafe( $namespace, "$pagename/$code" );
if ( !$title ) {
wfWarn( "Invalid title $namespace:$pagename/$code" );
@@ -621,98 +623,104 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
/**
* Loads existence and fuzzy state for given list of keys.
* @param string[] $keys List of keys in database format.
- * @param int $dbtype One of DB_* constants.
*/
- protected function loadInfo( array $keys, $dbtype = DB_SLAVE ) {
+ protected function loadInfo( array $keys ) {
if ( $this->dbInfo !== null ) {
return;
}
- $this->dbInfo = array();
+ $this->dbInfo = [];
if ( !count( $keys ) ) {
return;
}
- $dbr = wfGetDB( $dbtype );
- $tables = array( 'page', 'revtag' );
- $fields = array( 'page_namespace', 'page_title', 'rt_type' );
+ $dbr = TranslateUtils::getSafeReadDB();
+ $tables = [ 'page', 'revtag' ];
+ $fields = [ 'page_namespace', 'page_title', 'rt_type' ];
$conds = $this->getTitleConds( $dbr );
- $joins = array( 'revtag' =>
- array(
+ $joins = [ 'revtag' =>
+ [
'LEFT JOIN',
- array( 'page_id=rt_page', 'page_latest=rt_revision', 'rt_type' => RevTag::getType( 'fuzzy' ) )
- )
- );
+ [ 'page_id=rt_page', 'page_latest=rt_revision', 'rt_type' => RevTag::getType( 'fuzzy' ) ]
+ ]
+ ];
- $this->dbInfo = $dbr->select( $tables, $fields, $conds, __METHOD__, array(), $joins );
+ $this->dbInfo = $dbr->select( $tables, $fields, $conds, __METHOD__, [], $joins );
}
/**
* Loads reviewers for given messages.
* @param string[] $keys List of keys in database format.
- * @param int $dbtype One of DB_* constants.
*/
- protected function loadReviewInfo( array $keys, $dbtype = DB_SLAVE ) {
- if ( $this->dbReviewData !== array() ) {
+ protected function loadReviewInfo( array $keys ) {
+ if ( $this->dbReviewData !== [] ) {
return;
}
- $this->dbReviewData = array();
+ $this->dbReviewData = [];
if ( !count( $keys ) ) {
return;
}
- $dbr = wfGetDB( $dbtype );
- $tables = array( 'page', 'translate_reviews' );
- $fields = array( 'page_namespace', 'page_title', 'trr_user' );
+ $dbr = TranslateUtils::getSafeReadDB();
+ $tables = [ 'page', 'translate_reviews' ];
+ $fields = [ 'page_namespace', 'page_title', 'trr_user' ];
$conds = $this->getTitleConds( $dbr );
- $joins = array( 'translate_reviews' =>
- array(
+ $joins = [ 'translate_reviews' =>
+ [
'JOIN',
- array( 'page_id=trr_page', 'page_latest=trr_revision' )
- )
- );
+ [ 'page_id=trr_page', 'page_latest=trr_revision' ]
+ ]
+ ];
- $this->dbReviewData = $dbr->select( $tables, $fields, $conds, __METHOD__, array(), $joins );
+ $this->dbReviewData = $dbr->select( $tables, $fields, $conds, __METHOD__, [], $joins );
}
/**
* Loads translation for given list of keys.
* @param string[] $keys List of keys in database format.
- * @param int $dbtype One of DB_* constants.
*/
- protected function loadData( array $keys, $dbtype = DB_SLAVE ) {
+ protected function loadData( array $keys ) {
if ( $this->dbData !== null ) {
return;
}
- $this->dbData = array();
+ $this->dbData = [];
if ( !count( $keys ) ) {
return;
}
- $dbr = wfGetDB( $dbtype );
+ $dbr = TranslateUtils::getSafeReadDB();
- $tables = array( 'page', 'revision', 'text' );
- $fields = array(
- 'page_namespace',
- 'page_title',
- 'page_latest',
- 'rev_user',
- 'rev_user_text',
- 'old_flags',
- 'old_text'
- );
- $conds = array(
- 'page_latest = rev_id',
- 'old_id = rev_text_id',
- );
+ if ( is_callable( Revision::class, 'getQueryInfo' ) ) {
+ $revQuery = Revision::getQueryInfo( [ 'page', 'text' ] );
+ } else {
+ $revQuery = [
+ 'tables' => [ 'page', 'revision', 'text' ],
+ 'fields' => [
+ 'page_namespace',
+ 'page_title',
+ 'page_latest',
+ 'rev_user',
+ 'rev_user_text',
+ 'old_flags',
+ 'old_text'
+ ],
+ 'joins' => [
+ 'revision' => [ 'JOIN', 'page_latest = rev_id' ],
+ 'text' => [ 'JOIN', 'old_id = rev_text_id' ],
+ ],
+ ];
+ }
+ $conds = [ 'page_latest = rev_id' ];
$conds[] = $this->getTitleConds( $dbr );
- $res = $dbr->select( $tables, $fields, $conds, __METHOD__ );
+ $res = $dbr->select(
+ $revQuery['tables'], $revQuery['fields'], $conds, __METHOD__, [], $revQuery['joins']
+ );
$this->dbData = $res;
}
@@ -720,24 +728,24 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
/**
* Of the current set of keys, construct database query conditions.
* @since 2011-12-28
- * @param DatabaseBase $db
+ * @param \Wikimedia\Rdbms\IDatabase $db
* @return string
*/
protected function getTitleConds( $db ) {
// Array of array( namespace, pagename )
- $byNamespace = array();
+ $byNamespace = [];
foreach ( $this->getTitles() as $title ) {
$namespace = $title->getNamespace();
$pagename = $title->getDBkey();
$byNamespace[$namespace][] = $pagename;
}
- $conds = array();
+ $conds = [];
foreach ( $byNamespace as $namespaces => $pagenames ) {
- $cond = array(
+ $cond = [
'page_namespace' => $namespaces,
'page_title' => $pagenames,
- );
+ ];
$conds[] = $db->makeList( $cond, LIST_AND );
}
@@ -750,6 +758,8 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
* database fields page_namespace and page_title as keys and returns
* the value for those indexes.
* @since 2011-12-23
+ * @param stdClass $row
+ * @return string|null
*/
protected function rowToKey( $row ) {
$map = $this->getReverseMap();
@@ -765,13 +775,14 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
/**
* Creates a two-dimensional map of namespace and pagenames.
* @since 2011-12-23
+ * @return array
*/
public function getReverseMap() {
if ( isset( $this->reverseMap ) ) {
return $this->reverseMap;
}
- $map = array();
+ $map = [];
/**
* @var Title $title
*/
@@ -779,7 +790,8 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
$map[$title->getNamespace()][$title->getDBkey()] = $mkey;
}
- return $this->reverseMap = $map;
+ $this->reverseMap = $map;
+ return $this->reverseMap;
}
/**
@@ -791,7 +803,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
return;
}
- $messages = array();
+ $messages = [];
$definitions = $this->definitions->getDefinitions();
foreach ( array_keys( $this->keys ) as $mkey ) {
$messages[$mkey] = new ThinMessage( $mkey, $definitions[$mkey] );
@@ -810,7 +822,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
}
if ( $this->dbInfo !== null ) {
- $fuzzy = array();
+ $fuzzy = [];
foreach ( $this->dbInfo as $row ) {
if ( $row->rt_type !== null ) {
$fuzzy[] = $this->rowToKey( $row );
@@ -888,7 +900,7 @@ class MessageCollection implements ArrayAccess, Iterator, Countable {
/**
* @param mixed $offset
- * @param $value
+ * @param mixed $value
*/
public function offsetSet( $offset, $value ) {
$this->messages[$offset] = $value;
@@ -974,13 +986,13 @@ class MessageDefinitions {
*/
public function getPages() {
$namespace = $this->namespace;
- $pages = array();
+ $pages = [];
foreach ( array_keys( $this->messages ) as $key ) {
if ( $namespace === false ) {
// pages are in format ex. "8:jan"
$pages[$key] = explode( ':', $key, 2 );
} else {
- $pages[$key] = array( $namespace, $key );
+ $pages[$key] = [ $namespace, $key ];
}
}
diff --git a/www/wiki/extensions/Translate/MessageGroupConfigurationParser.php b/www/wiki/extensions/Translate/MessageGroupConfigurationParser.php
index 23b2d2c0..acb45237 100644
--- a/www/wiki/extensions/Translate/MessageGroupConfigurationParser.php
+++ b/www/wiki/extensions/Translate/MessageGroupConfigurationParser.php
@@ -3,7 +3,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,7 +15,7 @@ class MessageGroupConfigurationParser {
public function __construct() {
// Don't perform validations if library not available
- if ( class_exists( 'RomaricDrigon\MetaYaml\MetaYaml' ) ) {
+ if ( class_exists( RomaricDrigon\MetaYaml\MetaYaml::class ) ) {
$this->baseSchema = $this->getBaseSchema();
}
}
@@ -25,7 +25,7 @@ class MessageGroupConfigurationParser {
* schema will be ignored, if schema validation is enabled.
*
* @param string $data Yaml
- * @param callable $callback Optional callback which is called on errors. Parameters are
+ * @param callable|null $callback Optional callback which is called on errors. Parameters are
* document index, processed configuration and error message.
* @return array Group configurations indexed by message group id.
*/
@@ -38,7 +38,7 @@ class MessageGroupConfigurationParser {
$documents = self::getDocumentsFromYaml( $data );
$configurations = self::parseDocuments( $documents );
- $groups = array();
+ $groups = [];
if ( is_array( $this->baseSchema ) ) {
foreach ( $configurations as $index => $config ) {
@@ -80,8 +80,8 @@ class MessageGroupConfigurationParser {
* @return array Unvalidated group configurations
*/
public function parseDocuments( array $documents ) {
- $groups = array();
- $template = array();
+ $groups = [];
+ $template = [];
foreach ( $documents as $document ) {
$document = TranslateYaml::loadString( $document );
@@ -130,7 +130,7 @@ class MessageGroupConfigurationParser {
continue;
}
- $extra = call_user_func( array( $class, 'getExtraSchema' ) );
+ $extra = call_user_func( [ $class, 'getExtraSchema' ] );
$schema = array_replace_recursive( $schema, $extra );
}
diff --git a/www/wiki/extensions/Translate/MessageGroups.php b/www/wiki/extensions/Translate/MessageGroups.php
index a4c01513..ba9c1cb9 100644
--- a/www/wiki/extensions/Translate/MessageGroups.php
+++ b/www/wiki/extensions/Translate/MessageGroups.php
@@ -6,8 +6,9 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
+use \MediaWiki\MediaWikiServices;
/**
* Factory class for accessing message groups individually by id or
@@ -21,43 +22,102 @@ class MessageGroups {
protected static $prioritycache;
/**
- * @var array|null
+ * @var MessageGroup[]|null Map of (group ID => MessageGroup)
*/
protected $groups;
/**
- * @var BagOStuff|null
+ * @var WANObjectCache|null
*/
protected $cache;
- /// Initialises the list of groups
- protected function init() {
- global $wgAutoloadClasses;
+ /**
+ * Tracks the current cache verison. Update this when there are incompatible changes
+ * with the last version of the cache to force a new key to be used. The older cache
+ * will automatically expire and be cleared off.
+ * @var int
+ */
+ const CACHE_VERSION = 2;
+ /**
+ * Initialises the list of groups
+ */
+ protected function init() {
if ( is_array( $this->groups ) ) {
- return;
+ return; // groups already initialized
}
- $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->initGroupsFromDefinitions( $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(
+ self::getCacheKey(),
+ $cache::TTL_DAY,
+ $regenerator,
+ [
+ 'lockTSE' => 30, // avoid stampedes (mutex)
+ 'checkKeys' => [ self::getCacheKey() ],
+ '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( self::getCacheKey(), $wrapper, $cache::TTL_DAY );
}
- $this->postInit( $groups );
+ $value = $wrapper->getValue();
+ self::appendAutoloader( $value['autoload'], $wgAutoloadClasses );
+
+ return $value;
}
/**
- * @param array $groups
+ * Expand process cached groups to objects
+ *
+ * @param array $groups Map of (group ID => mixed)
*/
- protected function postInit( $groups ) {
- // Expand groups to objects
+ protected function initGroupsFromDefinitions( $groups ) {
foreach ( $groups as $id => $mixed ) {
if ( !is_object( $mixed ) ) {
$groups[$id] = call_user_func( $mixed, $id );
@@ -73,8 +133,15 @@ class MessageGroups {
* @since 2015.04
*/
public function recache() {
- $groups = $this->loadGroupDefinitions();
- $this->postInit( $groups );
+ // Purge the value from all datacenters
+ $cache = $this->getCache();
+ $cache->touchCheckKey( self::getCacheKey() );
+ // Reload the cache value and update the local datacenter
+ $value = $this->getCachedGroupDefinitions( 'recache' );
+ $groups = $value['cc'];
+
+ $this->clearProcessCache();
+ $this->initGroupsFromDefinitions( $groups );
}
/**
@@ -84,18 +151,32 @@ class MessageGroups {
*/
public static function clearCache() {
$self = self::singleton();
- $self->getCache()->delete( wfMemcKey( 'translate-groups' ) );
- $self->groups = null;
+
+ $cache = $self->getCache();
+ $cache->delete( self::getCacheKey(), 1 );
+
+ $self->clearProcessCache();
+ }
+
+ /**
+ * Manually reset the process cache.
+ *
+ * This is helpful for long running scripts where the process cache might get stale
+ * even though the global cache is updated.
+ * @since 2016.08
+ */
+ public function clearProcessCache() {
+ $this->groups = null;
}
/**
* 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;
}
@@ -104,17 +185,29 @@ 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;
}
/**
+ * Returns the cache key.
+ *
+ * @return string
+ */
+ protected static function getCacheKey() {
+ $self = self::singleton();
+ $cache = $self->getCache();
+
+ return $cache->makeKey( 'translate-groups', 'v' . self::CACHE_VERSION );
+ }
+
+ /**
* Safely merges first array to second array, throwing warning on duplicates and removing
* duplicates from the first array.
- * @param array $additions Things to append
- * @param array $to Where to append
+ * @param array &$additions Things to append
+ * @param array &$to Where to append
*/
protected static function appendAutoloader( array &$additions, array &$to ) {
foreach ( $additions as $class => $file ) {
@@ -129,33 +222,11 @@ 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.
+ * Hook: TranslatePostInitGroups
+ * @param array &$groups
+ * @param array &$deps
+ * @param array &$autoload
*/
- protected function loadGroupDefinitions() {
- global $wgAutoloadClasses;
-
- $groups = $deps = $autoload = array();
-
- Hooks::run( 'TranslatePostInitGroups', array( &$groups, &$deps, &$autoload ) );
-
- // Register autoloaders for this request, both values modified by reference
- self::appendAutoloader( $autoload, $wgAutoloadClasses );
-
- $key = wfMemcKey( 'translate-groups' );
- $value = array(
- 'cc' => $groups,
- 'autoload' => $autoload,
- );
-
- $wrapper = new DependencyWrapper( $value, $deps );
- $wrapper->storeToCache( $this->getCache(), $key, 60 * 60 * 2 );
-
- return $groups;
- }
-
- /// Hook: TranslatePostInitGroups
public static function getTranslatablePages( array &$groups, array &$deps, array &$autoload ) {
global $wgEnablePageTranslation;
@@ -167,21 +238,25 @@ class MessageGroups {
$db = TranslateUtils::getSafeReadDB();
- $tables = array( 'page', 'revtag' );
- $vars = array( 'page_id', 'page_namespace', 'page_title' );
- $conds = array( 'page_id=rt_page', 'rt_type' => RevTag::getType( 'tp:mark' ) );
- $options = array( 'GROUP BY' => 'rt_page' );
+ $tables = [ 'page', 'revtag' ];
+ $vars = [ 'page_id', 'page_namespace', 'page_title' ];
+ $conds = [ 'page_id=rt_page', 'rt_type' => RevTag::getType( 'tp:mark' ) ];
+ $options = [ 'GROUP BY' => 'rt_page' ];
$res = $db->select( $tables, $vars, $conds, __METHOD__, $options );
foreach ( $res as $r ) {
$title = Title::newFromRow( $r );
$id = TranslatablePage::getMessageGroupIdFromTitle( $title );
$groups[$id] = new WikiPageMessageGroup( $id, $title );
- $groups[$id]->setLabel( $title->getPrefixedText() );
}
}
- /// Hook: TranslatePostInitGroups
+ /**
+ * Hook: TranslatePostInitGroups
+ * @param array &$groups
+ * @param array &$deps
+ * @param array &$autoload
+ */
public static function getConfiguredGroups( array &$groups, array &$deps, array &$autoload ) {
global $wgTranslateGroupFiles;
@@ -213,7 +288,12 @@ class MessageGroups {
}
}
- /// Hook: TranslatePostInitGroups
+ /**
+ * Hook: TranslatePostInitGroups
+ * @param array &$groups
+ * @param array &$deps
+ * @param array &$autoload
+ */
public static function getWorkflowGroups( array &$groups, array &$deps, array &$autoload ) {
global $wgTranslateWorkflowStates;
@@ -224,15 +304,29 @@ class MessageGroups {
}
}
- /// Hook: TranslatePostInitGroups
+ /**
+ * Hook: TranslatePostInitGroups
+ * @param array &$groups
+ * @param array &$deps
+ * @param array &$autoload
+ */
public static function getAggregateGroups( array &$groups, array &$deps, array &$autoload ) {
$groups += self::loadAggregateGroups();
}
- /// Hook: TranslatePostInitGroups
+ /**
+ * Hook: TranslatePostInitGroups
+ * @param array &$groups
+ * @param array &$deps
+ * @param array &$autoload
+ */
public static function getCCGroups( array &$groups, array &$deps, array &$autoload ) {
global $wgTranslateCC;
+ if ( $wgTranslateCC !== [] ) {
+ wfDeprecated( '$wgTranslateCC' );
+ }
+
$deps[] = new GlobalDependency( 'wgTranslateCC' );
$groups += $wgTranslateCC;
@@ -300,6 +394,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 );
@@ -307,7 +402,7 @@ class MessageGroups {
/**
* Get all enabled message groups.
- * @return array ( string => MessageGroup )
+ * @return MessageGroup[] Map of (string => MessageGroup)
*/
public static function getAllGroups() {
return self::singleton()->getGroups();
@@ -324,12 +419,12 @@ class MessageGroups {
*/
public static function getPriority( $group ) {
if ( !isset( self::$prioritycache ) ) {
- self::$prioritycache = array();
+ self::$prioritycache = [];
// Abusing this table originally intented for other purposes
- $db = wfGetDB( DB_SLAVE );
+ $db = wfGetDB( DB_REPLICA );
$table = 'translate_groupreviews';
- $fields = array( 'tgr_group', 'tgr_state' );
- $conds = array( 'tgr_lang' => '*priority' );
+ $fields = [ 'tgr_group', 'tgr_state' ];
+ $conds = [ 'tgr_lang' => '*priority' ];
$res = $db->select( $table, $fields, $conds, __METHOD__ );
foreach ( $res as $row ) {
self::$prioritycache[$row->tgr_group] = $row->tgr_state;
@@ -342,12 +437,11 @@ class MessageGroups {
$id = self::normalizeId( $group );
}
- return isset( self::$prioritycache[$id] ) ? self::$prioritycache[$id] : '';
+ return self::$prioritycache[$id] ?? '';
}
/**
* Sets the message group priority.
- * @see MessageGroups::getPriority
*
* @param MessageGroup|string $group Message group
* @param string $priority Priority (empty string to unset)
@@ -364,22 +458,26 @@ class MessageGroups {
$dbw = wfGetDB( DB_MASTER );
$table = 'translate_groupreviews';
- $row = array(
+ $row = [
'tgr_group' => $id,
'tgr_lang' => '*priority',
'tgr_state' => $priority,
- );
+ ];
if ( $priority === '' ) {
unset( $row['tgr_state'] );
$dbw->delete( $table, $row, __METHOD__ );
} else {
- $index = array( 'tgr_group', 'tgr_lang' );
- $dbw->replace( $table, array( $index ), $row, __METHOD__ );
+ $index = [ 'tgr_group', 'tgr_lang' ];
+ $dbw->replace( $table, [ $index ], $row, __METHOD__ );
}
}
- /// @since 2011-12-28
+ /**
+ * @since 2011-12-28
+ * @param MessageGroup $group
+ * @return bool
+ */
public static function isDynamic( MessageGroup $group ) {
$id = $group->getId();
@@ -420,8 +518,8 @@ class MessageGroups {
*/
public static function getParentGroups( MessageGroup $targetGroup ) {
$ids = self::getSharedGroups( $targetGroup );
- if ( $ids === array() ) {
- return array();
+ if ( $ids === [] ) {
+ return [];
}
$targetId = $targetGroup->getId();
@@ -441,7 +539,7 @@ class MessageGroups {
/* Now that we have all related groups, use them to find all paths
* from top-level groups to target group with any number of subgroups
* in between. */
- $paths = array();
+ $paths = [];
/* This function recursively finds paths to the target group */
$pathFinder = function ( &$paths, $group, $targetId, $prefix = '' )
@@ -494,7 +592,7 @@ class MessageGroups {
/**
* Constructor function.
- * @return MessageGroups
+ * @return self
*/
public static function singleton() {
static $instance;
@@ -508,7 +606,7 @@ class MessageGroups {
/**
* Get all enabled non-dynamic message groups.
*
- * @return array
+ * @return MessageGroup[] Map of (group ID => MessageGroup)
*/
public function getGroups() {
$this->init();
@@ -525,7 +623,7 @@ class MessageGroups {
* @since 2012-02-13
*/
public static function getGroupsById( array $ids, $skipMeta = false ) {
- $groups = array();
+ $groups = [];
foreach ( $ids as $id ) {
$group = self::getGroup( $id );
@@ -552,14 +650,26 @@ class MessageGroups {
* @since 2012-02-13
*/
public static function expandWildcards( $ids ) {
- $all = array();
+ $all = [];
$ids = (array)$ids;
foreach ( $ids as $index => $id ) {
- $ids[$index] = self::normalizeId( $id );
+ // Fast path, no wildcards
+ if ( strcspn( $id, '*?' ) === strlen( $id ) ) {
+ $g = self::getGroup( $id );
+ if ( $g ) {
+ $all[] = $g->getId();
+ }
+ unset( $ids[$index] );
+ }
+ }
+
+ if ( $ids === [] ) {
+ return $all;
}
- $matcher = new StringMatcher( '', (array)$ids );
+ // Slow path for the ones with wildcards
+ $matcher = new StringMatcher( '', $ids );
foreach ( self::getAllGroups() as $id => $_ ) {
if ( $matcher->match( $id ) ) {
$all[] = $id;
@@ -572,19 +682,20 @@ class MessageGroups {
/**
* Contents on these groups changes on a whim.
* @since 2011-12-28
+ * @return array
*/
public static function getDynamicGroups() {
- return array(
+ return [
'!recent' => 'RecentMessageGroup',
'!additions' => 'RecentAdditionsMessageGroup',
'!sandbox' => 'SandboxMessageGroup',
- );
+ ];
}
/**
* Get only groups of specific type (class).
* @param string $type Class name of wanted type
- * @return MessageGroupBase[]
+ * @return MessageGroupBase[] Map of (group ID => MessageGroupBase)
* @since 2012-04-30
*/
public static function getGroupsByType( $type ) {
@@ -606,7 +717,7 @@ class MessageGroups {
* In other words: [Group1, Group2, [AggGroup, Group3, Group4]]
*
* @throws MWException If cyclic structure is detected.
- * @return array
+ * @return array Map of (group ID => MessageGroup or recursive array)
*/
public static function getGroupStructure() {
$groups = self::getAllGroups();
@@ -634,9 +745,9 @@ class MessageGroups {
// Work around php bug: https://bugs.php.net/bug.php?id=50688
// Triggered by ApiQueryMessageGroups for example
- wfSuppressWarnings();
- usort( $tree, array( __CLASS__, 'groupLabelSort' ) );
- wfRestoreWarnings();
+ Wikimedia\suppressWarnings();
+ usort( $tree, [ __CLASS__, 'groupLabelSort' ] );
+ Wikimedia\restoreWarnings();
/* Now we have two things left in $tree array:
* - solitaries: top-level non-aggregate message groups
@@ -651,9 +762,9 @@ class MessageGroups {
* groups not be included at all, because they have all unset each
* other in the first loop. So now we check if there are groups left
* over. */
- $used = array();
+ $used = [];
// Hack to allow passing by reference
- array_walk_recursive( $tree, array( __CLASS__, 'collectGroupIds' ), array( &$used ) );
+ array_walk_recursive( $tree, [ __CLASS__, 'collectGroupIds' ], [ &$used ] );
$unused = array_diff( array_keys( $groups ), array_keys( $used ) );
if ( count( $unused ) ) {
foreach ( $unused as $index => $id ) {
@@ -670,12 +781,22 @@ class MessageGroups {
return $tree;
}
- /// See getGroupStructure, just collects ids into array
+ /**
+ * See getGroupStructure, just collects ids into array
+ * @param MessageGroup $value
+ * @param string $key
+ * @param bool $used
+ */
public static function collectGroupIds( MessageGroup $value, $key, $used ) {
$used[0][$value->getId()] = true;
}
- /// Sorts groups by label value
+ /**
+ * Sorts groups by label value
+ * @param MessageGroup $a
+ * @param MessageGroup $b
+ * @return int
+ */
public static function groupLabelSort( $a, $b ) {
$al = $a->getLabel();
$bl = $b->getLabel();
@@ -688,17 +809,23 @@ class MessageGroups {
* AggregateMessageGroup.
*
* @param AggregateMessageGroup $parent
+ * @param string[] &$childIds Flat list of child group IDs [returned]
+ * @param string $fname Calling method name; used to identify recursion [optional]
* @throws MWException
* @return array
* @since Public since 2012-11-29
*/
- public static function subGroups( AggregateMessageGroup $parent ) {
- static $recursionGuard = array();
+ public static function subGroups(
+ AggregateMessageGroup $parent,
+ array &$childIds = [],
+ $fname = 'caller'
+) {
+ static $recursionGuard = [];
$pid = $parent->getId();
if ( isset( $recursionGuard[$pid] ) ) {
$tid = $pid;
- $path = array( $tid );
+ $path = [ $tid ];
do {
$tid = $recursionGuard[$tid];
$path[] = $tid;
@@ -710,20 +837,27 @@ class MessageGroups {
// We don't care about the ids.
$tree = array_values( $parent->getGroups() );
- usort( $tree, array( __CLASS__, 'groupLabelSort' ) );
+ usort( $tree, [ __CLASS__, 'groupLabelSort' ] );
// Expand aggregate groups (if any left) after sorting to form a tree
foreach ( $tree as $index => $group ) {
if ( $group instanceof AggregateMessageGroup ) {
$sid = $group->getId();
$recursionGuard[$pid] = $sid;
- $tree[$index] = self::subGroups( $group );
+ $tree[$index] = self::subGroups( $group, $childIds, __METHOD__ );
unset( $recursionGuard[$pid] );
+
+ $childIds[$sid] = 1;
}
}
// Parent group must be first item in the array
array_unshift( $tree, $parent );
+ if ( $fname !== __METHOD__ ) {
+ // Move the IDs from the keys to the value for final return
+ $childIds = array_values( $childIds );
+ }
+
return $tree;
}
@@ -751,28 +885,27 @@ class MessageGroups {
/**
* Get all the aggregate messages groups defined in translate_metadata table.
*
- * @return array
+ * @return MessageGroup[]
*/
protected static function loadAggregateGroups() {
- $dbw = wfGetDB( DB_MASTER );
- $tables = array( 'translate_metadata' );
- $fields = array( 'tmd_group', 'tmd_value' );
- $conds = array( 'tmd_key' => 'subgroups' );
- $res = $dbw->select( $tables, $fields, $conds, __METHOD__ );
-
- $groups = array();
- foreach ( $res as $row ) {
- $id = $row->tmd_group;
-
- $conf = array();
- $conf['BASIC'] = array(
+ $dbr = TranslateUtils::getSafeReadDB();
+ $tables = [ 'translate_metadata' ];
+ $field = 'tmd_group';
+ $conds = [ 'tmd_key' => 'subgroups' ];
+ $groupIds = $dbr->selectFieldValues( $tables, $field, $conds, __METHOD__ );
+ TranslateMetadata::preloadGroups( $groupIds );
+
+ $groups = [];
+ foreach ( $groupIds as $id ) {
+ $conf = [];
+ $conf['BASIC'] = [
'id' => $id,
'label' => TranslateMetadata::get( $id, 'name' ),
'description' => TranslateMetadata::get( $id, 'description' ),
'meta' => 1,
'class' => 'AggregateMessageGroup',
'namespace' => NS_TRANSLATIONS,
- );
+ ];
$conf['GROUPS'] = TranslateMetadata::getSubgroups( $id );
$group = MessageGroupBase::factory( $conf );
@@ -791,7 +924,7 @@ class MessageGroups {
* @since 2013.10
*/
public static function isTranslatableMessage( MessageHandle $handle ) {
- static $cache = array();
+ static $cache = [];
if ( !$handle->isValid() ) {
return false;
@@ -823,13 +956,13 @@ class MessageGroups {
}
}
- $cache[$cacheKey] = array(
+ $cache[$cacheKey] = [
'relevant' => $allowed && !$discouraged,
- 'tags' => array(),
- );
+ 'tags' => [],
+ ];
$groupTags = $group->getTags();
- foreach ( array( 'ignored', 'optional' ) as $tag ) {
+ foreach ( [ 'ignored', 'optional' ] as $tag ) {
if ( isset( $groupTags[$tag] ) ) {
foreach ( $groupTags[$tag] as $key ) {
// TODO: ucfirst should not be here
diff --git a/www/wiki/extensions/Translate/MetaYamlSchemaExtender.php b/www/wiki/extensions/Translate/MetaYamlSchemaExtender.php
index 8891f830..b1fc5cd5 100644
--- a/www/wiki/extensions/Translate/MetaYamlSchemaExtender.php
+++ b/www/wiki/extensions/Translate/MetaYamlSchemaExtender.php
@@ -5,7 +5,7 @@
* because they are parsed to PHP arrays anyway. The configuration consists of sections, and in some
* section there is key 'class' which defines the class implementing that part of behavior. These
* classes can take custom parameters, so in essense our configuration format is open-ended. To
- * implement proper validation, those classes can extend the schema runtime by implemeting this
+ * implement proper validation, those classes can extend the schema runtime by implementing this
* interface. Validation is implemented with the MetaYaml library.
*
* Because neither is_a nor instanceof accept class names, validation code will check directly
diff --git a/www/wiki/extensions/Translate/RELEASE-NOTES b/www/wiki/extensions/Translate/RELEASE-NOTES
new file mode 100644
index 00000000..084c719c
--- /dev/null
+++ b/www/wiki/extensions/Translate/RELEASE-NOTES
@@ -0,0 +1,15 @@
+== Translate 2019.04 ==
+Released at 2019-04-25.
+
+=== Noteworthy changes ===
+* Fixed fatal error on PageContentLanguage hook subscriber (T214358)
+* Replaced usage of mw.translateHooks with mw.hook. Deprecation warning will be shown while using functions under mw.translateHooks (T72031)
+* Added support for newer versions of the Elastica extension while maintaining backward compatibility for older version REL 1.31 (T218100)
+* Fixed page suggestion control on Special:PageMigration (T217726)
+* Fixed broken Special:PageMigration (T217727)
+* Add link to Special:PageMigration when page is marked for translation (T178642)
+* Removed display of the message group state for the source language (T160511)
+* Fixed invalid display of priority language notice (T217046)
+* Added better error handling in Special:SearchTranslations (T159221)
+* Display proper notice when translations to non-priority languages are blocked (T218777)
+* Fixed "proofreading" status appearing for source language on the MessageGroup and Language stats page (T160511)
diff --git a/www/wiki/extensions/Translate/Translate.alias.php b/www/wiki/extensions/Translate/Translate.alias.php
index 6d8610d8..2008d703 100644
--- a/www/wiki/extensions/Translate/Translate.alias.php
+++ b/www/wiki/extensions/Translate/Translate.alias.php
@@ -3,1176 +3,1230 @@
* Aliases for special pages of Translate extension.
*
* @file
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-// @codingStandardsIgnoreFile
-$specialPageAliases = array();
+$specialPageAliases = [];
/** English (English) */
-$specialPageAliases['en'] = array(
- 'AggregateGroups' => array( 'AggregateGroups' ),
- 'ImportTranslations' => array( 'ImportTranslations' ),
- 'LanguageStats' => array( 'LanguageStats' ),
- 'Magic' => array( 'AdvancedTranslate', 'Magic' ),
- 'ManageMessageGroups' => array( 'ManageMessageGroups' ),
- 'ManageTranslatorSandbox' => array( 'ManageTranslatorSandbox', 'TranslateSandbox' ),
- 'MessageGroupStats' => array( 'MessageGroupStats' ),
- 'PageTranslation' => array( 'PageTranslation' ),
- 'PageTranslationDeletePage' => array( 'PageTranslationDeletePage' ),
- 'SearchTranslations' => array( 'SearchTranslations' ),
- 'SupportedLanguages' => array( 'SupportedLanguages' ),
- 'Translate' => array( 'Translate' ),
- 'TranslationStash' => array( 'TranslationStash' ),
- 'TranslationStats' => array( 'TranslationStats', 'TranslationStatistics' ),
- 'Translations' => array( 'Translations' ),
- 'PageMigration' => array( 'PageMigration' ),
- 'PagePreparation' => array( 'PagePreparation' ),
-);
+$specialPageAliases['en'] = [
+ 'AggregateGroups' => [ 'AggregateGroups' ],
+ 'ImportTranslations' => [ 'ImportTranslations' ],
+ 'ExportTranslations' => [ 'ExportTranslations' ],
+ 'LanguageStats' => [ 'LanguageStats' ],
+ 'Magic' => [ 'AdvancedTranslate', 'Magic' ],
+ 'ManageMessageGroups' => [ 'ManageMessageGroups' ],
+ 'ManageTranslatorSandbox' => [ 'ManageTranslatorSandbox', 'TranslateSandbox' ],
+ 'MessageGroupStats' => [ 'MessageGroupStats' ],
+ 'PageTranslation' => [ 'PageTranslation' ],
+ 'PageTranslationDeletePage' => [ 'PageTranslationDeletePage' ],
+ 'SearchTranslations' => [ 'SearchTranslations' ],
+ 'SupportedLanguages' => [ 'SupportedLanguages' ],
+ 'Translate' => [ 'Translate' ],
+ 'TranslationStash' => [ 'TranslationStash' ],
+ 'TranslationStats' => [ 'TranslationStats', 'TranslationStatistics' ],
+ 'Translations' => [ 'Translations' ],
+ 'PageMigration' => [ 'PageMigration' ],
+ 'PagePreparation' => [ 'PagePreparation' ],
+];
/** Afrikaans (Afrikaans) */
-$specialPageAliases['af'] = array(
- 'LanguageStats' => array( 'TaalStatsistieke' ),
- 'Magic' => array( 'GevorderdeVertaal' ),
- 'PageTranslation' => array( 'BladsyVertaling' ),
- 'Translate' => array( 'Vertaal' ),
- 'TranslationStats' => array( 'VertaalStatistieke' ),
- 'Translations' => array( 'Vertalings' ),
-);
+$specialPageAliases['af'] = [
+ 'LanguageStats' => [ 'TaalStatsistieke' ],
+ 'Magic' => [ 'GevorderdeVertaal' ],
+ 'PageTranslation' => [ 'BladsyVertaling' ],
+ 'Translate' => [ 'Vertaal' ],
+ 'TranslationStats' => [ 'VertaalStatistieke' ],
+ 'Translations' => [ 'Vertalings' ],
+];
/** Arabic (العربية) */
-$specialPageAliases['ar'] = array(
- 'AggregateGroups' => array( 'مجموعات_مجمعة' ),
- 'ImportTranslations' => array( 'استيراد_الترجمات' ),
- 'LanguageStats' => array( 'إحصاءات_اللغات' ),
- 'Magic' => array( 'ترجمة_متقدمة', 'ماجيك' ),
- 'ManageMessageGroups' => array( 'التحكم_بمجموعات_الرسائل' ),
- 'ManageTranslatorSandbox' => array( 'التحكم_بملعب_المترجم', 'ملعب_الترجمة' ),
- 'MessageGroupStats' => array( 'إحصاءات_مجموعات_الرسائل' ),
- 'PageTranslation' => array( 'ترجمة_صفحة' ),
- 'PageTranslationDeletePage' => array( 'صفحة_حذف_ترجمة_الصفحة' ),
- 'SearchTranslations' => array( 'بحث_الترجمات' ),
- 'SupportedLanguages' => array( 'اللغات_المدعومة' ),
- 'Translate' => array( 'ترجمة' ),
- 'TranslationStash' => array( 'ستاش_الترجمة' ),
- 'TranslationStats' => array( 'إحصاءات_الترجمة' ),
- 'Translations' => array( 'ترجمات' ),
- 'PageMigration' => array( 'هجرة_الصفحة' ),
- 'PagePreparation' => array( 'تحضير_الصفحة' ),
-);
+$specialPageAliases['ar'] = [
+ 'AggregateGroups' => [ 'مجموعات_مجمعة' ],
+ 'ImportTranslations' => [ 'استيراد_الترجمات' ],
+ 'LanguageStats' => [ 'إحصاءات_اللغات' ],
+ 'Magic' => [ 'ترجمة_متقدمة', 'ماجيك' ],
+ 'ManageMessageGroups' => [ 'التحكم_بمجموعات_الرسائل' ],
+ 'ManageTranslatorSandbox' => [ 'التحكم_بملعب_المترجم', 'ملعب_الترجمة' ],
+ 'MessageGroupStats' => [ 'إحصاءات_مجموعات_الرسائل' ],
+ 'PageTranslation' => [ 'ترجمة_صفحة' ],
+ 'PageTranslationDeletePage' => [ 'صفحة_حذف_ترجمة_الصفحة' ],
+ 'SearchTranslations' => [ 'بحث_الترجمات' ],
+ 'SupportedLanguages' => [ 'اللغات_المدعومة' ],
+ 'Translate' => [ 'ترجمة' ],
+ 'TranslationStash' => [ 'ستاش_الترجمة' ],
+ 'TranslationStats' => [ 'إحصاءات_الترجمة' ],
+ 'Translations' => [ 'ترجمات' ],
+ 'PageMigration' => [ 'هجرة_الصفحة' ],
+ 'PagePreparation' => [ 'تحضير_الصفحة' ],
+];
/** Aramaic (ܐܪܡܝܐ) */
-$specialPageAliases['arc'] = array(
- 'PageTranslation' => array( 'ܬܘܪܓܡܐ_ܕܦܐܬܐ' ),
- 'SupportedLanguages' => array( 'ܠܫܢ̈ܐ_ܣܡܝܟ̈ܐ' ),
- 'Translate' => array( 'ܬܪܓܡ' ),
- 'Translations' => array( 'ܬܘܪ̈ܓܡܐ' ),
-);
+$specialPageAliases['arc'] = [
+ 'PageTranslation' => [ 'ܬܘܪܓܡܐ_ܕܦܐܬܐ' ],
+ 'SupportedLanguages' => [ 'ܠܫܢ̈ܐ_ܣܡܝܟ̈ܐ' ],
+ 'Translate' => [ 'ܬܪܓܡ' ],
+ 'Translations' => [ 'ܬܘܪ̈ܓܡܐ' ],
+];
/** Egyptian Arabic (مصرى) */
-$specialPageAliases['arz'] = array(
- 'AggregateGroups' => array( 'مجموعات_متجمعه' ),
- 'ImportTranslations' => array( 'استوراد_الترجمات' ),
- 'LanguageStats' => array( 'احصائيات_اللغات' ),
- 'Magic' => array( 'ترجمة_متقدمة', 'ماجيك' ),
- 'ManageMessageGroups' => array( 'التحكم_بمجموعات_الرسايل' ),
- 'ManageTranslatorSandbox' => array( 'التحكم_بسبوره_المترجم', 'سبوره_الترجمه' ),
- 'MessageGroupStats' => array( 'احصاءات_مجموعات_الرسايل' ),
- 'PageTranslation' => array( 'ترجمة_صفحه' ),
- 'PageTranslationDeletePage' => array( 'صفحه_حذف_ترجمه_الصفحه' ),
- 'SearchTranslations' => array( 'تدوير_الترجمات' ),
- 'SupportedLanguages' => array( 'اللغات_المتدعمه' ),
- 'Translate' => array( 'ترجمه' ),
- 'TranslationStash' => array( 'ستاش_الترجمه' ),
- 'TranslationStats' => array( 'احصائيات_الترجمه' ),
- 'Translations' => array( 'ترجمات' ),
- 'PageMigration' => array( 'هجره_الصفحه' ),
-);
+$specialPageAliases['arz'] = [
+ 'AggregateGroups' => [ 'مجموعات_متجمعه' ],
+ 'ImportTranslations' => [ 'استوراد_الترجمات' ],
+ 'LanguageStats' => [ 'احصائيات_اللغات' ],
+ 'Magic' => [ 'ترجمة_متقدمة', 'ماجيك' ],
+ 'ManageMessageGroups' => [ 'التحكم_بمجموعات_الرسايل' ],
+ 'ManageTranslatorSandbox' => [ 'التحكم_بسبوره_المترجم', 'سبوره_الترجمه' ],
+ 'MessageGroupStats' => [ 'احصاءات_مجموعات_الرسايل' ],
+ 'PageTranslation' => [ 'ترجمة_صفحه' ],
+ 'PageTranslationDeletePage' => [ 'صفحه_حذف_ترجمه_الصفحه' ],
+ 'SearchTranslations' => [ 'تدوير_الترجمات' ],
+ 'SupportedLanguages' => [ 'اللغات_المتدعمه' ],
+ 'Translate' => [ 'ترجمه' ],
+ 'TranslationStash' => [ 'ستاش_الترجمه' ],
+ 'TranslationStats' => [ 'احصائيات_الترجمه' ],
+ 'Translations' => [ 'ترجمات' ],
+ 'PageMigration' => [ 'هجره_الصفحه' ],
+];
/** Assamese (অসমীয়া) */
-$specialPageAliases['as'] = array(
- 'ImportTranslations' => array( 'অনুবাদ_আমদানি_কৰক' ),
- 'LanguageStats' => array( 'ভাষাৰ_পৰিসংখ্যা' ),
- 'Magic' => array( 'উন্নত_অনুবাদ', 'যাদু' ),
- 'MessageGroupStats' => array( 'বাৰ্তাৰ_গোট_পৰিসংখ্যা' ),
- 'PageTranslation' => array( 'পৃষ্ঠা_অনুবাদ' ),
- 'SupportedLanguages' => array( 'সমৰ্থিত_ভাষাসমূহ' ),
- 'Translate' => array( 'অনুবাদ_কৰক' ),
- 'TranslationStats' => array( 'অনুবাদ_পৰিসংখ্যা' ),
- 'Translations' => array( 'অনুবাদসমূহ' ),
-);
+$specialPageAliases['as'] = [
+ 'ImportTranslations' => [ 'অনুবাদ_আমদানি_কৰক' ],
+ 'LanguageStats' => [ 'ভাষাৰ_পৰিসংখ্যা' ],
+ 'Magic' => [ 'উন্নত_অনুবাদ', 'যাদু' ],
+ 'MessageGroupStats' => [ 'বাৰ্তাৰ_গোট_পৰিসংখ্যা' ],
+ 'PageTranslation' => [ 'পৃষ্ঠা_অনুবাদ' ],
+ 'SupportedLanguages' => [ 'সমৰ্থিত_ভাষাসমূহ' ],
+ 'Translate' => [ 'অনুবাদ_কৰক' ],
+ 'TranslationStats' => [ 'অনুবাদ_পৰিসংখ্যা' ],
+ 'Translations' => [ 'অনুবাদসমূহ' ],
+];
/** Asturian (asturianu) */
-$specialPageAliases['ast'] = array(
- 'Translate' => array( 'Traducir' ),
-);
+$specialPageAliases['ast'] = [
+ 'Translate' => [ 'Traducir' ],
+];
/** Avaric (авар) */
-$specialPageAliases['av'] = array(
- 'AggregateGroups' => array( 'Агрегированные_группы' ),
- 'ImportTranslations' => array( 'Импорт_переводов' ),
- 'LanguageStats' => array( 'Статистика_языка' ),
- 'Magic' => array( 'Расширенный_перевод' ),
- 'ManageMessageGroups' => array( 'Управление_группами_сообщений' ),
- 'MessageGroupStats' => array( 'Статистика_группы_сообщений' ),
- 'PageTranslation' => array( 'Перевод_страниц' ),
- 'PageTranslationDeletePage' => array( 'Удаление_переводимой_страницы' ),
- 'SearchTranslations' => array( 'Поиск_переводов' ),
- 'SupportedLanguages' => array( 'Поддерживаемые_языки' ),
- 'Translate' => array( 'Перевести' ),
- 'TranslationStats' => array( 'Статистика_переводов' ),
- 'Translations' => array( 'Переводы' ),
-);
+$specialPageAliases['av'] = [
+ 'AggregateGroups' => [ 'Агрегированные_группы' ],
+ 'ImportTranslations' => [ 'Импорт_переводов' ],
+ 'LanguageStats' => [ 'Статистика_языка' ],
+ 'Magic' => [ 'Расширенный_перевод' ],
+ 'ManageMessageGroups' => [ 'Управление_группами_сообщений' ],
+ 'MessageGroupStats' => [ 'Статистика_группы_сообщений' ],
+ 'PageTranslation' => [ 'Перевод_страниц' ],
+ 'PageTranslationDeletePage' => [ 'Удаление_переводимой_страницы' ],
+ 'SearchTranslations' => [ 'Поиск_переводов' ],
+ 'SupportedLanguages' => [ 'Поддерживаемые_языки' ],
+ 'Translate' => [ 'Перевести' ],
+ 'TranslationStats' => [ 'Статистика_переводов' ],
+ 'Translations' => [ 'Переводы' ],
+];
/** Azerbaijani (azərbaycanca) */
-$specialPageAliases['az'] = array(
- 'PageTranslation' => array( 'SəhifəTərcüməsi' ),
- 'Translations' => array( 'Tərcümələr' ),
-);
+$specialPageAliases['az'] = [
+ 'PageTranslation' => [ 'SəhifəTərcüməsi' ],
+ 'Translations' => [ 'Tərcümələr' ],
+];
/** South Azerbaijani (تۆرکجه) */
-$specialPageAliases['azb'] = array(
- 'PageTranslation' => array( 'صحیفه_چئویرمه‌سی' ),
- 'Translations' => array( 'چئویرمه‌لر' ),
-);
+$specialPageAliases['azb'] = [
+ 'PageTranslation' => [ 'صحیفه_چئویرمه‌سی' ],
+ 'Translations' => [ 'چئویرمه‌لر' ],
+];
/** Bashkir (башҡортса) */
-$specialPageAliases['ba'] = array(
- 'Magic' => array( 'AdvancedTranslate' ),
- 'Translate' => array( 'Translate' ),
- 'Translations' => array( 'Translations' ),
-);
+$specialPageAliases['ba'] = [
+ 'Magic' => [ 'AdvancedTranslate' ],
+ 'Translate' => [ 'Translate' ],
+ 'Translations' => [ 'Translations' ],
+];
/** Southern Balochi (بلوچی مکرانی) */
-$specialPageAliases['bcc'] = array(
- 'Magic' => array( 'پیشرپتگین ترجمه' ),
- 'Translate' => array( 'ترجمه' ),
-);
+$specialPageAliases['bcc'] = [
+ 'Magic' => [ 'پیشرپتگین ترجمه' ],
+ 'Translate' => [ 'ترجمه' ],
+];
/** Bulgarian (български) */
-$specialPageAliases['bg'] = array(
- 'Translate' => array( 'Превеждане' ),
- 'Translations' => array( 'Преводи' ),
-);
+$specialPageAliases['bg'] = [
+ 'Translate' => [ 'Превеждане' ],
+ 'Translations' => [ 'Преводи' ],
+];
/** Western Balochi (بلوچی رخشانی) */
-$specialPageAliases['bgn'] = array(
- 'AggregateGroups' => array( 'گروپ_ئآنی_جم' ),
- 'ImportTranslations' => array( 'ترجمه_ئانی_درون_بررّگ' ),
- 'LanguageStats' => array( 'زبان_ئانی_سرجم' ),
- 'Magic' => array( 'پیشرپته_ئین_ترجمه' ),
- 'ManageMessageGroups' => array( 'پیامی_گروپ_ئانی_مدیریت' ),
- 'ManageTranslatorSandbox' => array( 'ترجمه_ئی_تمرین_ئی_تاکدیمی_مدیریت' ),
- 'MessageGroupStats' => array( 'پیام_ی_گروپ_ئی_سرجم' ),
- 'PageTranslation' => array( 'ترجمه_ئی_تاکدیم' ),
- 'PageTranslationDeletePage' => array( 'تاکدیمی_پاک_کورتین' ),
- 'SearchTranslations' => array( 'ترجمه_ئانی_گشتین' ),
- 'SupportedLanguages' => array( 'پُشتیوانی_بوته_ئین_زبانان' ),
- 'Translate' => array( 'ترجمه' ),
- 'TranslationStats' => array( 'ترجمه_ئانی_سرجم' ),
- 'Translations' => array( 'ترجمه_ئان' ),
- 'PageMigration' => array( 'تاکدیمی_لَڑ_و_بار' ),
-);
+$specialPageAliases['bgn'] = [
+ 'AggregateGroups' => [ 'گروپ_ئآنی_جم' ],
+ 'ImportTranslations' => [ 'ترجمه_ئانی_درون_بررّگ' ],
+ 'LanguageStats' => [ 'زبان_ئانی_سرجم' ],
+ 'Magic' => [ 'پیشرپته_ئین_ترجمه' ],
+ 'ManageMessageGroups' => [ 'پیامی_گروپ_ئانی_مدیریت' ],
+ 'ManageTranslatorSandbox' => [ 'ترجمه_ئی_تمرین_ئی_تاکدیمی_مدیریت' ],
+ 'MessageGroupStats' => [ 'پیام_ی_گروپ_ئی_سرجم' ],
+ 'PageTranslation' => [ 'ترجمه_ئی_تاکدیم' ],
+ 'PageTranslationDeletePage' => [ 'تاکدیمی_پاک_کورتین' ],
+ 'SearchTranslations' => [ 'ترجمه_ئانی_گشتین' ],
+ 'SupportedLanguages' => [ 'پُشتیوانی_بوته_ئین_زبانان' ],
+ 'Translate' => [ 'ترجمه' ],
+ 'TranslationStats' => [ 'ترجمه_ئانی_سرجم' ],
+ 'Translations' => [ 'ترجمه_ئان' ],
+ 'PageMigration' => [ 'تاکدیمی_لَڑ_و_بار' ],
+];
/** Banjar (Bahasa Banjar) */
-$specialPageAliases['bjn'] = array(
- 'ImportTranslations' => array( 'Impor_tarjamahan' ),
- 'LanguageStats' => array( 'Statistik_bahasa' ),
- 'Magic' => array( 'Tarjamahakan_lanjut' ),
- 'PageTranslation' => array( 'Tarjamahan_tungkaran' ),
- 'Translate' => array( 'Tarjamahakan' ),
- 'TranslationStats' => array( 'Statistik_tarjamahan' ),
- 'Translations' => array( 'Tarjamahan' ),
-);
+$specialPageAliases['bjn'] = [
+ 'ImportTranslations' => [ 'Impor_tarjamahan' ],
+ 'LanguageStats' => [ 'Statistik_bahasa' ],
+ 'Magic' => [ 'Tarjamahakan_lanjut' ],
+ 'PageTranslation' => [ 'Tarjamahan_tungkaran' ],
+ 'Translate' => [ 'Tarjamahakan' ],
+ 'TranslationStats' => [ 'Statistik_tarjamahan' ],
+ 'Translations' => [ 'Tarjamahan' ],
+];
+
+/** Bengali (বাংলা) */
+$specialPageAliases['bn'] = [
+ 'AggregateGroups' => [ 'সমষ্টিগত_গোষ্ঠীসমূহ' ],
+ 'ImportTranslations' => [ 'অনুবাদ_আমদানি' ],
+ 'ExportTranslations' => [ 'অনুবাদ_রপ্তানি' ],
+ 'LanguageStats' => [ 'ভাষার_পরিসংখ্যান' ],
+ 'Magic' => [ 'উন্নত_অনুবাদ', 'জাদু' ],
+ 'ManageMessageGroups' => [ 'বার্তার_গোষ্ঠী_পরিচালনা' ],
+ 'ManageTranslatorSandbox' => [ 'অনুবাদকের_খেলাঘর_পরিচালনা', 'অনুবাদের_খেলাঘর' ],
+ 'MessageGroupStats' => [ 'বার্তা_দলের_পরিসংখ্যান' ],
+ 'PageTranslation' => [ 'পাতা_অনুবাদ' ],
+ 'PageTranslationDeletePage' => [ 'পাতা_অনুবাদের_পাতা_অপসারণ' ],
+ 'SearchTranslations' => [ 'অনুবাদ_অনুসন্ধান' ],
+ 'SupportedLanguages' => [ 'সমর্থিত_ভাষা' ],
+ 'Translate' => [ 'অনুবাদ' ],
+ 'TranslationStash' => [ 'অনুবাদের_স্টাশ' ],
+ 'TranslationStats' => [ 'অনুবাদের_পরিসংখ্যান' ],
+ 'Translations' => [ 'অনুবাদসমূহ' ],
+ 'PageMigration' => [ 'পাতা_অভিপ্রায়ণ', 'পৃষ্ঠা_অভিপ্রায়ণ' ],
+ 'PagePreparation' => [ 'পাতা_প্রস্তুতি', 'পৃষ্ঠা_প্রস্তুতি' ],
+];
/** Breton (brezhoneg) */
-$specialPageAliases['br'] = array(
- 'ImportTranslations' => array( 'EnporzhiañTroidigezhioù' ),
- 'LanguageStats' => array( 'StadegoùYezh' ),
- 'Magic' => array( 'TreiñAraokaet' ),
- 'PageTranslation' => array( 'TroidigezhPajenn' ),
- 'SupportedLanguages' => array( 'Yezhoùskoret' ),
- 'Translate' => array( 'Treiñ' ),
- 'TranslationStats' => array( 'StadegoùTreiñ' ),
- 'Translations' => array( 'Troidigezhioù' ),
-);
+$specialPageAliases['br'] = [
+ 'ImportTranslations' => [ 'EnporzhiañTroidigezhioù' ],
+ 'LanguageStats' => [ 'StadegoùYezh' ],
+ 'Magic' => [ 'TreiñAraokaet' ],
+ 'PageTranslation' => [ 'TroidigezhPajenn' ],
+ 'SupportedLanguages' => [ 'Yezhoùskoret' ],
+ 'Translate' => [ 'Treiñ' ],
+ 'TranslationStats' => [ 'StadegoùTreiñ' ],
+ 'Translations' => [ 'Troidigezhioù' ],
+];
/** Bosnian (bosanski) */
-$specialPageAliases['bs'] = array(
- 'ImportTranslations' => array( 'UvozPrijevoda' ),
- 'LanguageStats' => array( 'StatistikeJezika' ),
- 'Magic' => array( 'NaprednoPrevodjenje' ),
- 'PageTranslation' => array( 'PrijevodStranice' ),
- 'Translate' => array( 'Prevedi' ),
- 'TranslationStats' => array( 'StatistikePrevoda' ),
- 'Translations' => array( 'Prijevodi' ),
-);
+$specialPageAliases['bs'] = [
+ 'ImportTranslations' => [ 'UvozPrijevoda' ],
+ 'ExportTranslations' => [ 'IzvozPrijevoda' ],
+ 'LanguageStats' => [ 'StatistikeJezika' ],
+ 'Magic' => [ 'NaprednoPrevodjenje' ],
+ 'PageTranslation' => [ 'PrijevodStranice' ],
+ 'Translate' => [ 'Prevedi' ],
+ 'TranslationStats' => [ 'StatistikePrevoda' ],
+ 'Translations' => [ 'Prijevodi' ],
+];
/** буряад (буряад) */
-$specialPageAliases['bxr'] = array(
- 'PageTranslation' => array( 'Хуудаһанай_оршуулга' ),
- 'SupportedLanguages' => array( 'Дэмжэдэг_хэлэн' ),
- 'Translate' => array( 'Оршуулха' ),
- 'Translations' => array( 'Оршуулганууд' ),
-);
+$specialPageAliases['bxr'] = [
+ 'PageTranslation' => [ 'Хуудаһанай_оршуулга' ],
+ 'SupportedLanguages' => [ 'Дэмжэдэг_хэлэн' ],
+ 'Translate' => [ 'Оршуулха' ],
+ 'Translations' => [ 'Оршуулганууд' ],
+];
/** Min Dong Chinese (Mìng-dĕ̤ng-ngṳ̄) */
-$specialPageAliases['cdo'] = array(
- 'ImportTranslations' => array( '導底翻譯' ),
- 'LanguageStats' => array( '語言統計' ),
- 'Magic' => array( '高級翻譯' ),
- 'ManageMessageGroups' => array( '管理信息組' ),
- 'MessageGroupStats' => array( '信息組統計' ),
- 'PageTranslation' => array( '頁面翻譯' ),
- 'SupportedLanguages' => array( '支持其語言' ),
- 'Translate' => array( '翻譯' ),
- 'TranslationStats' => array( '翻譯統計' ),
-);
+$specialPageAliases['cdo'] = [
+ 'ImportTranslations' => [ '導底翻譯' ],
+ 'LanguageStats' => [ '語言統計' ],
+ 'Magic' => [ '高級翻譯' ],
+ 'ManageMessageGroups' => [ '管理信息組' ],
+ 'MessageGroupStats' => [ '信息組統計' ],
+ 'PageTranslation' => [ '頁面翻譯' ],
+ 'SupportedLanguages' => [ '支持其語言' ],
+ 'Translate' => [ '翻譯' ],
+ 'TranslationStats' => [ '翻譯統計' ],
+];
/** Chechen (нохчийн) */
-$specialPageAliases['ce'] = array(
- 'AggregateGroups' => array( 'Агрегированни_тобанаш' ),
- 'ImportTranslations' => array( 'Гоч_йинарш_импорт_яр' ),
- 'LanguageStats' => array( 'Меттан_статистика' ),
- 'Magic' => array( 'Шордина_гочдар' ),
- 'ManageMessageGroups' => array( 'Хаамийн_тобанийн_урхалла_дар' ),
- 'MessageGroupStats' => array( 'Хаамийн_тобанийн_статистика' ),
- 'PageTranslation' => array( 'АгӀонаш_гоч_яр' ),
- 'PageTranslationDeletePage' => array( 'Гоч_еш_йолу_агӀо_дӀаяккхар' ),
- 'SearchTranslations' => array( 'Гоч_йинарш_лахар' ),
- 'SupportedLanguages' => array( 'Ловш_долу_меттанаш' ),
- 'Translate' => array( 'Гоч_де' ),
- 'TranslationStats' => array( 'Гочдаран_статистика' ),
- 'Translations' => array( 'Гоч_дарш' ),
-);
+$specialPageAliases['ce'] = [
+ 'AggregateGroups' => [ 'Агрегированни_тобанаш' ],
+ 'ImportTranslations' => [ 'Гоч_йинарш_импорт_яр' ],
+ 'LanguageStats' => [ 'Меттан_статистика' ],
+ 'Magic' => [ 'Шордина_гочдар' ],
+ 'ManageMessageGroups' => [ 'Хаамийн_тобанийн_урхалла_дар' ],
+ 'MessageGroupStats' => [ 'Хаамийн_тобанийн_статистика' ],
+ 'PageTranslation' => [ 'АгӀонаш_гоч_яр' ],
+ 'PageTranslationDeletePage' => [ 'Гоч_еш_йолу_агӀо_дӀаяккхар' ],
+ 'SearchTranslations' => [ 'Гоч_йинарш_лахар' ],
+ 'SupportedLanguages' => [ 'Ловш_долу_меттанаш' ],
+ 'Translate' => [ 'Гоч_де' ],
+ 'TranslationStats' => [ 'Гочдаран_статистика' ],
+ 'Translations' => [ 'Гоч_дарш' ],
+];
/** Cebuano (Cebuano) */
-$specialPageAliases['ceb'] = array(
- 'Translate' => array( 'Hubara' ),
-);
+$specialPageAliases['ceb'] = [
+ 'Translate' => [ 'Hubara' ],
+];
/** Czech (čeština) */
-$specialPageAliases['cs'] = array(
- 'Translate' => array( 'Přeložit' ),
-);
+$specialPageAliases['cs'] = [
+ 'Translate' => [ 'Přeložit' ],
+];
/** Danish (dansk) */
-$specialPageAliases['da'] = array(
- 'PageTranslation' => array( 'Sideoversættelse' ),
- 'Translate' => array( 'Oversæt' ),
-);
+$specialPageAliases['da'] = [
+ 'PageTranslation' => [ 'Sideoversættelse' ],
+ 'Translate' => [ 'Oversæt' ],
+];
/** German (Deutsch) */
-$specialPageAliases['de'] = array(
- 'AggregateGroups' => array( 'Zusammenfassende_Nachrichtengruppen' ),
- 'ImportTranslations' => array( 'Übersetzungen_importieren' ),
- 'LanguageStats' => array( 'Sprachstatistiken' ),
- 'Magic' => array( 'Erweitertes_Übersetzen' ),
- 'ManageMessageGroups' => array( 'Nachrichtengruppen_verwalten' ),
- 'ManageTranslatorSandbox' => array( 'Übersetzerspielwiese_verwalten' ),
- 'MessageGroupStats' => array( 'Nachrichtengruppenstatistiken' ),
- 'PageTranslation' => array( 'Übersetzung_von_Seiten' ),
- 'PageTranslationDeletePage' => array( 'Löschseite_für_Übersetzungen' ),
- 'SearchTranslations' => array( 'Übersetzungen_suchen' ),
- 'SupportedLanguages' => array( 'Unterstützte_Sprachen' ),
- 'Translate' => array( 'Übersetzen' ),
- 'TranslationStash' => array( 'Übersetzungsversteck' ),
- 'TranslationStats' => array( 'Übersetzungsstatistik' ),
- 'Translations' => array( 'Übersetzungen' ),
- 'PageMigration' => array( 'Seitenmigration' ),
- 'PagePreparation' => array( 'Seitenvorbereitung' ),
-);
+$specialPageAliases['de'] = [
+ 'AggregateGroups' => [ 'Zusammenfassende_Nachrichtengruppen' ],
+ 'ImportTranslations' => [ 'Übersetzungen_importieren' ],
+ 'LanguageStats' => [ 'Sprachstatistiken' ],
+ 'Magic' => [ 'Erweitertes_Übersetzen' ],
+ 'ManageMessageGroups' => [ 'Nachrichtengruppen_verwalten' ],
+ 'ManageTranslatorSandbox' => [ 'Übersetzerspielwiese_verwalten' ],
+ 'MessageGroupStats' => [ 'Nachrichtengruppenstatistiken' ],
+ 'PageTranslation' => [ 'Übersetzung_von_Seiten' ],
+ 'PageTranslationDeletePage' => [ 'Löschseite_für_Übersetzungen' ],
+ 'SearchTranslations' => [ 'Übersetzungen_suchen' ],
+ 'SupportedLanguages' => [ 'Unterstützte_Sprachen' ],
+ 'Translate' => [ 'Übersetzen' ],
+ 'TranslationStash' => [ 'Übersetzungsversteck' ],
+ 'TranslationStats' => [ 'Übersetzungsstatistik' ],
+ 'Translations' => [ 'Übersetzungen' ],
+ 'PageMigration' => [ 'Seitenmigration' ],
+ 'PagePreparation' => [ 'Seitenvorbereitung' ],
+];
/** Zazaki (Zazaki) */
-$specialPageAliases['diq'] = array(
- 'AggregateGroups' => array( 'GrubéAggregate' ),
- 'ImportTranslations' => array( 'AçarnayışaZerrefi' ),
- 'LanguageStats' => array( 'İstatistikêZıwani' ),
- 'Magic' => array( 'AçarnayışoHerayen' ),
- 'ManageMessageGroups' => array( 'GrubanéMesacanİdareke' ),
- 'ManageTranslatorSandbox' => array( 'İdareyaQumdorAçarnayış', 'QumdorAçarnayış' ),
- 'MessageGroupStats' => array( 'İstatistikêGrubaMesacan' ),
- 'PageTranslation' => array( 'Açarnayışê_Pele' ),
- 'PageTranslationDeletePage' => array( 'PerraAçarnayışéPerraBesternayış' ),
- 'SearchTranslations' => array( 'AçarnayışaCıgeyreyış' ),
- 'SupportedLanguages' => array( 'ZıwanêkeDestegnênê' ),
- 'Translate' => array( 'Açarnayış' ),
- 'TranslationStash' => array( 'AçarnayışiNımnanyış' ),
- 'TranslationStats' => array( 'İstatistikêAçarnayışi' ),
- 'Translations' => array( 'Açarnayoği' ),
-);
+$specialPageAliases['diq'] = [
+ 'AggregateGroups' => [ 'GrubéAggregate' ],
+ 'ImportTranslations' => [ 'AçarnayışaZerrefi' ],
+ 'LanguageStats' => [ 'İstatistikêZıwani' ],
+ 'Magic' => [ 'AçarnayışoHerayen' ],
+ 'ManageMessageGroups' => [ 'GrubanéMesacanİdareke' ],
+ 'ManageTranslatorSandbox' => [ 'İdareyaQumdorAçarnayış', 'QumdorAçarnayış' ],
+ 'MessageGroupStats' => [ 'İstatistikêGrubaMesacan' ],
+ 'PageTranslation' => [ 'Açarnayışê_Pele' ],
+ 'PageTranslationDeletePage' => [ 'PerraAçarnayışéPerraBesternayış' ],
+ 'SearchTranslations' => [ 'AçarnayışaCıgeyreyış' ],
+ 'SupportedLanguages' => [ 'ZıwanêkeDestegnênê' ],
+ 'Translate' => [ 'Açarnayış' ],
+ 'TranslationStash' => [ 'AçarnayışiNımnanyış' ],
+ 'TranslationStats' => [ 'İstatistikêAçarnayışi' ],
+ 'Translations' => [ 'Açarnayoği' ],
+];
/** Lower Sorbian (dolnoserbski) */
-$specialPageAliases['dsb'] = array(
- 'LanguageStats' => array( 'Rěcne statistiki' ),
- 'Magic' => array( 'Rozšyrjone pśełožowanje' ),
- 'Translate' => array( 'Přełožiś' ),
- 'TranslationStats' => array( 'Statistika pśełožkow' ),
- 'Translations' => array( 'Pśełožki' ),
-);
+$specialPageAliases['dsb'] = [
+ 'LanguageStats' => [ 'Rěcne statistiki' ],
+ 'Magic' => [ 'Rozšyrjone pśełožowanje' ],
+ 'Translate' => [ 'Přełožiś' ],
+ 'TranslationStats' => [ 'Statistika pśełožkow' ],
+ 'Translations' => [ 'Pśełožki' ],
+];
/** Divehi (ދިވެހިބަސް) */
-$specialPageAliases['dv'] = array(
- 'Translate' => array( 'ތަރުޖަމާކުރައްވާ' ),
- 'Translations' => array( 'ތަރުޖަމާތައް' ),
-);
+$specialPageAliases['dv'] = [
+ 'Translate' => [ 'ތަރުޖަމާކުރައްވާ' ],
+ 'Translations' => [ 'ތަރުޖަމާތައް' ],
+];
/** Greek (Ελληνικά) */
-$specialPageAliases['el'] = array(
- 'AggregateGroups' => array( 'ΣυγκεντρωτικέςΟμάδες' ),
- 'ImportTranslations' => array( 'ΕισαγωγήΜεταφράσεων' ),
- 'LanguageStats' => array( 'ΣτατιστικάΓλώσσας' ),
- 'Magic' => array( 'ΠροχωρημένηΜετάφραση', 'ΜαγικέςΛέξεις' ),
- 'ManageMessageGroups' => array( 'ΔιαχείρισηΟμάδωνΜηνυμάτων' ),
- 'ManageTranslatorSandbox' => array( 'ΔιαχείρισηΑμμοδοχείουΜεταφραστή', 'ΑμμοδοχείοΜετάφρασης' ),
- 'MessageGroupStats' => array( 'ΣτατιστικάΟμάδαςΜηνυμάτων' ),
- 'PageTranslation' => array( 'ΜετάφρασηΣελίδας' ),
- 'PageTranslationDeletePage' => array( 'ΔιαγραφήΣελίδαςΜετάφρασηςΣελίδων' ),
- 'SearchTranslations' => array( 'ΑναζήτησηΜεταφράσεων' ),
- 'SupportedLanguages' => array( 'ΥποστηριζόμενεςΓλώσσες' ),
- 'Translate' => array( 'Μετάφραση' ),
- 'TranslationStats' => array( 'ΣτατιστικάΜετάφρασης' ),
- 'Translations' => array( 'Μεταφράσεις' ),
-);
+$specialPageAliases['el'] = [
+ 'AggregateGroups' => [ 'ΣυγκεντρωτικέςΟμάδες' ],
+ 'ImportTranslations' => [ 'ΕισαγωγήΜεταφράσεων' ],
+ 'LanguageStats' => [ 'ΣτατιστικάΓλώσσας' ],
+ 'Magic' => [ 'ΠροχωρημένηΜετάφραση', 'ΜαγικέςΛέξεις' ],
+ 'ManageMessageGroups' => [ 'ΔιαχείρισηΟμάδωνΜηνυμάτων' ],
+ 'ManageTranslatorSandbox' => [ 'ΔιαχείρισηΑμμοδοχείουΜεταφραστή', 'ΑμμοδοχείοΜετάφρασης' ],
+ 'MessageGroupStats' => [ 'ΣτατιστικάΟμάδαςΜηνυμάτων' ],
+ 'PageTranslation' => [ 'ΜετάφρασηΣελίδας' ],
+ 'PageTranslationDeletePage' => [ 'ΔιαγραφήΣελίδαςΜετάφρασηςΣελίδων' ],
+ 'SearchTranslations' => [ 'ΑναζήτησηΜεταφράσεων' ],
+ 'SupportedLanguages' => [ 'ΥποστηριζόμενεςΓλώσσες' ],
+ 'Translate' => [ 'Μετάφραση' ],
+ 'TranslationStats' => [ 'ΣτατιστικάΜετάφρασης' ],
+ 'Translations' => [ 'Μεταφράσεις' ],
+];
/** Esperanto (Esperanto) */
-$specialPageAliases['eo'] = array(
- 'ImportTranslations' => array( 'Enporti_tradukojn', 'Importi_tradukojn' ),
- 'LanguageStats' => array( 'Lingvaj_statistikoj' ),
- 'Magic' => array( 'Altnivela_tradukado' ),
- 'SearchTranslations' => array( 'Serĉi_tradukojn' ),
- 'SupportedLanguages' => array( 'Subtenataj_lingvoj' ),
- 'Translate' => array( 'Traduki' ),
- 'TranslationStats' => array( 'Statistikol_pri_tradukado' ),
- 'Translations' => array( 'Tradukoj' ),
-);
+$specialPageAliases['eo'] = [
+ 'ImportTranslations' => [ 'Enporti_tradukojn', 'Importi_tradukojn' ],
+ 'LanguageStats' => [ 'Lingvaj_statistikoj' ],
+ 'Magic' => [ 'Altnivela_tradukado' ],
+ 'SearchTranslations' => [ 'Serĉi_tradukojn' ],
+ 'SupportedLanguages' => [ 'Subtenataj_lingvoj' ],
+ 'Translate' => [ 'Traduki' ],
+ 'TranslationStats' => [ 'Statistikol_pri_tradukado' ],
+ 'Translations' => [ 'Tradukoj' ],
+];
/** Spanish (español) */
-$specialPageAliases['es'] = array(
- 'Magic' => array( 'Traducción_avanzada' ),
- 'SupportedLanguages' => array( 'IdiomasAdmitidos' ),
- 'Translate' => array( 'Traducir' ),
- 'Translations' => array( 'Traducciones' ),
-);
+$specialPageAliases['es'] = [
+ 'Magic' => [ 'Traducción_avanzada' ],
+ 'SupportedLanguages' => [ 'IdiomasAdmitidos' ],
+ 'Translate' => [ 'Traducir' ],
+ 'Translations' => [ 'Traducciones' ],
+];
/** Persian (فارسی) */
-$specialPageAliases['fa'] = array(
- 'AggregateGroups' => array( 'جمع_گروه‌ها' ),
- 'ImportTranslations' => array( 'درون‌بری_ترجمه‌ها' ),
- 'LanguageStats' => array( 'آمار_زبان‌ها' ),
- 'Magic' => array( 'ترجمه_پیشرفته' ),
- 'ManageMessageGroups' => array( 'مدیریت_گروه‌های_پیغام' ),
- 'ManageTranslatorSandbox' => array( 'مدیریت_صفحهٔ_تمرین_ترجمه', 'صفحهٔ_تمرین_ترجمه' ),
- 'MessageGroupStats' => array( 'آمار_گروه_پیغام' ),
- 'PageTranslation' => array( 'ترجمه_صفحه' ),
- 'PageTranslationDeletePage' => array( 'صفحه_حذف_ترجمه_صفحه' ),
- 'SearchTranslations' => array( 'جستجوی_ترجمه‌ها' ),
- 'SupportedLanguages' => array( 'زبان‌های_پشتیبانی‌شده' ),
- 'Translate' => array( 'ترجمه' ),
- 'TranslationStats' => array( 'آمار_ترجمه‌ها' ),
- 'Translations' => array( 'ترجمه‌ها' ),
- 'PageMigration' => array( 'مهاجرت_صفحه' ),
-);
+$specialPageAliases['fa'] = [
+ 'AggregateGroups' => [ 'جمع_گروه‌ها' ],
+ 'ImportTranslations' => [ 'درون‌بری_ترجمه‌ها' ],
+ 'LanguageStats' => [ 'آمار_زبان‌ها' ],
+ 'Magic' => [ 'ترجمه_پیشرفته' ],
+ 'ManageMessageGroups' => [ 'مدیریت_گروه‌های_پیغام' ],
+ 'ManageTranslatorSandbox' => [ 'مدیریت_صفحهٔ_تمرین_ترجمه', 'صفحهٔ_تمرین_ترجمه' ],
+ 'MessageGroupStats' => [ 'آمار_گروه_پیغام' ],
+ 'PageTranslation' => [ 'ترجمه_صفحه' ],
+ 'PageTranslationDeletePage' => [ 'صفحه_حذف_ترجمه_صفحه' ],
+ 'SearchTranslations' => [ 'جستجوی_ترجمه‌ها' ],
+ 'SupportedLanguages' => [ 'زبان‌های_پشتیبانی‌شده' ],
+ 'Translate' => [ 'ترجمه' ],
+ 'TranslationStats' => [ 'آمار_ترجمه‌ها' ],
+ 'Translations' => [ 'ترجمه‌ها' ],
+ 'PageMigration' => [ 'مهاجرت_صفحه' ],
+];
/** Finnish (suomi) */
-$specialPageAliases['fi'] = array(
- 'ImportTranslations' => array( 'Käännösten_tuonti' ),
- 'LanguageStats' => array( 'Kielitilastot' ),
- 'Magic' => array( 'Laajennettu_kääntäminen' ),
- 'ManageMessageGroups' => array( 'Viestiryhmien_hallinta' ),
- 'PageTranslation' => array( 'Sivujen_kääntäminen' ),
- 'SupportedLanguages' => array( 'Tuetut_kielet' ),
- 'Translate' => array( 'Käännä' ),
- 'TranslationStats' => array( 'Käännöstilastot' ),
- 'Translations' => array( 'Käännökset' ),
-);
+$specialPageAliases['fi'] = [
+ 'ImportTranslations' => [ 'Käännösten_tuonti' ],
+ 'LanguageStats' => [ 'Kielitilastot' ],
+ 'Magic' => [ 'Laajennettu_kääntäminen' ],
+ 'ManageMessageGroups' => [ 'Viestiryhmien_hallinta' ],
+ 'PageTranslation' => [ 'Sivujen_kääntäminen' ],
+ 'SupportedLanguages' => [ 'Tuetut_kielet' ],
+ 'Translate' => [ 'Käännä' ],
+ 'TranslationStats' => [ 'Käännöstilastot' ],
+ 'Translations' => [ 'Käännökset' ],
+];
/** French (français) */
-$specialPageAliases['fr'] = array(
- 'LanguageStats' => array( 'StatistiquesDesLangues', 'Statistiques_des_langues' ),
- 'Magic' => array( 'Traduction_avancée', 'Traductionavancée', 'Traduction_avancee', 'Traductionavancee' ),
- 'Translate' => array( 'Traduire' ),
- 'TranslationStats' => array( 'StatistiquesDesTraductions', 'Statistiques_des_traductions' ),
- 'Translations' => array( 'Traductions' ),
-);
+$specialPageAliases['fr'] = [
+ 'LanguageStats' => [ 'StatistiquesDesLangues', 'Statistiques_des_langues' ],
+ 'Magic' => [ 'Traduction_avancée', 'Traductionavancée', 'Traduction_avancee', 'Traductionavancee' ],
+ 'Translate' => [ 'Traduire' ],
+ 'TranslationStats' => [ 'StatistiquesDesTraductions', 'Statistiques_des_traductions' ],
+ 'Translations' => [ 'Traductions' ],
+];
/** Arpitan (arpetan) */
-$specialPageAliases['frp'] = array(
- 'LanguageStats' => array( 'Statistiques_de_les_lengoues', 'StatistiquesDeLesLengoues' ),
- 'Magic' => array( 'Traduccion_avanciê', 'TraduccionAavanciê' ),
- 'Translate' => array( 'Traduire' ),
- 'TranslationStats' => array( 'Statistiques_de_traduccion', 'StatistiquesDeTraduccion' ),
- 'Translations' => array( 'Traduccions' ),
-);
+$specialPageAliases['frp'] = [
+ 'LanguageStats' => [ 'Statistiques_de_les_lengoues', 'StatistiquesDeLesLengoues' ],
+ 'Magic' => [ 'Traduccion_avanciê', 'TraduccionAavanciê' ],
+ 'Translate' => [ 'Traduire' ],
+ 'TranslationStats' => [ 'Statistiques_de_traduccion', 'StatistiquesDeTraduccion' ],
+ 'Translations' => [ 'Traduccions' ],
+];
/** Western Frisian (Frysk) */
-$specialPageAliases['fy'] = array(
- 'ImportTranslations' => array( 'OersettingsYmportearje' ),
- 'LanguageStats' => array( 'Taalstatistiken' ),
- 'PageTranslation' => array( 'Sideoersetting' ),
- 'SearchTranslations' => array( 'OersettingsSykje' ),
- 'Translate' => array( 'Oersette' ),
- 'Translations' => array( 'Oersettings' ),
-);
+$specialPageAliases['fy'] = [
+ 'ImportTranslations' => [ 'OersettingsYmportearje' ],
+ 'LanguageStats' => [ 'Taalstatistiken' ],
+ 'PageTranslation' => [ 'Sideoersetting' ],
+ 'SearchTranslations' => [ 'OersettingsSykje' ],
+ 'Translate' => [ 'Oersette' ],
+ 'Translations' => [ 'Oersettings' ],
+];
/** Galician (galego) */
-$specialPageAliases['gl'] = array(
- 'ImportTranslations' => array( 'Importar_traducións' ),
- 'LanguageStats' => array( 'Estatísticas_da_lingua' ),
- 'Magic' => array( 'Tradución_avanzada' ),
- 'PageTranslation' => array( 'Tradución_de_páxinas' ),
- 'Translate' => array( 'Traducir' ),
- 'TranslationStats' => array( 'Estatísticas_da_tradución' ),
- 'Translations' => array( 'Traducións' ),
-);
+$specialPageAliases['gl'] = [
+ 'ImportTranslations' => [ 'Importar_traducións' ],
+ 'LanguageStats' => [ 'Estatísticas_da_lingua' ],
+ 'Magic' => [ 'Tradución_avanzada' ],
+ 'PageTranslation' => [ 'Tradución_de_páxinas' ],
+ 'Translate' => [ 'Traducir' ],
+ 'TranslationStats' => [ 'Estatísticas_da_tradución' ],
+ 'Translations' => [ 'Traducións' ],
+];
/** Swiss German (Alemannisch) */
-$specialPageAliases['gsw'] = array(
- 'ImportTranslations' => array( 'Übersetzige_importiere' ),
- 'LanguageStats' => array( 'Sprochstatischtik' ),
- 'Magic' => array( 'Usgwytets_Ibersetze' ),
- 'ManageMessageGroups' => array( 'Noochrichtegruppe_verwalte' ),
- 'MessageGroupStats' => array( 'Noochrichtegruppestatistike' ),
- 'PageTranslation' => array( 'Übersetzig_vo_Syte' ),
- 'PageTranslationDeletePage' => array( 'Löschsyte_für_Übersetzige' ),
- 'SupportedLanguages' => array( 'Sprooche_wo_unterstützt_werde' ),
- 'Translate' => array( 'Ibersetze' ),
- 'TranslationStats' => array( 'Ibersetzigsstatischtik' ),
- 'Translations' => array( 'Ibersetzige' ),
-);
+$specialPageAliases['gsw'] = [
+ 'ImportTranslations' => [ 'Übersetzige_importiere' ],
+ 'LanguageStats' => [ 'Sprochstatischtik' ],
+ 'Magic' => [ 'Usgwytets_Ibersetze' ],
+ 'ManageMessageGroups' => [ 'Noochrichtegruppe_verwalte' ],
+ 'MessageGroupStats' => [ 'Noochrichtegruppestatistike' ],
+ 'PageTranslation' => [ 'Übersetzig_vo_Syte' ],
+ 'PageTranslationDeletePage' => [ 'Löschsyte_für_Übersetzige' ],
+ 'SupportedLanguages' => [ 'Sprooche_wo_unterstützt_werde' ],
+ 'Translate' => [ 'Ibersetze' ],
+ 'TranslationStats' => [ 'Ibersetzigsstatischtik' ],
+ 'Translations' => [ 'Ibersetzige' ],
+];
/** Hebrew (עברית) */
-$specialPageAliases['he'] = array(
- 'AggregateGroups' => array( 'קבוצות_משולבות' ),
- 'ImportTranslations' => array( 'ייבוא_תרגומים' ),
- 'LanguageStats' => array( 'סטטיסטיקות_שפה' ),
- 'Magic' => array( 'תרגום_מתקדם' ),
- 'ManageMessageGroups' => array( 'ניהול_קבוצות_הודעות' ),
- 'ManageTranslatorSandbox' => array( 'ניהול_ארגז_חול_של_מתרגמים' ),
- 'MessageGroupStats' => array( 'סטטיסטיקות_של_קבוצות_הודעות' ),
- 'PageTranslation' => array( 'תרגום_דף' ),
- 'PageTranslationDeletePage' => array( 'מחיקת_דף_מתורגם' ),
- 'SearchTranslations' => array( 'חיפוש_תרגומים' ),
- 'SupportedLanguages' => array( 'שפות_נתמכות' ),
- 'Translate' => array( 'תרגום' ),
- 'TranslationStash' => array( 'מחסן_תרגומים' ),
- 'TranslationStats' => array( 'סטטיסטיקות_תרגום' ),
- 'Translations' => array( 'תרגומים' ),
- 'PageMigration' => array( 'המרת_דף' ),
- 'PagePreparation' => array( 'הכנת_דף' ),
-);
+$specialPageAliases['he'] = [
+ 'AggregateGroups' => [ 'קבוצות_משולבות' ],
+ 'ImportTranslations' => [ 'ייבוא_תרגומים' ],
+ 'LanguageStats' => [ 'סטטיסטיקות_שפה' ],
+ 'Magic' => [ 'תרגום_מתקדם' ],
+ 'ManageMessageGroups' => [ 'ניהול_קבוצות_הודעות' ],
+ 'ManageTranslatorSandbox' => [ 'ניהול_ארגז_חול_של_מתרגמים' ],
+ 'MessageGroupStats' => [ 'סטטיסטיקות_של_קבוצות_הודעות' ],
+ 'PageTranslation' => [ 'תרגום_דף' ],
+ 'PageTranslationDeletePage' => [ 'מחיקת_דף_מתורגם' ],
+ 'SearchTranslations' => [ 'חיפוש_תרגומים' ],
+ 'SupportedLanguages' => [ 'שפות_נתמכות' ],
+ 'Translate' => [ 'תרגום' ],
+ 'TranslationStash' => [ 'מחסן_תרגומים' ],
+ 'TranslationStats' => [ 'סטטיסטיקות_תרגום' ],
+ 'Translations' => [ 'תרגומים' ],
+ 'PageMigration' => [ 'המרת_דף' ],
+ 'PagePreparation' => [ 'הכנת_דף' ],
+];
/** Hindi (हिन्दी) */
-$specialPageAliases['hi'] = array(
- 'Translate' => array( 'अनुवाद' ),
-);
+$specialPageAliases['hi'] = [
+ 'Translate' => [ 'अनुवाद' ],
+];
/** Croatian (hrvatski) */
-$specialPageAliases['hr'] = array(
- 'Translate' => array( 'Prevedi' ),
-);
+$specialPageAliases['hr'] = [
+ 'Translate' => [ 'Prevedi' ],
+];
/** Upper Sorbian (hornjoserbsce) */
-$specialPageAliases['hsb'] = array(
- 'ImportTranslations' => array( 'Přełožki_importować' ),
- 'LanguageStats' => array( 'Rěčne_statistiki' ),
- 'Magic' => array( 'Rozšěrjene_přełožowanje', 'Magiske' ),
- 'PageTranslation' => array( 'Přełožowanje_stronow' ),
- 'SearchTranslations' => array( 'Přełožki_pytać' ),
- 'SupportedLanguages' => array( 'Podpěrane_rěče' ),
- 'Translate' => array( 'Přełožić' ),
- 'TranslationStats' => array( 'Statistika_přełožkow' ),
- 'Translations' => array( 'Přełožki' ),
-);
+$specialPageAliases['hsb'] = [
+ 'ImportTranslations' => [ 'Přełožki_importować' ],
+ 'LanguageStats' => [ 'Rěčne_statistiki' ],
+ 'Magic' => [ 'Rozšěrjene_přełožowanje', 'Magiske' ],
+ 'PageTranslation' => [ 'Přełožowanje_stronow' ],
+ 'SearchTranslations' => [ 'Přełožki_pytać' ],
+ 'SupportedLanguages' => [ 'Podpěrane_rěče' ],
+ 'Translate' => [ 'Přełožić' ],
+ 'TranslationStats' => [ 'Statistika_přełožkow' ],
+ 'Translations' => [ 'Přełožki' ],
+];
/** Haitian (Kreyòl ayisyen) */
-$specialPageAliases['ht'] = array(
- 'ImportTranslations' => array( 'EnpòteTradiksyon' ),
- 'LanguageStats' => array( 'EstatistikLang' ),
- 'Magic' => array( 'TradiksyonAvanse', 'Magik' ),
- 'ManageMessageGroups' => array( 'GereGwoupMesaj' ),
- 'PageTranslation' => array( 'TradiksyonPaj' ),
- 'SupportedLanguages' => array( 'LangSipòte' ),
- 'Translate' => array( 'Tradui' ),
- 'TranslationStats' => array( 'EstatistikTradiksyon' ),
- 'Translations' => array( 'TradiksyonYo' ),
-);
+$specialPageAliases['ht'] = [
+ 'ImportTranslations' => [ 'EnpòteTradiksyon' ],
+ 'LanguageStats' => [ 'EstatistikLang' ],
+ 'Magic' => [ 'TradiksyonAvanse', 'Magik' ],
+ 'ManageMessageGroups' => [ 'GereGwoupMesaj' ],
+ 'PageTranslation' => [ 'TradiksyonPaj' ],
+ 'SupportedLanguages' => [ 'LangSipòte' ],
+ 'Translate' => [ 'Tradui' ],
+ 'TranslationStats' => [ 'EstatistikTradiksyon' ],
+ 'Translations' => [ 'TradiksyonYo' ],
+];
/** Hungarian (magyar) */
-$specialPageAliases['hu'] = array(
- 'LanguageStats' => array( 'Nyelvi_statisztika' ),
- 'Magic' => array( 'Fejlettebb_fordító' ),
- 'Translate' => array( 'Fordítás' ),
- 'TranslationStats' => array( 'Fordítási_statisztika' ),
- 'Translations' => array( 'Fordítások' ),
-);
+$specialPageAliases['hu'] = [
+ 'LanguageStats' => [ 'Nyelvi_statisztika' ],
+ 'Magic' => [ 'Fejlettebb_fordító' ],
+ 'Translate' => [ 'Fordítás' ],
+ 'TranslationStats' => [ 'Fordítási_statisztika' ],
+ 'Translations' => [ 'Fordítások' ],
+];
/** Interlingua (interlingua) */
-$specialPageAliases['ia'] = array(
- 'ImportTranslations' => array( 'Importar_traductiones' ),
- 'LanguageStats' => array( 'Statisticas_de_linguas' ),
- 'Magic' => array( 'Traduction_avantiate', 'Magia' ),
- 'ManageMessageGroups' => array( 'Gerer_gruppos_de_messages' ),
- 'MessageGroupStats' => array( 'Statisticas_de_gruppos_de_messages' ),
- 'PageTranslation' => array( 'Traduction_de_paginas' ),
- 'PageTranslationDeletePage' => array( 'Deler_pagina_traducite' ),
- 'SupportedLanguages' => array( 'Linguas_supportate' ),
- 'Translate' => array( 'Traducer' ),
- 'TranslationStats' => array( 'Statisticas_de_traduction' ),
- 'Translations' => array( 'Traductiones' ),
-);
+$specialPageAliases['ia'] = [
+ 'ImportTranslations' => [ 'Importar_traductiones' ],
+ 'LanguageStats' => [ 'Statisticas_de_linguas' ],
+ 'Magic' => [ 'Traduction_avantiate', 'Magia' ],
+ 'ManageMessageGroups' => [ 'Gerer_gruppos_de_messages' ],
+ 'MessageGroupStats' => [ 'Statisticas_de_gruppos_de_messages' ],
+ 'PageTranslation' => [ 'Traduction_de_paginas' ],
+ 'PageTranslationDeletePage' => [ 'Deler_pagina_traducite' ],
+ 'SupportedLanguages' => [ 'Linguas_supportate' ],
+ 'Translate' => [ 'Traducer' ],
+ 'TranslationStats' => [ 'Statisticas_de_traduction' ],
+ 'Translations' => [ 'Traductiones' ],
+];
/** Indonesian (Bahasa Indonesia) */
-$specialPageAliases['id'] = array(
- 'ImportTranslations' => array( 'Impor_terjemahan', 'ImporTerjemahan' ),
- 'LanguageStats' => array( 'Statistik_bahasa', 'StatistikBahasa' ),
- 'Magic' => array( 'Terjemahkan_lanjut', 'TerjemahkanLanjut' ),
- 'ManageMessageGroups' => array( 'Kelola_pesan_grup', 'KelolaPesanGrup' ),
- 'MessageGroupStats' => array( 'Statistik_pesan_grup', 'StatistikPesanGrup' ),
- 'PageTranslation' => array( 'Terjemahan_halaman', 'TerjemahanHalaman' ),
- 'SearchTranslations' => array( 'Cari_terjemahan', 'CariTerjemahan' ),
- 'SupportedLanguages' => array( 'Bahasa_yang_didukung', 'BahasaDidukung' ),
- 'Translate' => array( 'Terjemahkan' ),
- 'TranslationStats' => array( 'Statistik_terjemahan', 'StatistikTerjemahan' ),
- 'Translations' => array( 'Terjemahan' ),
-);
+$specialPageAliases['id'] = [
+ 'ImportTranslations' => [ 'Impor_terjemahan', 'ImporTerjemahan' ],
+ 'LanguageStats' => [ 'Statistik_bahasa', 'StatistikBahasa' ],
+ 'Magic' => [ 'Terjemahkan_lanjut', 'TerjemahkanLanjut' ],
+ 'ManageMessageGroups' => [ 'Kelola_pesan_grup', 'KelolaPesanGrup' ],
+ 'MessageGroupStats' => [ 'Statistik_pesan_grup', 'StatistikPesanGrup' ],
+ 'PageTranslation' => [ 'Terjemahan_halaman', 'TerjemahanHalaman' ],
+ 'SearchTranslations' => [ 'Cari_terjemahan', 'CariTerjemahan' ],
+ 'SupportedLanguages' => [ 'Bahasa_yang_didukung', 'BahasaDidukung' ],
+ 'Translate' => [ 'Terjemahkan' ],
+ 'TranslationStats' => [ 'Statistik_terjemahan', 'StatistikTerjemahan' ],
+ 'Translations' => [ 'Terjemahan' ],
+];
/** Icelandic (íslenska) */
-$specialPageAliases['is'] = array(
- 'Translate' => array( 'Þýða' ),
-);
+$specialPageAliases['is'] = [
+ 'Translate' => [ 'Þýða' ],
+];
/** Italian (italiano) */
-$specialPageAliases['it'] = array(
- 'AggregateGroups' => array( 'GruppiAggregati' ),
- 'ImportTranslations' => array( 'ImportaTraduzioni' ),
- 'LanguageStats' => array( 'StatisticheLingua' ),
- 'Magic' => array( 'TraduciAvanzato' ),
- 'ManageMessageGroups' => array( 'GestisciGruppiMessaggio' ),
- 'MessageGroupStats' => array( 'StatisticheGruppiMessaggio' ),
- 'PageTranslation' => array( 'TraduzionePagina' ),
- 'SearchTranslations' => array( 'CercaTraduzioni' ),
- 'SupportedLanguages' => array( 'LingueSupportate' ),
- 'Translate' => array( 'Traduci' ),
- 'TranslationStats' => array( 'StatisticheTraduzione' ),
- 'Translations' => array( 'Traduzioni' ),
-);
+$specialPageAliases['it'] = [
+ 'AggregateGroups' => [ 'GruppiAggregati' ],
+ 'ImportTranslations' => [ 'ImportaTraduzioni' ],
+ 'LanguageStats' => [ 'StatisticheLingua' ],
+ 'Magic' => [ 'TraduciAvanzato' ],
+ 'ManageMessageGroups' => [ 'GestisciGruppiMessaggio' ],
+ 'MessageGroupStats' => [ 'StatisticheGruppiMessaggio' ],
+ 'PageTranslation' => [ 'TraduzionePagina' ],
+ 'SearchTranslations' => [ 'CercaTraduzioni' ],
+ 'SupportedLanguages' => [ 'LingueSupportate' ],
+ 'Translate' => [ 'Traduci' ],
+ 'TranslationStats' => [ 'StatisticheTraduzione' ],
+ 'Translations' => [ 'Traduzioni' ],
+];
/** Japanese (日本語) */
-$specialPageAliases['ja'] = array(
- 'AggregateGroups' => array( '集約群' ),
- 'ImportTranslations' => array( '翻訳取り込み', '翻訳インポート' ),
- 'LanguageStats' => array( '言語統計' ),
- 'Magic' => array( '高度な翻訳' ),
- 'ManageMessageGroups' => array( 'メッセージ群の管理' ),
- 'ManageTranslatorSandbox' => array( '翻訳者サンドボックスの管理' ),
- 'MessageGroupStats' => array( 'メッセージグループ統計' ),
- 'PageTranslation' => array( 'ページ翻訳' ),
- 'PageTranslationDeletePage' => array( 'ページ翻訳削除ページ' ),
- 'SearchTranslations' => array( '翻訳の検索' ),
- 'SupportedLanguages' => array( 'サポートしている言語' ),
- 'Translate' => array( '翻訳' ),
- 'TranslationStats' => array( '翻訳統計' ),
- 'Translations' => array( '翻訳結果' ),
-);
+$specialPageAliases['ja'] = [
+ 'AggregateGroups' => [ '集約群' ],
+ 'ImportTranslations' => [ '翻訳取り込み', '翻訳インポート' ],
+ 'LanguageStats' => [ '言語統計' ],
+ 'Magic' => [ '高度な翻訳' ],
+ 'ManageMessageGroups' => [ 'メッセージ群の管理' ],
+ 'ManageTranslatorSandbox' => [ '翻訳者サンドボックスの管理' ],
+ 'MessageGroupStats' => [ 'メッセージグループ統計' ],
+ 'PageTranslation' => [ 'ページ翻訳' ],
+ 'PageTranslationDeletePage' => [ 'ページ翻訳削除ページ' ],
+ 'SearchTranslations' => [ '翻訳の検索' ],
+ 'SupportedLanguages' => [ 'サポートしている言語' ],
+ 'Translate' => [ '翻訳' ],
+ 'TranslationStats' => [ '翻訳統計' ],
+ 'Translations' => [ '翻訳結果' ],
+];
/** Georgian (ქართული) */
-$specialPageAliases['ka'] = array(
- 'LanguageStats' => array( 'ენის_სტატისტიკა' ),
- 'SupportedLanguages' => array( 'მხარდაჭერილი_ენები' ),
- 'Translate' => array( 'თარგმნა' ),
- 'TranslationStats' => array( 'თარგმნის_სტატისტიკა' ),
- 'Translations' => array( 'თარგმანები' ),
-);
+$specialPageAliases['ka'] = [
+ 'LanguageStats' => [ 'ენის_სტატისტიკა' ],
+ 'SupportedLanguages' => [ 'მხარდაჭერილი_ენები' ],
+ 'Translate' => [ 'თარგმნა' ],
+ 'TranslationStats' => [ 'თარგმნის_სტატისტიკა' ],
+ 'Translations' => [ 'თარგმანები' ],
+];
/** Khmer (ភាសាខ្មែរ) */
-$specialPageAliases['km'] = array(
- 'ImportTranslations' => array( 'ការបកប្រែនាំចូល' ),
- 'LanguageStats' => array( 'ស្ថិតិភាសា' ),
- 'Magic' => array( 'បកប្រែថ្នាក់ខ្ពស់' ),
- 'ManageMessageGroups' => array( 'គ្រប់គ្រងក្រុមសារ' ),
- 'PageTranslation' => array( 'ការបកប្រែទំព័រ' ),
- 'SupportedLanguages' => array( 'ភាសាដែលអាចប្រើបាន' ),
- 'Translate' => array( 'បកប្រែ' ),
- 'TranslationStats' => array( 'ស្ថិតិការបកប្រែ' ),
- 'Translations' => array( 'ការបកប្រែ' ),
-);
+$specialPageAliases['km'] = [
+ 'ImportTranslations' => [ 'ការបកប្រែនាំចូល' ],
+ 'LanguageStats' => [ 'ស្ថិតិភាសា' ],
+ 'Magic' => [ 'បកប្រែថ្នាក់ខ្ពស់' ],
+ 'ManageMessageGroups' => [ 'គ្រប់គ្រងក្រុមសារ' ],
+ 'PageTranslation' => [ 'ការបកប្រែទំព័រ' ],
+ 'SupportedLanguages' => [ 'ភាសាដែលអាចប្រើបាន' ],
+ 'Translate' => [ 'បកប្រែ' ],
+ 'TranslationStats' => [ 'ស្ថិតិការបកប្រែ' ],
+ 'Translations' => [ 'ការបកប្រែ' ],
+];
/** Korean (한국어) */
-$specialPageAliases['ko'] = array(
- 'AggregateGroups' => array( '집계그룹' ),
- 'ImportTranslations' => array( '번역가져오기' ),
- 'LanguageStats' => array( '언어통계' ),
- 'Magic' => array( '고급번역' ),
- 'ManageMessageGroups' => array( '메시지그룹관리' ),
- 'ManageTranslatorSandbox' => array( '번역자연습장관리', '번역연습장' ),
- 'MessageGroupStats' => array( '메시지그룹통계' ),
- 'PageTranslation' => array( '문서번역' ),
- 'PageTranslationDeletePage' => array( '문서번역삭제문서' ),
- 'SearchTranslations' => array( '번역검색', '번역찾기' ),
- 'SupportedLanguages' => array( '지원하는언어' ),
- 'Translate' => array( '번역' ),
- 'TranslationStash' => array( '비공개번역' ),
- 'TranslationStats' => array( '번역통계' ),
- 'Translations' => array( '번역목록' ),
- 'PageMigration' => array( '문서이주' ),
-);
+$specialPageAliases['ko'] = [
+ 'AggregateGroups' => [ '집계그룹' ],
+ 'ImportTranslations' => [ '번역가져오기' ],
+ 'LanguageStats' => [ '언어통계' ],
+ 'Magic' => [ '고급번역' ],
+ 'ManageMessageGroups' => [ '메시지그룹관리' ],
+ 'ManageTranslatorSandbox' => [ '번역자연습장관리', '번역연습장' ],
+ 'MessageGroupStats' => [ '메시지그룹통계' ],
+ 'PageTranslation' => [ '문서번역' ],
+ 'PageTranslationDeletePage' => [ '문서번역삭제문서' ],
+ 'SearchTranslations' => [ '번역검색', '번역찾기' ],
+ 'SupportedLanguages' => [ '지원하는언어' ],
+ 'Translate' => [ '번역' ],
+ 'TranslationStash' => [ '비공개번역' ],
+ 'TranslationStats' => [ '번역통계' ],
+ 'Translations' => [ '번역목록' ],
+ 'PageMigration' => [ '문서이주' ],
+];
/** Colognian (Ripoarisch) */
-$specialPageAliases['ksh'] = array(
- 'LanguageStats' => array( 'Shtatistike_vu_de_Shprooche' ),
- 'Magic' => array( 'Extras', 'Extras Översäze', 'ExtrasÖversäze' ),
- 'Translate' => array( 'Övversäze' ),
- 'TranslationStats' => array( 'Statistik vun fun de Övversäzung', 'Övversäzungszahle', 'Statistik vun fun de Övversäzong', 'Övversäzongszahle' ),
- 'Translations' => array( 'Övversätzunge' ),
-);
+$specialPageAliases['ksh'] = [
+ 'LanguageStats' => [ 'Shtatistike_vu_de_Shprooche' ],
+ 'Magic' => [ 'Extras', 'Extras Översäze', 'ExtrasÖversäze' ],
+ 'Translate' => [ 'Övversäze' ],
+ 'TranslationStats' => [ 'Statistik vun fun de Övversäzung', 'Övversäzungszahle', 'Statistik vun fun de Övversäzong', 'Övversäzongszahle' ],
+ 'Translations' => [ 'Övversätzunge' ],
+];
/** Kurdish (Latin script) (Kurdî (latînî)‎) */
-$specialPageAliases['ku-latn'] = array(
- 'Translate' => array( 'Wergerîne' ),
- 'Translations' => array( 'Werger' ),
-);
+$specialPageAliases['ku-latn'] = [
+ 'Translate' => [ 'Wergerîne' ],
+ 'Translations' => [ 'Werger' ],
+];
/** Cornish (kernowek) */
-$specialPageAliases['kw'] = array(
- 'ImportTranslations' => array( 'YmperthiTreylyansow' ),
- 'LanguageStats' => array( 'StatystygyonYeth' ),
- 'Magic' => array( 'TreylyaAvonsys' ),
- 'PageTranslation' => array( 'TreylyansFolennow' ),
- 'SupportedLanguages' => array( 'YethowSkoodhys' ),
- 'Translate' => array( 'Treylya' ),
- 'TranslationStats' => array( 'StatystygronTreylya' ),
- 'Translations' => array( 'Treylyansow' ),
-);
+$specialPageAliases['kw'] = [
+ 'ImportTranslations' => [ 'YmperthiTreylyansow' ],
+ 'LanguageStats' => [ 'StatystygyonYeth' ],
+ 'Magic' => [ 'TreylyaAvonsys' ],
+ 'PageTranslation' => [ 'TreylyansFolennow' ],
+ 'SupportedLanguages' => [ 'YethowSkoodhys' ],
+ 'Translate' => [ 'Treylya' ],
+ 'TranslationStats' => [ 'StatystygronTreylya' ],
+ 'Translations' => [ 'Treylyansow' ],
+];
/** Luxembourgish (Lëtzebuergesch) */
-$specialPageAliases['lb'] = array(
- 'ImportTranslations' => array( 'Iwwersetzungen_importéieren' ),
- 'LanguageStats' => array( 'Sproochestatistiken' ),
- 'Magic' => array( 'Erweidert_Iwwersetzung' ),
- 'ManageMessageGroups' => array( 'Gruppe_vu_Message_geréieren' ),
- 'ManageTranslatorSandbox' => array( 'Iwwersetzungssandkëscht_geréieren' ),
- 'MessageGroupStats' => array( 'Statistike_vun_de_Gruppe_vu_Messagen' ),
- 'PageTranslation' => array( 'Säiten-Iwwersetzung' ),
- 'PageTranslationDeletePage' => array( 'Läschsäit_fir_Iwwersetzungen' ),
- 'SearchTranslations' => array( 'Iwwersetzunge_sichen' ),
- 'SupportedLanguages' => array( 'Ënnerstetzt_Sproochen' ),
- 'Translate' => array( 'Iwwersetzen' ),
- 'TranslationStats' => array( 'Iwwersetzungsstatistiken' ),
- 'Translations' => array( 'Iwwersetzungen' ),
- 'PageMigration' => array( 'Säite-Migratioun' ),
- 'PagePreparation' => array( 'Säitevirbereedung' ),
-);
+$specialPageAliases['lb'] = [
+ 'ImportTranslations' => [ 'Iwwersetzungen_importéieren' ],
+ 'LanguageStats' => [ 'Sproochestatistiken' ],
+ 'Magic' => [ 'Erweidert_Iwwersetzung' ],
+ 'ManageMessageGroups' => [ 'Gruppe_vu_Message_geréieren' ],
+ 'ManageTranslatorSandbox' => [ 'Iwwersetzungssandkëscht_geréieren' ],
+ 'MessageGroupStats' => [ 'Statistike_vun_de_Gruppe_vu_Messagen' ],
+ 'PageTranslation' => [ 'Säiten-Iwwersetzung' ],
+ 'PageTranslationDeletePage' => [ 'Läschsäit_fir_Iwwersetzungen' ],
+ 'SearchTranslations' => [ 'Iwwersetzunge_sichen' ],
+ 'SupportedLanguages' => [ 'Ënnerstetzt_Sproochen' ],
+ 'Translate' => [ 'Iwwersetzen' ],
+ 'TranslationStats' => [ 'Iwwersetzungsstatistiken' ],
+ 'Translations' => [ 'Iwwersetzungen' ],
+ 'PageMigration' => [ 'Säite-Migratioun' ],
+ 'PagePreparation' => [ 'Säitevirbereedung' ],
+];
/** Lombard (lumbaart) */
-$specialPageAliases['lmo'] = array(
- 'Translate' => array( 'Volta' ),
- 'Translations' => array( 'Tradüzion' ),
-);
+$specialPageAliases['lmo'] = [
+ 'Translate' => [ 'Volta' ],
+ 'Translations' => [ 'Tradüzion' ],
+];
/** Lithuanian (lietuvių) */
-$specialPageAliases['lt'] = array(
- 'PageTranslation' => array( 'Puslapio_vertimas' ),
- 'Translate' => array( 'Vertimas' ),
-);
+$specialPageAliases['lt'] = [
+ 'PageTranslation' => [ 'Puslapio_vertimas' ],
+ 'Translate' => [ 'Vertimas' ],
+];
/** Literary Chinese (文言) */
-$specialPageAliases['lzh'] = array(
- 'Translate' => array( '譯' ),
-);
+$specialPageAliases['lzh'] = [
+ 'Translate' => [ '譯' ],
+];
/** Macedonian (македонски) */
-$specialPageAliases['mk'] = array(
- 'AggregateGroups' => array( 'ЗбирниГрупи' ),
- 'ImportTranslations' => array( 'УвезиПреводи' ),
- 'LanguageStats' => array( 'СтатистикиЗаЈазик' ),
- 'Magic' => array( 'НапредноПреведување' ),
- 'ManageMessageGroups' => array( 'РаководењеСоГрупиНаПораки' ),
- 'ManageTranslatorSandbox' => array( 'РаководиПреведувачкиПесочник' ),
- 'MessageGroupStats' => array( 'СтатистикиЗаГупиПораки' ),
- 'PageTranslation' => array( 'ПреводНаСтраницата' ),
- 'PageTranslationDeletePage' => array( 'ПреводНаСтраницаИзбришиСтраница' ),
- 'SearchTranslations' => array( 'ПребарајПреводи' ),
- 'SupportedLanguages' => array( 'ПоддржаниЈазици' ),
- 'Translate' => array( 'Преведување' ),
- 'TranslationStash' => array( 'ПреведувачкиСклад' ),
- 'TranslationStats' => array( 'СтатистикиЗаПреведување' ),
- 'Translations' => array( 'Преводи' ),
- 'PageMigration' => array( 'СелењеСтраници' ),
- 'PagePreparation' => array( 'ПодготовнаНаСтраници' ),
-);
+$specialPageAliases['mk'] = [
+ 'AggregateGroups' => [ 'ЗбирниГрупи' ],
+ 'ImportTranslations' => [ 'УвезиПреводи' ],
+ 'LanguageStats' => [ 'СтатистикиЗаЈазик' ],
+ 'Magic' => [ 'НапредноПреведување' ],
+ 'ManageMessageGroups' => [ 'РаководењеСоГрупиНаПораки' ],
+ 'ManageTranslatorSandbox' => [ 'РаководиПреведувачкиПесочник' ],
+ 'MessageGroupStats' => [ 'СтатистикиЗаГупиПораки' ],
+ 'PageTranslation' => [ 'ПреводНаСтраницата' ],
+ 'PageTranslationDeletePage' => [ 'ПреводНаСтраницаИзбришиСтраница' ],
+ 'SearchTranslations' => [ 'ПребарајПреводи' ],
+ 'SupportedLanguages' => [ 'ПоддржаниЈазици' ],
+ 'Translate' => [ 'Преведување' ],
+ 'TranslationStash' => [ 'ПреведувачкиСклад' ],
+ 'TranslationStats' => [ 'СтатистикиЗаПреведување' ],
+ 'Translations' => [ 'Преводи' ],
+ 'PageMigration' => [ 'СелењеСтраници' ],
+ 'PagePreparation' => [ 'ПодготовнаНаСтраници' ],
+];
/** Malayalam (മലയാളം) */
-$specialPageAliases['ml'] = array(
- 'ImportTranslations' => array( 'പരിഭാഷാ_ഇറക്കുമതി' ),
- 'LanguageStats' => array( 'ഭാഷാസ്ഥിതിവിവരം' ),
- 'Magic' => array( 'വിപുലീകൃതപരിഭാഷ', 'മായാജാലം' ),
- 'ManageMessageGroups' => array( 'സന്ദേശസംഘങ്ങളുടെകൈകാര്യം' ),
- 'MessageGroupStats' => array( 'സന്ദേശഗണസ്ഥിതിവിവരം' ),
- 'PageTranslation' => array( 'താളിന്റെപരിഭാഷ' ),
- 'SearchTranslations' => array( 'പരിഭാഷകളിൽതിരയുക' ),
- 'SupportedLanguages' => array( 'പിന്തുണയുള്ളഭാഷകൾ' ),
- 'Translate' => array( 'പരിഭാഷ' ),
- 'TranslationStats' => array( 'പരിഭാഷാസ്ഥിതിവിവരം' ),
- 'Translations' => array( 'പരിഭാഷകൾ' ),
-);
+$specialPageAliases['ml'] = [
+ 'ImportTranslations' => [ 'പരിഭാഷാ_ഇറക്കുമതി' ],
+ 'LanguageStats' => [ 'ഭാഷാസ്ഥിതിവിവരം' ],
+ 'Magic' => [ 'വിപുലീകൃതപരിഭാഷ', 'മായാജാലം' ],
+ 'ManageMessageGroups' => [ 'സന്ദേശസംഘങ്ങളുടെകൈകാര്യം' ],
+ 'MessageGroupStats' => [ 'സന്ദേശഗണസ്ഥിതിവിവരം' ],
+ 'PageTranslation' => [ 'താളിന്റെപരിഭാഷ' ],
+ 'SearchTranslations' => [ 'പരിഭാഷകളിൽതിരയുക' ],
+ 'SupportedLanguages' => [ 'പിന്തുണയുള്ളഭാഷകൾ' ],
+ 'Translate' => [ 'പരിഭാഷ' ],
+ 'TranslationStats' => [ 'പരിഭാഷാസ്ഥിതിവിവരം' ],
+ 'Translations' => [ 'പരിഭാഷകൾ' ],
+];
/** Marathi (मराठी) */
-$specialPageAliases['mr'] = array(
- 'ImportTranslations' => array( 'भाषांतराआयात' ),
- 'LanguageStats' => array( 'भाषासांख्यिकी' ),
- 'Magic' => array( 'प्रगतभाषांतर', 'जादुई' ),
- 'PageTranslation' => array( 'पृष्ठभाषांतर', 'पृष्ठअनुवाद' ),
- 'SearchTranslations' => array( 'अनुवाद_शोधा' ),
- 'Translate' => array( 'भाषांतर' ),
- 'TranslationStats' => array( 'भाषांतरसांख्यिकी' ),
- 'Translations' => array( 'भाषांतरणे' ),
-);
+$specialPageAliases['mr'] = [
+ 'ImportTranslations' => [ 'भाषांतराआयात' ],
+ 'LanguageStats' => [ 'भाषासांख्यिकी' ],
+ 'Magic' => [ 'प्रगतभाषांतर', 'जादुई' ],
+ 'PageTranslation' => [ 'पृष्ठभाषांतर', 'पृष्ठअनुवाद' ],
+ 'SearchTranslations' => [ 'अनुवाद_शोधा' ],
+ 'Translate' => [ 'भाषांतर' ],
+ 'TranslationStats' => [ 'भाषांतरसांख्यिकी' ],
+ 'Translations' => [ 'भाषांतरणे' ],
+];
/** Malay (Bahasa Melayu) */
-$specialPageAliases['ms'] = array(
- 'Translate' => array( 'Terjemah' ),
- 'Translations' => array( 'Terjemahan' ),
-);
+$specialPageAliases['ms'] = [
+ 'Translate' => [ 'Terjemah' ],
+ 'Translations' => [ 'Terjemahan' ],
+];
/** Maltese (Malti) */
-$specialPageAliases['mt'] = array(
- 'LanguageStats' => array( 'StatistikaLingwa' ),
- 'Magic' => array( 'TraduzzjoniAvvanzata' ),
- 'PageTranslation' => array( 'TraduzzjoniPaġna' ),
- 'Translate' => array( 'Traduzzjoni' ),
- 'TranslationStats' => array( 'StatistikaTraduzzjoni' ),
- 'Translations' => array( 'Traduzzjonijiet' ),
-);
+$specialPageAliases['mt'] = [
+ 'LanguageStats' => [ 'StatistikaLingwa' ],
+ 'Magic' => [ 'TraduzzjoniAvvanzata' ],
+ 'PageTranslation' => [ 'TraduzzjoniPaġna' ],
+ 'Translate' => [ 'Traduzzjoni' ],
+ 'TranslationStats' => [ 'StatistikaTraduzzjoni' ],
+ 'Translations' => [ 'Traduzzjonijiet' ],
+];
/** Mirandese (Mirandés) */
-$specialPageAliases['mwl'] = array(
- 'Magic' => array( 'Traduçon Abançada' ),
- 'Translate' => array( 'Traduzir' ),
- 'TranslationStats' => array( 'Stado de la traduçon' ),
- 'Translations' => array( 'Traduçones' ),
-);
+$specialPageAliases['mwl'] = [
+ 'Magic' => [ 'Traduçon Abançada' ],
+ 'Translate' => [ 'Traduzir' ],
+ 'TranslationStats' => [ 'Stado de la traduçon' ],
+ 'Translations' => [ 'Traduçones' ],
+];
/** Erzya (эрзянь) */
-$specialPageAliases['myv'] = array(
- 'Magic' => array( 'ПревейстэЮтавтомс', 'Магия' ),
- 'Translate' => array( 'Ютавтомс' ),
- 'TranslationStats' => array( 'ЮтавтомадоСтатистика' ),
-);
+$specialPageAliases['myv'] = [
+ 'Magic' => [ 'ПревейстэЮтавтомс', 'Магия' ],
+ 'Translate' => [ 'Ютавтомс' ],
+ 'TranslationStats' => [ 'ЮтавтомадоСтатистика' ],
+];
/** Nāhuatl (Nāhuatl) */
-$specialPageAliases['nah'] = array(
- 'Translate' => array( 'Tlahtōlcuepāz', 'Traducir' ),
-);
+$specialPageAliases['nah'] = [
+ 'Translate' => [ 'Tlahtōlcuepāz', 'Traducir' ],
+];
/** Norwegian Bokmål (norsk bokmål) */
-$specialPageAliases['nb'] = array(
- 'AggregateGroups' => array( 'Samlingsgrupper' ),
- 'ImportTranslations' => array( 'Importer_oversettelser' ),
- 'LanguageStats' => array( 'Språkstatistikk' ),
- 'Magic' => array( 'Avansert_oversettelse', 'Avansert_oversetting', 'Magi' ),
- 'ManageMessageGroups' => array( 'Behandle_meldingsgrupper' ),
- 'MessageGroupStats' => array( 'Meldingsgruppestatistikk' ),
- 'PageTranslation' => array( 'Sideoversettelse' ),
- 'SearchTranslations' => array( 'Søk_i_oversettelser' ),
- 'SupportedLanguages' => array( 'Støttede_språk' ),
- 'Translate' => array( 'Oversett' ),
- 'TranslationStats' => array( 'Oversettelsesstatistikk' ),
- 'Translations' => array( 'Oversettelser' ),
-);
+$specialPageAliases['nb'] = [
+ 'AggregateGroups' => [ 'Samlingsgrupper' ],
+ 'ImportTranslations' => [ 'Importer_oversettelser' ],
+ 'LanguageStats' => [ 'Språkstatistikk' ],
+ 'Magic' => [ 'Avansert_oversettelse', 'Avansert_oversetting', 'Magi' ],
+ 'ManageMessageGroups' => [ 'Behandle_meldingsgrupper' ],
+ 'MessageGroupStats' => [ 'Meldingsgruppestatistikk' ],
+ 'PageTranslation' => [ 'Sideoversettelse' ],
+ 'SearchTranslations' => [ 'Søk_i_oversettelser' ],
+ 'SupportedLanguages' => [ 'Støttede_språk' ],
+ 'Translate' => [ 'Oversett' ],
+ 'TranslationStats' => [ 'Oversettelsesstatistikk' ],
+ 'Translations' => [ 'Oversettelser' ],
+];
/** Low German (Plattdüütsch) */
-$specialPageAliases['nds'] = array(
- 'Translate' => array( 'Översetten' ),
-);
+$specialPageAliases['nds'] = [
+ 'Translate' => [ 'Översetten' ],
+];
/** Low Saxon (Netherlands) (Nedersaksies) */
-$specialPageAliases['nds-nl'] = array(
- 'AggregateGroups' => array( 'Samen-evoegden_groepen' ),
- 'ImportTranslations' => array( 'Vertalingen_invoeren' ),
- 'LanguageStats' => array( 'Taalstaotistieken' ),
- 'Magic' => array( 'Uutgebreid_vertalen' ),
- 'ManageMessageGroups' => array( 'Berichtengroepen_beheren' ),
- 'ManageTranslatorSandbox' => array( 'Vertalers_zaandkule_beheren' ),
- 'PageTranslation' => array( 'Ziedvertaling' ),
- 'PageTranslationDeletePage' => array( 'Ziedvertaling_zied_vortdoon' ),
- 'SearchTranslations' => array( 'Vertalingen_zeuken' ),
- 'SupportedLanguages' => array( 'Ondersteunde_talen' ),
- 'Translate' => array( 'Vertalen' ),
- 'TranslationStats' => array( 'Vertaalstaotistieken' ),
- 'Translations' => array( 'Vertalingen' ),
-);
+$specialPageAliases['nds-nl'] = [
+ 'AggregateGroups' => [ 'Samen-evoegden_groepen' ],
+ 'ImportTranslations' => [ 'Vertalingen_invoeren' ],
+ 'LanguageStats' => [ 'Taalstaotistieken' ],
+ 'Magic' => [ 'Uutgebreid_vertalen' ],
+ 'ManageMessageGroups' => [ 'Berichtengroepen_beheren' ],
+ 'ManageTranslatorSandbox' => [ 'Vertalers_zaandkule_beheren' ],
+ 'PageTranslation' => [ 'Ziedvertaling' ],
+ 'PageTranslationDeletePage' => [ 'Ziedvertaling_zied_vortdoon' ],
+ 'SearchTranslations' => [ 'Vertalingen_zeuken' ],
+ 'SupportedLanguages' => [ 'Ondersteunde_talen' ],
+ 'Translate' => [ 'Vertalen' ],
+ 'TranslationStats' => [ 'Vertaalstaotistieken' ],
+ 'Translations' => [ 'Vertalingen' ],
+];
/** Dutch (Nederlands) */
-$specialPageAliases['nl'] = array(
- 'AggregateGroups' => array( 'SamengevoegdeGroepen' ),
- 'ImportTranslations' => array( 'VertalingenImporteren' ),
- 'LanguageStats' => array( 'Taalstatistieken' ),
- 'Magic' => array( 'UitgebreidVertalen', 'VertalenUitgebreid' ),
- 'ManageMessageGroups' => array( 'BerichtengroepenBeheren' ),
- 'ManageTranslatorSandbox' => array( 'VertalerszandbakBeheren' ),
- 'MessageGroupStats' => array( 'Berichtengroepstatistieken' ),
- 'PageTranslation' => array( 'Paginavertaling' ),
- 'PageTranslationDeletePage' => array( 'PaginavertalingpaginaVerwijderen' ),
- 'SearchTranslations' => array( 'VertalingenZoeken' ),
- 'SupportedLanguages' => array( 'OndersteundeTalen' ),
- 'Translate' => array( 'Vertalen' ),
- 'TranslationStats' => array( 'Vertaalstatistieken', 'Vertalingsstatistieken' ),
- 'Translations' => array( 'Vertalingen' ),
- 'PageMigration' => array( 'PaginaMigreren' ),
-);
+$specialPageAliases['nl'] = [
+ 'AggregateGroups' => [ 'SamengevoegdeGroepen' ],
+ 'ImportTranslations' => [ 'VertalingenImporteren' ],
+ 'LanguageStats' => [ 'Taalstatistieken' ],
+ 'Magic' => [ 'UitgebreidVertalen', 'VertalenUitgebreid' ],
+ 'ManageMessageGroups' => [ 'BerichtengroepenBeheren' ],
+ 'ManageTranslatorSandbox' => [ 'VertalerszandbakBeheren' ],
+ 'MessageGroupStats' => [ 'Berichtengroepstatistieken' ],
+ 'PageTranslation' => [ 'Paginavertaling' ],
+ 'PageTranslationDeletePage' => [ 'PaginavertalingpaginaVerwijderen' ],
+ 'SearchTranslations' => [ 'VertalingenZoeken' ],
+ 'SupportedLanguages' => [ 'OndersteundeTalen' ],
+ 'Translate' => [ 'Vertalen' ],
+ 'TranslationStats' => [ 'Vertaalstatistieken', 'Vertalingsstatistieken' ],
+ 'Translations' => [ 'Vertalingen' ],
+ 'PageMigration' => [ 'PaginaMigreren' ],
+];
/** Norwegian Nynorsk (norsk nynorsk) */
-$specialPageAliases['nn'] = array(
- 'Magic' => array( 'Avansert_omsetjing' ),
- 'Translate' => array( 'Set_om' ),
- 'Translations' => array( 'Omsetjingar' ),
-);
+$specialPageAliases['nn'] = [
+ 'Magic' => [ 'Avansert_omsetjing' ],
+ 'Translate' => [ 'Set_om' ],
+ 'Translations' => [ 'Omsetjingar' ],
+];
/** Occitan (occitan) */
-$specialPageAliases['oc'] = array(
- 'Magic' => array( 'Traduccion avançada', 'Traduccionavançada', 'Traduccion avancada', 'Traduccionavancada' ),
- 'Translate' => array( 'Traduire', 'Tradusir' ),
- 'Translations' => array( 'Traduccions', 'Reviradas' ),
-);
+$specialPageAliases['oc'] = [
+ 'Magic' => [ 'Traduccion avançada', 'Traduccionavançada', 'Traduccion avancada', 'Traduccionavancada' ],
+ 'Translate' => [ 'Traduire', 'Tradusir' ],
+ 'Translations' => [ 'Traduccions', 'Reviradas' ],
+];
/** Oriya (ଓଡ଼ିଆ) */
-$specialPageAliases['or'] = array(
- 'Translate' => array( 'ଅନୁବାଦ' ),
- 'Translations' => array( 'ଅନୁବାଦସମୂହ' ),
-);
+$specialPageAliases['or'] = [
+ 'Translate' => [ 'ଅନୁବାଦ' ],
+ 'Translations' => [ 'ଅନୁବାଦସମୂହ' ],
+];
/** Punjabi (ਪੰਜਾਬੀ) */
-$specialPageAliases['pa'] = array(
- 'Magic' => array( 'ਉੱਚੇ_ਦਰਜੇ_ਦਾ_ਉਲਥਾ', 'ਜਾਦੂ' ),
- 'PageTranslation' => array( 'ਸਫ਼ੇ_ਦਾ_ਉਲਥਾ', 'ਸਫ਼ੇ_ਦਾ_ਤਰਜਮਾ' ),
- 'Translate' => array( 'ਉਲਥਾਓ', 'ਤਰਜਮਾ_ਕਰੋ' ),
-);
+$specialPageAliases['pa'] = [
+ 'Magic' => [ 'ਉੱਚੇ_ਦਰਜੇ_ਦਾ_ਉਲਥਾ', 'ਜਾਦੂ' ],
+ 'PageTranslation' => [ 'ਸਫ਼ੇ_ਦਾ_ਉਲਥਾ', 'ਸਫ਼ੇ_ਦਾ_ਤਰਜਮਾ' ],
+ 'Translate' => [ 'ਉਲਥਾਓ', 'ਤਰਜਮਾ_ਕਰੋ' ],
+];
/** Polish (polski) */
-$specialPageAliases['pl'] = array(
- 'AggregateGroups' => array( 'Grupy_zbiorcze' ),
- 'ImportTranslations' => array( 'Import_tłumaczeń' ),
- 'LanguageStats' => array( 'Statystyka_językowa' ),
- 'Magic' => array( 'Rozszerzone_tłumaczenie_MediaWiki' ),
- 'ManageMessageGroups' => array( 'Zarządzanie_grupami_komunikatów' ),
- 'PageTranslation' => array( 'Tłumaczenie_strony' ),
- 'SupportedLanguages' => array( 'Wspierane_języki' ),
- 'Translate' => array( 'Przetłumacz' ),
- 'TranslationStats' => array( 'Statystyki_tłumaczenia' ),
- 'Translations' => array( 'Tłumaczenia' ),
- 'PageMigration' => array( 'Migracja_strony' ),
- 'PagePreparation' => array( 'Przygotowanie_strony' ),
-);
+$specialPageAliases['pl'] = [
+ 'AggregateGroups' => [ 'Grupy_zbiorcze' ],
+ 'ImportTranslations' => [ 'Import_tłumaczeń' ],
+ 'LanguageStats' => [ 'Statystyka_językowa' ],
+ 'Magic' => [ 'Rozszerzone_tłumaczenie_MediaWiki' ],
+ 'ManageMessageGroups' => [ 'Zarządzanie_grupami_komunikatów' ],
+ 'PageTranslation' => [ 'Tłumaczenie_strony' ],
+ 'SupportedLanguages' => [ 'Wspierane_języki' ],
+ 'Translate' => [ 'Przetłumacz' ],
+ 'TranslationStats' => [ 'Statystyki_tłumaczenia' ],
+ 'Translations' => [ 'Tłumaczenia' ],
+ 'PageMigration' => [ 'Migracja_strony' ],
+ 'PagePreparation' => [ 'Przygotowanie_strony' ],
+];
/** Pashto (پښتو) */
-$specialPageAliases['ps'] = array(
- 'Magic' => array( 'پرمختللې ژباړه، کوډګريز' ),
- 'Translate' => array( 'ژباړل' ),
- 'Translations' => array( 'ژباړې' ),
-);
+$specialPageAliases['ps'] = [
+ 'Magic' => [ 'پرمختللې ژباړه، کوډګريز' ],
+ 'Translate' => [ 'ژباړل' ],
+ 'Translations' => [ 'ژباړې' ],
+];
/** Portuguese (português) */
-$specialPageAliases['pt'] = array(
- 'ImportTranslations' => array( 'Importar_traduções' ),
- 'LanguageStats' => array( 'Estatísticas_de_línguas' ),
- 'Magic' => array( 'Tradução_avançada' ),
- 'PageTranslation' => array( 'Tradução_de_páginas' ),
- 'Translate' => array( 'Traduzir' ),
- 'TranslationStats' => array( 'Estatísticas_de_traduções' ),
- 'Translations' => array( 'Traduções' ),
-);
+$specialPageAliases['pt'] = [
+ 'ImportTranslations' => [ 'Importar_traduções' ],
+ 'LanguageStats' => [ 'Estatísticas_de_línguas' ],
+ 'Magic' => [ 'Tradução_avançada' ],
+ 'PageTranslation' => [ 'Tradução_de_páginas' ],
+ 'Translate' => [ 'Traduzir' ],
+ 'TranslationStats' => [ 'Estatísticas_de_traduções' ],
+ 'Translations' => [ 'Traduções' ],
+];
/** Brazilian Portuguese (português do Brasil) */
-$specialPageAliases['pt-br'] = array(
- 'Magic' => array( 'Tradução_avançada' ),
- 'Translate' => array( 'Traduzir' ),
- 'TranslationStats' => array( 'Estado_da_tradução', 'Status_da_tradução' ),
-);
+$specialPageAliases['pt-br'] = [
+ 'Magic' => [ 'Tradução_avançada' ],
+ 'Translate' => [ 'Traduzir' ],
+ 'TranslationStats' => [ 'Estado_da_tradução', 'Status_da_tradução' ],
+];
/** Quechua (Runa Simi) */
-$specialPageAliases['qu'] = array(
- 'Magic' => array( 'NawparikusqaTikray' ),
- 'ManageTranslatorSandbox' => array( 'TikranaPukllana' ),
- 'Translate' => array( 'Tikray' ),
-);
+$specialPageAliases['qu'] = [
+ 'Magic' => [ 'NawparikusqaTikray' ],
+ 'ManageTranslatorSandbox' => [ 'TikranaPukllana' ],
+ 'Translate' => [ 'Tikray' ],
+];
/** Romanian (română) */
-$specialPageAliases['ro'] = array(
- 'ImportTranslations' => array( 'Importare_traduceri' ),
- 'LanguageStats' => array( 'Statistici_limbă' ),
- 'Magic' => array( 'Traducere_avansată' ),
- 'PageTranslation' => array( 'Traducere_pagină' ),
- 'Translate' => array( 'Traducere' ),
- 'TranslationStats' => array( 'Statistici_traduceri' ),
- 'Translations' => array( 'Traduceri' ),
-);
+$specialPageAliases['ro'] = [
+ 'ImportTranslations' => [ 'Importare_traduceri' ],
+ 'LanguageStats' => [ 'Statistici_limbă' ],
+ 'Magic' => [ 'Traducere_avansată' ],
+ 'PageTranslation' => [ 'Traducere_pagină' ],
+ 'Translate' => [ 'Traducere' ],
+ 'TranslationStats' => [ 'Statistici_traduceri' ],
+ 'Translations' => [ 'Traduceri' ],
+];
/** Russian (русский) */
-$specialPageAliases['ru'] = array(
- 'AggregateGroups' => array( 'Агрегированные_группы' ),
- 'ImportTranslations' => array( 'Импорт_переводов' ),
- 'LanguageStats' => array( 'Статистика_языка' ),
- 'Magic' => array( 'Расширенный_перевод' ),
- 'ManageMessageGroups' => array( 'Управление_группами_сообщений' ),
- 'MessageGroupStats' => array( 'Статистика_группы_сообщений' ),
- 'PageTranslation' => array( 'Перевод_страниц' ),
- 'PageTranslationDeletePage' => array( 'Удаление_переводимой_страницы' ),
- 'SearchTranslations' => array( 'Поиск_переводов' ),
- 'SupportedLanguages' => array( 'Поддерживаемые_языки' ),
- 'Translate' => array( 'Перевести' ),
- 'TranslationStats' => array( 'Статистика_переводов' ),
- 'Translations' => array( 'Переводы' ),
-);
+$specialPageAliases['ru'] = [
+ 'AggregateGroups' => [ 'Агрегированные_группы' ],
+ 'ImportTranslations' => [ 'Импорт_переводов' ],
+ 'LanguageStats' => [ 'Статистика_языка' ],
+ 'Magic' => [ 'Расширенный_перевод' ],
+ 'ManageMessageGroups' => [ 'Управление_группами_сообщений' ],
+ 'MessageGroupStats' => [ 'Статистика_группы_сообщений' ],
+ 'PageTranslation' => [ 'Перевод_страниц' ],
+ 'PageTranslationDeletePage' => [ 'Удаление_переводимой_страницы' ],
+ 'SearchTranslations' => [ 'Поиск_переводов' ],
+ 'SupportedLanguages' => [ 'Поддерживаемые_языки' ],
+ 'Translate' => [ 'Перевести' ],
+ 'TranslationStats' => [ 'Статистика_переводов' ],
+ 'Translations' => [ 'Переводы' ],
+];
/** Sanskrit (संस्कृतम्) */
-$specialPageAliases['sa'] = array(
- 'LanguageStats' => array( 'भाषासांख्यिकी' ),
- 'Magic' => array( 'प्रगतभाषांतरमाया' ),
- 'Translate' => array( 'भाषांतर' ),
- 'TranslationStats' => array( 'भाषांतरसांख्यिकी' ),
- 'Translations' => array( 'भाषांतरानि' ),
-);
+$specialPageAliases['sa'] = [
+ 'LanguageStats' => [ 'भाषासांख्यिकी' ],
+ 'Magic' => [ 'प्रगतभाषांतरमाया' ],
+ 'Translate' => [ 'भाषांतर' ],
+ 'TranslationStats' => [ 'भाषांतरसांख्यिकी' ],
+ 'Translations' => [ 'भाषांतरानि' ],
+];
/** Sicilian (sicilianu) */
-$specialPageAliases['scn'] = array(
- 'AggregateGroups' => array( 'GruppiAggregati' ),
- 'ImportTranslations' => array( 'ImportaTraduzioni' ),
- 'LanguageStats' => array( 'StatisticheLingua' ),
- 'Magic' => array( 'TraduciAvanzato' ),
- 'ManageMessageGroups' => array( 'GestisciGruppiMessaggio' ),
- 'MessageGroupStats' => array( 'MessaggioGruppoStat' ),
- 'PageTranslation' => array( 'TraduzionePagina' ),
- 'SupportedLanguages' => array( 'LingueSupportate' ),
- 'Translate' => array( 'Traduci' ),
- 'TranslationStats' => array( 'StatisticheTraduzione' ),
- 'Translations' => array( 'Traduzioni' ),
-);
+$specialPageAliases['scn'] = [
+ 'AggregateGroups' => [ 'GruppiAggregati' ],
+ 'ImportTranslations' => [ 'ImportaTraduzioni' ],
+ 'LanguageStats' => [ 'StatisticheLingua' ],
+ 'Magic' => [ 'TraduciAvanzato' ],
+ 'ManageMessageGroups' => [ 'GestisciGruppiMessaggio' ],
+ 'MessageGroupStats' => [ 'MessaggioGruppoStat' ],
+ 'PageTranslation' => [ 'TraduzionePagina' ],
+ 'SupportedLanguages' => [ 'LingueSupportate' ],
+ 'Translate' => [ 'Traduci' ],
+ 'TranslationStats' => [ 'StatisticheTraduzione' ],
+ 'Translations' => [ 'Traduzioni' ],
+];
/** Sinhala (සිංහල) */
-$specialPageAliases['si'] = array(
- 'Translate' => array( 'පරිවර්තනය' ),
-);
+$specialPageAliases['si'] = [
+ 'Translate' => [ 'පරිවර්තනය' ],
+];
/** Slovak (slovenčina) */
-$specialPageAliases['sk'] = array(
- 'LanguageStats' => array( 'ŠtatistikyJazykov' ),
- 'Magic' => array( 'RozšírenéPreložiť' ),
- 'PageTranslation' => array( 'PrekladStránky' ),
- 'Translate' => array( 'Preložiť' ),
- 'TranslationStats' => array( 'ŠtatistikyPrekladov' ),
- 'Translations' => array( 'Preklady' ),
-);
+$specialPageAliases['sk'] = [
+ 'LanguageStats' => [ 'ŠtatistikyJazykov' ],
+ 'Magic' => [ 'RozšírenéPreložiť' ],
+ 'PageTranslation' => [ 'PrekladStránky' ],
+ 'Translate' => [ 'Preložiť' ],
+ 'TranslationStats' => [ 'ŠtatistikyPrekladov' ],
+ 'Translations' => [ 'Preklady' ],
+];
/** Albanian (shqip) */
-$specialPageAliases['sq'] = array(
- 'Translate' => array( 'Përkthe' ),
-);
-
-/** Serbian (Cyrillic script) (српски (ћирилица)‎) */
-$specialPageAliases['sr-ec'] = array(
- 'ImportTranslations' => array( 'Увоз_превода' ),
- 'LanguageStats' => array( 'Статистика_језика' ),
- 'Magic' => array( 'Напредно_превођење' ),
- 'ManageMessageGroups' => array( 'Управљање_групама_порука' ),
- 'PageTranslation' => array( 'Превод_странице' ),
- 'SupportedLanguages' => array( 'Подржани_језици' ),
- 'Translate' => array( 'Преведи' ),
- 'TranslationStats' => array( 'Статистика_превода' ),
- 'Translations' => array( 'Преводи' ),
-);
+$specialPageAliases['sq'] = [
+ 'Translate' => [ 'Përkthe' ],
+];
+
+/** Serbian (Cyrillic script) (српски (ћирилица)) */
+$specialPageAliases['sr-ec'] = [
+ 'AggregateGroups' => [ 'Спојене_групе' ],
+ 'ImportTranslations' => [ 'Увоз_превода' ],
+ 'ExportTranslations' => [ 'Извоз_превода' ],
+ 'LanguageStats' => [ 'Статистика_језика' ],
+ 'Magic' => [ 'Напредно_превођење' ],
+ 'ManageMessageGroups' => [ 'Управљање_групама_порука' ],
+ 'ManageTranslatorSandbox' => [ 'Управљање_песком_преводиоца', 'Песак_за_преводе' ],
+ 'MessageGroupStats' => [ 'Статистике_група_превода' ],
+ 'PageTranslation' => [ 'Превод_странице' ],
+ 'PageTranslationDeletePage' => [ 'Обриши_страницу_превода' ],
+ 'SearchTranslations' => [ 'Претрага_превода' ],
+ 'SupportedLanguages' => [ 'Подржани_језици' ],
+ 'Translate' => [ 'Преведи' ],
+ 'TranslationStash' => [ 'Складиште_превода' ],
+ 'TranslationStats' => [ 'Статистика_превода' ],
+ 'Translations' => [ 'Преводи' ],
+ 'PageMigration' => [ 'Сеоба_странице' ],
+ 'PagePreparation' => [ 'Припрема_странице' ],
+];
+
+/** Serbian (Latin script) (srpski (latinica)) */
+$specialPageAliases['sr-el'] = [
+ 'AggregateGroups' => [ 'Spojene_grupe' ],
+ 'ImportTranslations' => [ 'Uvoz_prevoda' ],
+ 'ExportTranslations' => [ 'Izvoz_prevoda' ],
+ 'LanguageStats' => [ 'Statistika_jezika' ],
+ 'Magic' => [ 'Napredno_prevođenje' ],
+ 'ManageMessageGroups' => [ 'Upravljanje_grupama_poruka' ],
+ 'ManageTranslatorSandbox' => [ 'Upravljanje_peskom_prevodioca', 'Pesak_za_prevode' ],
+ 'MessageGroupStats' => [ 'Statistike_grupa_prevoda' ],
+ 'PageTranslation' => [ 'Prevod_stranice' ],
+ 'PageTranslationDeletePage' => [ 'Obriši_stranicu_prevoda' ],
+ 'SearchTranslations' => [ 'Pretraga_prevoda' ],
+ 'SupportedLanguages' => [ 'Podržani_jezici' ],
+ 'Translate' => [ 'Prevedi' ],
+ 'TranslationStash' => [ 'Skladište_prevoda' ],
+ 'TranslationStats' => [ 'Statistika_prevoda' ],
+ 'Translations' => [ 'Prevodi' ],
+ 'PageMigration' => [ 'Seoba_stranice' ],
+ 'PagePreparation' => [ 'Priprema_stranice' ],
+];
/** Sundanese (Basa Sunda) */
-$specialPageAliases['su'] = array(
- 'LanguageStats' => array( 'StatBasa' ),
- 'Magic' => array( 'TarjamahTeleb' ),
- 'Translate' => array( 'Tarjamah' ),
- 'TranslationStats' => array( 'StatTarjamah' ),
- 'Translations' => array( 'Tarjamahan' ),
-);
+$specialPageAliases['su'] = [
+ 'LanguageStats' => [ 'StatBasa' ],
+ 'Magic' => [ 'TarjamahTeleb' ],
+ 'Translate' => [ 'Tarjamah' ],
+ 'TranslationStats' => [ 'StatTarjamah' ],
+ 'Translations' => [ 'Tarjamahan' ],
+];
/** Swedish (svenska) */
-$specialPageAliases['sv'] = array(
- 'ImportTranslations' => array( 'Importera_översättningar' ),
- 'LanguageStats' => array( 'Språkstatistik' ),
- 'Magic' => array( 'Avancerad_översättning' ),
- 'Translate' => array( 'Översätt' ),
- 'TranslationStats' => array( 'Översättningsstatistik' ),
- 'Translations' => array( 'Översättningar' ),
- 'PageMigration' => array( 'Sidmigrering' ),
-);
+$specialPageAliases['sv'] = [
+ 'ImportTranslations' => [ 'Importera_översättningar' ],
+ 'LanguageStats' => [ 'Språkstatistik' ],
+ 'Magic' => [ 'Avancerad_översättning' ],
+ 'Translate' => [ 'Översätt' ],
+ 'TranslationStats' => [ 'Översättningsstatistik' ],
+ 'Translations' => [ 'Översättningar' ],
+ 'PageMigration' => [ 'Sidmigrering' ],
+];
/** Swahili (Kiswahili) */
-$specialPageAliases['sw'] = array(
- 'Magic' => array( 'TasfiriyaJuu', 'Uchawi' ),
- 'Translate' => array( 'Tafsiri' ),
- 'TranslationStats' => array( 'TakwimuzaTafsiri' ),
- 'Translations' => array( 'Tafsiri' ),
-);
+$specialPageAliases['sw'] = [
+ 'Magic' => [ 'TasfiriyaJuu', 'Uchawi' ],
+ 'Translate' => [ 'Tafsiri' ],
+ 'TranslationStats' => [ 'TakwimuzaTafsiri' ],
+ 'Translations' => [ 'Tafsiri' ],
+];
/** Telugu (తెలుగు) */
-$specialPageAliases['te'] = array(
- 'ImportTranslations' => array( 'అనువాదాలదిగుమతి' ),
- 'LanguageStats' => array( 'భాషాలెక్కలు' ),
- 'PageTranslation' => array( 'పేజిఅనువాదము' ),
- 'Translate' => array( 'అనువాదం' ),
- 'TranslationStats' => array( 'అనువాదలెక్కలు' ),
- 'Translations' => array( 'అనువాదాలు' ),
-);
+$specialPageAliases['te'] = [
+ 'ImportTranslations' => [ 'అనువాదాలదిగుమతి' ],
+ 'LanguageStats' => [ 'భాషాలెక్కలు' ],
+ 'PageTranslation' => [ 'పేజిఅనువాదము' ],
+ 'Translate' => [ 'అనువాదం' ],
+ 'TranslationStats' => [ 'అనువాదలెక్కలు' ],
+ 'Translations' => [ 'అనువాదాలు' ],
+];
/** Thai (ไทย) */
-$specialPageAliases['th'] = array(
- 'LanguageStats' => array( 'สถิติภาษา' ),
- 'Magic' => array( 'การแปลขั้นสูง' ),
- 'SupportedLanguages' => array( 'ภาษาที่รองรับ' ),
- 'Translate' => array( 'แปล' ),
- 'TranslationStats' => array( 'สถิติการแปล' ),
- 'Translations' => array( 'การแปล' ),
-);
+$specialPageAliases['th'] = [
+ 'LanguageStats' => [ 'สถิติภาษา' ],
+ 'Magic' => [ 'การแปลขั้นสูง' ],
+ 'SupportedLanguages' => [ 'ภาษาที่รองรับ' ],
+ 'Translate' => [ 'แปล' ],
+ 'TranslationStats' => [ 'สถิติการแปล' ],
+ 'Translations' => [ 'การแปล' ],
+];
/** Tagalog (Tagalog) */
-$specialPageAliases['tl'] = array(
- 'LanguageStats' => array( 'Mga_estadistika_ng_wika' ),
- 'Magic' => array( 'Mas_masulong_na_pagsasalinwika', 'Salamangka' ),
- 'Translate' => array( 'Isalinwika' ),
- 'TranslationStats' => array( 'Mga_estadistika_ng_salinwika' ),
- 'Translations' => array( 'Mga_salinwika' ),
-);
+$specialPageAliases['tl'] = [
+ 'LanguageStats' => [ 'Mga_estadistika_ng_wika' ],
+ 'Magic' => [ 'Mas_masulong_na_pagsasalinwika', 'Salamangka' ],
+ 'Translate' => [ 'Isalinwika' ],
+ 'TranslationStats' => [ 'Mga_estadistika_ng_salinwika' ],
+ 'Translations' => [ 'Mga_salinwika' ],
+];
/** Turkish (Türkçe) */
-$specialPageAliases['tr'] = array(
- 'AggregateGroups' => array( 'GruplarıBirleştirme' ),
- 'ImportTranslations' => array( 'ÇevirileriİçeAktar' ),
- 'LanguageStats' => array( 'Dilİstatistikleri' ),
- 'Magic' => array( 'GelişmişÇeviri' ),
- 'ManageMessageGroups' => array( 'MesajGruplarınıYönet', 'İletiGruplarınıYönet' ),
- 'MessageGroupStats' => array( 'MesajGrubuİstatistikleri', 'İletiGrubuİstatistikleri' ),
- 'PageTranslation' => array( 'SayfaÇevirisi' ),
- 'PageTranslationDeletePage' => array( 'SayfaÇevirisiSayfaSilme' ),
- 'SupportedLanguages' => array( 'DesteklenenDiller' ),
- 'Translate' => array( 'Çevir', 'Çeviri' ),
- 'TranslationStats' => array( 'Çeviriİstatistikleri' ),
- 'Translations' => array( 'Çeviriler' ),
-);
+$specialPageAliases['tr'] = [
+ 'AggregateGroups' => [ 'GruplarıBirleştirme' ],
+ 'ImportTranslations' => [ 'ÇevirileriİçeAktar' ],
+ 'LanguageStats' => [ 'Dilİstatistikleri' ],
+ 'Magic' => [ 'GelişmişÇeviri' ],
+ 'ManageMessageGroups' => [ 'MesajGruplarınıYönet', 'İletiGruplarınıYönet' ],
+ 'MessageGroupStats' => [ 'MesajGrubuİstatistikleri', 'İletiGrubuİstatistikleri' ],
+ 'PageTranslation' => [ 'SayfaÇevirisi' ],
+ 'PageTranslationDeletePage' => [ 'SayfaÇevirisiSayfaSilme' ],
+ 'SupportedLanguages' => [ 'DesteklenenDiller' ],
+ 'Translate' => [ 'Çevir', 'Çeviri' ],
+ 'TranslationStats' => [ 'Çeviriİstatistikleri' ],
+ 'Translations' => [ 'Çeviriler' ],
+];
/** Tatar (Cyrillic script) (татарча) */
-$specialPageAliases['tt-cyrl'] = array(
- 'LanguageStats' => array( 'Телләр_хисабы' ),
- 'PageTranslation' => array( 'Битне_тәрҗемә_итү' ),
- 'Translate' => array( 'Тәрҗемә' ),
- 'TranslationStats' => array( 'Тәрҗемәләр_хисабы' ),
- 'Translations' => array( 'Тәрҗемәләр' ),
-);
+$specialPageAliases['tt-cyrl'] = [
+ 'LanguageStats' => [ 'Телләр_хисабы' ],
+ 'PageTranslation' => [ 'Битне_тәрҗемә_итү' ],
+ 'Translate' => [ 'Тәрҗемә' ],
+ 'TranslationStats' => [ 'Тәрҗемәләр_хисабы' ],
+ 'Translations' => [ 'Тәрҗемәләр' ],
+];
/** Tuvinian (тыва дыл) */
-$specialPageAliases['tyv'] = array(
- 'PageTranslation' => array( 'Арын_очулгазы' ),
- 'PageTranslationDeletePage' => array( 'Очулдуругда_арынны_казыыр' ),
- 'SearchTranslations' => array( 'Очулгалар_дилээр' ),
- 'SupportedLanguages' => array( 'Дөгүмнээн_дылдар' ),
- 'Translate' => array( 'Очулдурар' ),
- 'TranslationStats' => array( 'Очулга_статистиказы' ),
- 'Translations' => array( 'Очулгалар' ),
-);
+$specialPageAliases['tyv'] = [
+ 'PageTranslation' => [ 'Арын_очулгазы' ],
+ 'PageTranslationDeletePage' => [ 'Очулдуругда_арынны_казыыр' ],
+ 'SearchTranslations' => [ 'Очулгалар_дилээр' ],
+ 'SupportedLanguages' => [ 'Дөгүмнээн_дылдар' ],
+ 'Translate' => [ 'Очулдурар' ],
+ 'TranslationStats' => [ 'Очулга_статистиказы' ],
+ 'Translations' => [ 'Очулгалар' ],
+];
/** Ukrainian (українська) */
-$specialPageAliases['uk'] = array(
- 'AggregateGroups' => array( 'Агреговані_групи' ),
- 'ImportTranslations' => array( 'Імпорт_перекладів' ),
- 'LanguageStats' => array( 'Статистика_мови' ),
- 'Magic' => array( 'Поглиблений_переклад' ),
- 'ManageMessageGroups' => array( 'Керування_групами_повідомлень' ),
- 'MessageGroupStats' => array( 'Статистика_групи_повідомлень' ),
- 'PageTranslation' => array( 'Переклад' ),
- 'PageTranslationDeletePage' => array( 'Вилучення_перекладабельної_сторінки' ),
- 'SearchTranslations' => array( 'Пошук_перекладів' ),
- 'SupportedLanguages' => array( 'Підтримувані_мови' ),
- 'Translate' => array( 'Перекласти' ),
- 'TranslationStats' => array( 'Статистика_перекладів' ),
- 'Translations' => array( 'Переклади' ),
-);
+$specialPageAliases['uk'] = [
+ 'AggregateGroups' => [ 'Агреговані_групи', 'Агрегированные_группы' ],
+ 'ImportTranslations' => [ 'Імпорт_перекладів', 'Импорт_переводов' ],
+ 'LanguageStats' => [ 'Статистика_мови', 'Статистика_языка' ],
+ 'Magic' => [ 'Поглиблений_переклад', 'Расширенный_перевод' ],
+ 'ManageMessageGroups' => [ 'Керування_групами_повідомлень', 'Управление_группами_сообщений' ],
+ 'MessageGroupStats' => [ 'Статистика_групи_повідомлень', 'Статистика_группы_сообщений' ],
+ 'PageTranslation' => [ 'Переклад', 'Перевод_страниц' ],
+ 'PageTranslationDeletePage' => [ 'Вилучення_перекладабельної_сторінки', 'Удаление_переводимой_страницы' ],
+ 'SearchTranslations' => [ 'Пошук_перекладів', 'Поиск_переводов' ],
+ 'SupportedLanguages' => [ 'Підтримувані_мови', 'Поддерживаемые_языки' ],
+ 'Translate' => [ 'Перекласти', 'Перевести' ],
+ 'TranslationStats' => [ 'Статистика_перекладів', 'Статистика_переводов' ],
+ 'Translations' => [ 'Переклади', 'Переводы' ],
+];
/** Venetian (vèneto) */
-$specialPageAliases['vec'] = array(
- 'Translate' => array( 'Tradusi' ),
- 'Translations' => array( 'Tradussioni' ),
-);
+$specialPageAliases['vec'] = [
+ 'Translate' => [ 'Tradusi' ],
+ 'Translations' => [ 'Tradussioni' ],
+];
/** Vietnamese (Tiếng Việt) */
-$specialPageAliases['vi'] = array(
- 'ImportTranslations' => array( 'Nhập_bản_dịch' ),
- 'LanguageStats' => array( 'Thống_kê_ngôn_ngữ' ),
- 'Magic' => array( 'Dịch_nâng_cao' ),
- 'ManageMessageGroups' => array( 'Quản_lý_nhóm_thông_điệp', 'Quản_lý_nhóm', 'Quản_lí_nhóm_thông_điệp', 'Quản_lí_nhóm' ),
- 'ManageTranslatorSandbox' => array( 'Quản_lý_chỗ_thử_biên_dịch', 'Quản_lí_chỗ_thử_biên_dịch' ),
- 'MessageGroupStats' => array( 'Thống_kê_nhóm_thông_điệp', 'Thống_kê_nhóm' ),
- 'PageTranslation' => array( 'Dịch_trang', 'Biên_dịch_trang' ),
- 'SearchTranslations' => array( 'Tìm_kiếm_bản_dịch' ),
- 'SupportedLanguages' => array( 'Ngôn_ngữ_đuọc_hỗ_trợ' ),
- 'Translate' => array( 'Dịch', 'Biên_dịch' ),
- 'TranslationStats' => array( 'Thống_kê_biên_dịch' ),
- 'Translations' => array( 'Bản_dịch' ),
- 'PagePreparation' => array( 'Sửa_soạn_trang' ),
-);
+$specialPageAliases['vi'] = [
+ 'ImportTranslations' => [ 'Nhập_bản_dịch' ],
+ 'LanguageStats' => [ 'Thống_kê_ngôn_ngữ' ],
+ 'Magic' => [ 'Dịch_nâng_cao' ],
+ 'ManageMessageGroups' => [ 'Quản_lý_nhóm_thông_điệp', 'Quản_lý_nhóm', 'Quản_lí_nhóm_thông_điệp', 'Quản_lí_nhóm' ],
+ 'ManageTranslatorSandbox' => [ 'Quản_lý_chỗ_thử_biên_dịch', 'Quản_lí_chỗ_thử_biên_dịch' ],
+ 'MessageGroupStats' => [ 'Thống_kê_nhóm_thông_điệp', 'Thống_kê_nhóm' ],
+ 'PageTranslation' => [ 'Dịch_trang', 'Biên_dịch_trang' ],
+ 'SearchTranslations' => [ 'Tìm_kiếm_bản_dịch' ],
+ 'SupportedLanguages' => [ 'Ngôn_ngữ_đuọc_hỗ_trợ' ],
+ 'Translate' => [ 'Dịch', 'Biên_dịch' ],
+ 'TranslationStats' => [ 'Thống_kê_biên_dịch' ],
+ 'Translations' => [ 'Bản_dịch' ],
+ 'PagePreparation' => [ 'Sửa_soạn_trang' ],
+];
/** Wolof (Wolof) */
-$specialPageAliases['wo'] = array(
- 'Translate' => array( 'Tekki' ),
-);
+$specialPageAliases['wo'] = [
+ 'Translate' => [ 'Tekki' ],
+];
/** Yiddish (ייִדיש) */
-$specialPageAliases['yi'] = array(
- 'Translate' => array( 'פֿארטײַטש' ),
-);
+$specialPageAliases['yi'] = [
+ 'Translate' => [ 'פֿארטײַטש' ],
+];
/** Cantonese (粵語) */
-$specialPageAliases['yue'] = array(
- 'Translate' => array( '譯' ),
-);
+$specialPageAliases['yue'] = [
+ 'Translate' => [ '譯' ],
+];
/** Chinese (中文) */
-$specialPageAliases['zh'] = array(
- 'Translate' => array( '翻译', '翻譯' ),
-);
-
-/** Simplified Chinese (中文(简体)‎) */
-$specialPageAliases['zh-hans'] = array(
- 'AggregateGroups' => array( '信息组总计' ),
- 'ImportTranslations' => array( '导入翻译' ),
- 'LanguageStats' => array( '语言统计' ),
- 'Magic' => array( '高级翻译' ),
- 'ManageMessageGroups' => array( '信息组管理' ),
- 'ManageTranslatorSandbox' => array( '管理译者沙盒' ),
- 'MessageGroupStats' => array( '信息组状态' ),
- 'PageTranslation' => array( '页面翻译' ),
- 'PageTranslationDeletePage' => array( '页面翻译删除页面' ),
- 'SearchTranslations' => array( '搜索翻译' ),
- 'SupportedLanguages' => array( '支持的语言' ),
- 'Translate' => array( '翻译' ),
- 'TranslationStash' => array( '翻译隐藏' ),
- 'TranslationStats' => array( '翻译统计' ),
- 'Translations' => array( '译文' ),
- 'PageMigration' => array( '页面迁移' ),
- 'PagePreparation' => array( '页面预备' ),
-);
-
-/** Traditional Chinese (中文(繁體)‎) */
-$specialPageAliases['zh-hant'] = array(
- 'AggregateGroups' => array( '集合群組' ),
- 'ImportTranslations' => array( '匯入翻譯' ),
- 'LanguageStats' => array( '語言統計' ),
- 'Magic' => array( '進階翻譯' ),
- 'ManageMessageGroups' => array( '管理訊息群組' ),
- 'ManageTranslatorSandbox' => array( '管理翻譯人員沙盒' ),
- 'MessageGroupStats' => array( '訊息群組統計' ),
- 'PageTranslation' => array( '頁面翻譯' ),
- 'PageTranslationDeletePage' => array( '頁面翻譯刪除頁面' ),
- 'SearchTranslations' => array( '搜尋翻譯' ),
- 'SupportedLanguages' => array( '支援的語言' ),
- 'Translate' => array( '翻譯' ),
- 'TranslationStash' => array( '翻譯儲藏庫' ),
- 'TranslationStats' => array( '翻譯統計' ),
- 'Translations' => array( '翻譯清單' ),
- 'PageMigration' => array( '頁面轉移' ),
- 'PagePreparation' => array( '頁面準備' ),
-); \ No newline at end of file
+$specialPageAliases['zh'] = [
+ 'Translate' => [ '翻译', '翻譯' ],
+];
+
+/** Simplified Chinese (中文(简体)) */
+$specialPageAliases['zh-hans'] = [
+ 'AggregateGroups' => [ '信息组总计' ],
+ 'ImportTranslations' => [ '导入翻译' ],
+ 'LanguageStats' => [ '语言统计' ],
+ 'Magic' => [ '高级翻译' ],
+ 'ManageMessageGroups' => [ '信息组管理' ],
+ 'ManageTranslatorSandbox' => [ '管理译者沙盒' ],
+ 'MessageGroupStats' => [ '信息组状态' ],
+ 'PageTranslation' => [ '页面翻译' ],
+ 'PageTranslationDeletePage' => [ '页面翻译删除页面' ],
+ 'SearchTranslations' => [ '搜索翻译' ],
+ 'SupportedLanguages' => [ '支持的语言' ],
+ 'Translate' => [ '翻译' ],
+ 'TranslationStash' => [ '翻译隐藏' ],
+ 'TranslationStats' => [ '翻译统计' ],
+ 'Translations' => [ '译文' ],
+ 'PageMigration' => [ '页面迁移' ],
+ 'PagePreparation' => [ '页面预备' ],
+];
+
+/** Traditional Chinese (中文(繁體)) */
+$specialPageAliases['zh-hant'] = [
+ 'AggregateGroups' => [ '集合群組' ],
+ 'ImportTranslations' => [ '匯入翻譯' ],
+ 'LanguageStats' => [ '語言統計' ],
+ 'Magic' => [ '進階翻譯' ],
+ 'ManageMessageGroups' => [ '管理訊息群組' ],
+ 'ManageTranslatorSandbox' => [ '管理翻譯人員沙盒' ],
+ 'MessageGroupStats' => [ '訊息群組統計' ],
+ 'PageTranslation' => [ '頁面翻譯' ],
+ 'PageTranslationDeletePage' => [ '頁面翻譯刪除頁面' ],
+ 'SearchTranslations' => [ '搜尋翻譯' ],
+ 'SupportedLanguages' => [ '支援的語言' ],
+ 'Translate' => [ '翻譯' ],
+ 'TranslationStash' => [ '翻譯儲藏庫' ],
+ 'TranslationStats' => [ '翻譯統計' ],
+ 'Translations' => [ '翻譯清單' ],
+ 'PageMigration' => [ '頁面轉移' ],
+ 'PagePreparation' => [ '頁面準備' ],
+];
diff --git a/www/wiki/extensions/Translate/Translate.i18n.magic.php b/www/wiki/extensions/Translate/Translate.i18n.magic.php
index 8aaa515f..891c11e7 100644
--- a/www/wiki/extensions/Translate/Translate.i18n.magic.php
+++ b/www/wiki/extensions/Translate/Translate.i18n.magic.php
@@ -6,10 +6,14 @@
* @ingroup Extensions
*/
-$magicWords = array();
+$magicWords = [];
/** English (English) */
-$magicWords['en'] = array(
- 'translation' => array( 0, 'translation' ),
-);
+$magicWords['en'] = [
+ 'translation' => [ 0, 'translation' ],
+];
+/** Urdu (اردو) */
+$magicWords['ur'] = [
+ 'translation' => [ 0, 'ترجمہ', 'translation' ],
+];
diff --git a/www/wiki/extensions/Translate/Translate.php b/www/wiki/extensions/Translate/Translate.php
index abdfe6e7..979146cb 100644
--- a/www/wiki/extensions/Translate/Translate.php
+++ b/www/wiki/extensions/Translate/Translate.php
@@ -10,40 +10,17 @@ if ( !defined( 'MEDIAWIKI' ) ) {
*
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @copyright Copyright © 2006-2016, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @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', '2016-04-06' );
+define( 'TRANSLATE_VERSION', '2019-04-24' );
-/**
- * Extension credits properties.
- */
-$wgExtensionCredits['specialpage'][] = array(
- 'path' => __FILE__,
- 'name' => 'Translate',
- 'namemsg' => 'translate-extensionname',
- 'version' => TRANSLATE_VERSION,
- 'author' => array(
- 'Niklas Laxström',
- 'Santhosh Thottingal',
- 'Siebrand Mazeland'
- ),
- 'descriptionmsg' => 'translate-desc',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:Translate',
- 'license-name' => 'GPL-2.0+',
-);
-
-/**
- * @cond file_level_code
- * Setup class autoloading.
- */
-$dir = __DIR__;
-require_once "$dir/Autoload.php";
-/** @endcond */
+// Load stuff already converted to extension registration.
+wfLoadExtension( 'Translate', __DIR__ . '/extension-wip.json' );
/**
* Registering various resources
@@ -55,149 +32,8 @@ $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";
-
-// Register initialization code
-$wgExtensionFunctions[] = 'TranslateHooks::setupTranslate';
-$wgHooks['CanonicalNamespaces'][] = 'TranslateHooks::setupNamespaces';
-$wgHooks['ResourceLoaderTestModules'][] = 'TranslateHooks::onResourceLoaderTestModules';
-$wgHooks['UnitTestsList'][] = 'TranslateHooks::setupUnitTests';
-$wgHooks['LoadExtensionSchemaUpdates'][] = 'TranslateHooks::schemaUpdates';
-$wgHooks['ParserTestTables'][] = 'TranslateHooks::parserTestTables';
-$wgHooks['PageContentLanguage'][] = 'TranslateHooks::onPageContentLanguage';
-
-// Register special pages into MediaWiki
-$wgSpecialPages['Translate'] = 'SpecialTranslate';
-$wgSpecialPages['Translations'] = 'SpecialTranslations';
-// Disabled by default
-// $wgSpecialPages['Magic'] = 'SpecialMagic';
-$wgSpecialPages['TranslationStats'] = 'SpecialTranslationStats';
-$wgSpecialPages['LanguageStats'] = 'SpecialLanguageStats';
-$wgSpecialPages['MessageGroupStats'] = 'SpecialMessageGroupStats';
-$wgSpecialPages['ImportTranslations'] = 'SpecialImportTranslations';
-$wgSpecialPages['ManageMessageGroups'] = 'SpecialManageGroups';
-$wgSpecialPages['SupportedLanguages'] = 'SpecialSupportedLanguages';
-$wgSpecialPages['AggregateGroups'] = 'SpecialAggregateGroups';
-$wgSpecialPages['SearchTranslations'] = 'SpecialSearchTranslations';
-
-// API
-$wgAPIListModules['messagecollection'] = 'ApiQueryMessageCollection';
-$wgAPIMetaModules['languagestats'] = 'ApiQueryLanguageStats';
-$wgAPIMetaModules['messagegroups'] = 'ApiQueryMessageGroups';
-$wgAPIMetaModules['messagegroupstats'] = 'ApiQueryMessageGroupStats';
-$wgAPIMetaModules['messagetranslations'] = 'ApiQueryMessageTranslations';
-$wgAPIModules['aggregategroups'] = 'ApiAggregateGroups';
-$wgAPIModules['groupreview'] = 'ApiGroupReview';
-$wgAPIModules['translatesandbox'] = 'ApiTranslateSandbox';
-$wgAPIModules['translationaids'] = 'ApiTranslationAids';
-$wgAPIModules['translationreview'] = 'ApiTranslationReview';
-$wgAPIModules['translationstash'] = 'ApiTranslationStash';
-$wgAPIModules['ttmserver'] = 'ApiTTMServer';
-$wgAPIModules['searchtranslations'] = 'ApiSearchTranslations';
-
-// Register hooks.
-$wgHooks['EditPage::showEditForm:initial'][] = 'TranslateEditAddons::addTools';
-$wgHooks['AlternateEdit'][] = 'TranslateEditAddons::intro';
-$wgHooks['EditPageBeforeEditButtons'][] = 'TranslateEditAddons::buttonHack';
-$wgHooks['LanguageGetTranslatedLanguageNames'][] =
- 'TranslateHooks::translateMessageDocumentationLanguage';
-$wgHooks['TranslateSupportedLanguages'][] =
- 'TranslateHooks::translateMessageDocumentationLanguage';
-$wgHooks['ArticlePrepareTextForEdit'][] = 'TranslateEditAddons::disablePreSaveTransform';
-$wgHooks['ParserFirstCallInit'][] = 'TranslateHooks::setupTranslateParserFunction';
-$wgHooks['UserGetReservedNames'][] = 'TranslateHooks::onUserGetReservedNames';
-
-// Prevent translations creating bogus categories
-$wgHooks['LinksUpdate'][] = 'TranslateHooks::preventCategorization';
-// Fuzzy tags for speed.
-$wgHooks['PageContentSaveComplete'][] = 'TranslateEditAddons::onSave';
-
-$wgHooks['Translate:newTranslation'][] = 'TranslateEditAddons::updateTransverTag';
-
-$wgHooks['SkinTemplateNavigation::SpecialPage'][] = 'SpecialTranslate::tabify';
-$wgHooks['SkinTemplateNavigation::SpecialPage'][] = 'SpecialManageGroups::tabify';
-
-// Custom preferences
-$wgDefaultUserOptions['translate'] = 0;
-$wgDefaultUserOptions['translate-editlangs'] = 'default';
-$wgDefaultUserOptions['translate-recent-groups'] = '';
-$wgHooks['GetPreferences'][] = 'TranslatePreferences::onGetPreferences';
-$wgHooks['GetPreferences'][] = 'TranslatePreferences::translationAssistLanguages';
-
-// Recent changes filters
-$wgHooks['ChangesListSpecialPageQuery'][] = 'TranslateRcFilter::translationFilter';
-$wgHooks['SpecialRecentChangesPanel'][] = 'TranslateRcFilter::translationFilterForm';
-$wgHooks['SkinTemplateToolboxEnd'][] = 'TranslateToolbox::toolboxAllTranslations';
-$wgHooks['AbortEmailNotification'][] = 'TranslateHooks::onAbortEmailNotificationReview';
-
-// Translation memory related
-$wgHooks['ArticleDeleteComplete'][] = 'TTMServer::onDelete';
-$wgHooks['TranslateEventMessageMembershipChange'][] = 'TTMServer::onGroupChange';
-
-// Translation display related
-$wgHooks['ArticleContentOnDiff'][] = 'TranslateEditAddons::displayOnDiff';
-
-// Search profile
-$wgHooks['SpecialSearchProfiles'][] = 'TranslateHooks::searchProfile';
-$wgHooks['SpecialSearchProfileForm'][] = 'TranslateHooks::searchProfileForm';
-$wgHooks['SpecialSearchSetupEngine'][] = 'TranslateHooks::searchProfileSetupEngine';
-
-$wgHooks['LinkBegin'][] = 'TranslateHooks::linkfix';
-
-// Stats table manipulation
-$wgHooks['Translate:MessageGroupStats:isIncluded'][] =
- 'TranslateHooks::hideDiscouragedFromStats';
-$wgHooks['Translate:MessageGroupStats:isIncluded'][] =
- 'TranslateHooks::hideRestrictedFromStats';
-
-$wgHooks['MakeGlobalVariablesScript'][] = 'TranslateHooks::addConfig';
-
-// Internal event listeners
-$wgHooks['TranslateEventTranslationReview'][] = 'MessageGroupStats::clear';
-$wgHooks['TranslateEventTranslationReview'][] = 'MessageGroupStatesUpdaterJob::onChange';
-
-// Internal groups registers
-$wgHooks['TranslatePostInitGroups'][] = 'MessageGroups::getCCGroups';
-$wgHooks['TranslatePostInitGroups'][] = 'MessageGroups::getTranslatablePages';
-$wgHooks['TranslatePostInitGroups'][] = 'MessageGroups::getConfiguredGroups';
-$wgHooks['TranslatePostInitGroups'][] = 'MessageGroups::getWorkflowGroups';
-$wgHooks['TranslatePostInitGroups'][] = 'MessageGroups::getAggregateGroups';
-
-// Other extensions
-$wgHooks['AdminLinks'][] = 'TranslateHooks::onAdminLinks';
-$wgHooks['MergeAccountFromTo'][] = 'TranslateHooks::onMergeAccountFromTo';
-$wgHooks['DeleteAccount'][] = 'TranslateHooks::onDeleteAccount';
-
-// 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';
-
-// 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';
-$wgJobClasses['TranslationsUpdateJob'] = 'TranslationsUpdateJob';
-
-$wgParserTestFiles[] = "$dir/tests/parser/translateParserTests.txt";
-
-require "$dir/Resources.php";
+$wgExtensionMessagesFiles['TranslateAlias'] = __DIR__ . '/Translate.alias.php';
+$wgExtensionMessagesFiles['TranslateMagic'] = __DIR__ . '/Translate.i18n.magic.php';
/** @endcond */
@@ -230,7 +66,7 @@ $wgTranslateNewsletterPreference = false;
* $wgTranslateLanguageFallbacks['fi'] = 'sv';
* $wgTranslateLanguageFallbacks['sv'] = array( 'da', 'no', 'nn' );
*/
-$wgTranslateLanguageFallbacks = array();
+$wgTranslateLanguageFallbacks = [];
/**
* Text that will be shown in translations if the translation is outdated.
@@ -262,51 +98,36 @@ if ( !defined( 'TRANSLATE_FUZZY' ) ) {
* - source text to translate
* - private API key if provided
*/
-$wgTranslateTranslationServices = array();
-$wgTranslateTranslationServices['TTMServer'] = array(
+$wgTranslateTranslationDefaultService = 'TTMServer';
+$wgTranslateTranslationServices = [];
+$wgTranslateTranslationServices['TTMServer'] = [
'database' => false, // Passed to wfGetDB
'cutoff' => 0.75,
'type' => 'ttmserver',
'public' => false,
-);
-$wgTranslateTranslationServices['Microsoft'] = array(
- 'url' => 'http://api.microsofttranslator.com/V2/Http.svc/Translate',
+];
+$wgTranslateTranslationServices['Microsoft'] = [
+ 'url' => 'https://api.cognitive.microsofttranslator.com',
'key' => null,
'timeout' => 3,
'type' => 'microsoft',
-);
-$wgTranslateTranslationServices['Apertium'] = array(
- 'url' => 'http://api.apertium.org/json/translate',
- 'pairs' => 'http://api.apertium.org/json/listPairs',
+];
+$wgTranslateTranslationServices['Apertium'] = [
+ 'url' => 'http://apy.projectjj.com/translate',
+ 'pairs' => 'http://apy.projectjj.com/listPairs',
'key' => null,
'timeout' => 3,
'type' => 'apertium',
-);
-$wgTranslateTranslationServices['Yandex'] = array(
+];
+$wgTranslateTranslationServices['Yandex'] = [
'url' => 'https://translate.yandex.net/api/v1.5/tr.json/translate',
'key' => null,
'pairs' => 'https://translate.yandex.net/api/v1.5/tr.json/getLangs',
'timeout' => 3,
- 'langorder' => array( 'en', 'ru', 'uk', 'de', 'fr', 'pl', 'it', 'es', 'tr' ),
+ 'langorder' => [ 'en', 'ru', 'uk', 'de', 'fr', 'pl', 'it', 'es', 'tr' ],
'langlimit' => 1,
'type' => 'yandex',
-);
-
-/**
- * List of tasks in Special:Translate. If you are only using page translation
- * feature, you might want to disable 'optional' task. Example:
- * unset($wgTranslateTasks['optional']);
- */
-$wgTranslateTasks = array(
- 'view' => 'ViewMessagesTask',
- 'untranslated' => 'ViewUntranslatedTask',
- 'optional' => 'ViewOptionalTask',
- 'acceptqueue' => 'AcceptQueueMessagesTask',
- 'reviewall' => 'ReviewAllMessagesTask',
- 'export-as-po' => 'ExportasPoMessagesTask',
- 'export-to-file' => 'ExportToFileMessagesTask',
- 'custom' => 'CustomFilteredMessagesTask',
-);
+];
/**
* Experimental support for an "Ask" help button.
@@ -328,7 +149,7 @@ $wgTranslateSupportUrl = false;
* assigned to the numerical ID of a namespace of the wiki.
* @since 2015.09
*/
-$wgTranslateSupportUrlNamespace = array();
+$wgTranslateSupportUrlNamespace = [];
/**
* When unprivileged users open a translation editor, they will
@@ -356,12 +177,6 @@ $wgTranslateSecondaryPermissionUrl = 'Project:Translator';
$wgEnablePageTranslation = true;
/**
- * Number for the Translations namespace. Change this if it conflicts with
- * other namespace in your wiki.
- */
-$wgPageTranslationNamespace = 1198;
-
-/**
* If set to true, when a user selects an interface language via ULS (Universal
* Language Selector), if the current page is a translatable page or a translation
* page then the user is also redirected to the corresponding translation page
@@ -374,6 +189,30 @@ $wgPageTranslationNamespace = 1198;
*/
$wgTranslatePageTranslationULS = false;
+/**
+ * If set to true, when a translated page has some units marked as outdated, the
+ * outdated translation will be shown. If set to false, the original updated unit
+ * in the original language will be shown.
+ *
+ * Changing this setting requires the following script to be run to take effect on
+ * existing changes: scripts/refresh-translatable-pages.php
+ * @since 2016.12
+ */
+$wgTranslateKeepOutdatedTranslations = true;
+
+/**
+ * How language list for translatable pages is shown. Allowed values:
+ * tag-only: Only display languages with the \<languages /> tag.
+ * sidebar-only: Display languages as interlanguage links only and ignore the
+ * tag even if present on the page.
+ * sidebar-fallback: Display languages as interlanguage links if no tag is on
+ * the page.
+ * sidebar-always: Display languages as interlanguage links and also in tag if
+ * it is present on the page.
+ * @since 2018.07
+ */
+$wgPageTranslationLanguageList = 'tag-only';
+
# </source>
# === Message group configuration ===
# <source lang=php>
@@ -398,7 +237,7 @@ $wgTranslatePageTranslationULS = false;
* );
*/
-$wgTranslateBlacklist = array();
+$wgTranslateBlacklist = [];
/**
* File containing checks that are to be skipped. See
@@ -421,14 +260,14 @@ $wgTranslateCheckBlacklist = false;
* As an example by default we have rule that ignores all authors whose name
* ends in a bot for all languages and all groups.
*/
-$wgTranslateAuthorBlacklist = array();
-$wgTranslateAuthorBlacklist[] = array( 'black', '/^.*;.*;.*Bot$/Ui' );
+$wgTranslateAuthorBlacklist = [];
+$wgTranslateAuthorBlacklist[] = [ 'black', '/^.*;.*;.*Bot$/Ui' ];
/**
* List of namespace that contain messages. No talk namespaces.
* @see https://www.mediawiki.org/wiki/Help:Extension:Translate/Group_configuration
*/
-$wgTranslateMessageNamespaces = array();
+$wgTranslateMessageNamespaces = [];
/**
* CC = Custom classes.
@@ -437,7 +276,7 @@ $wgTranslateMessageNamespaces = array();
* or callable function.
* @deprecated Use TranslatePostInitGroups hook instead.
*/
-$wgTranslateCC = array();
+$wgTranslateCC = [];
/**
* Location in the filesystem to which paths are relative in custom groups.
@@ -450,7 +289,7 @@ $wgTranslateGroupRoot = '/var/www/externals';
* Usage example:
* $wgTranslateGroupFiles[] = "$IP/extensions/Translate/groups/Shapado/Shapado.yml";
*/
-$wgTranslateGroupFiles = array();
+$wgTranslateGroupFiles = [];
/**
* List of possible message group review workflow states and properties
@@ -481,7 +320,7 @@ $wgTranslateWorkflowStates = false;
* Map from deprecated group IDs to their current ID
* Example value: array( 'core' => 'mediawiki-core' )
*/
-$wgTranslateGroupAliases = array();
+$wgTranslateGroupAliases = [];
# </source>
# === System setup related configuration ===
@@ -495,7 +334,7 @@ $wgTranslateCacheDirectory = false;
* Configures how the message index is stored.
* The other backends need $wgCacheDirectory to be functional.
*/
-$wgTranslateMessageIndex = array( 'DatabaseMessageIndex' );
+$wgTranslateMessageIndex = [ 'DatabaseMessageIndex' ];
// $wgTranslateMessageIndex = array( 'SerializedMessageIndex' );
// $wgTranslateMessageIndex = array( 'CDBMessageIndex' );
@@ -533,7 +372,7 @@ $wgTranslatePHPlotFont = '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf';
/**
* Currently supported YAML drivers are phpyaml, spyc and syck.
*
- * For phpyaml see http://php.net/manual/en/book.yaml.php.
+ * For phpyaml see https://secure.php.net/manual/en/book.yaml.php.
*
* For syck we're shelling out to perl. So you need:
*
@@ -553,8 +392,10 @@ $wgTranslatePHPlotFont = '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf';
* phpyaml is the fastest and based on libyaml so the output should be most
* compatible. spyc output format is least compatible. syck is slowest but
* almost as good as phpyaml.
+ *
+ * spyc needs to be installed using composer. See https://www.mediawiki.org/wiki/Composer
*/
-$wgTranslateYamlLibrary = 'spyc';
+$wgTranslateYamlLibrary = function_exists( 'yaml_parse' ) ? 'phpyaml' : 'spyc';
# </source>
# ==== Sandbox ====
@@ -562,7 +403,10 @@ $wgTranslateYamlLibrary = 'spyc';
/**
* Whether to allow users to sign up via a sandbox. Sandboxed users cannot do
- * much until approved and thus they can be get rid of easily.
+ * much until approved and thus they can be get rid of easily. This only works
+ * with MediaWiki 1.27 and newer, and only if registration is configured to not
+ * use account creation providers which give REDIRECT or UI responses or
+ * require any other field than the default username/password/email.
* @since 2013.04
*/
$wgTranslateUseSandbox = false;
@@ -578,7 +422,7 @@ $wgTranslateSandboxPromotedGroup = false;
* List of page names to always suggest for sandboxed users.
* @since 2013.10
*/
-$wgTranslateSandboxSuggestions = array();
+$wgTranslateSandboxSuggestions = [];
/**
* Maximum number of translations a user can make in the sandbox.
@@ -616,7 +460,7 @@ $wgTranslateTestTTMServer = null;
* things. Used for supporting integration testing.
* @since 2013.10
*/
-$wgTranslateTestUsers = array();
+$wgTranslateTestUsers = [];
# </source>
@@ -625,14 +469,18 @@ $wgTranslateTestUsers = array();
*
* It defines constants for the namespace (and talk namespace) and sets up
* restrictions and some other configuration.
- * @param $id \int Namespace number
- * @param $name \string Name of the namespace
+ * @param int $id Namespace number
+ * @param string $name Name of the namespace
+ * @param string|null $constant (optional) name of namespace constant, defaults to
+ * NS_ followed by upper case version of $name, e.g., NS_MEDIAWIKI
*/
-function wfAddNamespace( $id, $name ) {
+function wfAddNamespace( $id, $name, $constant = null ) {
global $wgExtraNamespaces, $wgContentNamespaces, $wgTranslateMessageNamespaces,
$wgNamespaceProtection, $wgNamespacesWithSubpages, $wgNamespacesToBeSearchedDefault;
- $constant = strtoupper( "NS_$name" );
+ if ( is_null( $constant ) ) {
+ $constant = strtoupper( "NS_$name" );
+ }
define( $constant, $id );
define( $constant . '_TALK', $id + 1 );
@@ -646,7 +494,7 @@ function wfAddNamespace( $id, $name ) {
$wgNamespacesWithSubpages[$id] = true;
$wgNamespacesWithSubpages[$id + 1] = true;
- $wgNamespaceProtection[$id] = array( 'translate' );
+ $wgNamespaceProtection[$id] = [ 'translate' ];
$wgNamespacesToBeSearchedDefault[$id] = true;
}
diff --git a/www/wiki/extensions/Translate/TranslateEditAddons.php b/www/wiki/extensions/Translate/TranslateEditAddons.php
index cbbe9f75..6a896546 100644
--- a/www/wiki/extensions/Translate/TranslateEditAddons.php
+++ b/www/wiki/extensions/Translate/TranslateEditAddons.php
@@ -6,7 +6,7 @@
* @file
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,32 +16,66 @@
*/
class TranslateEditAddons {
/**
- * Keep the usual diiba daaba hidden from translators.
+ * Do not show the usual introductory messages on edit page for messages.
* Hook: AlternateEdit
+ * @param EditPage $editPage
*/
- public static function intro( EditPage $editpage ) {
- $handle = new MessageHandle( $editpage->getTitle() );
+ public static function suppressIntro( EditPage $editPage ) {
+ $handle = new MessageHandle( $editPage->getTitle() );
if ( $handle->isValid() ) {
- $editpage->suppressIntro = true;
- $group = $handle->getGroup();
- $languages = $group->getTranslatableLanguages();
- if ( $languages !== null && $handle->getCode() && !isset( $languages[$handle->getCode()] ) ) {
- $editpage->getArticle()->getContext()->getOutput()->wrapWikiMsg(
- "<div class='error'>$1</div>", 'translate-language-disabled'
- );
+ $editPage->suppressIntro = true;
+ }
+ }
- return false;
- }
+ /**
+ * Prevent translations to non-translatable languages for the group
+ * Hook: getUserPermissionsErrorsExpensive
+ *
+ * @param Title $title
+ * @param User $user
+ * @param string $action
+ * @param mixed &$result
+ * @return bool
+ */
+ public static function disallowLangTranslations( Title $title, User $user,
+ $action, &$result
+ ) {
+ global $wgTranslateBlacklist;
+ if ( $action !== 'edit' ) {
return true;
}
- $msg = wfMessage( 'translate-edit-tag-warning' )->inContentLanguage();
- if ( !$msg->isDisabled() &&
- TranslatablePage::isSourcePage( $editpage->getTitle() )
- ) {
- $editpage->editFormTextTop .= $editpage->getArticle()->getContext()
- ->getOutput()->parse( $msg->plain() );
+ $handle = new MessageHandle( $title );
+ if ( !$handle->isValid() ) {
+ return true;
+ }
+
+ if ( $user->isAllowed( 'translate-manage' ) ) {
+ return true;
+ }
+
+ $group = $handle->getGroup();
+ $languages = $group->getTranslatableLanguages();
+ $langCode = $handle->getCode();
+ if ( $languages !== null && $langCode && !isset( $languages[$langCode] ) ) {
+ $result = [ 'translate-language-disabled' ];
+ return false;
+ }
+
+ $groupId = $group->getId();
+ $checks = [
+ $groupId,
+ strtok( $groupId, '-' ),
+ '*'
+ ];
+
+ foreach ( $checks as $check ) {
+ if ( isset( $wgTranslateBlacklist[$check][$langCode] ) ) {
+ $reason = $wgTranslateBlacklist[$check][$langCode];
+ $result = [ 'translate-page-disabled', $reason ];
+ return false;
+ }
}
return true;
@@ -50,6 +84,8 @@ class TranslateEditAddons {
/**
* Adds the translation aids and navigation to the normal edit page.
* Hook: EditPage::showEditForm:initial
+ * @param EditPage $object
+ * @return true
*/
public static function addTools( EditPage $object ) {
$handle = new MessageHandle( $object->getTitle() );
@@ -66,11 +102,15 @@ class TranslateEditAddons {
* Replace the normal save button with one that says if you are editing
* message documentation to try to avoid accidents.
* Hook: EditPageBeforeEditButtons
+ *
+ * @param EditPage $editpage
+ * @param array &$buttons
+ * @param int $tabindex
*/
public static function buttonHack( EditPage $editpage, &$buttons, $tabindex ) {
$handle = new MessageHandle( $editpage->getTitle() );
if ( !$handle->isValid() ) {
- return true;
+ return;
}
$context = $editpage->getArticle()->getContext();
@@ -78,38 +118,43 @@ class TranslateEditAddons {
if ( $handle->isDoc() ) {
$langCode = $context->getLanguage()->getCode();
$name = TranslateUtils::getLanguageName( $handle->getCode(), $langCode );
- $accessKey = $context->msg( 'accesskey-save' )->plain();
- $temp = array(
+ $attribs = [
'id' => 'wpSave',
'name' => 'wpSave',
- 'type' => 'submit',
'tabindex' => ++$tabindex,
- 'value' => $context->msg( 'translate-save', $name )->text(),
- 'accesskey' => $accessKey,
- 'title' => $context->msg( 'tooltip-save' )->text() . ' [' . $accessKey . ']',
- );
- $buttons['save'] = Xml::element( 'input', $temp, '' );
+ ] + Linker::tooltipAndAccesskeyAttribs( 'save' );
+
+ $saveConfig = OOUI\Element::configFromHtmlAttributes( $attribs );
+ $buttons['save'] = new OOUI\ButtonInputWidget( [
+ // Support: IE 6 – Use <input>, otherwise it can't distinguish which button was clicked
+ 'useInputTag' => true,
+ 'flags' => [ 'progressive', 'primary' ],
+ 'label' => $context->msg( 'translate-save', $name )->text(),
+ 'type' => 'submit',
+ ] + $saveConfig );
}
try {
$supportUrl = SupportAid::getSupportUrl( $handle->getTitle() );
} catch ( TranslationHelperException $e ) {
- return true;
+ return;
}
- $temp = array(
+ $attribs = [
'id' => 'wpSupport',
'name' => 'wpSupport',
'type' => 'button',
'tabindex' => ++$tabindex,
- 'value' => $context->msg( 'translate-js-support' )->text(),
'title' => $context->msg( 'translate-js-support-title' )->text(),
- 'data-load-url' => $supportUrl,
- 'onclick' => "window.open( jQuery(this).attr('data-load-url') );",
- );
- $buttons['ask'] = Html::element( 'input', $temp, '' );
-
- return true;
+ ];
+
+ $attribs += [
+ 'label' => $context->msg( 'translate-js-support' )->text(),
+ 'href' => $supportUrl,
+ 'target' => '_blank',
+ ];
+ $saveConfig = OOUI\Element::configFromHtmlAttributes( $attribs );
+ $buttons['ask'] = new OOUI\ButtonWidget( $saveConfig );
}
/**
@@ -140,9 +185,19 @@ class TranslateEditAddons {
/**
* Runs message checks, adds tp:transver tags and updates statistics.
* Hook: PageContentSaveComplete
+ * @param WikiPage $wikiPage
+ * @param User $user
+ * @param Content $content
+ * @param string $summary
+ * @param bool $minor
+ * @param string $_1
+ * @param bool $_2
+ * @param int $flags
+ * @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;
@@ -170,19 +225,22 @@ class TranslateEditAddons {
self::updateFuzzyTag( $title, $rev, $fuzzy );
$group = $handle->getGroup();
- // Update translation stats - source language should always be update
+ // Update translation stats - source language should always be up to date
if ( $handle->getCode() !== $group->getSourceLanguage() ) {
+ // 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 );
- MessageGroupStats::forItem( $group->getId(), $handle->getCode() );
}
MessageGroupStatesUpdaterJob::onChange( $handle );
if ( $fuzzy === false ) {
- Hooks::run( 'Translate:newTranslation', array( $handle, $rev, $text, $user ) );
+ Hooks::run( 'Translate:newTranslation', [ $handle, $rev, $text, $user ] );
}
- TTMServer::onChange( $handle, $text, $fuzzy );
+ TTMServer::onChange( $handle );
if ( $wgEnablePageTranslation && $handle->isPageTranslation() ) {
// Updates for translatable pages only
@@ -238,16 +296,16 @@ class TranslateEditAddons {
protected static function updateFuzzyTag( Title $title, $revision, $fuzzy ) {
$dbw = wfGetDB( DB_MASTER );
- $conds = array(
+ $conds = [
'rt_page' => $title->getArticleID(),
'rt_type' => RevTag::getType( 'fuzzy' ),
'rt_revision' => $revision
- );
+ ];
// Replace the existing fuzzy tag, if any
if ( $fuzzy !== false ) {
$index = array_keys( $conds );
- $dbw->replace( 'revtag', array( $index ), $conds, __METHOD__ );
+ $dbw->replace( 'revtag', [ $index ], $conds, __METHOD__ );
} else {
$dbw->delete( 'revtag', $conds, __METHOD__ );
}
@@ -286,14 +344,14 @@ class TranslateEditAddons {
$dbw = wfGetDB( DB_MASTER );
- $conds = array(
+ $conds = [
'rt_page' => $title->getArticleID(),
'rt_type' => RevTag::getType( 'tp:transver' ),
'rt_revision' => $revision,
'rt_value' => $definitionRevision,
- );
- $index = array( 'rt_type', 'rt_page', 'rt_revision' );
- $dbw->replace( 'revtag', array( $index ), $conds, __METHOD__ );
+ ];
+ $index = [ 'rt_type', 'rt_page', 'rt_revision' ];
+ $dbw->replace( 'revtag', [ $index ], $conds, __METHOD__ );
return true;
}
@@ -304,7 +362,7 @@ class TranslateEditAddons {
* @param ParserOptions $popts
* @return bool
*/
- public static function disablePreSaveTransform( $wikiPage, ParserOptions $popts ) {
+ public static function disablePreSaveTransform( WikiPage $wikiPage, ParserOptions $popts ) {
global $wgTranslateUsePreSaveTransform;
if ( !$wgTranslateUsePreSaveTransform ) {
@@ -319,6 +377,9 @@ class TranslateEditAddons {
/**
* Hook: ArticleContentOnDiff
+ * @param DifferenceEngine $de
+ * @param OutputPage $out
+ * @return true
*/
public static function displayOnDiff( DifferenceEngine $de, OutputPage $out ) {
$title = $de->getTitle();
@@ -332,23 +393,29 @@ class TranslateEditAddons {
$th->setEditMode( false );
$de->loadNewText();
- if ( $de->mNewContent instanceof TextContent ) {
- $th->setTranslation( $de->mNewContent->getNativeData() );
+ if ( method_exists( $de, 'getNewRevision' ) ) {
+ $newRevision = $de->getNewRevision();
+ $newContent = $newRevision ? $newRevision->getContent( 'main' ) : null;
+ } else {
+ $newContent = $de->mNewRev ? $de->mNewRev->getContent() : null;
+ }
+ if ( $newContent instanceof TextContent ) {
+ $th->setTranslation( $newContent->getNativeData() );
} else {
// Screw you, not interested.
return true;
}
TranslationHelpers::addModules( $out );
- $boxes = array();
- $boxes[] = $th->callBox( 'documentation', array( $th, 'getDocumentationBox' ) );
- $boxes[] = $th->callBox( 'definition', array( $th, 'getDefinitionBox' ) );
- $boxes[] = $th->callBox( 'translation', array( $th, 'getTranslationDisplayBox' ) );
+ $boxes = [];
+ $boxes[] = $th->callBox( 'documentation', [ $th, 'getDocumentationBox' ] );
+ $boxes[] = $th->callBox( 'definition', [ $th, 'getDefinitionBox' ] );
+ $boxes[] = $th->callBox( 'translation', [ $th, 'getTranslationDisplayBox' ] );
$output = implode( "\n", $boxes );
$output = Html::rawElement(
'div',
- array( 'class' => 'mw-sp-translate-edit-fields' ),
+ [ 'class' => 'mw-sp-translate-edit-fields' ],
$output
);
$out->addHTML( $output );
diff --git a/www/wiki/extensions/Translate/TranslateHooks.php b/www/wiki/extensions/Translate/TranslateHooks.php
index 3a973c82..dae7fa85 100644
--- a/www/wiki/extensions/Translate/TranslateHooks.php
+++ b/www/wiki/extensions/Translate/TranslateHooks.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -12,38 +12,34 @@
*/
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
*/
public static function onResourceLoaderTestModules( array &$modules ) {
- $modules['qunit']['ext.translate.parsers.test'] = array(
- 'scripts' => array( 'tests/qunit/ext.translate.parsers.test.js' ),
- 'dependencies' => array( 'ext.translate.parsers' ),
+ $modules['qunit']['ext.translate.parsers.test'] = [
+ 'scripts' => [ 'tests/qunit/ext.translate.parsers.test.js' ],
+ 'dependencies' => [ 'ext.translate.parsers' ],
'localBasePath' => __DIR__,
'remoteExtPath' => 'Translate',
- );
+ ];
- $modules['qunit']['ext.translate.special.pagemigration.test'] = array(
- 'scripts' => array( 'tests/qunit/ext.translate.special.pagemigration.test.js' ),
- 'dependencies' => array( 'ext.translate.special.pagemigration' ),
+ $modules['qunit']['ext.translate.special.pagemigration.test'] = [
+ 'scripts' => [ 'tests/qunit/ext.translate.special.pagemigration.test.js' ],
+ 'dependencies' => [ 'ext.translate.special.pagemigration' ],
'localBasePath' => __DIR__,
'remoteExtPath' => 'Translate',
- );
- }
-
- /**
- * Hook: CanonicalNamespaces
- *
- * @param array $list
- */
- public static function setupNamespaces( array &$list ) {
- global $wgPageTranslationNamespace, $wgNamespaceRobotPolicies;
- if ( !defined( 'NS_TRANSLATIONS' ) ) {
- define( 'NS_TRANSLATIONS', $wgPageTranslationNamespace );
- define( 'NS_TRANSLATIONS_TALK', $wgPageTranslationNamespace + 1 );
- }
- $list[NS_TRANSLATIONS] = 'Translations';
- $list[NS_TRANSLATIONS_TALK] = 'Translations_talk';
- $wgNamespaceRobotPolicies[NS_TRANSLATIONS] = 'noindex';
+ ];
}
/**
@@ -52,6 +48,16 @@ class TranslateHooks {
* because it depends on user configuration.
*/
public static function setupTranslate() {
+ global $wgPageTranslationNamespace;
+ if ( isset( $wgPageTranslationNamespace ) &&
+ $wgPageTranslationNamespace !== NS_TRANSLATIONS ) {
+ throw new MWException(
+ '$wgPageTranslationNamespace is no longer supported. Instead, define ' .
+ 'NS_TRANSLATIONS and NS_TRANSLATIONS_TALK in LocalSettings.php before loading ' .
+ 'Translate.'
+ );
+ }
+
global $wgTranslatePHPlot, $wgAutoloadClasses, $wgHooks;
if ( $wgTranslatePHPlot ) {
@@ -72,7 +78,7 @@ class TranslateHooks {
$wgSpecialPages['PageMigration'] = 'SpecialPageMigration';
$wgSpecialPages['PagePreparation'] = 'SpecialPagePreparation';
- global $wgLogActionsHandlers, $wgLogTypes;
+ global $wgActionFilteredLogs, $wgLogActionsHandlers, $wgLogTypes;
// log-description-pagetranslation log-name-pagetranslation logentry-pagetranslation-mark
// logentry-pagetranslation-unmark logentry-pagetranslation-moveok
@@ -96,31 +102,36 @@ class TranslateHooks {
'PageTranslationLogFormatter';
$wgLogActionsHandlers['pagetranslation/associate'] = 'PageTranslationLogFormatter';
$wgLogActionsHandlers['pagetranslation/dissociate'] = 'PageTranslationLogFormatter';
+ $wgActionFilteredLogs['pagetranslation'] = [
+ 'mark' => [ 'mark' ],
+ 'unmark' => [ 'unmark' ],
+ 'move' => [ 'moveok', 'movenok' ],
+ 'delete' => [ 'deletefok', 'deletefnok', 'deletelok', 'deletelnok' ],
+ 'encourage' => [ 'encourage' ],
+ 'discourage' => [ 'discourage' ],
+ 'prioritylanguages' => [ 'prioritylanguages' ],
+ 'aggregategroups' => [ 'associate', 'dissociate' ],
+ ];
global $wgJobClasses;
$wgJobClasses['TranslateRenderJob'] = 'TranslateRenderJob';
$wgJobClasses['RenderJob'] = 'TranslateRenderJob';
+ $wgJobClasses['TranslatablePageMoveJob'] = 'TranslatablePageMoveJob';
$wgJobClasses['TranslateMoveJob'] = 'TranslateMoveJob';
$wgJobClasses['MoveJob'] = 'TranslateMoveJob';
$wgJobClasses['TranslateDeleteJob'] = 'TranslateDeleteJob';
$wgJobClasses['DeleteJob'] = 'TranslateDeleteJob';
+ $wgJobClasses['TranslationsUpdateJob'] = 'TranslationsUpdateJob';
// Namespaces
- global $wgPageTranslationNamespace;
global $wgNamespacesWithSubpages, $wgNamespaceProtection;
global $wgTranslateMessageNamespaces;
- // Define constants for more readable core
- if ( !defined( 'NS_TRANSLATIONS' ) ) {
- define( 'NS_TRANSLATIONS', $wgPageTranslationNamespace );
- define( 'NS_TRANSLATIONS_TALK', $wgPageTranslationNamespace + 1 );
- }
-
$wgNamespacesWithSubpages[NS_TRANSLATIONS] = true;
$wgNamespacesWithSubpages[NS_TRANSLATIONS_TALK] = true;
// Standard protection and register it for filtering
- $wgNamespaceProtection[NS_TRANSLATIONS] = array( 'translate' );
+ $wgNamespaceProtection[NS_TRANSLATIONS] = [ 'translate' ];
$wgTranslateMessageNamespaces[] = NS_TRANSLATIONS;
/// Page translation hooks
@@ -138,21 +149,22 @@ class TranslateHooks {
$wgHooks['RevisionInsertComplete'][] =
'PageTranslationHooks::updateTranstagOnNullRevisions';
- // Register \<languages/>
+ // Register different ways to show language links
$wgHooks['ParserFirstCallInit'][] = 'TranslateHooks::setupParserHooks';
+ $wgHooks['LanguageLinks'][] = 'PageTranslationHooks::addLanguageLinks';
+ $wgHooks['SkinTemplateGetLanguageLink'][] = 'PageTranslationHooks::formatLanguageLink';
// Strip \<translate> tags etc. from source pages when rendering
$wgHooks['ParserBeforeStrip'][] = 'PageTranslationHooks::renderTagPage';
+ $wgHooks['ParserOutputPostCacheTransform'][] =
+ 'PageTranslationHooks::onParserOutputPostCacheTransform';
// Set the page content language
$wgHooks['PageContentLanguage'][] = 'PageTranslationHooks::onPageContentLanguage';
- // Prevent editing of unknown pages in Translations namespace
- $wgHooks['getUserPermissionsErrorsExpensive'][] =
- 'PageTranslationHooks::preventUnknownTranslations';
- // Prevent editing of translation in restricted languages
+ // Prevent editing of certain pages in translations namespace
$wgHooks['getUserPermissionsErrorsExpensive'][] =
- 'PageTranslationHooks::preventRestrictedTranslations';
+ 'PageTranslationHooks::onGetUserPermissionsErrorsExpensive';
// Prevent editing of translation pages directly
$wgHooks['getUserPermissionsErrorsExpensive'][] =
'PageTranslationHooks::preventDirectEditing';
@@ -163,6 +175,9 @@ class TranslateHooks {
// Our custom header for translation pages
$wgHooks['ArticleViewHeader'][] = 'PageTranslationHooks::translatablePageHeader';
+ // Edit notice shown on translatable pages
+ $wgHooks['TitleGetEditNotices'][] = 'PageTranslationHooks::onTitleGetEditNotices';
+
// Custom move page that can move all the associated pages too
$wgHooks['SpecialPage_initList'][] = 'PageTranslationHooks::replaceMovePage';
// Locking during page moves
@@ -174,14 +189,14 @@ class TranslateHooks {
// Replace subpage logic behavior
$wgHooks['SkinSubPageSubtitle'][] = 'PageTranslationHooks::replaceSubtitle';
- // Show page source code when export tab is opened
- $wgHooks['SpecialTranslate::executeTask'][] = 'PageTranslationHooks::sourceExport';
-
// Replaced edit tab with translation tab for translation pages
$wgHooks['SkinTemplateNavigation'][] = 'PageTranslationHooks::translateTab';
// Update translated page when translation unit is moved
$wgHooks['TitleMoveComplete'][] = 'PageTranslationHooks::onMoveTranslationUnits';
+
+ // Update translated page when translation unit is deleted
+ $wgHooks['ArticleDeleteComplete'][] = 'PageTranslationHooks::onDeleteTranslationUnit';
}
global $wgTranslateUseSandbox;
@@ -197,6 +212,7 @@ class TranslateHooks {
$wgHooks['GetPreferences'][] = 'TranslateSandbox::onGetPreferences';
$wgHooks['UserGetRights'][] = 'TranslateSandbox::enforcePermissions';
$wgHooks['ApiCheckCanExecute'][] = 'TranslateSandbox::onApiCheckCanExecute';
+ $wgHooks['UserGetRights'][] = 'TranslateSandbox::allowAccountCreation';
global $wgLogTypes, $wgLogActionsHandlers;
// log-name-translatorsandbox log-description-translatorsandbox
@@ -204,19 +220,35 @@ class TranslateHooks {
// logentry-translatorsandbox-promoted logentry-translatorsandbox-rejected
$wgLogActionsHandlers['translatorsandbox/promoted'] = 'TranslateLogFormatter';
$wgLogActionsHandlers['translatorsandbox/rejected'] = 'TranslateLogFormatter';
+
+ // This is no longer used for new entries since 2016.07.
// logentry-newusers-tsbpromoted
$wgLogActionsHandlers['newusers/tsbpromoted'] = 'LogFormatter';
global $wgJobClasses;
$wgJobClasses['TranslateSandboxEmailJob'] = 'TranslateSandboxEmailJob';
+
+ global $wgAPIModules;
+ $wgAPIModules['translationstash'] = 'ApiTranslationStash';
+ $wgAPIModules['translatesandbox'] = 'ApiTranslateSandbox';
+ }
+
+ // Back compatibility for MediaWiki <= 1.31
+ global $wgVersion, $wgResourceModules;
+ if ( version_compare( $wgVersion, '1.32', '<' ) ) {
+ $wgResourceModules['ext.translate.editor']['dependencies'][] = 'mediawiki.api.parse';
+ $wgResourceModules['ext.translate.special.translate']['dependencies'][] = 'mediawiki.api.parse';
}
+
+ global $wgNamespaceRobotPolicies;
+ $wgNamespaceRobotPolicies[NS_TRANSLATIONS] = 'noindex';
}
/**
* Hook: UserGetReservedNames
* Prevents anyone from registering or logging in as FuzzyBot
*
- * @param array $names
+ * @param array &$names
*/
public static function onUserGetReservedNames( array &$names ) {
global $wgTranslateFuzzyBotName;
@@ -224,6 +256,65 @@ class TranslateHooks {
}
/**
+ * Used for setting an AbuseFilter variable.
+ *
+ * @param AbuseFilterVariableHolder &$vars
+ * @param Title|null $title
+ */
+ public static function onAbuseFilterFilterAction( &$vars, $title ) {
+ if ( !$title instanceof Title ) {
+ wfDebugLog( 'T143073', 'Got non-Title in ' . wfGetAllCallers( 5 ) );
+ return;
+ }
+
+ $handle = new MessageHandle( $title );
+
+ // Only set this variable if we are in a proper namespace to avoid
+ // unnecessary overhead in non-translation pages
+ if ( $handle->isMessageNamespace() ) {
+ $vars->setLazyLoadVar(
+ 'translate_source_text',
+ 'translate-get-source',
+ [ 'handle' => $handle ]
+ );
+ }
+ }
+
+ /**
+ * Computes the translate_source_text AbuseFilter variable
+ * @param string $method
+ * @param AbuseFilterVariableHolder $vars
+ * @param array $parameters
+ * @param null &$result
+ * @return bool
+ */
+ public static function onAbuseFilterComputeVariable( $method, $vars, $parameters, &$result ) {
+ if ( $method !== 'translate-get-source' ) {
+ return true;
+ }
+
+ $handle = $parameters['handle'];
+ $source = '';
+ if ( $handle->isValid() ) {
+ $group = $handle->getGroup();
+ $source = $group->getMessage( $handle->getKey(), $group->getSourceLanguage() );
+ }
+
+ $result = $source;
+
+ return false;
+ }
+
+ /**
+ * Register AbuseFilter variables provided by Translate.
+ * @param array &$builderValues
+ */
+ public static function onAbuseFilterBuilder( array &$builderValues ) {
+ // Uses: 'abusefilter-edit-builder-vars-translate-source-text'
+ $builderValues['vars']['translate_source_text'] = 'translate-source-text';
+ }
+
+ /**
* Hook: ParserFirstCallInit
* Registers \<languages> tag with the parser.
*
@@ -231,13 +322,13 @@ class TranslateHooks {
*/
public static function setupParserHooks( Parser $parser ) {
// For nice language list in-page
- $parser->setHook( 'languages', array( 'PageTranslationHooks', 'languages' ) );
+ $parser->setHook( 'languages', [ 'PageTranslationHooks', 'languages' ] );
}
/**
* Hook: UnitTestsList
*
- * @param array $files
+ * @param array &$files
*/
public static function setupUnitTests( array &$files ) {
$dir = __DIR__ . '/tests/phpunit';
@@ -260,97 +351,109 @@ class TranslateHooks {
public static function schemaUpdates( DatabaseUpdater $updater ) {
$dir = __DIR__ . '/sql';
- $updater->addExtensionUpdate( array(
+ $updater->addExtensionUpdate( [
'addTable',
'translate_sections',
"$dir/translate_sections.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'addField',
'translate_sections',
'trs_order',
"$dir/translate_sections-trs_order.patch.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'addTable',
'revtag', "$dir/revtag.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'addTable',
'translate_groupstats',
"$dir/translate_groupstats.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'addIndex',
'translate_sections',
'trs_page_order',
"$dir/translate_sections-indexchange.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'dropIndex',
'translate_sections',
'trs_page',
"$dir/translate_sections-indexchange2.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'addTable',
'translate_reviews',
"$dir/translate_reviews.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'addTable',
'translate_groupreviews',
"$dir/translate_groupreviews.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'addTable',
'translate_tms',
"$dir/translate_tm.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'addTable',
'translate_metadata',
"$dir/translate_metadata.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'addTable', 'translate_messageindex',
"$dir/translate_messageindex.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'addIndex',
'translate_groupstats',
'tgs_lang',
"$dir/translate_groupstats-indexchange.sql",
true
- ) );
- $updater->addExtensionUpdate( array(
+ ] );
+ $updater->addExtensionUpdate( [
'addField', 'translate_groupstats',
'tgs_proofread',
"$dir/translate_groupstats-proofread.sql",
true
- ) );
+ ] );
- $updater->addExtensionUpdate( array(
+ $updater->addExtensionUpdate( [
'addTable',
'translate_stash',
"$dir/translate_stash.sql",
true
- ) );
+ ] );
+
+ // This also adds a PRIMARY KEY
+ $updater->addExtensionUpdate( [
+ 'renameIndex',
+ 'translate_reviews',
+ 'trr_user_page_revision',
+ 'PRIMARY',
+ false,
+ "$dir/translate_reviews-patch-01-primary-key.sql",
+ true
+ ] );
}
/**
* Hook: ParserTestTables
+ * @param array &$tables
*/
public static function parserTestTables( array &$tables ) {
$tables[] = 'revtag';
@@ -364,7 +467,7 @@ class TranslateHooks {
* Set the correct page content language for translation units.
*
* @param Title $title
- * @param string $pageLang
+ * @param Language|StubUserLang|string &$pageLang
*/
public static function onPageContentLanguage( Title $title, &$pageLang ) {
$handle = new MessageHandle( $title );
@@ -376,6 +479,8 @@ class TranslateHooks {
/**
* Hook: LanguageGetTranslatedLanguageNames
* Hook: TranslateSupportedLanguages
+ * @param array &$names
+ * @param string $code
*/
public static function translateMessageDocumentationLanguage( array &$names, $code ) {
global $wgTranslateDocumentationLanguageCode;
@@ -395,15 +500,16 @@ class TranslateHooks {
/**
* Hook: SpecialSearchProfiles
+ * @param array &$profiles
*/
public static function searchProfile( array &$profiles ) {
global $wgTranslateMessageNamespaces;
- $insert = array();
- $insert['translation'] = array(
+ $insert = [];
+ $insert['translation'] = [
'message' => 'translate-searchprofile',
'tooltip' => 'translate-searchprofile-tooltip',
'namespaces' => $wgTranslateMessageNamespaces,
- );
+ ];
// Insert translations before 'all'
$index = array_search( 'all', array_keys( $profiles ) );
@@ -423,18 +529,36 @@ class TranslateHooks {
/**
* Hook: SpecialSearchProfileForm
+ * @param SpecialSearch $search
+ * @param string &$form
+ * @param string $profile
+ * @param string $term
+ * @param array $opts
+ * @return bool
*/
public static function searchProfileForm(
SpecialSearch $search,
- /*string*/&$form,
- /*string*/$profile,
- /*string*/$term,
+ &$form,
+ $profile,
+ $term,
array $opts
) {
if ( $profile !== 'translation' ) {
return true;
}
+ $server = TTMServer::primary();
+ if ( TTMServer::primary() instanceof SearchableTTMServer ) {
+ $href = SpecialPage::getTitleFor( 'SearchTranslations' )
+ ->getFullUrl( [ 'query' => $term ] );
+ $wrapper = new RawMessage( '<div class="successbox plainlinks">$1</div>' );
+ $form = $wrapper
+ ->params( $search->msg( 'translate-searchprofile-note', $href )->plain() )
+ ->parse();
+
+ return false;
+ }
+
if ( !$search->getSearchEngine()->supports( 'title-suffix-filter' ) ) {
return false;
}
@@ -448,15 +572,7 @@ class TranslateHooks {
$code = $context->getLanguage()->getCode();
$selected = $context->getRequest()->getVal( 'languagefilter' );
- if ( is_callable( array( 'LanguageNames', 'getNames' ) ) ) {
- $languages = LanguageNames::getNames( $code,
- LanguageNames::FALLBACK_NORMAL,
- LanguageNames::LIST_MW
- );
- } else {
- $languages = Language::fetchLanguageNames();
- }
-
+ $languages = TranslateUtils::getLanguageNames( $code );
ksort( $languages );
$selector = new XmlSelect( 'languagefilter', 'languagefilter' );
@@ -472,7 +588,7 @@ class TranslateHooks {
wfMessage( 'translate-search-languagefilter' )->text(),
'languagefilter'
) . '&#160;';
- $params = array( 'id' => 'mw-searchoptions' );
+ $params = [ 'id' => 'mw-searchoptions' ];
$form = Xml::fieldset( false, false, $params ) .
$hidden . $label . $selector .
@@ -483,10 +599,13 @@ class TranslateHooks {
/**
* Hook: SpecialSearchSetupEngine
+ * @param SpecialSearch $search
+ * @param string $profile
+ * @param SearchEngine $engine
*/
public static function searchProfileSetupEngine(
SpecialSearch $search,
- /*string*/$profile,
+ $profile,
SearchEngine $engine
) {
if ( $profile !== 'translation' ) {
@@ -503,6 +622,9 @@ class TranslateHooks {
/**
* Hook: Translate:MessageGroupStats:isIncluded
+ * @param int $id
+ * @param string $code
+ * @return bool
*/
public static function hideDiscouragedFromStats( $id, $code ) {
// Return true to keep, false to exclude
@@ -511,6 +633,9 @@ class TranslateHooks {
/**
* Hook: Translate:MessageGroupStats:isIncluded
+ * @param int $id
+ * @param string $code
+ * @return false
*/
public static function hideRestrictedFromStats( $id, $code ) {
$filterLangs = TranslateMetadata::get( $id, 'prioritylangs' );
@@ -527,11 +652,12 @@ class TranslateHooks {
/**
* Hook: LinksUpdate
+ * @param LinksUpdate $updater
*/
public static function preventCategorization( LinksUpdate $updater ) {
$handle = new MessageHandle( $updater->getTitle() );
if ( $handle->isMessageNamespace() && !$handle->isDoc() ) {
- $updater->mCategories = array();
+ $updater->mCategories = [];
}
}
@@ -540,14 +666,15 @@ class TranslateHooks {
*
* Adds $wgTranslateDocumentationLanguageCode to ResourceLoader configuration
* when Special:Translate is shown.
+ * @param array &$vars
+ * @param OutputPage $out
*/
public static function addConfig( array &$vars, OutputPage $out ) {
$request = $out->getRequest();
$title = $out->getTitle();
- list( $alias, ) = SpecialPageFactory::resolveAlias( $title->getText() );
+ list( $alias, ) = TranslateUtils::resolveSpecialPageAlias( $title->getText() );
- if ( SpecialTranslate::isBeta( $request )
- && $title->isSpecialPage()
+ if ( $title->isSpecialPage()
&& ( $alias === 'Translate'
|| $alias === 'TranslationStash'
|| $alias === 'SearchTranslations' )
@@ -566,6 +693,7 @@ class TranslateHooks {
/**
* Hook: AdminLinks
+ * @param ALTree $tree
*/
public static function onAdminLinks( ALTree $tree ) {
global $wgTranslateUseSandbox;
@@ -578,17 +706,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 = array(
- 'translate_stash' => 'ts_user',
- 'translate_reviews' => 'trr_user',
- );
-
- /**
* Hook: MergeAccountFromTo
* For UserMerge extension.
*
@@ -604,10 +721,10 @@ class TranslateHooks {
if ( $dbw->tableExists( $table ) ) {
$dbw->update(
$table,
- array( $field => $newUser->getId() ),
- array( $field => $oldUser->getId() ),
+ [ $field => $newUser->getId() ],
+ [ $field => $oldUser->getId() ],
__METHOD__,
- array( 'IGNORE' )
+ [ 'IGNORE' ]
);
}
}
@@ -627,7 +744,7 @@ class TranslateHooks {
if ( $dbw->tableExists( $table ) ) {
$dbw->delete(
$table,
- array( $field => $oldUser->getId() ),
+ [ $field => $oldUser->getId() ],
__METHOD__
);
}
@@ -638,74 +755,66 @@ class TranslateHooks {
* Hook: AbortEmailNotification
*
* False aborts the email.
+ * @param User $editor
+ * @param Title $title
+ * @param RecentChange $rc
+ * @return bool
*/
public static function onAbortEmailNotificationReview(
User $editor,
Title $title,
RecentChange $rc
) {
- if ( $rc->mAttribs['rc_log_type'] === 'translationreview' ) {
+ if ( $rc->getAttribute( 'rc_log_type' ) === 'translationreview' ) {
return false;
}
}
/**
- * Hook: LinkBegin
- * Make Special:MyLanguage links red if the target page doesn't exists.
+ * Hook: TitleIsAlwaysKnown
+ * Make Special:MyLanguage links red if the target page doesn't exist.
* A bit hacky because the core code is not so flexible.
*
- * @param $dummy
* @param Title $target
- * @param string $html
- * @param array $customAttribs
- * @param array $query
- * @param array $options
- * @param string|null $ret
+ * @param bool &$isKnown
+ * @return bool
*/
- public static function linkfix(
- /*unused*/$dummy,
- Title $target,
- /*string*/$html,
- /*array*/$customAttribs,
- array $query,
- array &$options,
- $ret
- ) {
+ public static function onTitleIsAlwaysKnown( Title $target, &$isKnown ) {
if ( !$target->inNamespace( NS_SPECIAL ) ) {
- return;
+ return true;
}
- list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $target->getDBkey() );
+ list( $name, $subpage ) = TranslateUtils::resolveSpecialPageAlias( $target->getDBkey() );
if ( $name !== 'MyLanguage' ) {
- return;
+ return true;
}
if ( (string)$subpage === '' ) {
- return;
+ return true;
}
$realTarget = Title::newFromText( $subpage );
if ( !$realTarget || !$realTarget->exists() ) {
- $options[] = 'broken';
- $index = array_search( 'known', $options, true );
- if ( $index !== false ) {
- unset( $options[$index] );
- }
+ $isKnown = false;
- $index = array_search( 'noclasses', $options, true );
- if ( $index !== false ) {
- unset( $options[$index] );
- }
+ return false;
}
+
+ return true;
}
/**
* Hook: ParserFirstCallInit
+ * @param Parser $parser
*/
public static function setupTranslateParserFunction( Parser $parser ) {
$parser->setFunctionHook( 'translation', 'TranslateHooks::translateRenderParserFunction' );
}
+ /**
+ * @param Parser $parser
+ * @return string
+ */
public static function translateRenderParserFunction( Parser $parser ) {
$pageTitle = $parser->getTitle();
@@ -716,4 +825,22 @@ class TranslateHooks {
}
return '';
}
+
+ /**
+ * @param ResourceLoader $resourceLoader
+ */
+ public static function onResourceLoaderRegisterModules( ResourceLoader $resourceLoader ) {
+ $modules = [];
+ $modules['ext.translate.recentgroups'] = [
+ 'scripts' => 'resources/js/ext.translate.recentgroups.js',
+ 'dependencies' => [
+ 'mediawiki.storage'
+ ],
+ 'localBasePath' => __DIR__,
+ 'remoteExtPath' => 'Translate',
+ 'targets' => [ 'desktop', 'mobile' ],
+ ];
+
+ $resourceLoader->register( $modules );
+ }
}
diff --git a/www/wiki/extensions/Translate/TranslateUtils.php b/www/wiki/extensions/Translate/TranslateUtils.php
index 41bfab7a..4ec670f5 100644
--- a/www/wiki/extensions/Translate/TranslateUtils.php
+++ b/www/wiki/extensions/Translate/TranslateUtils.php
@@ -4,9 +4,11 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
+use MediaWiki\MediaWikiServices;
+
/**
* Essentially random collection of helper functions, similar to GlobalFunctions.php.
*/
@@ -21,7 +23,7 @@ class TranslateUtils {
*/
public static function title( $message, $code, $ns = NS_MEDIAWIKI ) {
// Cache some amount of titles for speed.
- static $cache = array();
+ static $cache = [];
$key = $ns . ':' . $message;
if ( !isset( $cache[$key] ) ) {
@@ -46,7 +48,7 @@ class TranslateUtils {
$code = substr( $text, $pos + 1 );
$key = substr( $text, 0, $pos );
- return array( $key, $code );
+ return [ $key, $code ];
}
/**
@@ -58,9 +60,9 @@ class TranslateUtils {
*/
public static function getMessageContent( $key, $language, $namespace = NS_MEDIAWIKI ) {
$title = self::title( $key, $language, $namespace );
- $data = self::getContents( array( $title ), $namespace );
+ $data = self::getContents( [ $title ], $namespace );
- return isset( $data[$title][0] ) ? $data[$title][0] : null;
+ return $data[$title][0] ?? null;
}
/**
@@ -72,24 +74,41 @@ class TranslateUtils {
* text and last author indexed by page name.
*/
public static function getContents( $titles, $namespace ) {
- $dbr = wfGetDB( DB_SLAVE );
- $rows = $dbr->select( array( 'page', 'revision', 'text' ),
- array( 'page_title', 'old_text', 'old_flags', 'rev_user_text' ),
- array(
+ $dbr = wfGetDB( DB_REPLICA );
+
+ if ( class_exists( ActorMigration::class ) ) {
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'rev_user' );
+ } else {
+ $actorQuery = [
+ 'tables' => [],
+ 'fields' => [ 'rev_user_text' => 'rev_user_text' ],
+ 'joins' => [],
+ ];
+ }
+
+ $rows = $dbr->select( [ 'page', 'revision', 'text' ] + $actorQuery['tables'],
+ [
+ 'page_title', 'old_text', 'old_flags',
+ 'rev_user_text' => $actorQuery['fields']['rev_user_text']
+ ],
+ [
'page_namespace' => $namespace,
- 'page_latest=rev_id',
- 'rev_text_id=old_id',
'page_title' => $titles
- ),
- __METHOD__
+ ],
+ __METHOD__,
+ [],
+ [
+ 'revision' => [ 'JOIN', 'page_latest=rev_id' ],
+ 'text' => [ 'JOIN', 'rev_text_id=old_id' ],
+ ] + $actorQuery['joins']
);
- $titles = array();
+ $titles = [];
foreach ( $rows as $row ) {
- $titles[$row->page_title] = array(
+ $titles[$row->page_title] = [
Revision::getRevisionText( $row ),
$row->rev_user_text
- );
+ ];
}
$rows->free();
@@ -106,36 +125,66 @@ class TranslateUtils {
* @return array List of recent changes.
*/
public static function translationChanges(
- $hours = 24, $bots = false, $ns = null, array $extraFields = array()
+ $hours = 24, $bots = false, $ns = null, array $extraFields = []
) {
global $wgTranslateMessageNamespaces;
- $dbr = wfGetDB( DB_SLAVE );
- $recentchanges = $dbr->tableName( 'recentchanges' );
+ $dbr = wfGetDB( DB_REPLICA );
+
+ if ( class_exists( ActorMigration::class ) ) {
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'rc_user' );
+ } else {
+ $actorQuery = [
+ 'tables' => [],
+ 'fields' => [ 'rc_user_text' => 'rc_user_text' ],
+ 'joins' => [],
+ ];
+ }
+
$hours = (int)$hours;
$cutoff_unixtime = time() - ( $hours * 3600 );
$cutoff = $dbr->timestamp( $cutoff_unixtime );
- $namespaces = $dbr->makeList( $wgTranslateMessageNamespaces );
- if ( $ns ) {
- $namespaces = $dbr->makeList( $ns );
+ $conds = [
+ 'rc_timestamp >= ' . $dbr->addQuotes( $cutoff ),
+ 'rc_namespace' => $ns ?: $wgTranslateMessageNamespaces,
+ ];
+ if ( $bots ) {
+ $conds['rc_bot'] = 0;
}
- $fields = array_merge(
- array( 'rc_title', 'rc_timestamp', 'rc_user_text', 'rc_namespace' ),
- $extraFields
+ $res = $dbr->select(
+ [ 'recentchanges' ] + $actorQuery['tables'],
+ array_merge( [
+ 'rc_namespace', 'rc_title', 'rc_timestamp',
+ 'rc_user_text' => $actorQuery['fields']['rc_user_text'],
+ ], $extraFields ),
+ $conds,
+ __METHOD__,
+ [],
+ $actorQuery['joins']
);
- $fields = implode( ',', $fields );
- // @todo Raw SQL
- $sql = "SELECT $fields, substring_index(rc_title, '/', -1) as lang FROM $recentchanges " .
- "WHERE rc_timestamp >= '{$cutoff}' " .
- ( $bots ? '' : 'AND rc_bot = 0 ' ) .
- "AND rc_namespace in ($namespaces) " .
- 'ORDER BY lang ASC, rc_timestamp DESC';
-
- $res = $dbr->query( $sql, __METHOD__ );
$rows = iterator_to_array( $res );
+ // Calculate 'lang', then sort by it and rc_timestamp
+ foreach ( $rows as &$row ) {
+ $pos = strrpos( $row->rc_title, '/' );
+ $row->lang = $pos === false ? $row->rc_title : substr( $row->rc_title, $pos + 1 );
+ }
+ unset( $row );
+
+ usort( $rows, function ( $a, $b ) {
+ $x = strcmp( $a->lang, $b->lang );
+ if ( !$x ) {
+ // descending order
+ $x = strcmp(
+ wfTimestamp( TS_MW, $b->rc_timestamp ),
+ wfTimestamp( TS_MW, $a->rc_timestamp )
+ );
+ }
+ return $x;
+ } );
+
return $rows;
}
@@ -144,11 +193,11 @@ class TranslateUtils {
/**
* Returns a localised language name.
* @param string $code Language code.
- * @param null|string $language Language code of language the the name should be in.
+ * @param null|string $language Language code of the language that the name should be in.
* @return string Best-effort localisation of wanted language name.
*/
public static function getLanguageName( $code, $language = 'en' ) {
- $languages = TranslateUtils::getLanguageNames( $language );
+ $languages = self::getLanguageNames( $language );
if ( isset( $languages[$code] ) ) {
return $languages[$code];
@@ -204,14 +253,12 @@ 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', array( &$languageNames, $code ) );
+ Hooks::run( 'TranslateSupportedLanguages', [ &$languageNames, $code ] );
return $languageNames;
}
@@ -241,7 +288,7 @@ class TranslateUtils {
if ( isset( $mi[$normkey] ) ) {
return (array)$mi[$normkey];
} else {
- return array();
+ return [];
}
}
@@ -264,7 +311,7 @@ class TranslateUtils {
* @param array $attributes Html attributes for the fieldset.
* @return string Html.
*/
- public static function fieldset( $legend, $contents, array $attributes = array() ) {
+ public static function fieldset( $legend, $contents, array $attributes = [] ) {
return Xml::openElement( 'fieldset', $attributes ) .
Xml::tags( 'legend', null, $legend ) . $contents .
Xml::closeElement( 'fieldset' );
@@ -347,7 +394,7 @@ class TranslateUtils {
return null;
}
- $formats = array();
+ $formats = [];
$filename = substr( $icon, 7 );
$file = wfFindFile( $filename );
@@ -385,15 +432,150 @@ class TranslateUtils {
/**
* Get a DB handle suitable for read and read-for-write cases
*
- * @return DatabaseBase Master for HTTP POST, CLI, DB already changed; slave otherwise
+ * @return \Wikimedia\Rdbms\IDatabase Master for HTTP POST, CLI, DB already changed;
+ * slave otherwise
*/
public static function getSafeReadDB() {
- $index = (
- PHP_SAPI === 'cli' ||
- RequestContext::getMain()->getRequest()->wasPosted() ||
- wfGetLB()->hasOrMadeRecentMasterChanges()
- ) ? DB_MASTER : DB_SLAVE;
+ $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
+ // Parsing APIs need POST for payloads but are read-only, so avoid spamming
+ // the master then. No good way to check this at the moment...
+ if ( PageTranslationHooks::$renderingContext ) {
+ $index = DB_REPLICA;
+ } else {
+ $index = (
+ PHP_SAPI === 'cli' ||
+ RequestContext::getMain()->getRequest()->wasPosted() ||
+ $lb->hasOrMadeRecentMasterChanges()
+ ) ? DB_MASTER : DB_REPLICA;
+ }
+
+ return $lb->getConnection( $index );
+ }
+
+ /**
+ * Get an URL that points to an editor for this message handle.
+ * @param MessageHandle $handle
+ * @return string Domain relative URL
+ * @since 2017.10
+ */
+ public static function getEditorUrl( MessageHandle $handle ) {
+ if ( !$handle->isValid() ) {
+ return $handle->getTitle()->getLocalURL( [ 'action' => 'edit' ] );
+ }
+
+ $title = self::getSpecialPage( 'Translate' )->getPageTitle();
+ return $title->getLocalURL( [
+ 'showMessage' => $handle->getInternalKey(),
+ 'group' => $handle->getGroup()->getId(),
+ 'language' => $handle->getCode(),
+ ] );
+ }
+
+ /**
+ * Compatibility for pre-1.32, when SpecialPageFactory methods were static.
+ *
+ * @see SpecialPageFactory::resolveAlias
+ * @param string $text
+ * @return array
+ */
+ public static function resolveSpecialPageAlias( $text ) : array {
+ if ( method_exists( MediaWikiServices::class, 'getSpecialPageFactory' ) ) {
+ return MediaWikiServices::getInstance()->getSpecialPageFactory()->resolveAlias( $text );
+ }
+ return SpecialPageFactory::resolveAlias( $text );
+ }
- return wfGetDB( $index );
+ /**
+ * Compatibility for pre-1.32, when SpecialPageFactory methods were static.
+ *
+ * @see SpecialPageFactory::getPage
+ * @param string $name
+ * @return SpecialPage|null
+ */
+ public static function getSpecialPage( $name ) {
+ if ( method_exists( MediaWikiServices::class, 'getSpecialPageFactory' ) ) {
+ return MediaWikiServices::getInstance()->getSpecialPageFactory()->getPage( $name );
+ }
+ return SpecialPageFactory::getPage( $name );
+ }
+
+ /**
+ * Compatibility for pre-1.32, before OutputPage::addWikiTextAsInterface()
+ *
+ * @see OutputPage::addWikiTextAsInterface
+ * @param OutputPage $out
+ * @param string $text The wikitext to add to the output.
+ */
+ public static function addWikiTextAsInterface( OutputPage $out, $text ) {
+ if ( is_callable( [ $out, 'addWikiTextAsInterface' ] ) ) {
+ $out->addWikiTextAsInterface( $text );
+ } else {
+ // $out->addWikiTextTitle is deprecated in 1.32, but has existed
+ // since (at least) MW 1.21, so use that as a fallback.
+ $out->addWikiTextTitle(
+ $text, $out->getTitle(),
+ /*linestart*/true, /*tidy*/true, /*interface*/true
+ );
+ }
+ }
+
+ /**
+ * 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/www/wiki/extensions/Translate/api/ApiAggregateGroups.php b/www/wiki/extensions/Translate/api/ApiAggregateGroups.php
index b54e4385..a8a259df 100644
--- a/www/wiki/extensions/Translate/api/ApiAggregateGroups.php
+++ b/www/wiki/extensions/Translate/api/ApiAggregateGroups.php
@@ -5,7 +5,7 @@
* @author Santhosh Thottingal
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Santhosh Thottingal
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -19,30 +19,28 @@ class ApiAggregateGroups extends ApiBase {
protected static $right = 'translate-manage';
public function execute() {
- if ( !$this->getUser()->isAllowed( self::$right ) ) {
- $this->dieUsage( 'Permission denied', 'permissiondenied' );
- }
+ $this->checkUserRightsAny( self::$right );
$params = $this->extractRequestParams();
$action = $params['do'];
- $output = array();
+ $output = [];
if ( $action === 'associate' || $action === 'dissociate' ) {
// Group is mandatory only for these two actions
if ( !isset( $params['group'] ) ) {
- $this->dieUsageMsg( array( 'missingparam', 'group' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'group' ] );
}
if ( !isset( $params['aggregategroup'] ) ) {
- $this->dieUsageMsg( array( 'missingparam', 'aggregategroup' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'aggregategroup' ] );
}
$aggregateGroup = $params['aggregategroup'];
$subgroups = TranslateMetadata::getSubgroups( $aggregateGroup );
- if ( count( $subgroups ) === 0 ) {
+ if ( !$subgroups ) {
// For newly created groups the subgroups value might be empty,
// but check that.
if ( TranslateMetadata::get( $aggregateGroup, 'name' ) === false ) {
- $this->dieUsage( 'Invalid aggregate message group', 'invalidaggregategroup' );
+ $this->dieWithError( 'apierror-translate-invalidaggregategroup', 'invalidaggregategroup' );
}
- $subgroups = array();
+ $subgroups = [];
}
$subgroupId = $params['group'];
@@ -51,7 +49,7 @@ class ApiAggregateGroups extends ApiBase {
// Add or remove from the list
if ( $action === 'associate' ) {
if ( !$group instanceof WikiPageMessageGroup ) {
- $this->dieUsage( 'Group does not exist or invalid', 'invalidgroup' );
+ $this->dieWithError( 'apierror-translate-invalidgroup', 'invalidgroup' );
}
$subgroups[] = $subgroupId;
@@ -65,10 +63,10 @@ class ApiAggregateGroups extends ApiBase {
TranslateMetadata::setSubgroups( $aggregateGroup, $subgroups );
- $logParams = array(
+ $logParams = [
'aggregategroup' => TranslateMetadata::get( $aggregateGroup, 'name' ),
'aggregategroup-id' => $aggregateGroup,
- );
+ ];
/* Note that to allow removing no longer existing groups from
* aggregate message groups, the message group object $group
@@ -89,22 +87,24 @@ class ApiAggregateGroups extends ApiBase {
$entry->publish( $logid );
} elseif ( $action === 'remove' ) {
if ( !isset( $params['aggregategroup'] ) ) {
- $this->dieUsageMsg( array( 'missingparam', 'aggregategroup' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'aggregategroup' ] );
}
TranslateMetadata::deleteGroup( $params['aggregategroup'] );
// @todo Logging
} elseif ( $action === 'add' ) {
if ( !isset( $params['groupname'] ) ) {
- $this->dieUsageMsg( array( 'missingparam', 'groupname' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'groupname' ] );
}
$name = trim( $params['groupname'] );
if ( strlen( $name ) === 0 ) {
- $this->dieUsage( 'Invalid aggregate message group name', 'invalidaggregategroupname' );
+ $this->dieWithError(
+ 'apierror-translate-invalidaggregategroupname', 'invalidaggregategroupname'
+ );
}
if ( !isset( $params['groupdescription'] ) ) {
- $this->dieUsageMsg( array( 'missingparam', 'groupdescription' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'groupdescription' ] );
}
$desc = trim( $params['groupdescription'] );
@@ -113,7 +113,7 @@ class ApiAggregateGroups extends ApiBase {
// Throw error if group already exists
$nameExists = MessageGroups::labelExists( $name );
if ( $nameExists ) {
- $this->dieUsage( 'Message group already exists', 'duplicateaggregategroup' );
+ $this->dieWithError( 'apierror-translate-duplicateaggregategroup', 'duplicateaggregategroup' );
}
// ID already exists- Generate a new ID by adding a number to it.
@@ -130,7 +130,7 @@ class ApiAggregateGroups extends ApiBase {
TranslateMetadata::set( $aggregateGroupId, 'name', $name );
TranslateMetadata::set( $aggregateGroupId, 'description', $desc );
- TranslateMetadata::setSubgroups( $aggregateGroupId, array() );
+ TranslateMetadata::setSubgroups( $aggregateGroupId, [] );
// Once new aggregate group added, we need to show all the pages that can be added to that.
$output['groups'] = self::getAllPages();
@@ -138,11 +138,13 @@ class ApiAggregateGroups extends ApiBase {
// @todo Logging
} elseif ( $action === 'update' ) {
if ( !isset( $params['groupname'] ) ) {
- $this->dieUsageMsg( array( 'missingparam', 'groupname' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'groupname' ] );
}
$name = trim( $params['groupname'] );
if ( strlen( $name ) === 0 ) {
- $this->dieUsage( 'Invalid aggregate message group name', 'invalidaggregategroupname' );
+ $this->dieWithError(
+ 'apierror-translate-invalidaggregategroupname', 'invalidaggregategroupname'
+ );
}
$desc = trim( $params['groupdescription'] );
$aggregateGroupId = $params['aggregategroup'];
@@ -153,11 +155,11 @@ class ApiAggregateGroups extends ApiBase {
// Error if the label exists already
$exists = MessageGroups::labelExists( $name );
if ( $exists && $oldName !== $name ) {
- $this->dieUsage( 'Message group name already exists', 'duplicateaggregategroup' );
+ $this->dieWithError( 'apierror-translate-duplicateaggregategroup', 'duplicateaggregategroup' );
}
if ( $oldName === $name && $oldDesc === $desc ) {
- $this->dieUsage( 'Invalid update', 'invalidupdate' );
+ $this->dieWithError( 'apierror-translate-invalidupdate', 'invalidupdate' );
}
TranslateMetadata::set( $aggregateGroupId, 'name', $name );
TranslateMetadata::set( $aggregateGroupId, 'description', $desc );
@@ -168,7 +170,7 @@ class ApiAggregateGroups extends ApiBase {
$this->getResult()->addValue( null, $this->getModuleName(), $output );
// Cache needs to be cleared after any changes to groups
MessageGroups::singleton()->recache();
- MessageIndexRebuildJob::newJob()->insert();
+ MessageIndexRebuildJob::newJob()->insertIntoJobQueue();
}
protected function generateAggregateGroupId( $aggregateGroupName, $prefix = 'agg-' ) {
@@ -190,41 +192,41 @@ class ApiAggregateGroups extends ApiBase {
}
public function getAllowedParams() {
- return array(
- 'do' => array(
- ApiBase::PARAM_TYPE => array( 'associate', 'dissociate', 'remove', 'add', 'update' ),
+ return [
+ 'do' => [
+ ApiBase::PARAM_TYPE => [ 'associate', 'dissociate', 'remove', 'add', 'update' ],
ApiBase::PARAM_REQUIRED => true,
- ),
- 'aggregategroup' => array(
+ ],
+ 'aggregategroup' => [
ApiBase::PARAM_TYPE => 'string',
- ),
- 'group' => array(
+ ],
+ 'group' => [
// Not providing list of values, to allow dissociation of unknown groups
ApiBase::PARAM_TYPE => 'string',
- ),
- 'groupname' => array(
+ ],
+ 'groupname' => [
ApiBase::PARAM_TYPE => 'string',
- ),
- 'groupdescription' => array(
+ ],
+ 'groupdescription' => [
ApiBase::PARAM_TYPE => 'string',
- ),
- 'token' => array(
+ ],
+ 'token' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- );
+ ],
+ ];
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=aggregategroups&do=associate&group=groupId&aggregategroup=aggregateGroupId'
=> 'apihelp-aggregategroups-example-1',
- );
+ ];
}
public static function getAllPages() {
$groups = MessageGroups::getAllGroups();
- $pages = array();
+ $pages = [];
foreach ( $groups as $group ) {
if ( $group instanceof WikiPageMessageGroup ) {
$pages[$group->getId()] = $group->getTitle()->getPrefixedText();
diff --git a/www/wiki/extensions/Translate/api/ApiGroupReview.php b/www/wiki/extensions/Translate/api/ApiGroupReview.php
index 8f7ce9ca..67583854 100644
--- a/www/wiki/extensions/Translate/api/ApiGroupReview.php
+++ b/www/wiki/extensions/Translate/api/ApiGroupReview.php
@@ -3,7 +3,7 @@
* API module for switching workflow states for message groups
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -22,47 +22,44 @@ class ApiGroupReview extends ApiBase {
$code = $requestParams['language'];
if ( !$group || MessageGroups::isDynamic( $group ) ) {
- $this->dieUsageMsg( array( 'missingparam', 'group' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'group' ] );
}
$stateConfig = $group->getMessageGroupStates()->getStates();
if ( !$stateConfig ) {
- $this->dieUsage( 'Message group review not in use', 'disabled' );
+ $this->dieWithError( 'apierror-translate-groupreviewdisabled', 'disabled' );
}
- if ( !$user->isAllowed( self::$right ) ) {
- $this->dieUsage( 'Permission denied', 'permissiondenied' );
- }
+ $this->checkUserRightsAny( self::$right );
if ( $user->isBlocked() ) {
- $this->dieUsage( 'You have been blocked', 'blocked' );
+ $this->dieBlocked( $user->getBlock() );
}
$requestParams = $this->extractRequestParams();
$languages = Language::fetchLanguageNames();
if ( !isset( $languages[$code] ) ) {
- $this->dieUsageMsg( array( 'missingparam', 'language' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'language' ] );
}
$targetState = $requestParams['state'];
if ( !isset( $stateConfig[$targetState] ) ) {
- $this->dieUsage( 'The requested state is invalid', 'invalidstate' );
+ $this->dieWithError( 'apierror-translate-invalidstate', 'invalidstate' );
}
if ( is_array( $stateConfig[$targetState] )
&& isset( $stateConfig[$targetState]['right'] )
- && !$user->isAllowed( $stateConfig[$targetState]['right'] )
) {
- $this->dieUsage( 'Permission denied', 'permissiondenied' );
+ $this->checkUserRightsAny( $stateConfig[$targetState]['right'] );
}
self::changeState( $group, $code, $targetState, $user );
- $output = array( 'review' => array(
+ $output = [ 'review' => [
'group' => $group->getId(),
'language' => $code,
'state' => $targetState,
- ) );
+ ] ];
$this->getResult()->addValue( null, $this->getModuleName(), $output );
}
@@ -72,10 +69,10 @@ class ApiGroupReview extends ApiBase {
$table = 'translate_groupreviews';
$field = 'tgr_state';
- $conds = array(
+ $conds = [
'tgr_group' => $group->getId(),
'tgr_lang' => $code
- );
+ ];
return $dbw->selectField( $table, $field, $conds, __METHOD__ );
}
@@ -87,33 +84,33 @@ class ApiGroupReview extends ApiBase {
}
$table = 'translate_groupreviews';
- $index = array( 'tgr_group', 'tgr_language' );
- $row = array(
+ $index = [ 'tgr_group', 'tgr_language' ];
+ $row = [
'tgr_group' => $group->getId(),
'tgr_lang' => $code,
'tgr_state' => $newState,
- );
+ ];
$dbw = wfGetDB( DB_MASTER );
- $dbw->replace( $table, array( $index ), $row, __METHOD__ );
+ $dbw->replace( $table, [ $index ], $row, __METHOD__ );
$entry = new ManualLogEntry( 'translationreview', 'group' );
$entry->setPerformer( $user );
$entry->setTarget( SpecialPage::getTitleFor( 'Translate', $group->getId() ) );
// @todo
// $entry->setComment( $comment );
- $entry->setParameters( array(
+ $entry->setParameters( [
'4::language' => $code,
'5::group-label' => $group->getLabel(),
'6::old-state' => $currentState,
'7::new-state' => $newState,
- ) );
+ ] );
$logid = $entry->insert();
$entry->publish( $logid );
Hooks::run( 'TranslateEventMessageGroupStateChange',
- array( $group, $code, $currentState, $newState ) );
+ [ $group, $code, $currentState, $newState ] );
return true;
}
@@ -127,30 +124,30 @@ class ApiGroupReview extends ApiBase {
}
public function getAllowedParams() {
- return array(
- 'group' => array(
+ return [
+ 'group' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- 'language' => array(
+ ],
+ 'language' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => 'en',
- ),
- 'state' => array(
+ ],
+ 'state' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- 'token' => array(
+ ],
+ 'token' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- );
+ ],
+ ];
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=groupreview&group=page-Example&language=de&state=ready&token=foo'
=> 'apihelp-groupreview-example-1',
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiQueryLanguageStats.php b/www/wiki/extensions/Translate/api/ApiQueryLanguageStats.php
index fe403763..a25cda21 100644
--- a/www/wiki/extensions/Translate/api/ApiQueryLanguageStats.php
+++ b/www/wiki/extensions/Translate/api/ApiQueryLanguageStats.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -18,10 +18,21 @@ class ApiQueryLanguageStats extends ApiStatsQuery {
parent::__construct( $query, $moduleName, 'ls' );
}
- protected function getData() {
- $params = $this->extractRequestParams();
+ /// Overwritten from ApiStatsQuery
+ protected function validateTargetParamater( array $params ) {
+ $all = TranslateUtils::getLanguageNames( null );
+ $requested = $params[ 'language' ];
- return MessageGroupStats::forLanguage( $params['language'] );
+ if ( !isset( $all[ $requested ] ) ) {
+ $this->dieWithError( [ 'apierror-translate-invalidlanguage' ] );
+ }
+
+ return $requested;
+ }
+
+ /// Overwritten from ApiStatsQuery
+ protected function loadStatistics( $target, $flags = 0 ) {
+ return MessageGroupStats::forLanguage( $target, $flags );
}
protected function makeItem( $item, $stats ) {
@@ -33,18 +44,18 @@ class ApiQueryLanguageStats extends ApiStatsQuery {
public function getAllowedParams() {
$params = parent::getAllowedParams();
- $params['language'] = array(
+ $params['language'] = [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- );
+ ];
return $params;
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=query&meta=languagestats&lslanguage=fi'
=> 'apihelp-query+languagestats-example-1',
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiQueryMessageCollection.php b/www/wiki/extensions/Translate/api/ApiQueryMessageCollection.php
index 1c7e7032..f9353d62 100644
--- a/www/wiki/extensions/Translate/api/ApiQueryMessageCollection.php
+++ b/www/wiki/extensions/Translate/api/ApiQueryMessageCollection.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -30,12 +30,48 @@ class ApiQueryMessageCollection extends ApiQueryGeneratorBase {
$this->run( $resultPageSet );
}
+ private function validateLanguageCode( $code ) {
+ if ( !Language::isValidBuiltInCode( $code ) ) {
+ $this->dieWithError( [ 'apierror-translate-invalidlanguage' ] );
+ }
+ }
+
private function run( ApiPageSet $resultPageSet = null ) {
+ global $wgTranslateBlacklist;
+
$params = $this->extractRequestParams();
$group = MessageGroups::getGroup( $params['group'] );
if ( !$group ) {
- $this->dieUsageMsg( array( 'missingparam', 'mcgroup' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'mcgroup' ] );
+ }
+
+ $languageCode = $params[ 'language' ];
+ $this->validateLanguageCode( $languageCode );
+ if ( $group->getSourceLanguage() === $languageCode ) {
+ $name = Language::fetchLanguageName( $languageCode, $this->getLanguage()->getCode() );
+ $this->addWarning( [ 'apiwarn-translate-language-disabled-source', wfEscapeWikiText( $name ) ] );
+ }
+ $languages = $group->getTranslatableLanguages();
+ if ( $languages !== null ) {
+ if ( !isset( $languages[ $languageCode ] ) ) {
+ $name = Language::fetchLanguageName( $languageCode, $this->getLanguage()->getCode() );
+ $this->dieWithError( [ 'apierror-translate-language-disabled', $name ] );
+ }
+ } else {
+ $checks = [
+ $group->getId(),
+ strtok( $group->getId(), '-' ),
+ '*'
+ ];
+
+ foreach ( $checks as $check ) {
+ if ( isset( $wgTranslateBlacklist[ $check ][ $languageCode ] ) ) {
+ $name = Language::fetchLanguageName( $languageCode, $this->getLanguage()->getCode() );
+ $reason = $wgTranslateBlacklist[ $check ][ $languageCode ];
+ $this->dieWithError( [ 'apierror-translate-language-disabled-reason', $name, $reason ] );
+ }
+ }
}
if ( MessageGroups::isDynamic( $group ) ) {
@@ -45,17 +81,6 @@ class ApiQueryMessageCollection extends ApiQueryGeneratorBase {
$group->setLanguage( $params['language'] );
}
- $result = $this->getResult();
-
- $languages = $group->getTranslatableLanguages();
-
- if ( $languages !== null && !isset( $languages[$params['language']] ) ) {
- $this->dieUsage(
- 'Translation to this language is disabled',
- 'translate-language-disabled'
- );
- }
-
$messages = $group->initCollection( $params['language'] );
foreach ( $params['filter'] as $filter ) {
@@ -73,7 +98,10 @@ class ApiQueryMessageCollection extends ApiQueryGeneratorBase {
$messages->filter( $filter, false, $value );
}
} catch ( MWException $e ) {
- $this->dieUsage( $e->getMessage(), 'invalidfilter' );
+ $this->dieWithError(
+ [ 'apierror-translate-invalidfilter', wfEscapeWikiText( $e->getMessage() ) ],
+ 'invalidfilter'
+ );
}
}
@@ -82,22 +110,23 @@ class ApiQueryMessageCollection extends ApiQueryGeneratorBase {
$batchSize = count( $messages );
list( /*$backwardsOffset*/, $forwardsOffset, $startOffset ) = $offsets;
+ $result = $this->getResult();
$result->addValue(
- array( 'query', 'metadata' ),
+ [ 'query', 'metadata' ],
'state',
self::getWorkflowState( $group->getId(), $params['language'] )
);
- $result->addValue( array( 'query', 'metadata' ), 'resultsize', $resultSize );
+ $result->addValue( [ 'query', 'metadata' ], 'resultsize', $resultSize );
$result->addValue(
- array( 'query', 'metadata' ),
+ [ 'query', 'metadata' ],
'remaining',
$resultSize - $startOffset - $batchSize
);
$messages->loadTranslations();
- $pages = array();
+ $pages = [];
if ( $forwardsOffset !== false ) {
$this->setContinueEnumParameter( 'offset', $forwardsOffset );
@@ -110,8 +139,13 @@ class ApiQueryMessageCollection extends ApiQueryGeneratorBase {
if ( is_null( $resultPageSet ) ) {
$data = $this->extractMessageData( $result, $props, $messages[$mkey] );
$data['title'] = $title->getPrefixedText();
+ $handle = new MessageHandle( $title );
+
+ if ( $handle->isValid() ) {
+ $data['primaryGroup'] = $handle->getGroup()->getId();
+ }
- $result->addValue( array( 'query', $this->getModuleName() ), null, $data );
+ $result->addValue( [ 'query', $this->getModuleName() ], null, $data );
} else {
$pages[] = $title;
}
@@ -119,7 +153,7 @@ class ApiQueryMessageCollection extends ApiQueryGeneratorBase {
if ( is_null( $resultPageSet ) ) {
$result->addIndexedTagName(
- array( 'query', $this->getModuleName() ),
+ [ 'query', $this->getModuleName() ],
'message'
);
} else {
@@ -128,9 +162,9 @@ class ApiQueryMessageCollection extends ApiQueryGeneratorBase {
}
/**
- * @param $result ApiResult
- * @param $props array
- * @param $message ThinMessage
+ * @param ApiResult $result
+ * @param array $props
+ * @param ThinMessage $message
* @return array
*/
public function extractMessageData( $result, $props, $message ) {
@@ -173,64 +207,64 @@ class ApiQueryMessageCollection extends ApiQueryGeneratorBase {
* @return string|bool State id or false.
*/
protected static function getWorkflowState( $groupId, $language ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
return $dbr->selectField(
'translate_groupreviews',
'tgr_state',
- array(
+ [
'tgr_group' => $groupId,
'tgr_lang' => $language
- ),
+ ],
__METHOD__
);
}
public function getAllowedParams() {
- return array(
- 'group' => array(
+ return [
+ 'group' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- 'language' => array(
+ ],
+ 'language' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => 'en',
- ),
- 'limit' => array(
+ ],
+ 'limit' => [
ApiBase::PARAM_DFLT => 500,
ApiBase::PARAM_TYPE => 'limit',
ApiBase::PARAM_MIN => 1,
ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG2,
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
- ),
- 'offset' => array(
+ ],
+ 'offset' => [
ApiBase::PARAM_DFLT => '',
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
- ),
- 'filter' => array(
+ ],
+ 'filter' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => '!optional|!ignored',
ApiBase::PARAM_ISMULTI => true,
- ),
- 'prop' => array(
- ApiBase::PARAM_TYPE => array(
+ ],
+ 'prop' => [
+ ApiBase::PARAM_TYPE => [
'definition',
'translation',
'tags',
'revision',
'properties'
- ),
+ ],
ApiBase::PARAM_DFLT => 'definition|translation',
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_HELP_MSG =>
- array( 'apihelp-query+messagecollection-param-prop', '!!FUZZY!!' ),
- ),
- );
+ [ 'apihelp-query+messagecollection-param-prop', '!!FUZZY!!' ],
+ ],
+ ];
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=query&meta=siteinfo&siprop=languages'
=> 'apihelp-query+messagecollection-example-1',
'action=query&list=messagecollection&mcgroup=page-Example'
@@ -240,6 +274,6 @@ class ApiQueryMessageCollection extends ApiQueryGeneratorBase {
=> 'apihelp-query+messagecollection-example-3',
'action=query&generator=messagecollection&gmcgroup=page-Example&gmclanguage=nl&prop=revisions'
=> 'apihelp-query+messagecollection-example-4',
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiQueryMessageGroupStats.php b/www/wiki/extensions/Translate/api/ApiQueryMessageGroupStats.php
index 94d683b2..3f9ea6c4 100644
--- a/www/wiki/extensions/Translate/api/ApiQueryMessageGroupStats.php
+++ b/www/wiki/extensions/Translate/api/ApiQueryMessageGroupStats.php
@@ -6,7 +6,7 @@
* @author Tim Gerundt
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Tim Gerundt
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -19,16 +19,21 @@ class ApiQueryMessageGroupStats extends ApiStatsQuery {
parent::__construct( $query, $moduleName, 'mgs' );
}
- protected function getData() {
- $params = $this->extractRequestParams();
+ /// Overwritten from ApiStatsQuery
+ protected function validateTargetParamater( array $params ) {
$group = MessageGroups::getGroup( $params['group'] );
if ( !$group ) {
- $this->dieUsageMsg( array( 'missingparam', 'mcgroup' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'mgsgroup' ] );
} elseif ( MessageGroups::isDynamic( $group ) ) {
- $this->dieUsage( 'Dynamic message groups are not supported here', 'invalidparam' );
+ $this->dieWithError( 'apierror-translate-nodynamicgroups', 'invalidparam' );
}
- return MessageGroupStats::forGroup( $group->getId() );
+ return $group->getId();
+ }
+
+ /// Overwritten from ApiStatsQuery
+ protected function loadStatistics( $target, $flags = 0 ) {
+ return MessageGroupStats::forGroup( $target, $flags );
}
protected function makeItem( $item, $stats ) {
@@ -41,18 +46,18 @@ class ApiQueryMessageGroupStats extends ApiStatsQuery {
public function getAllowedParams() {
$params = parent::getAllowedParams();
- $params['group'] = array(
+ $params['group'] = [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- );
+ ];
return $params;
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=query&meta=messagegroupstats&mgsgroup=page-Example'
=> 'apihelp-query+messagegroupstats-example-1',
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiQueryMessageGroups.php b/www/wiki/extensions/Translate/api/ApiQueryMessageGroups.php
index 583798f8..6996bb05 100644
--- a/www/wiki/extensions/Translate/api/ApiQueryMessageGroups.php
+++ b/www/wiki/extensions/Translate/api/ApiQueryMessageGroups.php
@@ -6,7 +6,7 @@
* @author Niklas Laxström
* @author Harry Burt
* @copyright Copyright © 2012-2013, Harry Burt
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -24,16 +24,17 @@ class ApiQueryMessageGroups extends ApiQueryBase {
$params = $this->extractRequestParams();
$filter = $params['filter'];
- $groups = array();
+ $groups = [];
// Parameter root as all for all pages subgroups
if ( $params['root'] === 'all' ) {
$allGroups = MessageGroups::getAllGroups();
- foreach ( $allGroups as $group ) {
+ foreach ( $allGroups as $id => $group ) {
if ( $group instanceof WikiPageMessageGroup ) {
- $groups[] = $group;
+ $groups[$id] = $group;
}
}
+ TranslateMetadata::preloadGroups( array_keys( $groups ) );
} elseif ( $params['format'] === 'flat' ) {
if ( $params['root'] !== '' ) {
$group = MessageGroups::getGroup( $params['root'] );
@@ -42,29 +43,35 @@ class ApiQueryMessageGroups extends ApiQueryBase {
}
} else {
$groups = MessageGroups::getAllGroups();
- foreach ( MessageGroups::getDynamicGroups() as $id => $unused ) {
- $groups[$id] = MessageGroups::getGroup( $id );
- }
+ // Not sorted by default, so do it now
+ // Work around php bug: https://bugs.php.net/bug.php?id=50688
+ Wikimedia\suppressWarnings();
+ usort( $groups, [ 'MessageGroups', 'groupLabelSort' ] );
+ Wikimedia\restoreWarnings();
}
-
- // Not sorted by default, so do it now
- // Work around php bug: https://bugs.php.net/bug.php?id=50688
- wfSuppressWarnings();
- usort( $groups, array( 'MessageGroups', 'groupLabelSort' ) );
- wfRestoreWarnings();
+ TranslateMetadata::preloadGroups( array_keys( $groups ) );
} elseif ( $params['root'] !== '' ) {
// format=tree from now on, as it is the only other valid option
$group = MessageGroups::getGroup( $params['root'] );
if ( $group instanceof AggregateMessageGroup ) {
- $groups = MessageGroups::subGroups( $group );
+ $childIds = [];
+ $groups = MessageGroups::subGroups( $group, $childIds );
// The parent group is the first, ignore it
array_shift( $groups );
+ TranslateMetadata::preloadGroups( $childIds );
}
} else {
$groups = MessageGroups::getGroupStructure();
- foreach ( MessageGroups::getDynamicGroups() as $id => $unused ) {
- $groups[$id] = MessageGroups::getGroup( $id );
+ TranslateMetadata::preloadGroups( array_keys( MessageGroups::getAllGroups() ) );
+ }
+
+ if ( $params['root'] === '' ) {
+ $dynamicGroups = [];
+ foreach ( array_keys( MessageGroups::getDynamicGroups() ) as $id ) {
+ $dynamicGroups[$id] = MessageGroups::getGroup( $id );
}
+ // Have dynamic groups appear first in the list
+ $groups = $dynamicGroups + $groups;
}
// Do not list the sandbox group. The code that knows it
@@ -81,7 +88,7 @@ class ApiQueryMessageGroups extends ApiQueryBase {
* @var MessageGroup $mixed
*/
foreach ( $groups as $mixed ) {
- if ( $filter !== array() && !$matcher->match( $mixed->getId() ) ) {
+ if ( $filter !== [] && !$matcher->match( $mixed->getId() ) ) {
continue;
}
@@ -90,16 +97,15 @@ class ApiQueryMessageGroups extends ApiQueryBase {
$result->setIndexedTagName( $a, 'group' );
// @todo Add a continue?
- $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $a );
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $a );
if ( !$fit ) {
- $this->setWarning( 'Could not fit all groups in the resultset.' );
// Even if we're not going to give a continue, no point carrying on
// if the result is full
break;
}
}
- $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'group' );
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'group' );
}
/**
@@ -110,10 +116,11 @@ class ApiQueryMessageGroups extends ApiQueryBase {
*/
protected function formatGroup( $mixed, $props, $depth = 0 ) {
$params = $this->extractRequestParams();
+ $context = $this->getContext();
// Default
$g = $mixed;
- $subgroups = array();
+ $subgroups = [];
// Format = tree and has subgroups
if ( is_array( $mixed ) ) {
@@ -121,7 +128,7 @@ class ApiQueryMessageGroups extends ApiQueryBase {
$subgroups = $mixed;
}
- $a = array();
+ $a = [];
$groupId = $g->getId();
@@ -130,11 +137,11 @@ class ApiQueryMessageGroups extends ApiQueryBase {
}
if ( isset( $props['label'] ) ) {
- $a['label'] = $g->getLabel();
+ $a['label'] = $g->getLabel( $context );
}
if ( isset( $props['description'] ) ) {
- $a['description'] = $g->getDescription();
+ $a['description'] = $g->getDescription( $context );
}
if ( isset( $props['class'] ) ) {
@@ -176,7 +183,7 @@ class ApiQueryMessageGroups extends ApiQueryBase {
Hooks::run(
'TranslateProcessAPIMessageGroupsProperties',
- array( &$a, $props, $params, $g )
+ [ &$a, $props, $params, $g ]
);
// Depth only applies to tree format
@@ -188,7 +195,7 @@ class ApiQueryMessageGroups extends ApiQueryBase {
}
// Always empty array for flat format, only sometimes for tree format
- if ( $subgroups !== array() ) {
+ if ( $subgroups !== [] ) {
foreach ( $subgroups as $sg ) {
$a['groups'][] = $this->formatGroup( $sg, $props );
}
@@ -203,7 +210,7 @@ class ApiQueryMessageGroups extends ApiQueryBase {
* Get the workflow states applicable to the given message group
*
* @param MessageGroup $group
- * @return boolean|array Associative array with states as key and localized state
+ * @return bool|array Associative array with states as key and localized state
* labels as values
*/
protected function getWorkflowStates( MessageGroup $group ) {
@@ -213,7 +220,7 @@ class ApiQueryMessageGroups extends ApiQueryBase {
$stateConfig = $group->getMessageGroupStates()->getStates();
- if ( !is_array( $stateConfig ) || $stateConfig === array() ) {
+ if ( !is_array( $stateConfig ) || $stateConfig === [] ) {
return false;
}
@@ -241,35 +248,35 @@ class ApiQueryMessageGroups extends ApiQueryBase {
}
public function getAllowedParams() {
- $allowedParams = array(
- 'depth' => array(
+ $allowedParams = [
+ 'depth' => [
ApiBase::PARAM_TYPE => 'integer',
- ApiBase::PARAM_DFLT => '100',
- ),
- 'filter' => array(
+ ApiBase::PARAM_DFLT => 100,
+ ],
+ 'filter' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => '',
ApiBase::PARAM_ISMULTI => true,
- ),
- 'format' => array(
- ApiBase::PARAM_TYPE => array( 'flat', 'tree' ),
+ ],
+ 'format' => [
+ ApiBase::PARAM_TYPE => [ 'flat', 'tree' ],
ApiBase::PARAM_DFLT => 'flat',
- ),
- 'iconsize' => array(
+ ],
+ 'iconsize' => [
ApiBase::PARAM_TYPE => 'integer',
ApiBase::PARAM_DFLT => 64,
- ),
- 'prop' => array(
+ ],
+ 'prop' => [
ApiBase::PARAM_TYPE => array_keys( self::getPropertyList() ),
ApiBase::PARAM_DFLT => 'id|label|description|class|exists',
ApiBase::PARAM_ISMULTI => true,
- ),
- 'root' => array(
+ ],
+ 'root' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => '',
- ),
- );
- Hooks::run( 'TranslateGetAPIMessageGroupsParameterList', array( &$allowedParams ) );
+ ],
+ ];
+ Hooks::run( 'TranslateGetAPIMessageGroupsParameterList', [ &$allowedParams ] );
return $allowedParams;
}
@@ -280,7 +287,7 @@ class ApiQueryMessageGroups extends ApiQueryBase {
* @return array
*/
protected static function getPropertyList() {
- $properties = array(
+ $properties = [
'id' => ' id - Include id of the group',
'label' => ' label - Include label of the group',
'description' => ' description - Include description of the group',
@@ -299,17 +306,17 @@ class ApiQueryMessageGroups extends ApiQueryBase {
'setting forced',
'workflowstates' =>
' workflowstates - Include the workflow states for the message group',
- );
+ ];
- Hooks::run( 'TranslateGetAPIMessageGroupsPropertyDescs', array( &$properties ) );
+ Hooks::run( 'TranslateGetAPIMessageGroupsPropertyDescs', [ &$properties ] );
return $properties;
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=query&meta=messagegroups'
=> 'apihelp-query+messagegroups-example-1',
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiQueryMessageTranslations.php b/www/wiki/extensions/Translate/api/ApiQueryMessageTranslations.php
index ccec4634..13eed8b6 100644
--- a/www/wiki/extensions/Translate/api/ApiQueryMessageTranslations.php
+++ b/www/wiki/extensions/Translate/api/ApiQueryMessageTranslations.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -31,28 +31,28 @@ class ApiQueryMessageTranslations extends ApiQueryBase {
$namespace = $handle->getTitle()->getNamespace();
$base = $handle->getKey();
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$res = $dbr->select( 'page',
- array( 'page_namespace', 'page_title' ),
- array(
+ [ 'page_namespace', 'page_title' ],
+ [
'page_namespace' => $namespace,
'page_title ' . $dbr->buildLike( "$base/", $dbr->anyString() ),
- ),
+ ],
__METHOD__,
- array(
+ [
'ORDER BY' => 'page_title',
'USE INDEX' => 'name_title',
- )
+ ]
);
- $titles = array();
+ $titles = [];
foreach ( $res as $row ) {
$titles[] = $row->page_title;
}
- if ( $titles === array() ) {
- return array();
+ if ( $titles === [] ) {
+ return [];
}
$pageInfo = TranslateUtils::getContents( $titles, $namespace );
@@ -65,15 +65,12 @@ class ApiQueryMessageTranslations extends ApiQueryBase {
$title = Title::newFromText( $params['title'] );
if ( !$title ) {
- $this->dieUsage( 'Invalid title', 'invalidtitle' );
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
}
$handle = new MessageHandle( $title );
if ( !$handle->isValid() ) {
- $this->dieUsage(
- 'Title does not correspond to a translatable message',
- 'nomessagefortitle'
- );
+ $this->dieWithError( 'apierror-translate-nomessagefortitle', 'nomessagefortitle' );
}
$namespace = $title->getNamespace();
@@ -90,11 +87,11 @@ class ApiQueryMessageTranslations extends ApiQueryBase {
$tTitle = Title::makeTitle( $namespace, $key );
$tHandle = new MessageHandle( $tTitle );
- $data = array(
+ $data = [
'title' => $tTitle->getPrefixedText(),
'language' => $tHandle->getCode(),
'lasttranslator' => $info[1],
- );
+ ];
$fuzzy = MessageHandle::hasFuzzyString( $info[0] ) || $tHandle->isFuzzy();
@@ -105,34 +102,34 @@ class ApiQueryMessageTranslations extends ApiQueryBase {
$translation = str_replace( TRANSLATE_FUZZY, '', $info[0] );
ApiResult::setContentValue( $data, 'translation', $translation );
- $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $data );
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $data );
if ( !$fit ) {
$this->setContinueEnumParameter( 'offset', $count );
break;
}
}
- $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'message' );
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'message' );
}
public function getAllowedParams() {
- return array(
- 'title' => array(
+ return [
+ 'title' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- 'offset' => array(
+ ],
+ 'offset' => [
ApiBase::PARAM_DFLT => 0,
ApiBase::PARAM_TYPE => 'integer',
ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
- ),
- );
+ ],
+ ];
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=query&meta=messagetranslations&mttitle=MediaWiki:January'
=> 'apihelp-query+messagetranslations-example-1',
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiQueryTranslationAids.php b/www/wiki/extensions/Translate/api/ApiQueryTranslationAids.php
index 8fa06d11..67560df1 100644
--- a/www/wiki/extensions/Translate/api/ApiQueryTranslationAids.php
+++ b/www/wiki/extensions/Translate/api/ApiQueryTranslationAids.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -18,15 +18,12 @@ class ApiTranslationAids extends ApiBase {
$title = Title::newFromText( $params['title'] );
if ( !$title ) {
- $this->dieUsage( 'Invalid title', 'invalidtitle' );
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
}
$handle = new MessageHandle( $title );
if ( !$handle->isValid() ) {
- $this->dieUsage(
- 'Title does not correspond to a translatable message',
- 'nomessagefortitle'
- );
+ $this->dieWithError( 'apierror-translate-nomessagefortitle', 'nomessagefortitle' );
}
if ( (string)$params['group'] !== '' ) {
@@ -36,11 +33,11 @@ class ApiTranslationAids extends ApiBase {
}
if ( !$group ) {
- $this->dieUsage( 'Invalid group', 'invalidgroup' );
+ $this->dieWithError( 'apierror-translate-invalidgroup', 'invalidgroup' );
}
- $data = array();
- $times = array();
+ $data = [];
+ $times = [];
$props = $params['prop'];
$aggregator = new QueryAggregator();
@@ -52,7 +49,9 @@ class ApiTranslationAids extends ApiBase {
$result = $this->getResult();
// Create list of aids, populate web services queries
- $aids = array();
+ $aids = [];
+
+ $dataProvider = new TranslationAidDataProvider( $handle );
foreach ( $props as $type ) {
// Do not proceed if translation aid is not supported for this message group
if ( !isset( $types[$type] ) ) {
@@ -60,11 +59,17 @@ class ApiTranslationAids extends ApiBase {
}
$class = $types[$type];
- $obj = new $class( $group, $handle, $this );
+ $obj = new $class( $group, $handle, $this, $dataProvider );
if ( $obj instanceof QueryAggregatorAware ) {
$obj->setQueryAggregator( $aggregator );
- $obj->populateQueries();
+ try {
+ $obj->populateQueries();
+ } catch ( TranslationHelperException $e ) {
+ $data[$type] = [ 'error' => $e->getMessage() ];
+ // Prevent processing this aids and thus overwriting our error
+ continue;
+ }
}
$aids[$type] = $obj;
@@ -82,7 +87,7 @@ class ApiTranslationAids extends ApiBase {
try {
$aid = $obj->getData();
} catch ( TranslationHelperException $e ) {
- $aid = array( 'error' => $e->getMessage() );
+ $aid = [ 'error' => $e->getMessage() ];
}
if ( isset( $aid['**'] ) ) {
@@ -100,28 +105,28 @@ class ApiTranslationAids extends ApiBase {
public function getAllowedParams() {
$props = array_keys( TranslationAid::getTypes() );
- Hooks::run( 'TranslateTranslationAids', array( &$props ) );
+ Hooks::run( 'TranslateTranslationAids', [ &$props ] );
- return array(
- 'title' => array(
+ return [
+ 'title' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- 'group' => array(
+ ],
+ 'group' => [
ApiBase::PARAM_TYPE => 'string',
- ),
- 'prop' => array(
+ ],
+ 'prop' => [
ApiBase::PARAM_DFLT => implode( '|', $props ),
ApiBase::PARAM_TYPE => $props,
ApiBase::PARAM_ISMULTI => true,
- ),
- );
+ ],
+ ];
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=translationaids&title=MediaWiki:January/fi'
=> 'apihelp-translationaids-example-1',
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiSearchTranslations.php b/www/wiki/extensions/Translate/api/ApiSearchTranslations.php
index 7fa29e3c..d2787a0c 100644
--- a/www/wiki/extensions/Translate/api/ApiSearchTranslations.php
+++ b/www/wiki/extensions/Translate/api/ApiSearchTranslations.php
@@ -2,11 +2,16 @@
/**
* API module for search translations
* @since 2015.07
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
class ApiSearchTranslations extends ApiBase {
public function execute() {
global $wgTranslateTranslationServices;
+
+ if ( !$this->getAvailableTranslationServices() ) {
+ $this->dieWithError( 'apierror-translate-notranslationservices' );
+ }
+
$params = $this->extractRequestParams();
$config = $wgTranslateTranslationServices[$params['service']];
@@ -23,19 +28,19 @@ class ApiSearchTranslations extends ApiBase {
$searchResults = $server->search(
$params['query'],
$params,
- array( '', '' )
+ [ '', '' ]
);
$documents = $server->getDocuments( $searchResults );
$total = $server->getTotalHits( $searchResults );
}
- $result->addValue( array( 'search', 'metadata' ), 'total', $total );
+ $result->addValue( [ 'search', 'metadata' ], 'total', $total );
$result->addValue( 'search', 'translations', $documents );
}
protected function getAvailableTranslationServices() {
global $wgTranslateTranslationServices;
- $good = array();
+ $good = [];
foreach ( $wgTranslateTranslationServices as $id => $config ) {
if ( TTMServer::factory( $config ) instanceof SearchableTTMServer ) {
$good[] = $id;
@@ -46,72 +51,81 @@ class ApiSearchTranslations extends ApiBase {
}
protected function getAllowedFilters() {
- return array(
+ return [
'',
'translated',
'fuzzy',
'untranslated'
- );
+ ];
}
public function getAllowedParams() {
- global $wgLanguageCode;
+ global $wgLanguageCode,
+ $wgTranslateTranslationDefaultService;
$available = $this->getAvailableTranslationServices();
+
$filters = $this->getAllowedFilters();
- return array(
- 'service' => array(
+ $ret = [
+ 'service' => [
ApiBase::PARAM_TYPE => $available,
- ApiBase::PARAM_DFLT => 'TTMServer',
- ),
- 'query' => array(
+ ],
+ 'query' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- 'sourcelanguage' => array(
+ ],
+ 'sourcelanguage' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => $wgLanguageCode,
- ),
- 'language' => array(
+ ],
+ 'language' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => '',
- ),
- 'group' => array(
+ ],
+ 'group' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => '',
- ),
- 'filter' => array(
+ ],
+ 'filter' => [
ApiBase::PARAM_TYPE => $filters,
ApiBase::PARAM_DFLT => '',
- ),
- 'match' => array(
+ ],
+ 'match' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => '',
- ),
- 'case' => array(
+ ],
+ 'case' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => '0',
- ),
- 'offset' => array(
+ ],
+ 'offset' => [
ApiBase::PARAM_TYPE => 'integer',
ApiBase::PARAM_DFLT => 0,
- ),
- 'limit' => array(
+ ],
+ 'limit' => [
ApiBase::PARAM_DFLT => 25,
- ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_TYPE => 'limit',
ApiBase::PARAM_MIN => 1,
ApiBase::PARAM_MAX => ApiBase::LIMIT_SML1,
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_SML2
- ),
- );
+ ],
+ ];
+
+ if ( $available ) {
+ // Don't add this if no services are available, it makes
+ // ApiStructureTest unhappy
+ $ret['service'][ApiBase::PARAM_DFLT] = $wgTranslateTranslationDefaultService;
+ }
+
+ return $ret;
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=searchtranslations&language=fr&query=aide'
=> 'apihelp-searchtranslations-example-1',
'action=searchtranslations&language=fr&query=edit&filter=untranslated'
=> 'apihelp-searchtranslations-example-2',
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiStatsQuery.php b/www/wiki/extensions/Translate/api/ApiStatsQuery.php
index a65c982a..51244e0e 100644
--- a/www/wiki/extensions/Translate/api/ApiStatsQuery.php
+++ b/www/wiki/extensions/Translate/api/ApiStatsQuery.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -18,12 +18,30 @@ abstract class ApiStatsQuery extends ApiQueryBase {
return 'public';
}
+ /**
+ * Implement this to implement input validation and return the name of the target that
+ * is then given to loadStats.
+ * @param array $params
+ * @return string
+ */
+ abstract protected function validateTargetParamater( array $params );
+
+ /**
+ * Implement this to load stats.
+ * @param string $target
+ * @param int $flags See MessageGroupStats for possible flags
+ * @return array[]
+ */
+ abstract protected function loadStatistics( $target, $flags = 0 );
+
public function execute() {
$params = $this->extractRequestParams();
- MessageGroupStats::setTimeLimit( $params['timelimit'] );
- $cache = $this->getData();
+ $target = $this->validateTargetParamater( $params );
+ $cache = $this->loadStatistics( $target, MessageGroupStats::FLAG_CACHE_ONLY );
+
$result = $this->getResult();
+ $incomplete = false;
foreach ( $cache as $item => $stats ) {
if ( $item < $params['offset'] ) {
@@ -31,39 +49,47 @@ abstract class ApiStatsQuery extends ApiQueryBase {
}
if ( $stats[MessageGroupStats::TOTAL] === null ) {
+ $incomplete = true;
$this->setContinueEnumParameter( 'offset', $item );
break;
}
$data = $this->makeItem( $item, $stats );
- $result->addValue( array( 'query', $this->getModuleName() ), null, $data );
+ $result->addValue( [ 'query', $this->getModuleName() ], null, $data );
}
- $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'stats' );
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'stats' );
+
+ if ( $incomplete ) {
+ DeferredUpdates::addCallableUpdate( function () use ( $target ) {
+ $this->loadStatistics( $target );
+ } );
+ }
}
protected function makeItem( $item, $stats ) {
- return array(
+ return [
'total' => $stats[MessageGroupStats::TOTAL],
'translated' => $stats[MessageGroupStats::TRANSLATED],
'fuzzy' => $stats[MessageGroupStats::FUZZY],
'proofread' => $stats[MessageGroupStats::PROOFREAD],
- );
+ ];
}
public function getAllowedParams() {
- return array(
- 'offset' => array(
- ApiBase::PARAM_DFLT => 0,
+ return [
+ 'offset' => [
+ ApiBase::PARAM_DFLT => '0',
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
- ),
- 'timelimit' => array(
+ ],
+ 'timelimit' => [
ApiBase::PARAM_DFLT => 8,
ApiBase::PARAM_TYPE => 'integer',
ApiBase::PARAM_MAX => 10,
ApiBase::PARAM_MIN => 0,
- ),
- );
+ ApiBase::PARAM_DEPRECATED => true, // Since 2018.10
+ ],
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiTTMServer.php b/www/wiki/extensions/Translate/api/ApiTTMServer.php
index a227c81e..bedc0270 100644
--- a/www/wiki/extensions/Translate/api/ApiTTMServer.php
+++ b/www/wiki/extensions/Translate/api/ApiTTMServer.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -17,6 +17,11 @@ class ApiTTMServer extends ApiBase {
public function execute() {
global $wgTranslateTranslationServices;
+
+ if ( !$this->getAvailableTranslationServices() ) {
+ $this->dieWithError( 'apierror-translate-notranslationservices' );
+ }
+
$params = $this->extractRequestParams();
$config = $wgTranslateTranslationServices[$params['service']];
@@ -41,7 +46,7 @@ class ApiTTMServer extends ApiBase {
protected function getAvailableTranslationServices() {
global $wgTranslateTranslationServices;
- $good = array();
+ $good = [];
foreach ( $wgTranslateTranslationServices as $id => $config ) {
if ( isset( $config['public'] ) && $config['public'] === true ) {
$good[] = $id;
@@ -52,32 +57,40 @@ class ApiTTMServer extends ApiBase {
}
public function getAllowedParams() {
+ global $wgTranslateTranslationDefaultService;
$available = $this->getAvailableTranslationServices();
- return array(
- 'service' => array(
+ $ret = [
+ 'service' => [
ApiBase::PARAM_TYPE => $available,
- ApiBase::PARAM_DFLT => 'TTMServer',
- ),
- 'sourcelanguage' => array(
+ ],
+ 'sourcelanguage' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- 'targetlanguage' => array(
+ ],
+ 'targetlanguage' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- 'text' => array(
+ ],
+ 'text' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- );
+ ],
+ ];
+
+ if ( $available ) {
+ // Don't add this if no services are available, it makes
+ // ApiStructureTest unhappy
+ $ret['service'][ApiBase::PARAM_DFLT] = $wgTranslateTranslationDefaultService;
+ }
+
+ return $ret;
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=ttmserver&sourcelanguage=en&targetlanguage=fi&text=Help'
=> 'apihelp-ttmserver-example-1',
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiTranslateSandbox.php b/www/wiki/extensions/Translate/api/ApiTranslateSandbox.php
index 7876d8cb..3aed7170 100644
--- a/www/wiki/extensions/Translate/api/ApiTranslateSandbox.php
+++ b/www/wiki/extensions/Translate/api/ApiTranslateSandbox.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,7 +15,7 @@ class ApiTranslateSandbox extends ApiBase {
public function execute() {
global $wgTranslateUseSandbox;
if ( !$wgTranslateUseSandbox ) {
- $this->dieUsage( 'Sandbox feature is not in use', 'sandboxdisabled' );
+ $this->dieWithError( 'apierror-translate-sandboxdisabled', 'sandboxdisabled' );
}
$params = $this->extractRequestParams();
@@ -41,35 +41,35 @@ class ApiTranslateSandbox extends ApiBase {
// Do validations
foreach ( explode( '|', 'username|password|email' ) as $field ) {
if ( !isset( $params[$field] ) ) {
- $this->dieUsage( "Missing parameter $field", 'missingparam' );
+ $this->dieWithError( [ 'apierror-missingparam', $field ], 'missingparam' );
}
}
$username = $params['username'];
if ( User::getCanonicalName( $username, 'creatable' ) === false ) {
- $this->dieUsage( 'User name is not acceptable', 'invalidusername' );
+ $this->dieWithError( 'noname', 'invalidusername' );
}
$user = User::newFromName( $username );
if ( $user->getId() !== 0 ) {
- $this->dieUsage( 'User name is in use', 'nonfreeusername' );
+ $this->dieWithError( 'userexists', 'nonfreeusername' );
}
$password = $params['password'];
if ( !$user->isValidPassword( $password ) ) {
- $this->dieUsage( 'Password is not acceptable', 'invalidpassword' );
+ $this->dieWithError( 'apierror-translate-sandbox-invalidpassword', 'invalidpassword' );
}
$email = $params['email'];
if ( !Sanitizer::validateEmail( $email ) ) {
- $this->dieUsage( 'Email is not acceptable', 'invalidemail' );
+ $this->dieWithError( 'invalidemailaddress', 'invalidemail' );
}
$user = TranslateSandbox::addUser( $username, $email, $password );
- $output = array( 'user' => array(
+ $output = [ 'user' => [
'name' => $user->getName(),
'id' => $user->getId(),
- ) );
+ ] ];
$user->setOption( 'language', $this->getContext()->getLanguage()->getCode() );
$user->saveSettings();
@@ -78,9 +78,7 @@ class ApiTranslateSandbox extends ApiBase {
}
protected function doDelete() {
- if ( !$this->getUser()->isAllowed( 'translate-sandboxmanage' ) ) {
- $this->dieUsage( 'Access denied', 'missingperms' );
- }
+ $this->checkUserRightsAny( 'translate-sandboxmanage' );
$params = $this->extractRequestParams();
@@ -93,7 +91,10 @@ class ApiTranslateSandbox extends ApiBase {
try {
TranslateSandbox::deleteUser( $user );
} catch ( MWException $e ) {
- $this->dieUsage( $e->getMessage(), 'invalidparam' );
+ $this->dieWithError(
+ [ 'apierror-translate-sandbox-invalidparam', wfEscapeWikiText( $e->getMessage() ) ],
+ 'invalidparam'
+ );
}
$logEntry = new ManualLogEntry( 'translatorsandbox', 'rejected' );
@@ -105,9 +106,7 @@ class ApiTranslateSandbox extends ApiBase {
}
protected function doPromote() {
- if ( !$this->getUser()->isAllowed( 'translate-sandboxmanage' ) ) {
- $this->dieUsage( 'Access denied', 'missingperms' );
- }
+ $this->checkUserRightsAny( 'translate-sandboxmanage' );
$params = $this->extractRequestParams();
@@ -117,7 +116,10 @@ class ApiTranslateSandbox extends ApiBase {
try {
TranslateSandbox::promoteUser( $user );
} catch ( MWException $e ) {
- $this->dieUsage( $e->getMessage(), 'invalidparam' );
+ $this->dieWithError(
+ [ 'apierror-translate-sandbox-invalidparam', wfEscapeWikiText( $e->getMessage() ) ],
+ 'invalidparam'
+ );
}
TranslateSandbox::sendEmail( $this->getUser(), $user, 'promotion' );
@@ -125,15 +127,13 @@ class ApiTranslateSandbox extends ApiBase {
$logEntry = new ManualLogEntry( 'translatorsandbox', 'promoted' );
$logEntry->setPerformer( $this->getUser() );
$logEntry->setTarget( $user->getUserPage() );
- $logEntry->setParameters( array(
+ $logEntry->setParameters( [
'4::userid' => $user->getId(),
- ) );
+ ] );
$logid = $logEntry->insert();
$logEntry->publish( $logid );
- $user->addNewUserLogEntry( 'tsbpromoted' );
$this->createUserPage( $user );
- Hooks::run( 'AddNewAccount', array( $user, false ) );
}
}
@@ -146,7 +146,10 @@ class ApiTranslateSandbox extends ApiBase {
try {
TranslateSandbox::sendEmail( $this->getUser(), $user, 'reminder' );
} catch ( MWException $e ) {
- $this->dieUsage( $e->getMessage(), 'invalidparam' );
+ $this->dieWithError(
+ [ 'apierror-translate-sandbox-invalidparam', wfEscapeWikiText( $e->getMessage() ) ],
+ 'invalidparam'
+ );
}
}
}
@@ -188,23 +191,23 @@ class ApiTranslateSandbox extends ApiBase {
}
public function getAllowedParams() {
- return array(
- 'do' => array(
- ApiBase::PARAM_TYPE => array( 'create', 'delete', 'promote', 'remind' ),
+ return [
+ 'do' => [
+ ApiBase::PARAM_TYPE => [ 'create', 'delete', 'promote', 'remind' ],
ApiBase::PARAM_REQUIRED => true,
- ),
- 'userid' => array(
+ ],
+ 'userid' => [
ApiBase::PARAM_TYPE => 'integer',
ApiBase::PARAM_DFLT => 0,
ApiBase::PARAM_ISMULTI => true,
- ),
- 'token' => array(
+ ],
+ 'token' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- 'username' => array( ApiBase::PARAM_TYPE => 'string' ),
- 'password' => array( ApiBase::PARAM_TYPE => 'string' ),
- 'email' => array( ApiBase::PARAM_TYPE => 'string' ),
- );
+ ],
+ 'username' => [ ApiBase::PARAM_TYPE => 'string' ],
+ 'password' => [ ApiBase::PARAM_TYPE => 'string' ],
+ 'email' => [ ApiBase::PARAM_TYPE => 'string' ],
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiTranslationCheck.php b/www/wiki/extensions/Translate/api/ApiTranslationCheck.php
new file mode 100644
index 00000000..b4921b4b
--- /dev/null
+++ b/www/wiki/extensions/Translate/api/ApiTranslationCheck.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * @since 2017.10
+ * @license GPL-2.0-or-later
+ */
+class ApiTranslationCheck extends ApiBase {
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $title = Title::newFromText( $params[ 'title' ] );
+ if ( !$title ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+ }
+ $handle = new MessageHandle( $title );
+ $translation = $params[ 'translation' ];
+
+ $checkResults = $this->getWarnings( $handle, $translation );
+
+ $warnings = [];
+ foreach ( $checkResults as $item ) {
+ $key = array_shift( $item );
+ $msg = $this->getContext()->msg( $key, $item )->parse();
+ $this->getResult()->addValue( 'warnings', null, $msg );
+ }
+ }
+
+ public function getWarnings( MessageHandle $handle, $translation ) {
+ if ( $translation === '' ) {
+ return [];
+ }
+
+ if ( $handle->isDoc() || !$handle->isValid() ) {
+ return [];
+ }
+
+ $checker = $handle->getGroup()->getChecker();
+ if ( !$checker ) {
+ return [];
+ }
+
+ $definition = $this->getDefinition( $handle );
+ $message = new FatMessage( $handle->getKey(), $definition );
+ $message->setTranslation( $translation );
+
+ $checks = $checker->checkMessage( $message, $handle->getCode() );
+ if ( $checks === [] ) {
+ return [];
+ }
+
+ return $checks;
+ }
+
+ private function getDefinition( MessageHandle $handle ) {
+ $group = $handle->getGroup();
+ if ( method_exists( $group, 'getMessageContent' ) ) {
+ return $group->getMessageContent( $handle );
+ } else {
+ return $group->getMessage( $handle->getKey(), $group->getSourceLanguage() );
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'translation' => [
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ ];
+ }
+
+ public function isInternal() {
+ return true;
+ }
+}
diff --git a/www/wiki/extensions/Translate/api/ApiTranslationReview.php b/www/wiki/extensions/Translate/api/ApiTranslationReview.php
index 78e07f21..d8fb8045 100644
--- a/www/wiki/extensions/Translate/api/ApiTranslationReview.php
+++ b/www/wiki/extensions/Translate/api/ApiTranslationReview.php
@@ -3,7 +3,7 @@
* API module for marking translations as reviewed
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,15 +15,13 @@ class ApiTranslationReview extends ApiBase {
protected static $right = 'translate-messagereview';
public function execute() {
- if ( !$this->getUser()->isAllowed( self::$right ) ) {
- $this->dieUsage( 'Permission denied', 'permissiondenied' );
- }
+ $this->checkUserRightsAny( self::$right );
$params = $this->extractRequestParams();
$revision = Revision::newFromId( $params['revision'] );
if ( !$revision ) {
- $this->dieUsage( 'Invalid revision', 'invalidrevision' );
+ $this->dieWithError( [ 'apierror-nosuchrevid', $params['revision'] ], 'invalidrevision' );
}
$error = self::getReviewBlockers( $this->getUser(), $revision );
@@ -32,34 +30,34 @@ class ApiTranslationReview extends ApiBase {
// Everything is okay
break;
case 'permissiondenied':
- $this->dieUsage( 'Permission denied', $error );
+ $this->dieWithError( 'apierror-permissiondenied-generic', 'permissiondenied' );
break; // Unreachable, but throws off code analyzer.
case 'blocked':
- $this->dieUsage( 'You have been blocked', $error );
+ $this->dieBlocked( $this->getUser()->getBlock() );
break; // Unreachable, but throws off code analyzer.
case 'unknownmessage':
- $this->dieUsage( 'Unknown message', $error );
+ $this->dieWithError( 'apierror-translate-unknownmessage', $error );
break; // Unreachable, but throws off code analyzer.
case 'owntranslation':
- $this->dieUsage( 'Cannot review own translations', $error );
+ $this->dieWithError( 'apierror-translate-owntranslation', $error );
break; // Unreachable, but throws off code analyzer.
case 'fuzzymessage':
- $this->dieUsage( 'Cannot review fuzzy translations', $error );
+ $this->dieWithError( 'apierror-translate-fuzzymessage', $error );
break; // Unreachable, but throws off code analyzer.
default:
- $this->dieUsage( 'Unknown error', $error );
+ $this->dieWithError( [ 'apierror-unknownerror', $error ], $error );
}
$ok = self::doReview( $this->getUser(), $revision );
if ( !$ok ) {
- $this->setWarning( 'Already marked as reviewed by you' );
+ $this->addWarning( 'apiwarn-translate-alreadyreviewedbyyou' );
}
- $output = array( 'review' => array(
+ $output = [ 'review' => [
'title' => $revision->getTitle()->getPrefixedText(),
'pageid' => $revision->getPage(),
'revision' => $revision->getId()
- ) );
+ ] ];
$this->getResult()->addValue( null, $this->getModuleName(), $output );
}
@@ -69,17 +67,17 @@ class ApiTranslationReview extends ApiBase {
* @param User $user
* @param Revision $revision
* @param null|string $comment
- * @return Bool, whether the action was recorded.
+ * @return bool whether the action was recorded.
*/
public static function doReview( User $user, Revision $revision, $comment = null ) {
$dbw = wfGetDB( DB_MASTER );
$table = 'translate_reviews';
- $row = array(
+ $row = [
'trr_user' => $user->getId(),
'trr_page' => $revision->getPage(),
'trr_revision' => $revision->getId(),
- );
- $options = array( 'IGNORE' );
+ ];
+ $options = [ 'IGNORE' ];
$dbw->insert( $table, $row, __METHOD__, $options );
if ( !$dbw->affectedRows() ) {
@@ -92,15 +90,15 @@ class ApiTranslationReview extends ApiBase {
$entry->setPerformer( $user );
$entry->setTarget( $title );
$entry->setComment( $comment );
- $entry->setParameters( array(
+ $entry->setParameters( [
'4::revision' => $revision->getId(),
- ) );
+ ] );
$logid = $entry->insert();
$entry->publish( $logid );
$handle = new MessageHandle( $title );
- Hooks::run( 'TranslateEventTranslationReview', array( $handle ) );
+ Hooks::run( 'TranslateEventTranslationReview', [ $handle ] );
return true;
}
@@ -147,22 +145,22 @@ class ApiTranslationReview extends ApiBase {
}
public function getAllowedParams() {
- return array(
- 'revision' => array(
+ return [
+ 'revision' => [
ApiBase::PARAM_TYPE => 'integer',
ApiBase::PARAM_REQUIRED => true,
- ),
- 'token' => array(
+ ],
+ 'token' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- );
+ ],
+ ];
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=translationreview&revision=1&token=foo'
=> 'apihelp-translationreview-example-1',
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/api/ApiTranslationStash.php b/www/wiki/extensions/Translate/api/ApiTranslationStash.php
index caa4fdaa..dad11719 100644
--- a/www/wiki/extensions/Translate/api/ApiTranslationStash.php
+++ b/www/wiki/extensions/Translate/api/ApiTranslationStash.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -19,14 +19,14 @@ class ApiTranslationStash extends ApiBase {
// The user we are operating on, not necessarly the user making the request
$user = $this->getUser();
- if ( isset( $params['username'] ) ){
+ if ( isset( $params['username'] ) ) {
if ( $this->getUser()->isAllowed( 'translate-sandboxmanage' ) ) {
$user = User::newFromName( $params['username'] );
if ( !$user ) {
- $this->dieUsageMsg( array( 'invalidparam', 'username' ) );
+ $this->dieWithError( [ 'apierror-badparameter', 'username' ], 'invalidparam' );
}
} else {
- $this->dieUsageMsg( array( 'invalidparam', 'username' ) );
+ $this->dieWithError( [ 'apierror-badparameter', 'username' ], 'invalidparam' );
}
}
@@ -35,10 +35,10 @@ class ApiTranslationStash extends ApiBase {
if ( $action === 'add' ) {
if ( !isset( $params['title'] ) ) {
- $this->dieUsageMsg( array( 'missingparam', 'title' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'title' ] );
}
if ( !isset( $params['translation'] ) ) {
- $this->dieUsageMsg( array( 'missingparam', 'translation' ) );
+ $this->dieWithError( [ 'apierror-missingparam', 'translation' ] );
}
// @todo: Return value of Title::newFromText not checked
@@ -52,7 +52,7 @@ class ApiTranslationStash extends ApiBase {
}
if ( $action === 'query' ) {
- $output['translations'] = array();
+ $output['translations'] = [];
$translations = $stash->getTranslations( $user );
foreach ( $translations as $translation ) {
@@ -82,13 +82,13 @@ class ApiTranslationStash extends ApiBase {
$comparison = $group->getMessage( $key, $handle->getCode() );
}
- return array(
+ return [
'title' => $title->getPrefixedText(),
'definition' => $definition,
'translation' => $translation->getValue(),
'comparison' => $comparison,
'metadata' => $translation->getMetadata(),
- );
+ ];
}
public function isWriteMode() {
@@ -100,36 +100,36 @@ class ApiTranslationStash extends ApiBase {
}
public function getAllowedParams() {
- return array(
- 'subaction' => array(
- ApiBase::PARAM_TYPE => array( 'add', 'query' ),
+ return [
+ 'subaction' => [
+ ApiBase::PARAM_TYPE => [ 'add', 'query' ],
ApiBase::PARAM_REQUIRED => true,
- ),
- 'title' => array(
+ ],
+ 'title' => [
ApiBase::PARAM_TYPE => 'string',
- ),
- 'translation' => array(
+ ],
+ 'translation' => [
ApiBase::PARAM_TYPE => 'string',
- ),
- 'metadata' => array(
+ ],
+ 'metadata' => [
ApiBase::PARAM_TYPE => 'string',
- ),
- 'token' => array(
+ ],
+ 'token' => [
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
- ),
- 'username' => array(
+ ],
+ 'username' => [
ApiBase::PARAM_TYPE => 'string',
- ),
- );
+ ],
+ ];
}
protected function getExamplesMessages() {
- return array(
+ return [
'action=translationstash&subaction=add&title=MediaWiki:Jan/fi&translation=tammikuu&metadata={}'
=> 'apihelp-translationstash-example-1',
'action=translationstash&subaction=query'
=> 'apihelp-translationstash-example-2',
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/composer.json b/www/wiki/extensions/Translate/composer.json
index f85f758f..070a6814 100644
--- a/www/wiki/extensions/Translate/composer.json
+++ b/www/wiki/extensions/Translate/composer.json
@@ -14,7 +14,7 @@
"translatewiki.net"
],
"homepage": "https://www.mediawiki.org/wiki/Extension:Translate",
- "license": "GPL-2.0+",
+ "license": "GPL-2.0-or-later",
"authors": [
{
"name": "Niklas Laxström",
@@ -34,25 +34,35 @@
"wiki": "https://www.mediawiki.org/wiki/Extension:Translate"
},
"require": {
- "php": ">=5.3.0",
+ "php": ">=5.4",
"composer/installers": ">=1.0.1",
- "mediawiki/universal-language-selector": "*"
+ "mediawiki/universal-language-selector": "*",
+ "mustangostang/spyc": "0.6.2",
+ "davefx/phplot": "6.2.1"
},
"require-dev": {
- "jakub-onderka/php-parallel-lint": "0.9.2",
- "mediawiki/mediawiki-codesniffer": "0.5.1"
+ "jakub-onderka/php-parallel-lint": "1.0.0",
+ "mediawiki/mediawiki-codesniffer": "24.0.0",
+ "jakub-onderka/php-console-highlighter": "0.3.2",
+ "mediawiki/minus-x": "0.3.1"
},
"suggest": {
"mediawiki/babel": "Users can easily indicate their language proficiency on their user page",
"mediawiki/translation-notifications": "Manage communication with translators",
- "mustangostang/spyc": "More recent version of the bundled spyc library",
- "romaricdrigon/metayaml": "If you want to validate message group configurations",
- "ruflin/elastica": "Support for translation memory and search in ElasticSearch"
+ "romaricdrigon/metayaml": "If you want to validate message group configurations"
},
"scripts": {
+ "fix": [
+ "phpcbf",
+ "minus-x fix ."
+ ],
"test": [
- "parallel-lint . --exclude vendor --exclude extensions",
- "phpcs -p -s"
+ "parallel-lint . --exclude vendor --exclude node_modules --exclude extensions",
+ "phpcs -p -s",
+ "minus-x check ."
]
+ },
+ "extra": {
+ "phan-taint-check-plugin": "1.5.0"
}
}
diff --git a/www/wiki/extensions/Translate/data/group-yaml-schema.yaml b/www/wiki/extensions/Translate/data/group-yaml-schema.yaml
index ed13ff95..445a7ab9 100644
--- a/www/wiki/extensions/Translate/data/group-yaml-schema.yaml
+++ b/www/wiki/extensions/Translate/data/group-yaml-schema.yaml
@@ -27,6 +27,12 @@ root:
sourcelanguage:
_type: text
_description: defaults to "en"
+ projectPage:
+ _type: text
+ _description: Title of the page that explains the group
+ translatorCategory:
+ _type: text
+ _description: Name of the category for translators of this group
MANGLER:
_type: array
_children:
@@ -46,9 +52,12 @@ root:
INSERTABLES:
_type: array
_children:
- class:
+ class: # for supplying one class
_type: text
- _not_empty: true
+ classes: # for supplying multiple
+ _type: prototype
+ _prototype:
+ _type: text
TAGS:
_type: prototype
_prototype:
diff --git a/www/wiki/extensions/Translate/data/plural-gettext.txt b/www/wiki/extensions/Translate/data/plural-gettext.txt
index f0561dc1..e3800aea 100644
--- a/www/wiki/extensions/Translate/data/plural-gettext.txt
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/extension-wip.json b/www/wiki/extensions/Translate/extension-wip.json
new file mode 100644
index 00000000..23bc1c5e
--- /dev/null
+++ b/www/wiki/extensions/Translate/extension-wip.json
@@ -0,0 +1,1013 @@
+{
+ "name": "Translate",
+ "type": "specialpage",
+ "author": [
+ "Niklas Laxström",
+ "Santhosh Thottingal",
+ "Siebrand Mazeland",
+ "..."
+ ],
+ "version": "2019-04-24",
+ "url": "https://www.mediawiki.org/wiki/Extension:Translate",
+ "descriptionmsg": "translate-desc",
+ "license-name": "GPL-2.0-or-later",
+ "requires": {
+ "MediaWiki": ">= 1.31.0"
+ },
+ "callback": "TranslateHooks::setupTranslate",
+ "load_composer_autoloader": true,
+ "manifest_version": 2,
+ "namespaces": [
+ {
+ "id": 1198,
+ "constant": "NS_TRANSLATIONS",
+ "name": "Translations"
+ },
+ {
+ "id": 1199,
+ "constant": "NS_TRANSLATIONS_TALK",
+ "name": "Translations_talk"
+ }
+ ],
+ "AutoloadClasses": {
+ "AggregateMessageGroup": "messagegroups/AggregateMessageGroup.php",
+ "AmdFFS": "ffs/AmdFFS.php",
+ "AndroidXmlFFS": "ffs/AndroidXmlFFS.php",
+ "ApertiumWebService": "webservices/ApertiumWebService.php",
+ "ApiAggregateGroups": "api/ApiAggregateGroups.php",
+ "ApiGroupReview": "api/ApiGroupReview.php",
+ "ApiQueryLanguageStats": "api/ApiQueryLanguageStats.php",
+ "ApiQueryMessageCollection": "api/ApiQueryMessageCollection.php",
+ "ApiQueryMessageGroups": "api/ApiQueryMessageGroups.php",
+ "ApiQueryMessageGroupStats": "api/ApiQueryMessageGroupStats.php",
+ "ApiQueryMessageTranslations": "api/ApiQueryMessageTranslations.php",
+ "ApiSearchTranslations": "api/ApiSearchTranslations.php",
+ "ApiStatsQuery": "api/ApiStatsQuery.php",
+ "ApiTranslateSandbox": "api/ApiTranslateSandbox.php",
+ "ApiTranslationAids": "api/ApiQueryTranslationAids.php",
+ "ApiTranslationCheck": "api/ApiTranslationCheck.php",
+ "ApiTranslationReview": "api/ApiTranslationReview.php",
+ "ApiTranslationStash": "api/ApiTranslationStash.php",
+ "ApiTTMServer": "api/ApiTTMServer.php",
+ "AppleFFS": "ffs/AppleFFS.php",
+ "ArrayFlattener": "utils/ArrayFlattener.php",
+ "CachedMessageIndex": "utils/MessageIndex.php",
+ "CaighdeanWebService": "webservices/CaighdeanWebService.php",
+ "CDBMessageIndex": "utils/MessageIndex.php",
+ "CombinedInsertablesSuggester": "insertables/CombinedInsertablesSuggester.php",
+ "ComplexMessages": "ffs/MediaWikiComplexMessages.php",
+ "CrossLanguageTranslationSearchQuery": "ttmserver/CrossLanguageTranslationSearchQuery.php",
+ "CurrentTranslationAid": "translationaids/CurrentTranslationAid.php",
+ "CxserverWebService": "webservices/CxserverWebService.php",
+ "DatabaseMessageIndex": "utils/MessageIndex.php",
+ "DatabaseTTMServer": "ttmserver/DatabaseTTMServer.php",
+ "DocumentationAid": "translationaids/DocumentationAid.php",
+ "DtdFFS": "ffs/DtdFFS.php",
+ "ElasticSearchTTMServer": "ttmserver/ElasticSearchTTMServer.php",
+ "ExternalMessageSourceStateComparator": "utils/ExternalMessageSourceStateComparator.php",
+ "ExternalMessageSourceStateImporter": "utils/ExternalMessageSourceStateImporter.php",
+ "FakeTTMServer": "ttmserver/FakeTTMServer.php",
+ "FatMessage": "Message.php",
+ "FCFontFinder": "utils/Font.php",
+ "FFS": "ffs/FFS.php",
+ "FileBasedMessageGroup": "messagegroups/FileBasedMessageGroup.php",
+ "FileCachedMessageIndex": "utils/MessageIndex.php",
+ "FlatPhpFFS": "ffs/FlatPhpFFS.php",
+ "FuzzyBot": "utils/FuzzyBot.php",
+ "FuzzyLikeThis": "ttmserver/FuzzyLikeThis.php",
+ "GettextDocumentationAid": "translationaids/GettextDocumentationAid.php",
+ "GettextFFS": "ffs/GettextFFS.php",
+ "GettextPluralException": "ffs/GettextFFS.php",
+ "HashMessageIndex": "utils/MessageIndex.php",
+ "HTMLJsSelectToInputField": "utils/HTMLJsSelectToInputField.php",
+ "IniFFS": "ffs/IniFFS.php",
+ "InOtherLanguagesAid": "translationaids/InOtherLanguagesAid.php",
+ "Insertable": "insertables/Insertable.php",
+ "InsertablesAid": "translationaids/InsertablesAid.php",
+ "InsertablesSuggester": "insertables/InsertablesSuggester.php",
+ "JavaFFS": "ffs/JavaFFS.php",
+ "JavaScriptFFS": "ffs/JavaScriptFFS.php",
+ "JsonFFS": "ffs/JsonFFS.php",
+ "JsSelectToInput": "utils/JsSelectToInput.php",
+ "MachineTranslationAid": "translationaids/MachineTranslationAid.php",
+ "MagicWordsCM": "ffs/MediaWikiComplexMessages.php",
+ "MediaWikiExtensionMessageGroup": "messagegroups/MediaWikiExtensionMessageGroup.php",
+ "MediaWikiInsertablesSuggester": "insertables/MediaWikiInsertablesSuggester.php",
+ "MediaWikiMessageChecker": "MediaWikiMessageChecker.php",
+ "MessageChangeStorage": "utils/MessageChangeStorage.php",
+ "MessageChecker": "MessageChecks.php",
+ "MessageCollection": "MessageCollection.php",
+ "MessageDefinitionAid": "translationaids/MessageDefinitionAid.php",
+ "MessageDefinitions": "MessageCollection.php",
+ "MessageGroup": "messagegroups/MessageGroup.php",
+ "MessageGroupBase": "messagegroups/MessageGroupBase.php",
+ "MessageGroupCache": "utils/MessageGroupCache.php",
+ "MessageGroupConfigurationParser": "MessageGroupConfigurationParser.php",
+ "MessageGroupOld": "messagegroups/MessageGroupOld.php",
+ "MessageGroups": "MessageGroups.php",
+ "MessageGroupStates": "utils/MessageGroupStates.php",
+ "MessageGroupStatesUpdaterJob": "utils/MessageGroupStatesUpdaterJob.php",
+ "MessageGroupStats": "utils/MessageGroupStats.php",
+ "MessageGroupStatsRebuildJob": "utils/MessageGroupStatsRebuildJob.php",
+ "MessageHandle": "utils/MessageHandle.php",
+ "MessageIndex": "utils/MessageIndex.php",
+ "MessageIndexRebuildJob": "utils/MessageIndexRebuildJob.php",
+ "MessageUpdateJob": "utils/MessageUpdateJob.php",
+ "MessageWebImporter": "utils/MessageWebImporter.php",
+ "MetaYamlSchemaExtender": "MetaYamlSchemaExtender.php",
+ "MicrosoftWebService": "webservices/MicrosoftWebService.php",
+ "MockFileBasedMessageGroup": "tests/phpunit/MockFileBasedMessageGroup.php",
+ "MockMessageCollectionForExport": "tests/phpunit/MockMessageCollectionForExport.php",
+ "MockWikiMessageGroup": "tests/phpunit/MockWikiMessageGroup.php",
+ "NamespaceCM": "ffs/MediaWikiComplexMessages.php",
+ "NumericalParameterInsertablesSuggester": "insertables/NumericalParameterInsertablesSuggester.php",
+ "PageTranslationHooks": "tag/PageTranslationHooks.php",
+ "PageTranslationLogFormatter": "tag/PageTranslationLogFormatter.php",
+ "PHPVariableLoader": "utils/ResourceLoader.php",
+ "PremadeIntuitionTextdomains": "ffs/IntuitionTextdomains.php",
+ "PremadeMediawikiExtensionGroups": "ffs/MediaWikiExtensions.php",
+ "QueryAggregator": "webservices/QueryAggregator.php",
+ "QueryAggregatorAware": "webservices/QueryAggregatorAware.php",
+ "QueryAggregatorAwareTranslationAid": "translationaids/QueryAggregatorAwareTranslationAid.php",
+ "ReadableTTMServer": "ttmserver/Interfaces.php",
+ "RecentAdditionsMessageGroup": "messagegroups/RecentAdditionsMessageGroup.php",
+ "RecentMessageGroup": "messagegroups/RecentMessageGroup.php",
+ "RemoteTTMServer": "ttmserver/RemoteTTMServer.php",
+ "RemoteTTMServerWebService": "webservices/RemoteTTMServerWebService.php",
+ "RESTBaseWebService": "webservices/RESTBaseWebService.php",
+ "ReviewPerLanguageStats": "specials/SpecialTranslationStats.php",
+ "RevTag": "utils/RevTag.php",
+ "SandboxMessageGroup": "messagegroups/SandboxMessageGroup.php",
+ "SearchableTTMServer": "ttmserver/Interfaces.php",
+ "SerializedMessageIndex": "utils/MessageIndex.php",
+ "ShapadoJsFFS": "ffs/JavaScriptFFS.php",
+ "SimpleFFS": "ffs/SimpleFFS.php",
+ "SolrTTMServer": "ttmserver/SolrTTMServer.php",
+ "SpecialAggregateGroups": "specials/SpecialAggregateGroups.php",
+ "SpecialExportTranslations": "specials/SpecialExportTranslations.php",
+ "SpecialImportTranslations": "specials/SpecialImportTranslations.php",
+ "SpecialLanguageStats": "specials/SpecialLanguageStats.php",
+ "SpecialMagic": "specials/SpecialMagic.php",
+ "SpecialManageGroups": "specials/SpecialManageGroups.php",
+ "SpecialManageTranslatorSandbox": "specials/SpecialManageTranslatorSandbox.php",
+ "SpecialMessageGroupStats": "specials/SpecialMessageGroupStats.php",
+ "SpecialPageAliasesCM": "ffs/MediaWikiComplexMessages.php",
+ "SpecialPageMigration": "tag/SpecialPageMigration.php",
+ "SpecialPagePreparation": "tag/SpecialPagePreparation.php",
+ "SpecialPageTranslation": "tag/SpecialPageTranslation.php",
+ "SpecialPageTranslationDeletePage": "tag/SpecialPageTranslationDeletePage.php",
+ "SpecialPageTranslationMovePage": "tag/SpecialPageTranslationMovePage.php",
+ "SpecialSearchTranslations": "specials/SpecialSearchTranslations.php",
+ "SpecialSupportedLanguages": "specials/SpecialSupportedLanguages.php",
+ "SpecialTranslate": "specials/SpecialTranslate.php",
+ "SpecialTranslations": "specials/SpecialTranslations.php",
+ "SpecialTranslationStash": "specials/SpecialTranslationStash.php",
+ "SpecialTranslationStats": "specials/SpecialTranslationStats.php",
+ "StashedTranslation": "stash/StashedTranslation.php",
+ "StatsBar": "utils/StatsBar.php",
+ "StatsTable": "utils/StatsTable.php",
+ "StringMangler": "stringmangler/StringMangler.php",
+ "StringMatcher": "stringmangler/StringMatcher.php",
+ "SupportAid": "translationaids/SupportAid.php",
+ "ThinMessage": "Message.php",
+ "TMessage": "Message.php",
+ "TPException": "tag/TPException.php",
+ "TPParse": "tag/TPParse.php",
+ "TPSection": "tag/TPSection.php",
+ "TranslatablePage": "tag/TranslatablePage.php",
+ "TranslatablePageInsertablesSuggester": "insertables/TranslatablePageInsertablesSuggester.php",
+ "TranslatablePageMoveJob": "tag/TranslatablePageMoveJob.php",
+ "TranslateCliLogger": "scripts/TranslateCliLogger.php",
+ "TranslateDeleteJob": "tag/TranslateDeleteJob.php",
+ "TranslateEditAddons": "TranslateEditAddons.php",
+ "TranslateHooks": "TranslateHooks.php",
+ "TranslateLogFormatter": "utils/TranslateLogFormatter.php",
+ "TranslateMetadata": "utils/TranslateMetadata.php",
+ "TranslateMoveJob": "tag/TranslateMoveJob.php",
+ "TranslatePerLanguageStats": "specials/SpecialTranslationStats.php",
+ "TranslatePreferences": "utils/UserToggles.php",
+ "TranslateRcFilter": "utils/RcFilter.php",
+ "TranslateRegistrationStats": "specials/SpecialTranslationStats.php",
+ "TranslateRenderJob": "tag/TranslateRenderJob.php",
+ "TranslateSandbox": "utils/TranslateSandbox.php",
+ "TranslateSandboxEmailJob": "utils/TranslateSandboxEmailJob.php",
+ "TranslateStatsOutput": "scripts/TranslateStatsOutput.php",
+ "TranslateToolbox": "utils/ToolBox.php",
+ "TranslateUtils": "TranslateUtils.php",
+ "TranslateYaml": "utils/TranslateYaml.php",
+ "TranslationAid": "translationaids/TranslationAid.php",
+ "TranslationAidDataProvider": "translationaids/TranslationAidDataProvider.php",
+ "TranslationHelperException": "utils/TranslationHelpers.php",
+ "TranslationHelpers": "utils/TranslationHelpers.php",
+ "TranslationQuery": "webservices/TranslationQuery.php",
+ "TranslationQueryResponse": "webservices/TranslationQueryResponse.php",
+ "TranslationStashStorage": "stash/TranslationStashStorage.php",
+ "TranslationStats": "utils/TranslationStats.php",
+ "TranslationStatsBase": "specials/SpecialTranslationStats.php",
+ "TranslationStatsInterface": "specials/SpecialTranslationStats.php",
+ "TranslationsUpdateJob": "tag/TranslationsUpdateJob.php",
+ "TranslationWebService": "webservices/TranslationWebService.php",
+ "TranslationWebServiceConfigurationException": "webservices/TranslationWebServiceConfigurationException.php",
+ "TranslationWebServiceException": "webservices/TranslationWebServiceException.php",
+ "TranslationWebServiceInvalidInputException": "webservices/TranslationWebServiceInvalidInputException.php",
+ "TTMServer": "ttmserver/TTMServer.php",
+ "TTMServerAid": "translationaids/TTMServerAid.php",
+ "TTMServerException": "ttmserver/Exceptions.php",
+ "TTMServerMessageUpdateJob": "ttmserver/TTMServerMessageUpdateJob.php",
+ "TuxMessageTable": "utils/TuxMessageTable.php",
+ "UnsupportedTranslationAid": "translationaids/UnsupportedTranslationAid.php",
+ "UpdatedDefinitionAid": "translationaids/UpdatedDefinitionAid.php",
+ "WikiMessageGroup": "messagegroups/WikiMessageGroup.php",
+ "WikiPageMessageGroup": "messagegroups/WikiPageMessageGroup.php",
+ "WorkflowStatesMessageGroup": "messagegroups/WorkflowStatesMessageGroup.php",
+ "WritableTTMServer": "ttmserver/Interfaces.php",
+ "XliffFFS": "ffs/XliffFFS.php",
+ "YamlFFS": "ffs/YamlFFS.php",
+ "YandexWebService": "webservices/YandexWebService.php"
+ },
+ "Hooks": {
+ "ResourceLoaderTestModules": "TranslateHooks::onResourceLoaderTestModules",
+ "UnitTestsList": "TranslateHooks::setupUnitTests",
+ "LoadExtensionSchemaUpdates": "TranslateHooks::schemaUpdates",
+ "ParserTestTables": "TranslateHooks::parserTestTables",
+ "PageContentLanguage": "TranslateHooks::onPageContentLanguage",
+ "ResourceLoaderRegisterModules": "TranslateHooks::onResourceLoaderRegisterModules",
+ "EditPage::showEditForm:initial": "TranslateEditAddons::addTools",
+ "AlternateEdit": "TranslateEditAddons::suppressIntro",
+ "getUserPermissionsErrorsExpensive": "TranslateEditAddons::disallowLangTranslations",
+ "EditPageBeforeEditButtons": "TranslateEditAddons::buttonHack",
+ "LanguageGetTranslatedLanguageNames": "TranslateHooks::translateMessageDocumentationLanguage",
+ "TranslateSupportedLanguages": "TranslateHooks::translateMessageDocumentationLanguage",
+ "ArticlePrepareTextForEdit": "TranslateEditAddons::disablePreSaveTransform",
+ "ParserFirstCallInit": "TranslateHooks::setupTranslateParserFunction",
+ "UserGetReservedNames": "TranslateHooks::onUserGetReservedNames",
+ "LinksUpdate": "TranslateHooks::preventCategorization",
+ "PageContentSaveComplete": "TranslateEditAddons::onSave",
+ "Translate:newTranslation": "TranslateEditAddons::updateTransverTag",
+ "SkinTemplateNavigation::SpecialPage": [
+ "SpecialTranslate::tabify",
+ "SpecialManageGroups::tabify"
+ ],
+ "GetPreferences": [
+ "TranslatePreferences::onGetPreferences",
+ "TranslatePreferences::translationAssistLanguages"
+ ],
+ "ChangesListSpecialPageQuery": "TranslateRcFilter::translationFilter",
+ "SpecialRecentChangesPanel": "TranslateRcFilter::translationFilterForm",
+ "ChangesListSpecialPageStructuredFilters": "TranslateRcFilter::onChangesListSpecialPageStructuredFilters",
+ "BaseTemplateToolbox": "TranslateToolbox::toolboxAllTranslations",
+ "AbortEmailNotification": "TranslateHooks::onAbortEmailNotificationReview",
+ "ArticleDeleteComplete": "TTMServer::onDelete",
+ "TranslateEventMessageMembershipChange": "TTMServer::onGroupChange",
+ "ArticleContentOnDiff": "TranslateEditAddons::displayOnDiff",
+ "SpecialSearchProfiles": "TranslateHooks::searchProfile",
+ "SpecialSearchProfileForm": "TranslateHooks::searchProfileForm",
+ "SpecialSearchSetupEngine": "TranslateHooks::searchProfileSetupEngine",
+ "TitleIsAlwaysKnown": "TranslateHooks::onTitleIsAlwaysKnown",
+ "Translate:MessageGroupStats:isIncluded": [
+ "TranslateHooks::hideDiscouragedFromStats",
+ "TranslateHooks::hideRestrictedFromStats"
+ ],
+ "MakeGlobalVariablesScript": "TranslateHooks::addConfig",
+ "TranslateEventTranslationReview": [
+ "MessageGroupStats::clear",
+ "MessageGroupStatesUpdaterJob::onChange"
+ ],
+ "TranslatePostInitGroups": [
+ "MessageGroups::getCCGroups",
+ "MessageGroups::getTranslatablePages",
+ "MessageGroups::getConfiguredGroups",
+ "MessageGroups::getWorkflowGroups",
+ "MessageGroups::getAggregateGroups"
+ ],
+ "AdminLinks": "TranslateHooks::onAdminLinks",
+ "MergeAccountFromTo": "TranslateHooks::onMergeAccountFromTo",
+ "DeleteAccount": "TranslateHooks::onDeleteAccount",
+ "AbuseFilter-filterAction": "TranslateHooks::onAbuseFilterFilterAction",
+ "AbuseFilter-computeVariable": "TranslateHooks::onAbuseFilterComputeVariable",
+ "AbuseFilter-builder": "TranslateHooks::onAbuseFilterBuilder"
+ },
+ "SpecialPages": {
+ "Translate": "SpecialTranslate",
+ "Translations": "SpecialTranslations",
+ "TranslationStats": "SpecialTranslationStats",
+ "LanguageStats": "SpecialLanguageStats",
+ "MessageGroupStats": "SpecialMessageGroupStats",
+ "ImportTranslations": "SpecialImportTranslations",
+ "ExportTranslations": "SpecialExportTranslations",
+ "ManageMessageGroups": "SpecialManageGroups",
+ "SupportedLanguages": "SpecialSupportedLanguages",
+ "AggregateGroups": "SpecialAggregateGroups",
+ "SearchTranslations": "SpecialSearchTranslations"
+ },
+ "APIListModules": {
+ "messagecollection": "ApiQueryMessageCollection"
+ },
+ "APIMetaModules": {
+ "languagestats": "ApiQueryLanguageStats",
+ "messagegroups": "ApiQueryMessageGroups",
+ "messagegroupstats": "ApiQueryMessageGroupStats",
+ "messagetranslations": "ApiQueryMessageTranslations"
+ },
+ "APIModules": {
+ "aggregategroups": "ApiAggregateGroups",
+ "groupreview": "ApiGroupReview",
+ "translationaids": "ApiTranslationAids",
+ "translationreview": "ApiTranslationReview",
+ "translationcheck": "ApiTranslationCheck",
+ "ttmserver": "ApiTTMServer",
+ "searchtranslations": "ApiSearchTranslations"
+ },
+ "JobClasses": {
+ "MessageGroupStatesUpdaterJob": "MessageGroupStatesUpdaterJob",
+ "MessageGroupStatsRebuildJob": "MessageGroupStatsRebuildJob",
+ "MessageIndexRebuildJob": "MessageIndexRebuildJob",
+ "MessageUpdateJob": "MessageUpdateJob",
+ "TTMServerMessageUpdateJob": "TTMServerMessageUpdateJob"
+ },
+ "LogTypes": [
+ "translationreview"
+ ],
+ "LogActionsHandlers": {
+ "translationreview/message": "TranslateLogFormatter",
+ "translationreview/group": "TranslateLogFormatter"
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "",
+ "remoteExtPath": "Translate"
+ },
+ "ResourceModules": {
+ "ext.translate": {
+ "styles": "resources/css/ext.translate.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.base": {
+ "scripts": "resources/js/ext.translate.base.js",
+ "dependencies": [
+ "ext.translate.hooks",
+ "mediawiki.api",
+ "mediawiki.util"
+ ],
+ "messages": [
+ "translate-js-support-unsaved-warning"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.dropdownmenu": {
+ "styles": "resources/css/ext.translate.dropdownmenu.css",
+ "scripts": "resources/js/ext.translate.dropdownmenu.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.editor": {
+ "scripts": [
+ "resources/js/ext.translate.editor.helpers.js",
+ "resources/js/ext.translate.editor.js",
+ "resources/js/ext.translate.editor.shortcuts.js",
+ "resources/js/ext.translate.pagemode.js",
+ "resources/js/ext.translate.proofread.js"
+ ],
+ "styles": [
+ "resources/css/ext.translate.editor.css",
+ "resources/css/ext.translate.pagemode.css",
+ "resources/css/ext.translate.proofread.css"
+ ],
+ "dependencies": [
+ "ext.translate.base",
+ "ext.translate.dropdownmenu",
+ "ext.translate.hooks",
+ "ext.translate.storage",
+ "jquery.accessKeyLabel",
+ "jquery.autosize",
+ "jquery.makeCollapsible",
+ "jquery.textSelection",
+ "jquery.textchange",
+ "mediawiki.Uri",
+ "mediawiki.api",
+ "mediawiki.jqueryMsg",
+ "mediawiki.language",
+ "mediawiki.notify",
+ "mediawiki.user",
+ "mediawiki.util"
+ ],
+ "messages": [
+ "translate-edit-askpermission",
+ "translate-edit-nopermission",
+ "tux-editor-add-desc",
+ "tux-editor-ask-help",
+ "tux-editor-cancel-button-label",
+ "tux-editor-close-tooltip",
+ "tux-editor-collapse-tooltip",
+ "tux-editor-confirm-button-label",
+ "tux-editor-discard-changes-button-label",
+ "tux-editor-doc-editor-cancel",
+ "tux-editor-doc-editor-placeholder",
+ "tux-editor-doc-editor-save",
+ "tux-editor-edit-desc",
+ "tux-editor-expand-tooltip",
+ "tux-editor-in-other-languages",
+ "tux-editor-loading",
+ "tux-editor-message-desc-less",
+ "tux-editor-message-desc-more",
+ "tux-editor-message-tools-show-editor",
+ "tux-editor-message-tools-delete",
+ "tux-editor-message-tools-history",
+ "tux-editor-message-tools-translations",
+ "tux-editor-message-tools-linktothis",
+ "tux-editor-n-uses",
+ "tux-editor-need-more-help",
+ "tux-editor-outdated-warning",
+ "tux-editor-outdated-warning-diff-link",
+ "tux-editor-paste-original-button-label",
+ "tux-editor-placeholder",
+ "tux-editor-editsummary-placeholder",
+ "tux-editor-proofread-button-label",
+ "tux-editor-save-button-label",
+ "tux-editor-save-failed",
+ "tux-editor-shortcut-info",
+ "tux-editor-skip-button-label",
+ "tux-editor-suggestions-title",
+ "tux-editor-tm-match",
+ "tux-proofread-action-tooltip",
+ "tux-proofread-edit-label",
+ "tux-proofread-translated-by-self",
+ "tux-session-expired",
+ "tux-status-saving",
+ "tux-status-translated",
+ "tux-status-unsaved",
+ "tux-save-unknown-error",
+ "tux-warnings-hide",
+ "tux-warnings-more",
+ "spamprotectiontext"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.groupselector": {
+ "styles": "resources/css/ext.translate.groupselector.less",
+ "scripts": "resources/js/ext.translate.groupselector.js",
+ "dependencies": [
+ "ext.translate.base",
+ "ext.translate.loader",
+ "ext.translate.statsbar",
+ "jquery.ui.position",
+ "mediawiki.jqueryMsg"
+ ],
+ "messages": [
+ "translate-msggroupselector-search-all",
+ "translate-msggroupselector-search-placeholder",
+ "translate-msggroupselector-search-recent",
+ "translate-msggroupselector-view-subprojects"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.hooks": {
+ "scripts": "resources/js/ext.translate.hooks.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.legacy": {
+ "styles": "resources/css/ext.translate.legacy.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.loader": {
+ "styles": "resources/css/ext.translate.loader.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.messagetable": {
+ "scripts": "resources/js/ext.translate.messagetable.js",
+ "styles": "resources/css/ext.translate.messagetable.less",
+ "dependencies": [
+ "ext.translate.base",
+ "ext.translate.hooks",
+ "ext.translate.loader",
+ "ext.translate.parsers",
+ "jquery.textchange",
+ "jquery.throttle-debounce",
+ "mediawiki.Uri",
+ "mediawiki.jqueryMsg",
+ "mediawiki.util"
+ ],
+ "messages": [
+ "api-error-badtoken",
+ "api-error-emptypage",
+ "api-error-unknownerror",
+ "tpt-unknown-page",
+ "translate-edit-title",
+ "tux-edit",
+ "tux-empty-list-all",
+ "tux-empty-list-all-guide",
+ "tux-empty-list-other",
+ "tux-empty-list-other-action",
+ "tux-empty-list-other-guide",
+ "tux-empty-list-other-link",
+ "tux-empty-list-translated",
+ "tux-empty-list-translated-action",
+ "tux-empty-list-translated-guide",
+ "tux-empty-no-messages-to-display",
+ "tux-empty-no-outdated-messages",
+ "tux-empty-nothing-new-to-proofread",
+ "tux-empty-nothing-to-proofread",
+ "tux-empty-show-optional-messages",
+ "tux-empty-there-are-optional",
+ "tux-empty-you-can-help-providing",
+ "tux-empty-you-can-review-already-proofread",
+ "tux-message-filter-advanced-button",
+ "tux-message-filter-placeholder",
+ "tux-message-filter-result",
+ "tux-messagetable-loading-messages",
+ "tux-messagetable-more-messages",
+ "tux-status-fuzzy",
+ "tux-status-optional",
+ "tux-status-proofread",
+ "tux-status-translated"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.messagewebimporter": {
+ "styles": "resources/css/ext.translate.messagewebimporter.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.multiselectautocomplete": {
+ "scripts": "resources/js/ext.translate.multiselectautocomplete.js",
+ "dependencies": [
+ "jquery.ui.autocomplete"
+ ],
+ "targets": [
+ "desktop"
+ ]
+ },
+ "ext.translate.navitoggle": {
+ "skinScripts": {
+ "vector": "resources/js/ext.translate.navitoggle.js"
+ },
+ "skinStyles": {
+ "vector": "resources/css/ext.translate.navitoggle.css"
+ },
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.pagetranslation.uls": {
+ "scripts": "resources/js/ext.translate.pagetranslation.uls.js",
+ "dependencies": [
+ "ext.uls.mediawiki",
+ "mediawiki.util"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.parsers": {
+ "scripts": "resources/js/ext.translate.parsers.js",
+ "dependencies": [
+ "mediawiki.util"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.quickedit": {
+ "styles": "resources/css/ext.translate.quickedit.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.selecttoinput": {
+ "scripts": "resources/js/ext.translate.selecttoinput.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.aggregategroups": {
+ "scripts": "resources/js/ext.translate.special.aggregategroups.js",
+ "dependencies": [
+ "jquery.ui.autocomplete",
+ "mediawiki.api",
+ "mediawiki.util"
+ ],
+ "messages": [
+ "tpt-aggregategroup-add",
+ "tpt-aggregategroup-edit-description",
+ "tpt-aggregategroup-edit-name",
+ "tpt-aggregategroup-remove-confirm",
+ "tpt-aggregategroup-update",
+ "tpt-aggregategroup-update-cancel",
+ "tpt-invalid-group"
+ ],
+ "targets": [
+ "desktop"
+ ]
+ },
+ "ext.translate.special.aggregategroups.styles": {
+ "styles": "resources/css/ext.translate.special.aggregategroups.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.importtranslations": {
+ "scripts": "resources/js/ext.translate.special.importtranslations.js",
+ "dependencies": [
+ "jquery.ui.autocomplete"
+ ],
+ "targets": [
+ "desktop"
+ ]
+ },
+ "ext.translate.special.languagestats": {
+ "scripts": "resources/js/ext.translate.special.languagestats.js",
+ "messages": [
+ "translate-langstats-collapse",
+ "translate-langstats-collapseall",
+ "translate-langstats-expand",
+ "translate-langstats-expandall"
+ ],
+ "dependencies": "jquery.tablesorter",
+ "targets": [
+ "desktop"
+ ]
+ },
+ "ext.translate.special.managegroups": {
+ "styles": "resources/css/ext.translate.special.managegroups.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.managetranslatorsandbox": {
+ "scripts": "resources/js/ext.translate.special.managetranslatorsandbox.js",
+ "dependencies": [
+ "ext.translate.loader",
+ "ext.translate.translationstashstorage",
+ "ext.uls.mediawiki",
+ "jquery.ui.dialog",
+ "mediawiki.api",
+ "mediawiki.jqueryMsg",
+ "mediawiki.language",
+ "mediawiki.notify"
+ ],
+ "messages": [
+ "tsb-accept-all-button-label",
+ "tsb-accept-button-label",
+ "tsb-reject-confirmation",
+ "tsb-accept-confirmation",
+ "tsb-all-languages-button-label",
+ "tsb-didnt-make-any-translations",
+ "tsb-no-requests-from-new-users",
+ "tsb-older-requests",
+ "tsb-reject-all-button-label",
+ "tsb-reject-button-label",
+ "tsb-reminder-failed",
+ "tsb-reminder-link-text",
+ "tsb-reminder-sending",
+ "tsb-reminder-sent",
+ "tsb-reminder-sent-new",
+ "tsb-request-count",
+ "tsb-selected-count",
+ "tsb-translations-current",
+ "tsb-translations-source",
+ "tsb-translations-user",
+ "tsb-user-posted-a-comment"
+ ],
+ "targets": [
+ "desktop"
+ ]
+ },
+ "ext.translate.special.managetranslatorsandbox.styles": {
+ "styles": "resources/css/ext.translate.special.managetranslatorsandbox.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.pagemigration": {
+ "scripts": "resources/js/ext.translate.special.pagemigration.js",
+ "dependencies": [
+ "jquery.ajaxdispatcher",
+ "mediawiki.api",
+ "mediawiki.Title",
+ "mediawiki.ui",
+ "mediawiki.ui.button"
+ ],
+ "messages": [
+ "pm-add-icon-hover-text",
+ "pm-delete-icon-hover-text",
+ "pm-extra-units-warning",
+ "pm-langcode-missing",
+ "pm-old-translations-missing",
+ "pm-page-does-not-exist",
+ "pm-pagename-missing",
+ "pm-pagetitle-invalid",
+ "pm-pagetitle-missing",
+ "pm-swap-icon-hover-text",
+ "pm-on-import-message-text",
+ "pm-on-save-message-text",
+ "pm-savepages-button-label",
+ "pm-cancel-button-label",
+ "tpt-unknown-page"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.pagemigration.styles": {
+ "styles": "resources/css/ext.translate.special.pagemigration.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.pagepreparation": {
+ "scripts": "resources/js/ext.translate.special.pagepreparation.js",
+ "dependencies": [
+ "mediawiki.RegExp",
+ "mediawiki.Title",
+ "mediawiki.diff.styles",
+ "mediawiki.api",
+ "mediawiki.jqueryMsg",
+ "mediawiki.ui"
+ ],
+ "messages": [
+ "pp-already-prepared-message",
+ "pp-pagename-missing",
+ "pp-prepare-message",
+ "pp-save-button-label",
+ "pp-save-message"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.pagepreparation.styles": {
+ "styles": "resources/css/ext.translate.special.pagepreparation.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.pagetranslation": {
+ "scripts": "resources/js/ext.translate.special.pagetranslation.js",
+ "dependencies": [
+ "ext.translate.multiselectautocomplete",
+ "mediawiki.ui.button",
+ "mediawiki.Uri",
+ "user.tokens"
+ ],
+ "targets": [
+ "desktop"
+ ]
+ },
+ "ext.translate.special.pagetranslation.styles": {
+ "styles": "resources/css/ext.translate.special.pagetranslation.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.searchtranslations": {
+ "scripts": "resources/js/ext.translate.special.searchtranslations.js",
+ "dependencies": [
+ "ext.translate.editor",
+ "ext.translate.groupselector",
+ "ext.uls.mediawiki",
+ "mediawiki.Uri",
+ "mediawiki.language"
+ ],
+ "messages": [
+ "translate-search-more-groups-info",
+ "translate-search-more-languages-info"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.searchtranslations.operatorsuggest": {
+ "scripts": "resources/js/ext.translate.special.operatorsuggest.js",
+ "dependencies": [
+ "jquery.ui.autocomplete"
+ ],
+ "targets": [
+ "desktop"
+ ]
+ },
+ "ext.translate.special.searchtranslations.styles": {
+ "styles": "resources/css/ext.translate.special.searchtranslations.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.supportedlanguages": {
+ "styles": "resources/css/ext.translate.special.supportedlanguages.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.translate": {
+ "scripts": "resources/js/ext.translate.special.translate.js",
+ "dependencies": [
+ "ext.translate.base",
+ "ext.translate.editor",
+ "ext.translate.groupselector",
+ "ext.translate.messagetable",
+ "ext.translate.navitoggle",
+ "ext.translate.recentgroups",
+ "ext.translate.workflowselector",
+ "jquery.uls.data",
+ "mediawiki.Uri",
+ "mediawiki.api",
+ "mediawiki.jqueryMsg"
+ ],
+ "messages": [
+ "tpt-discouraged-language-content",
+ "tpt-discouraged-language-force-content",
+ "tpt-discouraged-language-force-header",
+ "tpt-discouraged-language-header",
+ "tux-editor-proofreading-hide-own-translations",
+ "tux-editor-proofreading-show-own-translations"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.translate.styles": {
+ "styles": "resources/css/ext.translate.special.translate.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.translationstash": {
+ "scripts": "resources/js/ext.translate.special.translationstash.js",
+ "styles": "resources/css/ext.translate.special.translationstash.css",
+ "dependencies": [
+ "ext.translate.editor",
+ "ext.translate.messagetable",
+ "ext.translate.translationstashstorage",
+ "ext.uls.mediawiki",
+ "mediawiki.api",
+ "mediawiki.language"
+ ],
+ "messages": [
+ "translate-translationstash-skip-button-label",
+ "translate-translationstash-translations",
+ "tsb-limit-reached-body",
+ "tsb-limit-reached-title"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.translationstats": {
+ "scripts": "resources/js/ext.translate.special.translationstats.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.statsbar": {
+ "styles": "resources/css/ext.translate.statsbar.css",
+ "scripts": "resources/js/ext.translate.statsbar.js",
+ "messages": [
+ "translate-statsbar-tooltip",
+ "translate-statsbar-tooltip-with-fuzzy"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.statstable": {
+ "styles": "resources/css/ext.translate.statstable.less",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.storage": {
+ "scripts": "resources/js/ext.translate.storage.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.tabgroup": {
+ "styles": "resources/css/ext.translate.tabgroup.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.tag.languages": {
+ "styles": "resources/css/ext.translate.tag.languages.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.translationstashstorage": {
+ "scripts": "resources/js/ext.translate.translationstashstorage.js",
+ "dependencies": [
+ "mediawiki.api"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.workflowselector": {
+ "styles": "resources/css/ext.translate.workflowselector.css",
+ "scripts": "resources/js/ext.translate.workflowselector.js",
+ "messages": [
+ "translate-workflow-set-doing",
+ "translate-workflow-state-",
+ "translate-workflowstatus"
+ ],
+ "dependencies": [
+ "ext.translate.dropdownmenu",
+ "mediawiki.api"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "jquery.ajaxdispatcher": {
+ "scripts": "resources/js/jquery.ajaxdispatcher.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "jquery.autosize": {
+ "scripts": "resources/js/jquery.autosize.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "jquery.textchange": {
+ "scripts": "resources/js/jquery.textchange.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ }
+ },
+ "DefaultUserOptions": {
+ "translate": 0,
+ "translate-editlangs": "default",
+ "translate-recent-groups": ""
+ },
+ "AvailableRights": [
+ "translate",
+ "translate-import",
+ "translate-manage",
+ "translate-messagereview",
+ "translate-groupreview"
+ ],
+ "GrantPermissions": {
+ "editpage": {
+ "translate": true
+ }
+ }
+}
diff --git a/www/wiki/extensions/Translate/ffs/AmdFFS.php b/www/wiki/extensions/Translate/ffs/AmdFFS.php
index 7b40bd84..bd759e8f 100644
--- a/www/wiki/extensions/Translate/ffs/AmdFFS.php
+++ b/www/wiki/extensions/Translate/ffs/AmdFFS.php
@@ -17,7 +17,7 @@
* "key2": "anothervalue"
* });
*
- * It also supports the the top-level bundle with a root construction and language indicators.
+ * It also supports the top-level bundle with a root construction and language indicators.
* The following example will give the same messages as above:
* define({
* "root": {
@@ -34,7 +34,7 @@
* @file
* @author Matthias Palmér
* @copyright Copyright © 2011-2015, MetaSolutions AB
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -51,23 +51,23 @@ class AmdFFS extends SimpleFFS {
* @return bool
*/
public static function isValid( $data ) {
- $data = AmdFFS::extractMessagePart( $data );
+ $data = self::extractMessagePart( $data );
return is_array( FormatJson::decode( $data, /*as array*/true ) );
}
public function getFileExtensions() {
- return array( '.js' );
+ return [ '.js' ];
}
/**
- * @param array $data
+ * @param string $data
* @return array Parsed data.
*/
public function readFromVariable( $data ) {
- $authors = AmdFFS::extractAuthors( $data );
- $data = AmdFFS::extractMessagePart( $data );
- $messages = (array) FormatJson::decode( $data, /*as array*/true );
- $metadata = array();
+ $authors = self::extractAuthors( $data );
+ $data = self::extractMessagePart( $data );
+ $messages = (array)FormatJson::decode( $data, /*as array*/true );
+ $metadata = [];
// Take care of regular language bundles, as well as the root bundle.
if ( isset( $messages['root'] ) ) {
@@ -76,11 +76,11 @@ class AmdFFS extends SimpleFFS {
$messages = $this->group->getMangler()->mangle( $messages );
}
- return array(
+ return [
'MESSAGES' => $messages,
'AUTHORS' => $authors,
'METADATA' => $metadata,
- );
+ ];
}
/**
@@ -88,7 +88,7 @@ class AmdFFS extends SimpleFFS {
* @return string
*/
protected function writeReal( MessageCollection $collection ) {
- $messages = array();
+ $messages = [];
$mangler = $this->group->getMangler();
/** @var ThinMessage $m */
@@ -159,11 +159,11 @@ EOT;
}
/**
- * @param array $authors
+ * @param string[] $authors
* @return string
*/
private function authorsList( array $authors ) {
- if ( count( $authors ) === 0 ) {
+ if ( $authors === [] ) {
return '';
}
diff --git a/www/wiki/extensions/Translate/ffs/AndroidXmlFFS.php b/www/wiki/extensions/Translate/ffs/AndroidXmlFFS.php
index 9533e3d8..2e947c61 100644
--- a/www/wiki/extensions/Translate/ffs/AndroidXmlFFS.php
+++ b/www/wiki/extensions/Translate/ffs/AndroidXmlFFS.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -13,21 +13,17 @@
* @ingroup FFS
*/
class AndroidXmlFFS extends SimpleFFS {
- protected static $pluralWords = array(
- 'zero' => 1,
- 'one' => 1,
- 'two' => 1,
- 'few' => 1,
- 'many' => 1,
- 'other' => 1,
- );
+ public function __construct( FileBasedMessageGroup $group ) {
+ parent::__construct( $group );
+ $this->flattener = $this->getFlattener();
+ }
public function supportsFuzzy() {
return 'yes';
}
public function getFileExtensions() {
- return array( '.xml' );
+ return [ '.xml' ];
}
/**
@@ -37,7 +33,7 @@ class AndroidXmlFFS extends SimpleFFS {
public function readFromVariable( $data ) {
$reader = new SimpleXMLElement( $data );
- $messages = array();
+ $messages = [];
$mangler = $this->group->getMangler();
/** @var SimpleXMLElement $element */
@@ -47,11 +43,11 @@ class AndroidXmlFFS extends SimpleFFS {
if ( $element->getName() === 'string' ) {
$value = $this->readElementContents( $element );
} elseif ( $element->getName() === 'plurals' ) {
- $forms = array();
+ $forms = [];
foreach ( $element as $item ) {
$forms[(string)$item['quantity']] = $this->readElementContents( $item );
}
- $value = $this->flattenPlural( $forms );
+ $value = $this->flattener->flattenCLDRPlurals( $forms );
} else {
wfDebug( __METHOD__ . ': Unknown XML element name.' );
continue;
@@ -64,10 +60,26 @@ class AndroidXmlFFS extends SimpleFFS {
$messages[$key] = $value;
}
- return array(
- 'AUTHORS' => array(), // @todo
+ return [
+ 'AUTHORS' => $this->scrapeAuthors( $data ),
'MESSAGES' => $mangler->mangle( $messages ),
- );
+ ];
+ }
+
+ protected function scrapeAuthors( $string ) {
+ $match = [];
+ preg_match( '~<!-- Authors:\n((?:\* .*\n)*)-->~', $string, $match );
+ if ( !$match ) {
+ return [];
+ }
+
+ $authors = $matches = [];
+ preg_match_all( '~\* (.*)~', $match[ 1 ], $matches );
+ foreach ( $matches[1] as $author ) {
+ // PHP7: \u{2011}
+ $authors[] = str_replace( "\xE2\x80\x91\xE2\x80\x91", '--', $author );
+ }
+ return $authors;
}
protected function readElementContents( $element ) {
@@ -82,14 +94,41 @@ class AndroidXmlFFS extends SimpleFFS {
// Add backslash to escape it too.
$escaped = '\\' . $escaped;
}
+ // All html entities seen would be inserted by translators themselves.
+ // Treat them as plain text.
+ $escaped = str_replace( '&', '&amp;', $escaped );
+
+ // Newlines must be escaped
+ $escaped = str_replace( "\n", '\n', $escaped );
return $escaped;
}
+ protected function doAuthors( MessageCollection $collection ) {
+ $authors = $collection->getAuthors();
+ $authors = $this->filterAuthors( $authors, $collection->code );
+
+ if ( !$authors ) {
+ return '';
+ }
+
+ $output = "\n<!-- Authors:\n";
+
+ foreach ( $authors as $author ) {
+ // Since -- is not allowed in XML comments, we rewrite them to
+ // U+2011 (non-breaking hyphen). PHP7: \u{2011}
+ $author = str_replace( '--', "\xE2\x80\x91\xE2\x80\x91", $author );
+ $output .= "* $author\n";
+ }
+
+ $output .= "-->\n";
+
+ return $output;
+ }
+
protected function writeReal( MessageCollection $collection ) {
- $template = <<<XML
-<?xml version="1.0" encoding="utf-8"?>
-<resources></resources>
-XML;
+ $template = '<?xml version="1.0" encoding="utf-8"?>';
+ $template .= $this->doAuthors( $collection );
+ $template .= '<resources></resources>';
$writer = new SimpleXMLElement( $template );
$mangler = $this->group->getMangler();
@@ -108,13 +147,13 @@ XML;
$value = $m->translation();
$value = str_replace( TRANSLATE_FUZZY, '', $value );
- // Handle plurals
- if ( strpos( $value, '{{PLURAL' ) === false ) {
+ $plurals = $this->flattener->unflattenCLDRPlurals( '', $value );
+
+ if ( $plurals === false ) {
$element = $writer->addChild( 'string', $this->formatElementContents( $value ) );
} else {
$element = $writer->addChild( 'plurals' );
- $forms = $this->unflattenPlural( $value );
- foreach ( $forms as $quantity => $content ) {
+ foreach ( $plurals as $quantity => $content ) {
$item = $element->addChild( 'item', $this->formatElementContents( $content ) );
$item->addAttribute( 'quantity', $quantity );
}
@@ -135,80 +174,12 @@ XML;
return $dom->saveXML();
}
- /**
- * Flattens array of plurals into string.
- *
- * @param array $forms array
- * @return string
- */
- protected function flattenPlural( array $forms ) {
- $pls = '{{PLURAL';
- foreach ( $forms as $key => $value ) {
- $pls .= "|$key=$value";
- }
-
- $pls .= '}}';
- return $pls;
+ protected function getFlattener() {
+ $flattener = new ArrayFlattener( '', true );
+ return $flattener;
}
- /**
- * Converts the flattened plural into messages
- *
- * @param string $message
- * @return array
- */
- protected function unflattenPlural( $message ) {
- $regex = '~\{\{PLURAL\|(.*?)}}~s';
- $matches = array();
- $match = array();
-
- while ( preg_match( $regex, $message, $match ) ) {
- $uniqkey = TranslateUtils::getPlaceholder();
- $matches[$uniqkey] = $match;
- $message = preg_replace( $regex, $uniqkey, $message, 1 );
- }
-
- // No plurals, should not happen.
- if ( !count( $matches ) ) {
- return array();
- }
-
- // The final array of alternative plurals forms.
- $alts = array();
-
- /*
- * Then loop trough each plural block and replacing the placeholders
- * to construct the alternatives. Produces invalid output if there is
- * multiple plural bocks which don't have the same set of keys.
- */
- $pluralChoice = implode( '|', array_keys( self::$pluralWords ) );
- $regex = "~($pluralChoice)\s*=\s*(.+)~s";
- foreach ( $matches as $ph => $plu ) {
- $forms = explode( '|', $plu[1] );
-
- foreach ( $forms as $form ) {
- if ( $form === '' ) {
- continue;
- }
-
- $match = array();
- if ( !preg_match( $regex, $form, $match ) ) {
- // No quantity key was provided
- continue;
- }
-
- $formWord = $match[1];
- $value = $match[2];
- if ( !isset( $alts[$formWord] ) ) {
- $alts[$formWord] = $message;
- }
-
- $string = $alts[$formWord];
-
- $alts[$formWord] = str_replace( $ph, $value, $string );
- }
- }
-
- return $alts;
+ public function isContentEqual( $a, $b ) {
+ return $this->flattener->compareContent( $a, $b );
}
}
diff --git a/www/wiki/extensions/Translate/ffs/AppleFFS.php b/www/wiki/extensions/Translate/ffs/AppleFFS.php
index 111589d1..de0f79e3 100644
--- a/www/wiki/extensions/Translate/ffs/AppleFFS.php
+++ b/www/wiki/extensions/Translate/ffs/AppleFFS.php
@@ -17,19 +17,17 @@ class AppleFFS extends SimpleFFS {
}
public function getFileExtensions() {
- return array( '.strings' );
+ return [ '.strings' ];
}
- // READ
-
/**
- * @param array $data
+ * @param string $data
* @return array Parsed data.
* @throws MWException
*/
public function readFromVariable( $data ) {
$lines = explode( "\n", $data );
- $authors = $messages = array();
+ $authors = $messages = [];
$linecontinuation = false;
$value = '';
@@ -45,7 +43,7 @@ class AppleFFS extends SimpleFFS {
if ( substr( $line, 0, 2 ) === '//' ) {
// Single-line comment
- $match = array();
+ $match = [];
$ok = preg_match( '~//\s*Author:\s*(.*)~', $line, $match );
if ( $ok ) {
$authors[] = $match[1];
@@ -67,34 +65,32 @@ class AppleFFS extends SimpleFFS {
$messages = $this->group->getMangler()->mangle( $messages );
- return array(
+ return [
'AUTHORS' => $authors,
'MESSAGES' => $messages,
- );
+ ];
}
/**
* Parses non-empty strings file row to key and value.
* @param string $line
* @throws MWException
- * @return array( string $key, string $val )
+ * @return array array( string $key, string $val )
*/
public static function readRow( $line ) {
- $match = array();
+ $match = [];
if ( preg_match( '/^"((?:\\\"|[^"])*)"\s*=\s*"((?:\\\"|[^"])*)"\s*;\s*$/', $line, $match ) ) {
$key = self::unescapeString( $match[1] );
$value = self::unescapeString( $match[2] );
if ( $key === '' ) {
throw new MWException( "Empty key in line $line" );
}
- return array( $key, $value );
+ return [ $key, $value ];
} else {
throw new MWException( "Unrecognized line format: $line" );
}
}
- // Write
-
/**
* @param MessageCollection $collection
* @return string
diff --git a/www/wiki/extensions/Translate/ffs/DtdFFS.php b/www/wiki/extensions/Translate/ffs/DtdFFS.php
index cab36efd..aed82fca 100644
--- a/www/wiki/extensions/Translate/ffs/DtdFFS.php
+++ b/www/wiki/extensions/Translate/ffs/DtdFFS.php
@@ -7,7 +7,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2009-2010, Guillaume Duhamel, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -17,16 +17,16 @@
*/
class DtdFFS extends SimpleFFS {
public function getFileExtensions() {
- return array( '.dtd' );
+ return [ '.dtd' ];
}
/**
- * @param $data string
+ * @param string $data
* @return array Parsed data.
*/
public function readFromVariable( $data ) {
preg_match_all( ',# Author: ([^\n]+)\n,', $data, $matches );
- $authors = array();
+ $authors = [];
$count = count( $matches[1] );
for ( $i = 0; $i < $count; $i++ ) {
@@ -38,22 +38,22 @@ class DtdFFS extends SimpleFFS {
$keys = $matches[1];
$values = $matches[2];
- $messages = array();
+ $messages = [];
$count = count( $matches[1] );
for ( $i = 0; $i < $count; $i++ ) {
$messages[$keys[$i]] = str_replace(
- array( '&quot;', '&#34;', '&#39;' ),
- array( '"', '"', "'" ),
+ [ '&quot;', '&#34;', '&#39;' ],
+ [ '"', '"', "'" ],
$values[$i] );
}
$messages = $this->group->getMangler()->mangle( $messages );
- return array(
+ return [
'AUTHORS' => $authors,
'MESSAGES' => $messages,
- );
+ ];
}
protected function writeReal( MessageCollection $collection ) {
diff --git a/www/wiki/extensions/Translate/ffs/FFS.php b/www/wiki/extensions/Translate/ffs/FFS.php
index 3c425e9e..2c89f736 100644
--- a/www/wiki/extensions/Translate/ffs/FFS.php
+++ b/www/wiki/extensions/Translate/ffs/FFS.php
@@ -9,7 +9,7 @@
* @defgroup FFS File format support
* @author Niklas Laxström
* @copyright Copyright © 2008-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -52,7 +52,7 @@ interface FFS {
* Writes to the location provided with setWritePath and group specific
* directory structure. Exports translations included in the given
* collection with any special handling needed.
- * @param $collection MessageCollection
+ * @param MessageCollection $collection
*/
public function write( MessageCollection $collection );
@@ -76,10 +76,34 @@ interface FFS {
public function supportsFuzzy();
/**
+ * Checks whether two strings are equal. Sometimes same content might
+ * have multiple representations. The main case are inline plurals,
+ * which in some formats require expansion at export time.
+ *
+ * @param string $a
+ * @param string $b
+ * @return bool
+ * @since 2016.11
+ */
+ public function isContentEqual( $a, $b );
+
+ /**
* Return the commonly used file extensions for these formats.
* Include the dot.
* @return string[]
* @since 2013-04
*/
public function getFileExtensions();
+
+ /**
+ * Allows to skip writing the export output into a file. This is useful
+ * to skip updates that would only update irrelevant parts, such as the
+ * timestamp of the export.
+ *
+ * @param string $a The existing content.
+ * @param string $b The new export content.
+ * @return bool
+ * @since 2017.04
+ */
+ public function shouldOverwrite( $a, $b );
}
diff --git a/www/wiki/extensions/Translate/ffs/FlatPhpFFS.php b/www/wiki/extensions/Translate/ffs/FlatPhpFFS.php
index 4ede4b50..830b437b 100644
--- a/www/wiki/extensions/Translate/ffs/FlatPhpFFS.php
+++ b/www/wiki/extensions/Translate/ffs/FlatPhpFFS.php
@@ -6,7 +6,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2008-2010, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,49 +15,45 @@
*/
class FlatPhpFFS extends SimpleFFS implements MetaYamlSchemaExtender {
public function getFileExtensions() {
- return array( '.php' );
+ return [ '.php' ];
}
- // READ
-
/**
* @param string $data
* @return array Parsed data.
*/
public function readFromVariable( $data ) {
# Authors first
- $matches = array();
+ $matches = [];
preg_match_all( '/^ \* @author\s+(.+)$/m', $data, $matches );
$authors = $matches[1];
# Then messages
- $matches = array();
+ $matches = [];
$regex = '/^\$(.*?)\s*=\s*[\'"](.*?)[\'"];.*?$/mus';
preg_match_all( $regex, $data, $matches, PREG_SET_ORDER );
- $messages = array();
+ $messages = [];
foreach ( $matches as $_ ) {
$legal = Title::legalChars();
$key = preg_replace_callback( "/([^$legal]|\\\\)/u",
- function( $m ) {
+ function ( $m ) {
return '\x' . dechex( ord( $m[0] ) );
},
$_[1]
);
- $value = str_replace( array( "\'", "\\\\" ), array( "'", "\\" ), $_[2] );
+ $value = str_replace( [ "\'", "\\\\" ], [ "'", "\\" ], $_[2] );
$messages[$key] = $value;
}
$messages = $this->group->getMangler()->mangle( $messages );
- return array(
+ return [
'AUTHORS' => $authors,
'MESSAGES' => $messages,
- );
+ ];
}
- // WRITE
-
protected function writeReal( MessageCollection $collection ) {
if ( isset( $this->extra['header'] ) ) {
$output = $this->extra['header'];
@@ -135,21 +131,21 @@ PHP;
}
public static function getExtraSchema() {
- $schema = array(
- 'root' => array(
+ $schema = [
+ 'root' => [
'_type' => 'array',
- '_children' => array(
- 'FILES' => array(
+ '_children' => [
+ 'FILES' => [
'_type' => 'array',
- '_children' => array(
- 'header' => array(
+ '_children' => [
+ 'header' => [
'_type' => 'text',
- ),
- )
- )
- )
- )
- );
+ ],
+ ]
+ ]
+ ]
+ ]
+ ];
return $schema;
}
diff --git a/www/wiki/extensions/Translate/ffs/GettextFFS.php b/www/wiki/extensions/Translate/ffs/GettextFFS.php
index 1bd86e75..c404da34 100644
--- a/www/wiki/extensions/Translate/ffs/GettextFFS.php
+++ b/www/wiki/extensions/Translate/ffs/GettextFFS.php
@@ -5,14 +5,14 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2008-2010, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
/**
* Identifies Gettext plural exceptions.
*/
-class GettextPluralException extends MwException {
+class GettextPluralException extends MWException {
}
/**
@@ -25,13 +25,13 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
public function getFileExtensions() {
- return array( '.pot', '.po' );
+ return [ '.pot', '.po' ];
}
protected $offlineMode = false;
/**
- * @param $value bool
+ * @param bool $value
*/
public function setOfflineMode( $value ) {
$this->offlineMode = $value;
@@ -43,7 +43,7 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
*/
public function readFromVariable( $data ) {
# Authors first
- $matches = array();
+ $matches = [];
preg_match_all( '/^#\s*Author:\s*(.*)$/m', $data, $matches );
$authors = $matches[1];
@@ -63,7 +63,7 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
public function parseGettext( $data ) {
$mangler = $this->group->getMangler();
$useCtxtAsKey = isset( $this->extra['CtxtAsKey'] ) && $this->extra['CtxtAsKey'];
- $keyAlgorithm = 'legacy';
+ $keyAlgorithm = 'simple';
if ( isset( $this->extra['keyAlgorithm'] ) ) {
$keyAlgorithm = $this->extra['keyAlgorithm'];
}
@@ -111,11 +111,11 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
throw new MWException( "Gettext file header was not found:\n\n$data" );
}
- $template = array();
- $messages = array();
+ $template = [];
+ $messages = [];
// Extract some metadata from headers for easier use
- $metadata = array();
+ $metadata = [];
if ( isset( $headers['X-Language-Code'] ) ) {
$metadata['code'] = $headers['X-Language-Code'];
}
@@ -135,7 +135,6 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
// Then parse the messages
foreach ( $sections as $section ) {
-
$item = self::parseGettextSection( $section, $pluralCount, $metadata );
if ( $item === false ) {
continue;
@@ -156,16 +155,15 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
$template[$key] = $item;
}
- return array(
+ return [
'MESSAGES' => $messages,
'TEMPLATE' => $template,
'METADATA' => $metadata,
'HEADERS' => $headers
- );
+ ];
}
public static function parseGettextSection( $section, $pluralCount, &$metadata ) {
-
if ( trim( $section ) === '' ) {
return false;
}
@@ -178,13 +176,13 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
return false;
}
- $item = array(
+ $item = [
'ctxt' => false,
'id' => '',
'str' => '',
- 'flags' => array(),
- 'comments' => array(),
- );
+ 'flags' => [],
+ 'comments' => [],
+ ];
$match = self::expectKeyword( 'msgid', $section );
if ( $match !== null ) {
@@ -233,7 +231,7 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
$item['flags'] = $flags;
// Rest of the comments
- $matches = array();
+ $matches = [];
if ( preg_match_all( '/^#(.?) (.*)$/m', $section, $matches, PREG_SET_ORDER ) ) {
foreach ( $matches as $match ) {
if ( $match[1] !== ',' && strpos( $match[1], '[Wiki]' ) !== 0 ) {
@@ -246,7 +244,7 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
public static function processGettextPluralMessage( $pluralCount, $section ) {
- $actualForms = array();
+ $actualForms = [];
for ( $i = 0; $i < $pluralCount; $i++ ) {
$match = self::expectKeyword( "msgstr\\[$i\\]", $section );
@@ -267,11 +265,11 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
public static function parseFlags( $section ) {
- $matches = array();
+ $matches = [];
if ( preg_match( '/^#,(.*)$/mu', $section, $matches ) ) {
return array_map( 'trim', explode( ',', $matches[1] ) );
} else {
- return array();
+ return [];
}
}
@@ -281,7 +279,7 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
*/
$poformat = '".*"\n?(^".*"$\n?)*';
- $matches = array();
+ $matches = [];
if ( preg_match( "/^$name\s($poformat)/mx", $section, $matches ) ) {
return $matches[1];
} else {
@@ -296,7 +294,7 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
* @param string $algorithm Algorithm used to generate message keys: simple or legacy
* @return string
*/
- public static function generateKeyFromItem( array $item, $algorithm = 'legacy' ) {
+ public static function generateKeyFromItem( array $item, $algorithm = 'simple' ) {
$lang = Language::factory( 'en' );
if ( $item['ctxt'] === '' ) {
@@ -310,7 +308,13 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
if ( $algorithm === 'simple' ) {
$hash = substr( $hash, 0, 6 );
- $snippet = $lang->truncate( $item['id'], 30, '' );
+ if ( !is_callable( [ $lang, 'truncateForDatabase' ] ) ) {
+ // Backwards compatibility code; remove once MW 1.30 is
+ // no longer supported (aka once MW 1.33 is released)
+ $snippet = $lang->truncate( $item['id'], 30, '' );
+ } else {
+ $snippet = $lang->truncateForDatabase( $item['id'], 30, '' );
+ }
$snippet = str_replace( ' ', '_', trim( $snippet ) );
} else { // legacy
global $wgLegalTitleChars;
@@ -318,7 +322,13 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
$snippet = preg_replace( "/[^$wgLegalTitleChars]/", ' ', $snippet );
$snippet = preg_replace( "/[:&%\/_]/", ' ', $snippet );
$snippet = preg_replace( '/ {2,}/', ' ', $snippet );
- $snippet = $lang->truncate( $snippet, 30, '' );
+ if ( !is_callable( [ $lang, 'truncateForDatabase' ] ) ) {
+ // Backwards compatibility code; remove once MW 1.30 is
+ // no longer supported (aka once MW 1.33 is released)
+ $snippet = $lang->truncate( $snippet, 30, '' );
+ } else {
+ $snippet = $lang->truncateForDatabase( $snippet, 30, '' );
+ }
$snippet = str_replace( ' ', '_', trim( $snippet ) );
}
@@ -330,8 +340,8 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
* not allowed in MediaWiki pages, the default action is to append
* \-character at the end of the message. You can also choose to ignore it
* and use the trim action instead.
- * @param $data
- * @param $whitespace string
+ * @param string $data
+ * @param string $whitespace
* @throws MWException
* @return string
*/
@@ -355,7 +365,7 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
public static function parseHeaderTags( $headers ) {
- $tags = array();
+ $tags = [];
foreach ( explode( "\n", $headers ) as $line ) {
if ( strpos( $line, ':' ) === false ) {
error_log( __METHOD__ . ": $line" );
@@ -375,10 +385,8 @@ class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
/** @var TMessage $m */
foreach ( $collection as $key => $m ) {
- $transTemplate = isset( $template['TEMPLATE'][$key] ) ?
- $template['TEMPLATE'][$key] : array();
- $potTemplate = isset( $pot['TEMPLATE'][$key] ) ?
- $pot['TEMPLATE'][$key] : array();
+ $transTemplate = $template['TEMPLATE'][$key] ?? [];
+ $potTemplate = $pot['TEMPLATE'][$key] ?? [];
$output .= $this->formatMessageBlock( $key, $m, $transTemplate, $potTemplate, $pluralCount );
}
@@ -409,7 +417,7 @@ PHP;
// Make sure there is no empty line before msgid
$output = trim( $output ) . "\n";
- $specs = isset( $template['HEADERS'] ) ? $template['HEADERS'] : array();
+ $specs = $template['HEADERS'] ?? [];
$timestamp = wfTimestampNow();
$specs['PO-Revision-Date'] = self::formatTime( $timestamp );
@@ -420,8 +428,8 @@ PHP;
}
$specs['Content-Type'] = 'text/plain; charset=UTF-8';
$specs['Content-Transfer-Encoding'] = '8bit';
- $specs['Language'] = wfBCP47( $this->group->mapCode( $code ) );
- Hooks::run( 'Translate:GettextFFS:headerFields', array( &$specs, $this->group, $code ) );
+ $specs['Language'] = LanguageCode::bcp47( $this->group->mapCode( $code ) );
+ Hooks::run( 'Translate:GettextFFS:headerFields', [ &$specs, $this->group, $code ] );
$specs['X-Generator'] = $this->getGenerator();
if ( $this->offlineMode ) {
@@ -436,7 +444,7 @@ PHP;
$specs['Plural-Forms'] = 'nplurals=2; plural=(n != 1);';
}
- $match = array();
+ $match = [];
preg_match( '/nplurals=(\d+);/', $specs['Plural-Forms'], $match );
$pluralCount = $match[1];
@@ -477,14 +485,14 @@ PHP;
$header = $this->formatDocumentation( $key );
$content = '';
- $comments = self::chainGetter( 'comments', $pot, $trans, array() );
+ $comments = self::chainGetter( 'comments', $pot, $trans, [] );
foreach ( $comments as $type => $typecomments ) {
foreach ( $typecomments as $comment ) {
$header .= "#$type $comment\n";
}
}
- $flags = self::chainGetter( 'flags', $pot, $trans, array() );
+ $flags = self::chainGetter( 'flags', $pot, $trans, [] );
$flags = array_merge( $m->getTags(), $flags );
if ( $this->offlineMode ) {
@@ -527,10 +535,10 @@ PHP;
if ( $flags ) {
sort( $flags );
- $header .= '#, ' . implode( ', ', array_unique( $flags ) ) . "\n";
+ $header .= '#, ' . implode( ', ', array_unique( $flags ) ) . "\n";
}
- $output = $header ? $header : "#\n";
+ $output = $header ?: "#\n";
$output .= $content . "\n";
return $output;
@@ -608,8 +616,8 @@ PHP;
/**
* Returns plural rule for Gettext.
- * @param $code \string Language code.
- * @return \string
+ * @param string $code Language code.
+ * @return string
*/
public static function getPluralRule( $code ) {
$rulefile = __DIR__ . '/../data/plural-gettext.txt';
@@ -636,13 +644,13 @@ PHP;
# |/| is commonly used in KDE to support inflections
$text = str_replace( '|/|', $placeholder, $text );
- $plurals = array();
+ $plurals = [];
$match = preg_match_all( '/{{PLURAL:GETTEXT\|(.*)}}/iUs', $text, $plurals );
if ( !$match ) {
throw new GettextPluralException( "Failed to find plural in: $text" );
}
- $splitPlurals = array();
+ $splitPlurals = [];
for ( $i = 0; $i < $forms; $i++ ) {
# Start with the hole string
$pluralForm = $text;
@@ -665,29 +673,38 @@ PHP;
return $splitPlurals;
}
+ public function shouldOverwrite( $a, $b ) {
+ $regex = '/^"(.+)-Date: \d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\+\d\d\d\d\\\\n"$/m';
+
+ $a = preg_replace( $regex, '', $a );
+ $b = preg_replace( $regex, '', $b );
+
+ return $a !== $b;
+ }
+
public static function getExtraSchema() {
- $schema = array(
- 'root' => array(
+ $schema = [
+ 'root' => [
'_type' => 'array',
- '_children' => array(
- 'FILES' => array(
+ '_children' => [
+ 'FILES' => [
'_type' => 'array',
- '_children' => array(
- 'header' => array(
+ '_children' => [
+ 'header' => [
'_type' => 'text',
- ),
- 'keyAlgorithm' => array(
+ ],
+ 'keyAlgorithm' => [
'_type' => 'enum',
- '_values' => array( 'simple', 'legacy' ),
- ),
- 'CtxtAsKey' => array(
+ '_values' => [ 'simple', 'legacy' ],
+ ],
+ 'CtxtAsKey' => [
'_type' => 'boolean',
- ),
- )
- )
- )
- )
- );
+ ],
+ ]
+ ]
+ ]
+ ]
+ ];
return $schema;
}
diff --git a/www/wiki/extensions/Translate/ffs/IniFFS.php b/www/wiki/extensions/Translate/ffs/IniFFS.php
index efbb8fec..95ab8bcb 100644
--- a/www/wiki/extensions/Translate/ffs/IniFFS.php
+++ b/www/wiki/extensions/Translate/ffs/IniFFS.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -17,16 +17,16 @@
*/
class IniFFS extends SimpleFFS {
public static function isValid( $data ) {
- $conf = array( 'BASIC' => array( 'class' => 'FileBasedMessageGroup', 'namespace' => 8 ) );
+ $conf = [ 'BASIC' => [ 'class' => 'FileBasedMessageGroup', 'namespace' => 8 ] ];
/**
* @var FileBasedMessageGroup $group
*/
$group = MessageGroupBase::factory( $conf );
- wfSuppressWarnings();
- $ffs = new IniFFS( $group );
+ Wikimedia\suppressWarnings();
+ $ffs = new self( $group );
$parsed = $ffs->readFromVariable( $data );
- wfRestoreWarnings();
+ Wikimedia\restoreWarnings();
return (bool)count( $parsed['MESSAGES'] );
}
@@ -36,7 +36,7 @@ class IniFFS extends SimpleFFS {
}
public function getFileExtensions() {
- return array( '.ini' );
+ return [ '.ini' ];
}
/**
@@ -44,7 +44,7 @@ class IniFFS extends SimpleFFS {
* @return array Parsed data.
*/
public function readFromVariable( $data ) {
- $authors = array();
+ $authors = [];
preg_match_all( '/^; Author: (.*)$/m', $data, $matches, PREG_SET_ORDER );
foreach ( $matches as $match ) {
$authors[] = $match[1];
@@ -62,10 +62,10 @@ class IniFFS extends SimpleFFS {
$messages = null;
}
- return array(
+ return [
'MESSAGES' => $messages,
'AUTHORS' => $authors,
- );
+ ];
}
protected function writeReal( MessageCollection $collection ) {
diff --git a/www/wiki/extensions/Translate/ffs/IntuitionTextdomains.php b/www/wiki/extensions/Translate/ffs/IntuitionTextdomains.php
index 97261897..c3f637d2 100644
--- a/www/wiki/extensions/Translate/ffs/IntuitionTextdomains.php
+++ b/www/wiki/extensions/Translate/ffs/IntuitionTextdomains.php
@@ -7,7 +7,7 @@
* @author Krinkle
* @copyright Copyright © 2008-2013, Niklas Laxström
* @copyright Copyright © 2011, Krinkle
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -20,10 +20,10 @@ class PremadeIntuitionTextdomains extends PremadeMediawikiExtensionGroups {
protected $namespace = NS_INTUITION;
protected function processGroups( $groups ) {
- $fixedGroups = array();
+ $fixedGroups = [];
foreach ( $groups as $g ) {
if ( !is_array( $g ) ) {
- $g = array( $g );
+ $g = [ $g ];
}
$name = $g['name'];
@@ -55,12 +55,12 @@ class PremadeIntuitionTextdomains extends PremadeMediawikiExtensionGroups {
$url = false;
}
- $newgroup = array(
+ $newgroup = [
'name' => 'Intuition - ' . $name,
'file' => $file,
'descmsg' => $descmsg,
'url' => $url,
- );
+ ];
// Prefix is required, if not customized use the sanitized name
if ( !isset( $g['prefix'] ) ) {
@@ -68,21 +68,21 @@ class PremadeIntuitionTextdomains extends PremadeMediawikiExtensionGroups {
}
// All messages are prefixed with their groupname
- $g['mangle'] = array( '*' );
+ $g['mangle'] = [ '*' ];
// Prevent E_NOTICE undefined index.
// PremadeMediawikiExtensionGroups::factory should probably check this better instead
if ( !isset( $g['ignored'] ) ) {
- $g['ignored'] = array();
+ $g['ignored'] = [];
}
if ( !isset( $g['optional'] ) ) {
- $g['optional'] = array();
+ $g['optional'] = [];
}
$g['format'] = 'json';
- $copyvars = array(
+ $copyvars = [
'aliasfile',
'desc',
'format',
@@ -92,7 +92,7 @@ class PremadeIntuitionTextdomains extends PremadeMediawikiExtensionGroups {
'optional',
'prefix',
'var',
- );
+ ];
foreach ( $copyvars as $var ) {
if ( isset( $g[$var] ) ) {
diff --git a/www/wiki/extensions/Translate/ffs/JavaFFS.php b/www/wiki/extensions/Translate/ffs/JavaFFS.php
index 227d27df..4485b8bf 100644
--- a/www/wiki/extensions/Translate/ffs/JavaFFS.php
+++ b/www/wiki/extensions/Translate/ffs/JavaFFS.php
@@ -15,13 +15,13 @@ class JavaFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
public function getFileExtensions() {
- return array( '.properties' );
+ return [ '.properties' ];
}
protected $keySeparator = '=';
/**
- * @param $group FileBasedMessageGroup
+ * @param FileBasedMessageGroup $group
*/
public function __construct( FileBasedMessageGroup $group ) {
parent::__construct( $group );
@@ -31,17 +31,15 @@ class JavaFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
}
- // READ
-
/**
- * @param $data array
+ * @param string $data
* @return array Parsed data.
* @throws MWException
*/
public function readFromVariable( $data ) {
$data = self::fixNewLines( $data );
$lines = array_map( 'ltrim', explode( "\n", $data ) );
- $authors = $messages = array();
+ $authors = $messages = [];
$linecontinuation = false;
$key = '';
@@ -58,7 +56,7 @@ class JavaFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
if ( $line[0] === '#' || $line[0] === '!' ) {
- $match = array();
+ $match = [];
$ok = preg_match( '/#\s*Author:\s*(.*)/', $line, $match );
if ( $ok ) {
@@ -89,16 +87,14 @@ class JavaFFS extends SimpleFFS implements MetaYamlSchemaExtender {
$messages = $this->group->getMangler()->mangle( $messages );
- return array(
+ return [
'AUTHORS' => $authors,
'MESSAGES' => $messages,
- );
+ ];
}
- // Write
-
/**
- * @param $collection MessageCollection
+ * @param MessageCollection $collection
* @return string
*/
protected function writeReal( MessageCollection $collection ) {
@@ -159,7 +155,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 ) {
@@ -212,11 +208,11 @@ class JavaFFS extends SimpleFFS implements MetaYamlSchemaExtender {
$value = ltrim( $value );
$value = str_replace( '\n', "\n", $value );
- return array( $key, $value );
+ return [ $key, $value ];
}
/**
- * @param $collection MessageCollection
+ * @param MessageCollection $collection
* @return string
*/
protected function doHeader( MessageCollection $collection ) {
@@ -236,7 +232,7 @@ class JavaFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
/**
- * @param $collection MessageCollection
+ * @param MessageCollection $collection
* @return string
*/
protected function doAuthors( MessageCollection $collection ) {
@@ -252,24 +248,24 @@ class JavaFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
public static function getExtraSchema() {
- $schema = array(
- 'root' => array(
+ $schema = [
+ 'root' => [
'_type' => 'array',
- '_children' => array(
- 'FILES' => array(
+ '_children' => [
+ 'FILES' => [
'_type' => 'array',
- '_children' => array(
- 'header' => array(
+ '_children' => [
+ 'header' => [
'_type' => 'text',
- ),
- 'keySeparator' => array(
+ ],
+ 'keySeparator' => [
'_type' => 'text',
- ),
- )
- )
- )
- )
- );
+ ],
+ ]
+ ]
+ ]
+ ]
+ ];
return $schema;
}
diff --git a/www/wiki/extensions/Translate/ffs/JavaScriptFFS.php b/www/wiki/extensions/Translate/ffs/JavaScriptFFS.php
index 63f898bd..e77724f2 100644
--- a/www/wiki/extensions/Translate/ffs/JavaScriptFFS.php
+++ b/www/wiki/extensions/Translate/ffs/JavaScriptFFS.php
@@ -6,13 +6,13 @@
*/
abstract class JavaScriptFFS extends SimpleFFS {
public function getFileExtensions() {
- return array( '.js' );
+ return [ '.js' ];
}
/**
* Message keys format.
*
- * @param $key string
+ * @param string $key
*
* @return string
*/
@@ -21,10 +21,10 @@ abstract class JavaScriptFFS extends SimpleFFS {
/**
* Header of message file.
*
- * @param $code string
- * @param $authors array
+ * @param string $code
+ * @param string[] $authors
*/
- abstract protected function header( $code, $authors );
+ abstract protected function header( $code, array $authors );
/**
* Footer of message file.
@@ -32,14 +32,14 @@ abstract class JavaScriptFFS extends SimpleFFS {
abstract protected function footer();
/**
- * @param $data array
+ * @param string $data
* @return array Parsed data.
*/
public function readFromVariable( $data ) {
/* Parse authors list */
$authors = preg_replace( "#/\* Translators\:\n(.*?)\n \*/(.*)#s", '$1', $data );
if ( $authors === $data ) {
- $authors = array();
+ $authors = [];
} else {
$authors = explode( "\n", $authors );
$count = count( $authors );
@@ -86,7 +86,7 @@ abstract class JavaScriptFFS extends SimpleFFS {
*/
$data = explode( "\",\n", $data );
- $messages = array();
+ $messages = [];
foreach ( $data as $segment ) {
/**
* Add back trailing quote, removed by explosion.
@@ -128,14 +128,14 @@ abstract class JavaScriptFFS extends SimpleFFS {
$messages = $this->group->getMangler()->mangle( $messages );
- return array(
+ return [
'AUTHORS' => $authors,
'MESSAGES' => $messages
- );
+ ];
}
/**
- * @param $collection MessageCollection
+ * @param MessageCollection $collection
* @return string
*/
public function writeReal( MessageCollection $collection ) {
@@ -177,11 +177,11 @@ abstract class JavaScriptFFS extends SimpleFFS {
}
/**
- * @param $authors array
+ * @param string[] $authors
* @return string
*/
- protected function authorsList( $authors ) {
- if ( count( $authors ) === 0 ) {
+ protected function authorsList( array $authors ) {
+ if ( $authors === [] ) {
return '';
}
@@ -195,7 +195,7 @@ abstract class JavaScriptFFS extends SimpleFFS {
}
// See ECMA 262 section 7.8.4 for string literal format
- private static $pairs = array(
+ private static $pairs = [
"\\" => "\\\\",
"\"" => "\\\"",
"'" => "\\'",
@@ -217,10 +217,10 @@ abstract class JavaScriptFFS extends SimpleFFS {
*/
"\xe2\x80\x8c" => "\\u200c", // ZERO WIDTH NON-JOINER
"\xe2\x80\x8d" => "\\u200d", // ZERO WIDTH JOINER
- );
+ ];
/**
- * @param $string string
+ * @param string $string
* @return string
*/
protected static function escapeJsString( $string ) {
@@ -228,7 +228,7 @@ abstract class JavaScriptFFS extends SimpleFFS {
}
/**
- * @param $string string
+ * @param string $string
* @return string
*/
protected static function unescapeJsString( $string ) {
@@ -243,7 +243,7 @@ abstract class JavaScriptFFS extends SimpleFFS {
class ShapadoJsFFS extends JavaScriptFFS {
/**
- * @param $key string
+ * @param string $key
*
* @return string
*/
@@ -252,11 +252,11 @@ class ShapadoJsFFS extends JavaScriptFFS {
}
/**
- * @param $code string
- * @param $authors array
+ * @param string $code
+ * @param string[] $authors
* @return string
*/
- protected function header( $code, $authors ) {
+ protected function header( $code, array $authors ) {
global $wgSitename;
$name = TranslateUtils::getLanguageName( $code );
diff --git a/www/wiki/extensions/Translate/ffs/JsonFFS.php b/www/wiki/extensions/Translate/ffs/JsonFFS.php
index 44046013..b12ac1c7 100644
--- a/www/wiki/extensions/Translate/ffs/JsonFFS.php
+++ b/www/wiki/extensions/Translate/ffs/JsonFFS.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -17,25 +17,33 @@
*/
class JsonFFS extends SimpleFFS {
/**
- * @param $data
+ * @param string $data
* @return bool
*/
public static function isValid( $data ) {
return is_array( FormatJson::decode( $data, /*as array*/true ) );
}
+ /**
+ * @param FileBasedMessageGroup $group
+ */
+ public function __construct( FileBasedMessageGroup $group ) {
+ parent::__construct( $group );
+ $this->flattener = $this->getFlattener();
+ }
+
public function getFileExtensions() {
- return array( '.json' );
+ return [ '.json' ];
}
/**
- * @param array $data
+ * @param string $data
* @return array Parsed data.
*/
public function readFromVariable( $data ) {
- $messages = (array) FormatJson::decode( $data, /*as array*/true );
- $authors = array();
- $metadata = array();
+ $messages = (array)FormatJson::decode( $data, /*as array*/true );
+ $authors = [];
+ $metadata = [];
if ( isset( $messages['@metadata']['authors'] ) ) {
$authors = (array)$messages['@metadata']['authors'];
@@ -48,18 +56,17 @@ class JsonFFS extends SimpleFFS {
unset( $messages['@metadata'] );
- if ( isset( $this->extra['nestingSeparator'] ) ) {
- $flattener = new ArrayFlattener( $this->extra['nestingSeparator'] );
- $messages = $flattener->flatten( $messages );
+ if ( $this->flattener ) {
+ $messages = $this->flattener->flatten( $messages );
}
$messages = $this->group->getMangler()->mangle( $messages );
- return array(
+ return [
'MESSAGES' => $messages,
'AUTHORS' => $authors,
'METADATA' => $metadata,
- );
+ ];
}
/**
@@ -67,9 +74,10 @@ class JsonFFS extends SimpleFFS {
* @return string
*/
protected function writeReal( MessageCollection $collection ) {
- $messages = array();
+ $messages = [];
$template = $this->read( $collection->getLanguage() );
+ $messages['@metadata'] = [];
if ( isset( $template['METADATA'] ) ) {
$messages['@metadata'] = $template['METADATA'];
}
@@ -81,7 +89,7 @@ class JsonFFS extends SimpleFFS {
$authors = array_unique( array_merge( $template['AUTHORS'], $authors ) );
}
- if ( $authors !== array() ) {
+ if ( $authors !== [] ) {
$messages['@metadata']['authors'] = array_values( $authors );
}
@@ -104,35 +112,63 @@ class JsonFFS extends SimpleFFS {
$messages[$key] = $value;
}
- // Do not create empty files
- if ( !count( $messages ) ) {
+ // Do not create empty files. Check that something besides @metadata is present.
+ if ( count( $messages ) < 2 ) {
return '';
}
- if ( isset( $this->extra['nestingSeparator'] ) ) {
- $flattener = new ArrayFlattener( $this->extra['nestingSeparator'] );
- $messages = $flattener->unflatten( $messages );
+ if ( $this->flattener ) {
+ $messages = $this->flattener->unflatten( $messages );
+ }
+
+ if ( isset( $this->extra['includeMetadata'] ) && !$this->extra['includeMetadata'] ) {
+ unset( $messages['@metadata'] );
}
return FormatJson::encode( $messages, "\t", FormatJson::ALL_OK ) . "\n";
}
+ protected function getFlattener() {
+ if ( !isset( $this->extra['nestingSeparator'] ) ) {
+ return null;
+ }
+
+ $parseCLDRPlurals = $this->extra['parseCLDRPlurals'] ?? false;
+ $flattener = new ArrayFlattener( $this->extra['nestingSeparator'], $parseCLDRPlurals );
+
+ return $flattener;
+ }
+
+ public function isContentEqual( $a, $b ) {
+ if ( $this->flattener ) {
+ return $this->flattener->compareContent( $a, $b );
+ } else {
+ return parent::isContentEqual( $a, $b );
+ }
+ }
+
public static function getExtraSchema() {
- $schema = array(
- 'root' => array(
+ $schema = [
+ 'root' => [
'_type' => 'array',
- '_children' => array(
- 'FILES' => array(
+ '_children' => [
+ 'FILES' => [
'_type' => 'array',
- '_children' => array(
- 'nestingSeparator' => array(
+ '_children' => [
+ 'nestingSeparator' => [
'_type' => 'text',
- ),
- )
- )
- )
- )
- );
+ ],
+ 'parseCLDRPlurals' => [
+ '_type' => 'boolean',
+ ],
+ 'includeMetadata' => [
+ '_type' => 'boolean',
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
return $schema;
}
diff --git a/www/wiki/extensions/Translate/ffs/MediaWikiComplexMessages.php b/www/wiki/extensions/Translate/ffs/MediaWikiComplexMessages.php
index c3095bca..fcd8a314 100644
--- a/www/wiki/extensions/Translate/ffs/MediaWikiComplexMessages.php
+++ b/www/wiki/extensions/Translate/ffs/MediaWikiComplexMessages.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2008-2010, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -24,20 +24,20 @@ abstract class ComplexMessages {
protected $targetDir;
protected $id = '__BUG__';
protected $variable = '__BUG__';
- protected $data = array();
+ protected $data = [];
protected $elementsInArray = true;
protected $databaseMsg = '__BUG__';
protected $chainable = false;
protected $firstMagic = false;
- protected $constants = array();
+ protected $constants = [];
- protected $tableAttributes = array(
+ protected $tableAttributes = [
'class' => 'wikitable',
'border' => '2',
'cellpadding' => '4',
'cellspacing' => '0',
'style' => 'background-color: #F9F9F9; border: 1px #AAAAAA solid; border-collapse: collapse;',
- );
+ ];
public function __construct( $langCode ) {
$this->language = $langCode;
@@ -124,7 +124,7 @@ abstract class ComplexMessages {
$chain = $this->mergeMagic( $defs, $chain );
}
- $data = $group['data'] = array( $defs, $chain, $current );
+ $data = $group['data'] = [ $defs, $chain, $current ];
return $data;
}
@@ -132,7 +132,7 @@ abstract class ComplexMessages {
/**
* Gets data from request. Needs to be run before the form is displayed and
* validation. Not needed for export, which uses request directly.
- * @param $request WebRequest
+ * @param WebRequest $request
*/
public function loadFromRequest( WebRequest $request ) {
$saved = $this->parse( $this->formatForSave( $request ) );
@@ -149,7 +149,7 @@ abstract class ComplexMessages {
$data = TranslateUtils::getMessageContent( $this->databaseMsg, $this->language );
if ( !$data ) {
- return array();
+ return [];
} else {
return $this->parse( $data );
}
@@ -157,7 +157,7 @@ abstract class ComplexMessages {
protected function parse( $data ) {
$lines = array_map( 'trim', explode( "\n", $data ) );
- $array = array();
+ $array = [];
foreach ( $lines as $line ) {
if ( $line === '' || $line[0] === '#' || $line[0] === '<' ) {
continue;
@@ -181,7 +181,7 @@ abstract class ComplexMessages {
/**
* Return an array of keys that can be used to iterate over all keys
- * @param $group
+ * @param string $group
* @return Array of keys for data
*/
protected function getIterator( $group ) {
@@ -192,29 +192,29 @@ abstract class ComplexMessages {
protected function val( $group, $type, $key ) {
$array = $this->getGroups();
- wfSuppressWarnings();
+ Wikimedia\suppressWarnings();
$subarray = $array[$group]['data'][$type][$key];
- wfRestoreWarnings();
+ Wikimedia\restoreWarnings();
if ( $this->elementsInArray ) {
if ( !$subarray || !count( $subarray ) ) {
- return array();
+ return [];
}
} else {
if ( !$subarray ) {
- return array();
+ return [];
}
}
if ( !is_array( $subarray ) ) {
- $subarray = array( $subarray );
+ $subarray = [ $subarray ];
}
return $subarray;
}
/**
- * @param $group
- * @param $code
+ * @param string $group
+ * @param string $code
* @return array
*/
protected function readVariable( $group, $code ) {
@@ -223,15 +223,15 @@ abstract class ComplexMessages {
$file = str_ireplace( self::PLACEHOLDER, str_replace( '-', '_', ucfirst( $code ) ), $file );
}
- ${$group['var']} = array(); # Initialize
+ ${$group['var']} = []; # Initialize
if ( file_exists( $file ) ) {
require $file; # Include
}
if ( $group['code'] ) {
- wfSuppressWarnings();
- $data = (array) ${$group['var']} [$code];
- wfRestoreWarnings();
+ Wikimedia\suppressWarnings();
+ $data = (array)${$group['var']} [$code];
+ Wikimedia\restoreWarnings();
} else {
$data = ${$group['var']};
}
@@ -251,11 +251,11 @@ abstract class ComplexMessages {
return $data;
}
- // /Data retrieval
+ // Data retrieval
// Output
public function header( $title ) {
- $colspan = array( 'colspan' => 3 );
+ $colspan = [ 'colspan' => 3 ];
$header = Xml::element( 'th', $colspan, $this->getTitle() . ' - ' . $title );
$subheading[] = '<th>' . wfMessage( 'translate-magic-cm-original' )->escaped() . '</th>';
$subheading[] = '<th>' . wfMessage( 'translate-magic-cm-current' )->escaped() . '</th>';
@@ -266,7 +266,7 @@ abstract class ComplexMessages {
}
public function output() {
- $colspan = array( 'colspan' => 3 );
+ $colspan = [ 'colspan' => 3 ];
$s = Xml::openElement( 'table', $this->tableAttributes );
@@ -304,7 +304,7 @@ abstract class ComplexMessages {
$rowContents .= $this->editElement( $key, $this->formatElement( $value ) );
$rowContents .= '</td>';
- $s .= Xml::tags( 'tr', array( 'id' => "mw-sp-magic-$key" ), $rowContents );
+ $s .= Xml::tags( 'tr', [ 'id' => "mw-sp-magic-$key" ], $rowContents );
}
}
@@ -318,10 +318,10 @@ abstract class ComplexMessages {
return Xml::tags(
'form',
- array(
+ [
'method' => 'post',
'action' => $context->getRequest()->getRequestURL()
- ),
+ ],
$s
);
}
@@ -334,7 +334,7 @@ abstract class ComplexMessages {
) .
Xml::submitButton(
wfMessage( 'translate-magic-cm-save' )->text(),
- array( 'name' => 'savetodb' )
+ [ 'name' => 'savetodb' ]
);
}
@@ -356,17 +356,16 @@ abstract class ComplexMessages {
}
public function editElement( $key, $contents ) {
- return Xml::input( $this->getKeyForEdit( $key ), 40, $contents, array(
+ return Xml::input( $this->getKeyForEdit( $key ), 40, $contents, [
'lang' => $this->targetHtmlCode,
'dir' => $this->targetDir,
- ) );
+ ] );
}
- // /Output
+ // Output
// Save to database
-
protected function getKeyForSave() {
return $this->databaseMsg . '/' . $this->language;
}
@@ -430,11 +429,11 @@ abstract class ComplexMessages {
$this->init = false;
}
- // /Save to database
+ // Save to database
// Export
public function validate( array &$errors, $filter = false ) {
- $used = array();
+ $used = [];
foreach ( array_keys( $this->data ) as $group ) {
if ( $filter !== false && !in_array( $group, (array)$filter, true ) ) {
continue;
@@ -447,7 +446,7 @@ abstract class ComplexMessages {
protected function validateEach( array &$errors, $group, &$used ) {
foreach ( $this->getIterator( $group ) as $key ) {
$values = $this->val( $group, self::LANG_CURRENT, $key );
- $link = Xml::element( 'a', array( 'href' => "#mw-sp-magic-$key" ), $key );
+ $link = Xml::element( 'a', [ 'href' => "#mw-sp-magic-$key" ], $key );
if ( count( $values ) !== count( array_filter( $values ) ) ) {
$errors[] = "There is empty value in $link.";
@@ -458,7 +457,7 @@ abstract class ComplexMessages {
$otherkey = $used[$v];
$first = Xml::element(
'a',
- array( 'href' => "#mw-sp-magic-$otherkey" ),
+ [ 'href' => "#mw-sp-magic-$otherkey" ],
$otherkey
);
$errors[] = "Translation <strong>$v</strong> is used more than once " .
@@ -472,7 +471,7 @@ abstract class ComplexMessages {
public function export( $filter = false ) {
$text = '';
- $errors = array();
+ $errors = [];
$this->validate( $errors, $filter );
foreach ( $errors as $_ ) {
$text .= "#!!# $_\n";
@@ -497,11 +496,9 @@ abstract class ComplexMessages {
$out = '';
- $indexKeys = array();
+ $indexKeys = [];
foreach ( array_keys( $items[self::LANG_MASTER] ) as $key ) {
- $indexKeys[$key] = isset( $this->constants[$key] ) ?
- $this->constants[$key] :
- "'$key'";
+ $indexKeys[$key] = $this->constants[$key] ?? "'$key'";
}
$padTo = max( array_map( 'strlen', $indexKeys ) ) + 3;
@@ -544,7 +541,7 @@ abstract class ComplexMessages {
continue;
}
- $normalized = array_map( array( $this, 'normalize' ), $val );
+ $normalized = array_map( [ $this, 'normalize' ], $val );
if ( $this->elementsInArray ) {
$temp .= '=> array( ' . implode( ', ', $normalized ) . ' ),';
} else {
@@ -565,7 +562,7 @@ abstract class ComplexMessages {
/**
* Returns string with quotes that should be valid php
- * @param $data string
+ * @param string $data
* @throws MWException
* @return string
*/
@@ -579,7 +576,7 @@ abstract class ComplexMessages {
return "'$data'";
}
- // /Export
+ // Export
public function highlight( $key, $values ) {
return $values;
}
@@ -596,12 +593,12 @@ class SpecialPageAliasesCM extends ComplexMessages {
public function __construct( $code ) {
parent::__construct( $code );
- $this->data['core'] = array(
+ $this->data['core'] = [
'label' => 'MediaWiki Core',
'var' => 'specialPageAliases',
'file' => Language::getMessagesFileName( self::PLACEHOLDER ),
'code' => false,
- );
+ ];
$groups = MessageGroups::singleton()->getGroups();
foreach ( $groups as $g ) {
@@ -614,12 +611,12 @@ class SpecialPageAliasesCM extends ComplexMessages {
}
$file = $g->replaceVariables( $conf['FILES']['aliasFileSource'], 'en' );
if ( file_exists( $file ) ) {
- $this->data[$g->getId()] = array(
+ $this->data[$g->getId()] = [
'label' => $g->getLabel(),
'var' => 'specialPageAliases',
'file' => $file,
'code' => $code,
- );
+ ];
}
}
}
@@ -643,10 +640,10 @@ class SpecialPageAliasesCM extends ComplexMessages {
$values = $this->val( $group, self::LANG_CURRENT, $key );
foreach ( $values as $_ ) {
- wfSuppressWarnings();
+ Wikimedia\suppressWarnings();
$title = SpecialPage::getTitleFor( $_ );
- wfRestoreWarnings();
- $link = Xml::element( 'a', array( 'href' => "#mw-sp-magic-$key" ), $key );
+ Wikimedia\restoreWarnings();
+ $link = Xml::element( 'a', [ 'href' => "#mw-sp-magic-$key" ], $key );
if ( $title === null ) {
if ( $_ !== '' ) {
// Empty values checked elsewhere
@@ -677,12 +674,12 @@ class MagicWordsCM extends ComplexMessages {
public function __construct( $code ) {
parent::__construct( $code );
- $this->data['core'] = array(
+ $this->data['core'] = [
'label' => 'MediaWiki Core',
'var' => 'magicWords',
'file' => Language::getMessagesFileName( self::PLACEHOLDER ),
'code' => false,
- );
+ ];
$groups = MessageGroups::singleton()->getGroups();
foreach ( $groups as $g ) {
@@ -695,12 +692,12 @@ class MagicWordsCM extends ComplexMessages {
}
$file = $g->replaceVariables( $conf['FILES']['magicFileSource'], 'en' );
if ( file_exists( $file ) ) {
- $this->data[$g->getId()] = array(
+ $this->data[$g->getId()] = [
'label' => $g->getLabel(),
'var' => 'magicWords',
'file' => $file,
'code' => $code,
- );
+ ];
}
}
}
@@ -725,15 +722,15 @@ class NamespaceCM extends ComplexMessages {
public function __construct( $code ) {
parent::__construct( $code );
- $this->data['core'] = array(
+ $this->data['core'] = [
'label' => 'MediaWiki Core',
'var' => 'namespaceNames',
'file' => Language::getMessagesFileName( self::PLACEHOLDER ),
'code' => false,
- );
+ ];
}
- protected $constants = array(
+ protected $constants = [
-2 => 'NS_MEDIA',
-1 => 'NS_SPECIAL',
0 => 'NS_MAIN',
@@ -752,7 +749,7 @@ class NamespaceCM extends ComplexMessages {
13 => 'NS_HELP_TALK',
14 => 'NS_CATEGORY',
15 => 'NS_CATEGORY_TALK',
- );
+ ];
protected function validateEach( array &$errors, $group, &$used ) {
parent::validateEach( $errors, $group, $used );
@@ -760,7 +757,7 @@ class NamespaceCM extends ComplexMessages {
$values = $this->val( $group, self::LANG_CURRENT, $key );
if ( count( $values ) > 1 ) {
- $link = Xml::element( 'a', array( 'href' => "#mw-sp-magic-$key" ), $key );
+ $link = Xml::element( 'a', [ 'href' => "#mw-sp-magic-$key" ], $key );
$errors[] = "Namespace $link can have only one translation. Replace the " .
'translation with a new one, and notify staff about the change.';
}
diff --git a/www/wiki/extensions/Translate/ffs/MediaWikiExtensions.php b/www/wiki/extensions/Translate/ffs/MediaWikiExtensions.php
index cb4fe5f0..123c5012 100644
--- a/www/wiki/extensions/Translate/ffs/MediaWikiExtensions.php
+++ b/www/wiki/extensions/Translate/ffs/MediaWikiExtensions.php
@@ -4,12 +4,11 @@
*
* @file
* @author Niklas Laxström
- * @copyright Copyright © 2008-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
- * Class which handles special definition format for %MediaWiki extensions.
+ * Class which handles special definition format for %MediaWiki extensions and skins.
*/
class PremadeMediawikiExtensionGroups {
/** @var bool */
@@ -76,12 +75,21 @@ class PremadeMediawikiExtensionGroups {
$this->namespace = $value;
}
- /// Makes an group id from extension name
+ /**
+ * Makes an group id from extension name
+ * @param string $name
+ * @return string
+ */
public static function foldId( $name ) {
return preg_replace( '/\s+/', '', strtolower( $name ) );
}
- /// Hook: TranslatePostInitGroups
+ /**
+ * Hook: TranslatePostInitGroups
+ * @param array &$list
+ * @param array &$deps
+ * @return true
+ */
public function register( array &$list, array &$deps ) {
$groups = $this->parseFile();
$groups = $this->processGroups( $groups );
@@ -101,7 +109,7 @@ class PremadeMediawikiExtensionGroups {
* @return MediaWikiExtensionMessageGroup
*/
protected function createMessageGroup( $id, $info ) {
- $conf = array();
+ $conf = [];
$conf['BASIC']['class'] = 'MediaWikiExtensionMessageGroup';
$conf['BASIC']['id'] = $id;
$conf['BASIC']['namespace'] = $this->namespace;
@@ -114,12 +122,7 @@ class PremadeMediawikiExtensionGroups {
$conf['BASIC']['extensionurl'] = $info['url'];
}
- if ( $info['format'] === 'json' ) {
- $conf['FILES']['class'] = 'JsonFFS';
- } else {
- $conf['FILES']['class'] = 'MediaWikiExtensionFFS';
- }
-
+ $conf['FILES']['class'] = 'JsonFFS';
$conf['FILES']['sourcePattern'] = $this->path . '/' . $info['file'];
// @todo Find a better way
@@ -147,16 +150,15 @@ class PremadeMediawikiExtensionGroups {
}
$conf['CHECKER']['class'] = 'MediaWikiMessageChecker';
- $conf['CHECKER']['checks'] = array(
+ $conf['CHECKER']['checks'] = [
'pluralCheck',
'pluralFormsCheck',
'wikiParameterCheck',
'wikiLinksCheck',
- 'XhtmlCheck',
'braceBalanceCheck',
'pagenameMessagesCheck',
'miscMWChecks',
- );
+ ];
$conf['INSERTABLES']['class'] = 'MediaWikiInsertablesSuggester';
@@ -167,6 +169,27 @@ class PremadeMediawikiExtensionGroups {
$conf['TAGS']['ignored'] = $info['ignored'];
}
+ if ( isset( $info['languages'] ) ) {
+ $conf['LANGUAGES'] = [
+ 'whitelist' => [],
+ 'blacklist' => [],
+ ];
+
+ foreach ( $info['languages'] as $tagSpec ) {
+ if ( preg_match( '/^([+-])?(.+)$/', $tagSpec, $m ) ) {
+ list( , $sign, $tag ) = $m;
+ if ( $sign === '+' ) {
+ $conf['LANGUAGES']['whitelist'][] = $tag;
+ } elseif ( $sign === '-' ) {
+ $conf['LANGUAGES']['blacklist'][] = $tag;
+ } else {
+ $conf['LANGUAGES']['blacklist'] = '*';
+ $conf['LANGUAGES']['whitelist'][] = $tag;
+ }
+ }
+ }
+ }
+
return MessageGroupBase::factory( $conf );
}
@@ -177,11 +200,11 @@ class PremadeMediawikiExtensionGroups {
'trim',
preg_split( "/$linefeed{2,}/", $defines, -1, PREG_SPLIT_NO_EMPTY )
);
- $groups = array();
+ $groups = [];
foreach ( $sections as $section ) {
$lines = array_map( 'trim', preg_split( "/$linefeed/", $section ) );
- $newgroup = array();
+ $newgroup = [];
foreach ( $lines as $line ) {
if ( $line === '' || $line[0] === '#' ) {
@@ -201,7 +224,6 @@ class PremadeMediawikiExtensionGroups {
case 'desc':
case 'descmsg':
case 'file':
- case 'format':
case 'id':
case 'magicfile':
case 'var':
@@ -209,9 +231,10 @@ class PremadeMediawikiExtensionGroups {
break;
case 'optional':
case 'ignored':
+ case 'languages':
$values = array_map( 'trim', explode( ',', $value ) );
if ( !isset( $newgroup[$key] ) ) {
- $newgroup[$key] = array();
+ $newgroup[$key] = [];
}
$newgroup[$key] = array_merge( $newgroup[$key], $values );
break;
@@ -228,7 +251,7 @@ class PremadeMediawikiExtensionGroups {
$newgroup['prefix'] = $prefix;
if ( !isset( $newgroup['mangle'] ) ) {
- $newgroup['mangle'] = array();
+ $newgroup['mangle'] = [];
}
$messages = array_map( 'trim', explode( ',', $messages ) );
@@ -253,10 +276,10 @@ class PremadeMediawikiExtensionGroups {
protected function processGroups( $groups ) {
$configureData = $this->loadConfigureExtensionData();
- $fixedGroups = array();
+ $fixedGroups = [];
foreach ( $groups as $g ) {
if ( !is_array( $g ) ) {
- $g = array( $g );
+ $g = [ $g ];
}
$name = $g['name'];
@@ -267,17 +290,8 @@ class PremadeMediawikiExtensionGroups {
$id = $this->idPrefix . preg_replace( '/\s+/', '', strtolower( $name ) );
}
- // Default message file format is currently php
- if ( !isset( $g['format'] ) ) {
- $g['format'] = 'json';
- }
-
if ( !isset( $g['file'] ) ) {
- if ( $g['format'] === 'json' ) {
- $file = preg_replace( '/\s+/', '', "$name/i18n/%CODE%.json" );
- } else {
- $file = preg_replace( '/\s+/', '', "$name/$name.i18n.php" );
- }
+ $file = preg_replace( '/\s+/', '', "$name/i18n/%CODE%.json" );
} else {
$file = $g['file'];
}
@@ -295,24 +309,24 @@ class PremadeMediawikiExtensionGroups {
$url = false;
}
- $newgroup = array(
+ $newgroup = [
'name' => $name,
'file' => $file,
'descmsg' => $descmsg,
'url' => $url,
- );
+ ];
- $copyvars = array(
+ $copyvars = [
'aliasfile',
'desc',
- 'format',
'ignored',
+ 'languages',
'magicfile',
'mangle',
'optional',
'prefix',
'var',
- );
+ ];
foreach ( $copyvars as $var ) {
if ( isset( $g[$var] ) ) {
@@ -322,7 +336,7 @@ class PremadeMediawikiExtensionGroups {
// Mark some fixed form optional messages automatically
if ( !isset( $newgroup['optional' ] ) ) {
- $newgroup['optional'] = array();
+ $newgroup['optional'] = [];
}
// Mark extension name and skin names optional.
@@ -337,21 +351,21 @@ class PremadeMediawikiExtensionGroups {
protected function loadConfigureExtensionData() {
if ( !$this->useConfigure ) {
- return array();
+ return [];
}
global $wgAutoloadClasses;
$postfix = 'Configure/load_txt_def/TxtDef.php';
if ( !file_exists( "{$this->path}/$postfix" ) ) {
- return array();
+ return [];
}
$wgAutoloadClasses['TxtDef'] = "{$this->path}/$postfix";
$tmp = TxtDef::loadFromFile( "{$this->path}/Configure/settings/Settings-ext.txt" );
return array_combine(
- array_map( array( __CLASS__, 'foldId' ), array_keys( $tmp ) ),
+ array_map( [ __CLASS__, 'foldId' ], array_keys( $tmp ) ),
array_values( $tmp )
);
}
diff --git a/www/wiki/extensions/Translate/ffs/SimpleFFS.php b/www/wiki/extensions/Translate/ffs/SimpleFFS.php
index 444cd2e6..53bc9b71 100644
--- a/www/wiki/extensions/Translate/ffs/SimpleFFS.php
+++ b/www/wiki/extensions/Translate/ffs/SimpleFFS.php
@@ -12,13 +12,16 @@
* Other FFS classes can extend SimpleFFS and override suitable methods.
* @ingroup FFS
*/
+
+use UtfNormal\Validator;
+
class SimpleFFS implements FFS {
public function supportsFuzzy() {
return 'no';
}
public function getFileExtensions() {
- return array();
+ return [];
}
/**
@@ -117,7 +120,7 @@ class SimpleFFS implements FFS {
throw new MWException( "Contents of $filename are not valid utf-8." );
}
- $input = UtfNormal::cleanUp( $input );
+ $input = Validator::cleanUp( $input );
try {
return $this->readFromVariable( $input );
@@ -143,7 +146,7 @@ class SimpleFFS implements FFS {
list( $authorsPart, $messagesPart ) = $parts;
$authors = explode( self::RECORD_SEPARATOR, $authorsPart );
- $messages = array();
+ $messages = [];
foreach ( explode( self::RECORD_SEPARATOR, $messagesPart ) as $line ) {
if ( $line === '' ) {
@@ -163,10 +166,10 @@ class SimpleFFS implements FFS {
$messages = $this->group->getMangler()->mangle( $messages );
- return array(
+ return [
'AUTHORS' => $authors,
'MESSAGES' => $messages,
- );
+ ];
}
/**
@@ -192,7 +195,9 @@ class SimpleFFS implements FFS {
$targetFile = $writePath . '/' . $this->group->getTargetFilename( $collection->code );
- if ( file_exists( $targetFile ) ) {
+ $targetFileExists = file_exists( $targetFile );
+
+ if ( $targetFileExists ) {
$this->tryReadSource( $targetFile, $collection );
} else {
$sourceFile = $this->group->getSourceFilePath( $collection->code );
@@ -200,10 +205,22 @@ class SimpleFFS implements FFS {
}
$output = $this->writeReal( $collection );
- if ( $output ) {
- wfMkdirParents( dirname( $targetFile ), null, __METHOD__ );
- file_put_contents( $targetFile, $output );
+ if ( !$output ) {
+ return;
+ }
+
+ // Some file formats might have changing parts, such as timestamp.
+ // This allows the file handler to skip updating files, where only
+ // the timestamp would change.
+ if ( $targetFileExists ) {
+ $oldContent = $this->tryReadFile( $targetFile );
+ if ( !$this->shouldOverwrite( $oldContent, $output ) ) {
+ return;
+ }
}
+
+ wfMkdirParents( dirname( $targetFile ), null, __METHOD__ );
+ file_put_contents( $targetFile, $output );
}
/**
@@ -351,4 +368,12 @@ class SimpleFFS implements FFS {
return $data;
}
+
+ public function isContentEqual( $a, $b ) {
+ return $a === $b;
+ }
+
+ public function shouldOverwrite( $a, $b ) {
+ return true;
+ }
}
diff --git a/www/wiki/extensions/Translate/ffs/XliffFFS.php b/www/wiki/extensions/Translate/ffs/XliffFFS.php
index e8abd7ed..cef5d5bb 100644
--- a/www/wiki/extensions/Translate/ffs/XliffFFS.php
+++ b/www/wiki/extensions/Translate/ffs/XliffFFS.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -33,7 +33,7 @@ class XliffFFS extends SimpleFFS {
}
public function getFileExtensions() {
- return array( '.xlf', '.xliff', '.xml' );
+ return [ '.xlf', '.xliff', '.xml' ];
}
/**
@@ -42,7 +42,7 @@ class XliffFFS extends SimpleFFS {
* @return array Parsed data.
*/
public function readFromVariable( $data, $element = 'target' ) {
- $messages = array();
+ $messages = [];
$mangler = $this->group->getMangler();
$reader = new SimpleXMLElement( $data );
@@ -86,9 +86,9 @@ class XliffFFS extends SimpleFFS {
$messages[$key] = $value;
}
- return array(
+ return [
'MESSAGES' => $mangler->mangle( $messages ),
- );
+ ];
}
/**
diff --git a/www/wiki/extensions/Translate/ffs/YamlFFS.php b/www/wiki/extensions/Translate/ffs/YamlFFS.php
index 41fe5ad8..aaa93702 100644
--- a/www/wiki/extensions/Translate/ffs/YamlFFS.php
+++ b/www/wiki/extensions/Translate/ffs/YamlFFS.php
@@ -8,17 +8,25 @@
* @ingroup FFS
*/
class YamlFFS extends SimpleFFS implements MetaYamlSchemaExtender {
+ /**
+ * @param FileBasedMessageGroup $group
+ */
+ public function __construct( FileBasedMessageGroup $group ) {
+ parent::__construct( $group );
+ $this->flattener = $this->getFlattener();
+ }
+
public function getFileExtensions() {
- return array( '.yaml', '.yml' );
+ return [ '.yaml', '.yml' ];
}
/**
- * @param $data
+ * @param string $data
* @return array Parsed data.
*/
public function readFromVariable( $data ) {
// Authors first.
- $matches = array();
+ $matches = [];
preg_match_all( '/^#\s*Author:\s*(.*)$/m', $data, $matches );
$authors = $matches[1];
@@ -36,14 +44,14 @@ class YamlFFS extends SimpleFFS implements MetaYamlSchemaExtender {
$value = rtrim( $value, "\n" );
}
- return array(
+ return [
'AUTHORS' => $authors,
'MESSAGES' => $messages,
- );
+ ];
}
/**
- * @param $collection MessageCollection
+ * @param MessageCollection $collection
* @return string
*/
protected function writeReal( MessageCollection $collection ) {
@@ -52,7 +60,7 @@ class YamlFFS extends SimpleFFS implements MetaYamlSchemaExtender {
$mangler = $this->group->getMangler();
- $messages = array();
+ $messages = [];
/**
* @var $m TMessage
*/
@@ -77,7 +85,7 @@ class YamlFFS extends SimpleFFS implements MetaYamlSchemaExtender {
// Some groups have messages under language code.
if ( isset( $this->extra['codeAsRoot'] ) ) {
$code = $this->group->mapCode( $collection->code );
- $messages = array( $code => $messages );
+ $messages = [ $code => $messages ];
}
$output .= TranslateYaml::dump( $messages );
@@ -86,7 +94,7 @@ class YamlFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
/**
- * @param $collection MessageCollection
+ * @param MessageCollection $collection
* @return string
*/
protected function doHeader( MessageCollection $collection ) {
@@ -107,7 +115,7 @@ class YamlFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
/**
- * @param $collection MessageCollection
+ * @param MessageCollection $collection
* @return string
*/
protected function doAuthors( MessageCollection $collection ) {
@@ -123,147 +131,69 @@ class YamlFFS extends SimpleFFS implements MetaYamlSchemaExtender {
}
/**
+ * Obtains object used to flatten and unflatten arrays. In this implementation
+ * we use the ArrayFlattener class which also supports CLDR pluralization rules.
+ *
+ * @return object with flatten, unflatten methods
+ */
+ protected function getFlattener() {
+ $nestingSeparator = $this->extra['nestingSeparator'] ?? '.';
+ $parseCLDRPlurals = $this->extra['parseCLDRPlurals'] ?? false;
+
+ // Instantiate helper class for flattening and unflattening nested arrays
+ return new ArrayFlattener( $nestingSeparator, $parseCLDRPlurals );
+ }
+
+ /**
* Flattens multidimensional array by using the path to the value as key
* with each individual key separated by a dot.
*
- * @param $messages array
+ * @param array $messages
*
* @return array
*/
protected function flatten( $messages ) {
- $flat = true;
-
- foreach ( $messages as $v ) {
- if ( !is_array( $v ) ) {
- continue;
- }
-
- $flat = false;
- break;
- }
-
- if ( $flat ) {
- return $messages;
- }
-
- $array = array();
- foreach ( $messages as $key => $value ) {
- if ( !is_array( $value ) ) {
- $array[$key] = $value;
- } else {
- $plural = $this->flattenPlural( $value );
- if ( $plural ) {
- $array[$key] = $plural;
- } else {
- $newArray = array();
- foreach ( $value as $newKey => $newValue ) {
- $newArray["$key.$newKey"] = $newValue;
- }
- $array += $this->flatten( $newArray );
- }
- }
-
- /**
- * Can as well keep only one copy around.
- */
- unset( $messages[$key] );
- }
-
- return $array;
+ return $this->flattener->flatten( $messages );
}
/**
- * Performs the reverse operation of flatten. Each dot in the key starts a
- * new subarray in the final array.
+ * Performs the reverse operation of flatten. Each dot (or custom separator)
+ * in the key starts a new subarray in the final array.
*
- * @param $messages array
+ * @param array $messages
*
* @return array
*/
protected function unflatten( $messages ) {
- $array = array();
- foreach ( $messages as $key => $value ) {
- $plurals = $this->unflattenPlural( $key, $value );
-
- if ( $plurals === false ) {
- continue;
- }
-
- foreach ( $plurals as $keyPlural => $valuePlural ) {
- $path = explode( '.', $keyPlural );
- if ( count( $path ) === 1 ) {
- $array[$keyPlural] = $valuePlural;
- continue;
- }
-
- $pointer = &$array;
- do {
- /**
- * Extract the level and make sure it exists.
- */
- $level = array_shift( $path );
- if ( !isset( $pointer[$level] ) ) {
- $pointer[$level] = array();
- }
-
- /**
- * Update the pointer to the new reference.
- */
- $tmpPointer = &$pointer[$level];
- unset( $pointer );
- $pointer = &$tmpPointer;
- unset( $tmpPointer );
-
- /**
- * If next level is the last, add it into the array.
- */
- if ( count( $path ) === 1 ) {
- $lastKey = array_shift( $path );
- $pointer[$lastKey] = $valuePlural;
- }
- } while ( count( $path ) );
- }
- }
-
- return $array;
- }
-
- /**
- * @param $value
- * @return bool
- */
- public function flattenPlural( $value ) {
- return false;
+ return $this->flattener->unflatten( $messages );
}
- /**
- * Override this. Return false to skip processing this value. Otherwise
- *
- * @param $key string
- * @param $value string
- *
- * @return array with keys and values.
- */
- public function unflattenPlural( $key, $value ) {
- return array( $key => $value );
+ public function isContentEqual( $a, $b ) {
+ return $this->flattener->compareContent( $a, $b );
}
public static function getExtraSchema() {
- $schema = array(
- 'root' => array(
+ $schema = [
+ 'root' => [
'_type' => 'array',
- '_children' => array(
- 'FILES' => array(
+ '_children' => [
+ 'FILES' => [
'_type' => 'array',
- '_children' => array(
- 'codeAsRoot' => array(
+ '_children' => [
+ 'codeAsRoot' => [
+ '_type' => 'boolean',
+ ],
+ 'nestingSeparator' => [
+ '_type' => 'text',
+ ],
+ 'parseCLDRPlurals' => [
'_type' => 'boolean',
- ),
- )
- )
- )
- )
- );
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
return $schema;
}
diff --git a/www/wiki/extensions/Translate/hooks.txt b/www/wiki/extensions/Translate/hooks.txt
index 7a101ca2..e144adb8 100644
--- a/www/wiki/extensions/Translate/hooks.txt
+++ b/www/wiki/extensions/Translate/hooks.txt
@@ -20,19 +20,10 @@ For a guide to PHP hooks, navigate to your root MediaWiki
directory, and then find docs/hooks.txt.
=== JavaScript hooks ===
-JavaScript hooks for the Translate extension are a little different. To use
-them, declare a dependency on ext.translate.hooks:
+JavaScript hooks for the Translate extension use the standard mw.hook API provided
+by MediaWiki.
- $wgResourceModules['...'] = array(
- 'scripts' => '...js',
- 'dependencies' => array( 'ext.translate.hooks' ),
- );
-
-And then in that module use:
- mw.translateHooks.add( name, hookFunction );
-
-where name is a string, but hookFunction is not (unlike in the case of PHP hooks)
-but rather a function reference. Return values from JavaScript hooks are ignored.
+Hooks are prefixed with mw.translate as a convention.
== Events and parameters ==
@@ -46,12 +37,6 @@ Post processing step to format in wiki
=== PHP events ===
-;SpecialTranslate::executeTask: You can output the default task output
- RequestContext $context: For adding output, accessing current interface language etc.
- TranslateTask $task = null: Current task if any
- MessageGroup $group
- array $options: Active options
-
;Translate:MessageGroupStats:isIncluded: Controls whether message group is shown for a given language in language or message group statistics. Mostly used internally by Translate to hide discouraged groups and groups restricted to certain languages.
string $groupId: Message group id
string $code: Language code
@@ -73,13 +58,6 @@ Post processing step to format in wiki
;TranslateEventTranslationReview: Event triggered when a translation is proofread
MessageHandle $handle
-;TranslateFormatMessageBeforeTable: Provides an opportunity to manipulate the display of translation strings (messages) in the main table
- string &$message: The message that will be displayed
- TMessage $m: Object representing the source object, useful for $m->original() and $m->translation()
- MessageGroup $group: The source message group
- string $targetLanguage: The language for which translations are being shown
- array &$extraAttribs: An array of attributes that will be added to the table row
-
;TranslateGetBoxes: Provides an opportunity to add or remove "boxes" (translation helpers) from the translation interface
MessageGroup $group: The message group being worked on
MessageHandle $handle: An object representing the translation page (e.g. 'MediaWiki:Example/qqq')
@@ -91,10 +69,6 @@ Post processing step to format in wiki
;TranslateGetAPIMessageGroupsPropertyDescs: Allows extra properties to be added to captured by action=query&meta=messagegroups&mgprop=foo|bar|bat module
array &$properties: An associative array of properties, name => description (which is ignored).
-;TranslateGetExtraInputs: Provides an opportunity to add extra form inputs to to the default translation editor
- string &$translation: The translation as it stands
- string &$extraInputs: The extra input space, ready for HTML to be appended
-
;TranslateGetSpecialTranslateOptions: Provides an opportunity for overriding task values
array &$defaults: Associative array of default values
array &$nondefaults: Associative array of nondefault (override) values
@@ -108,12 +82,6 @@ Post processing step to format in wiki
MessageGroup $group
array &$variables: Variable name => replacement
-;TranslateMessageTableInit: When creating new MessageTable
- MessageTable &$table: Default implementation that can be accessed or even replaced
- IContextSource $context:
- MessageCollection $collection
- MessageGroup $group
-
;Translate:newTranslation: Event triggered when non-fuzzy translation has been made
MessageHandle $handle
int $revisionId
@@ -142,22 +110,24 @@ Post processing step to format in wiki
;TranslateTranslationAids: Make new translation aids available to any message group (which must choose an implementation in its getTranslationAids() method).
array &$types: List of translation aid identifiers, numerically indexed
-;AddNewAccount: Replica of the core hook, see https://www.mediawiki.org/wiki/Manual:Hooks/AddNewAccount
+;Translate:modifyMessageGroupStates: Allow hooks to change workflow states depending on the group's ID.
+ string $groupId: ID of the current message group.
+ array &$conf: Workflow states, can be modified.
=== JavaScript events ===
-;afterSubmit: Provides an opportunity to modify a Translate translation form immediately after it is submitted
+;mw.translate.editor.afterSubmit: Provides an opportunity to modify a Translate translation form immediately after it is submitted
jQuery form: The form that has just been submitted
-;afterEditorShown: Provides an opportunity to manipulate the editing interface once it's shown
+;mw.translate.editor.afterEditorShown: Provides an opportunity to manipulate the editing interface once it's shown
jQuery translateEditor.$editor: The current translation-editing form
-;beforeSubmit: Provides an opportunity to modify a Translate translation form immediately before it is submitted
+;mw.translate.editor.beforeSubmit: Provides an opportunity to modify a Translate translation form immediately before it is submitted
jQuery form: The form being submitted
-;formatMessageBeforeTable: Provides an opportunity to manipulate the display of translation strings (messages) in the main table
+;mw.translate.messagetable.formatMessageBeforeTable: Provides an opportunity to manipulate the display of translation strings (messages) in the main table
object message: The message object, with a range of useful (and manipulable) properties
-;showTranslationHelpers: Provides an opportunity to handle custom translation helpers
+;mw.translate.editor.showTranslationHelpers: Provides an opportunity to handle custom translation helpers
object result.helpers: JSON subset focusing on the helpers returned e.g. result.helpers.definition
jQuery translateEditor.$editor: The current translation-editing form
diff --git a/www/wiki/extensions/Translate/i18n/api/ar.json b/www/wiki/extensions/Translate/i18n/api/ar.json
index ab9118b6..bc17e913 100644
--- a/www/wiki/extensions/Translate/i18n/api/ar.json
+++ b/www/wiki/extensions/Translate/i18n/api/ar.json
@@ -2,18 +2,130 @@
"@metadata": {
"authors": [
"محمد أحمد عبد الفتاح",
- "Meno25"
+ "Meno25",
+ "ديفيد"
]
},
+ "apihelp-aggregategroups-description": "إدارة مجموعات الرسائل المجمعة.\n\nأنت يمكنك إضافة وإزالة مجموعات الرسائل المجمعة وجعل مجموعات الرسائل مقترنة أو غير مقترنة بها (واحدة كل مرة).",
+ "apihelp-aggregategroups-summary": "إدارة مجموعات الرسائل المجمعة.",
+ "apihelp-aggregategroups-extended-description": "يمكنك إضافة مجموعات رسائل مجمعة وإزالتها، وإقران مجموعات رسائل أو فصلها عنها (واحدة تلو الأخرى).",
+ "apihelp-aggregategroups-param-do": "ما ينبغي عمله مع مجموعة الرسائل المجمعة.",
+ "apihelp-aggregategroups-param-aggregategroup": "رقم مجموعة الرسائل المجمعة.",
"apihelp-aggregategroups-param-group": "معرف مجموعة الرسائل.",
+ "apihelp-aggregategroups-param-groupname": "اسم مجموعة الرسائل المجمعة.",
+ "apihelp-aggregategroups-param-groupdescription": "وصف مجموعة الرسائل المجمعة.",
+ "apihelp-aggregategroups-example-1": "اجعل المجموعة مقترنة",
+ "apihelp-groupreview-description": "اضبط حالات عمل مجموعات الرسائل.",
+ "apihelp-groupreview-summary": "تعيين حالات سير عمل مجموعة الرسائل.",
"apihelp-groupreview-param-group": "مجموعة الرسائل.",
"apihelp-groupreview-param-language": "كود اللغة.",
+ "apihelp-groupreview-param-state": "الحالة الجديدة للمجموعة.",
+ "apihelp-groupreview-example-1": "علم على حالة الترجمة الألمانية لمجموعة الرسائل \"group-Example\" كجاهزة",
+ "apihelp-query+languagestats-description": "استعلم عن إحصاءات اللغة.",
+ "apihelp-query+languagestats-summary": "إحصائيات لغة الاستعلام.",
+ "apihelp-query+languagestats-param-timelimit": "الوقت الأقصى لإمضائه في حساب الإحصاءات المفقودة. لو صفر، فقط النتائج المخزنة من البداية سيتم إرجاعها.",
"apihelp-query+languagestats-param-language": "كود اللغة.",
+ "apihelp-query+languagestats-example-1": "قائمة إحصاءات إكمال الترجمة للفنلندية",
+ "apihelp-query+messagecollection-description": "استعلم MessageCollection حول الترجمات.",
+ "apihelp-query+messagecollection-summary": "استعلام MessageCollection حول الترجمات.",
"apihelp-query+messagecollection-param-group": "مجموعة الرسائل.",
"apihelp-query+messagecollection-param-language": "كود اللغة.",
+ "apihelp-query+messagecollection-param-limit": "كم عدد الرسائل ليتم عرضها (بعد الفلترة).",
+ "apihelp-query+messagecollection-param-offset": "عدد صحيح أو مفتاح الإزاحة للبدء.",
+ "apihelp-query+messagecollection-param-filter": "فلاتر مموعات الرسائل. استخدم <kbd>!</kbd> لنفي الشرط. على سبيل المثال <kbd>!fuzzy</kbd> تعني اعرض فقط كل الرسائل ال non-fuzzy. الفلاتر يتم تطبيقها بالترتيب المعطى.\n;fuzzy:الرسائل بالوسم fuzzy.\n;optional:الرسائل التي ينبغي أن تتم ترجمتها فقط لو أن التغييرات ضرورية.\n;ignored:الرسائل التي لا ينبغي أن تتم ترجمتها أبدا.\n;hastranslation:الرسائل التي لديها ترجمة بغض النظر عما إذا كانت fuzzy أم لا.\n;translated:الرسائل التي لديها ترجمة ليست fuzzy.\n;changed:الرسائل التي تمت ترجمتها أو تغييرها منذ آخر تصدير.\n;reviewer&#58;N:الرسائل حيث رقم المستخدم <kbd>N</kbd> ضمن المراجعين.\n;last-translator&#58;N:الرسائل حيث رقم المستخدم <kbd>N</kbd> هو آخر مترجم.",
+ "apihelp-query+messagecollection-param-prop": "أي الخصائص للحصول عليها:\n;definition:تعريف الرسالة.\n;translation:الترجمة الحالية (بدون سلسلة الحروف $1، استخدم الوسوم للتحقق من الترجمات غير المحدثة أو المكسورة).\n;tags:وسوم الرسالة، مثل optional, ignored و fuzzy.\n;properties:خصائص الرسالة، مثل status, revision, last-translator. يمكن أن تختلف بين الرسائل.\n;revision:<span class=\"deprecated\">Deprecated!</span> استخدم $2prop=properties.",
"apihelp-query+messagecollection-example-1": "قائمة اللغات المدعومة",
+ "apihelp-query+messagecollection-example-2": "قائمة بتعريفات الرسائل غير الاختيارية للمجموعة \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "قائمة بالرسائل الاختيارية بالفنلندية مع الوسوم للمجموعة \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "المزيد من المعلومات حول آخر مراجعات الترجمة للمجموعة \"page-Example\"",
+ "apihelp-query+messagegroups-description": "إرجاع المعلومات حول مجموعات الرسائل.\n\nلاحظ أن معامل uselang يؤثر على خرج الأجزاء المعتمدة على اللغة.",
+ "apihelp-query+messagegroups-summary": "إرجاع المعلومات حول مجموعات الرسائل.",
+ "apihelp-query+messagegroups-extended-description": "لاحظ أن الوسيط uselang يؤثر على إخراج الأجزاء المعتمدة على اللغة.",
+ "apihelp-query+messagegroups-param-depth": "عند استخدام صيغة الشجرة، حدد العمق لهذا العدد من المستويات. القيمة 0 تعني أنه لا توجد مجموعات فرعية معروضة. لو أن الحد تم الوصول إليه، فالخرج يحتوي على قيمة \"groupcount\"، والتي تحدد عدد الأبناء المباشرين.",
+ "apihelp-query+messagegroups-param-filter": "فقط أرجع الرسائل ذوات الأرقام التي تطابق واحدا أو أكثر من المدخلات المعطاة (case-insensitive, separated by pipes, * wildcard).",
+ "apihelp-query+messagegroups-param-format": "في صيغة الشجرة مجموعات الرسائل يمكن أن تتواجد في أماكن متعددة من الشجرة.",
+ "apihelp-query+messagegroups-param-iconsize": "الحجم المفضل لأيقونة المجموعة بالراستر.",
+ "apihelp-query+messagegroups-param-prop": "أي المعلومات المتعلقة بالترجمة للحصول عليها:\n;id:ضمن رقم المجموعة.\n;label:ضمن علامة المجموعة.\n;description:ضمن وصف المجموعة.\n;class:ضمن اسم الكلاس للمجموعة.\n;namespace:ضمن نطاق المجموعة. ليس كل المجموعات تنتمي لنطاق وحيد.\n;exists:ضمن خاصية وجود محسوبة ذاتيا للمجموعة.\n;icon:ضمن مسار لأيقونة المجموعة.\n;priority:ضمن حالة الأولوية مثل discouraged.\n;prioritylangs:ضمن اللغات المفضلة. لو غير مضبوط، فهذا يرجع false.\n;priorityforce:ضمن حالة الأولوية - هو إعداد لغات الأولوية إجباري.\n;workflowstates:ضمن حالات العمل لمجموعة الرسائل.",
+ "apihelp-query+messagegroups-param-root": "عند استخدام صيغة الشجرة، بدلا من البدء من المستوى الأعلى ابدأ من مجموعة الرسائل المعطاة، والت يجب أن تكون مجموعة رسائل مجمعة. عند استخدام الصيغة المسطحة فقط المجموعة المحددة يتم إرجاعها.",
"apihelp-query+messagegroups-example-1": "أظهر مجموعات الرسائل",
+ "apihelp-query+messagegroupstats-description": "استعلم عن إحصاءات مجموعة الرسائل.",
+ "apihelp-query+messagegroupstats-summary": "استعلم عن مجموعة الرسائل.",
+ "apihelp-query+messagegroupstats-param-timelimit": "الوقت الأقصى لإمضائه في حساب الإحصاءات المفقودة. لو صفر، فقط النتائج المخزنة من البداية سيتم إرجاعها.",
"apihelp-query+messagegroupstats-param-group": "معرف مجموعة الرسائل.",
+ "apihelp-query+messagegroupstats-example-1": "قائمة بإحصاءات إكمال الترجمة للمجموعة \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "استعلم في كل الترجمات عن رسالة واحدة.",
+ "apihelp-query+messagetranslations-summary": "الاستعلام عن كل الترجمات لرسالة واحدة.",
+ "apihelp-query+messagetranslations-param-title": "العنوان الكامل لرسالة معروفة.",
+ "apihelp-query+messagetranslations-example-1": "قائمة بالترجمات في الويكي عن \"MediaWiki:January\"",
+ "apihelp-translatesandbox-description": "سجل الدخول وأدر المستخدمين في الملعب.",
+ "apihelp-translatesandbox-summary": "سجل الدخول وأدر المستخدمين في الملعب.",
+ "apihelp-translatesandbox-param-do": "ما يجب فعله.",
+ "apihelp-translatesandbox-param-userid": "أرقام المستخدمين للمستخدمين الذين تتم إدارتهم. استخدم 0 للإنشاء.",
"apihelp-translatesandbox-param-username": "اسم المستخدم عند إنشاء مستخدم.",
- "apihelp-translationaids-param-title": "العنوان الكامل لرسالة معروفة."
+ "apihelp-translatesandbox-param-password": "كلمة السر عند إنشاء المستخدم.",
+ "apihelp-translatesandbox-param-email": "البريد الإلكتروني عند إنشاء المستخدم.",
+ "apihelp-translationaids-description": "استعلم عن كل مساعدات الترجمة.",
+ "apihelp-translationaids-summary": "الاستعلام عن كل الترجمات.",
+ "apihelp-translationaids-param-title": "العنوان الكامل لرسالة معروفة.",
+ "apihelp-translationaids-param-group": "مجموعة الرسائل التي تنتمي الرسالة إليها. لو فارغة إذا سيتم استخدام المجموعة الأساسية.",
+ "apihelp-translationaids-param-prop": "ما هي مساعدات الترجمة للتضمين.",
+ "apihelp-translationaids-example-1": "اعرض المساعدات ل[[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "علم على الترجمات كمراجعة.",
+ "apihelp-translationreview-summary": "علم مارك كمراجعة.",
+ "apihelp-translationreview-param-revision": "رقم المراجعة لمراجعتها.",
+ "apihelp-translationreview-example-1": "مراجعة المراجعة 1",
+ "apihelp-translationstash-description": "أضف الترجمات للستاش.",
+ "apihelp-translationstash-summary": "أضف ترجمات إلى stash.",
+ "apihelp-translationstash-param-subaction": "الفعل.",
+ "apihelp-translationstash-param-title": "عنوان صفحة وحدة الترجمة.",
+ "apihelp-translationstash-param-translation": "الترجمة بواسطة المستخدم.",
+ "apihelp-translationstash-param-metadata": "كائن JSON.",
+ "apihelp-translationstash-param-username": "اختياريا المستخدم للحصول على الستاش الخاص به. فقط المستخدمون المخولون يمكنهم عمل هذا.",
+ "apihelp-translationstash-example-1": "أضف ترجمة للستاش ل[[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "استعلم الستاش",
+ "apihelp-ttmserver-description": "استعلم عن الاقتراحات من ذاكرات الترجمة.",
+ "apihelp-ttmserver-summary": "استعلم عن الاقتراحات من ذاكرات الترجمة.",
+ "apihelp-ttmserver-param-service": "أي من خدمات الترجمة المتوفرة يتم استخدامها",
+ "apihelp-ttmserver-param-sourcelanguage": "كود اللغة للنص المصدر.",
+ "apihelp-ttmserver-param-targetlanguage": "كود اللغة للاقتراح.",
+ "apihelp-ttmserver-param-text": "النص لإيجاد الاقتراحات له.",
+ "apihelp-ttmserver-example-1": "الحصول على الاقتراحات لترجمة \"Help\" من الإنجليزية للألمانية",
+ "apihelp-searchtranslations-description": "ابحث في الترجمات.",
+ "apihelp-searchtranslations-summary": "بحث في الترجمات.",
+ "apihelp-searchtranslations-param-service": "أي من خدمات الترجمة المتوفرة يتم استخدامها.",
+ "apihelp-searchtranslations-param-query": "سلسلة الحروف للبحث عنها.",
+ "apihelp-searchtranslations-param-sourcelanguage": "كود اللغة للنص المصدر.",
+ "apihelp-searchtranslations-param-language": "كود اللغة للبحث في سلسلة الحروف عنه.",
+ "apihelp-searchtranslations-param-group": "رقم المجموعة للبحث عن سلسلة الحروف فيه.",
+ "apihelp-searchtranslations-param-filter": "فلتر حالة ترجمة الرسائل.",
+ "apihelp-searchtranslations-param-match": "طابق أي/كل كلمات البحث.",
+ "apihelp-searchtranslations-param-case": "بحث حساس (غير حساس) لحالة الحروف.",
+ "apihelp-searchtranslations-param-offset": "الإزاحة للترجمات.",
+ "apihelp-searchtranslations-param-limit": "حجم النتيجة.",
+ "apihelp-searchtranslations-example-1": "اعرض الترجمات للغة.",
+ "apihelp-searchtranslations-example-2": "اعرض الرسائل غير المترجمة التي تطابق الاستعلام في اللغة المصدر.",
+ "apihelp-translationcheck-description": "التحقق من صحة المدخلات المترجمة ضد مدققي الرسائل.",
+ "apihelp-translationcheck-summary": "التحقق من صحة الترجمات.",
+ "apihelp-translationcheck-param-title": "عنوان الصفحة بالنطاق ورمز اللغة.",
+ "apihelp-translationcheck-param-translation": "ترجمة للتحقق.",
+ "apierror-translate-duplicateaggregategroup": "مجموعة الرسائل موجودة بالفعل",
+ "apierror-translate-fuzzymessage": "لا يمكن مراجعة الترجمات الضبابية",
+ "apierror-translate-groupreviewdisabled": "مراجعة مجموعة الرسائل غير مستخدمة.",
+ "apierror-translate-invalidaggregategroup": "مجموعة رسائل مجمعة غير صالحة",
+ "apierror-translate-invalidaggregategroupname": "اسم مجموعة رسائل مجمعة غير صالح",
+ "apierror-translate-invalidgroup": "المجموعة غير موجودة أو غير صالحة",
+ "apierror-translate-invalidstate": "الحالة المطلوبة غير صالحة.",
+ "apierror-translate-invalidlanguage": "اللغة المطلوبة غير صالحة.",
+ "apierror-translate-invalidupdate": "تحديث غير صالح",
+ "apierror-translate-language-disabled": "الترجمة إلى $1 معطلة.",
+ "apierror-translate-language-disabled-reason": "الترجمة إلى $1 معطلة:$2",
+ "apierror-translate-nodynamicgroups": "مجموعات الرسائل الديناميكية غير مدعومة هنا",
+ "apierror-translate-nomessagefortitle": "العنوان لا يتوافق مع رسالة قابلة للترجمة",
+ "apierror-translate-notranslationservices": "لم يتم تكوين أية خدمات ترجمة عامة; يحتاج إداري الويكي إلى تعيين <var>$wgTranslateTranslationServices</var> بشكل مناسب قبل استخدام هذه الميزة.",
+ "apierror-translate-owntranslation": "لا يمكن مراجعة الترجمات الخاصة",
+ "apierror-translate-sandboxdisabled": "ميزة الملعب ليست قيد الاستخدام",
+ "apierror-translate-sandbox-invalidppassword": "كلمة سر خاطئة",
+ "apierror-translate-unknownmessage": "رسالة غير معروفة",
+ "apiwarn-translate-alreadyreviewedbyyou": "تم تعليمها كمراجعة من قبلك",
+ "apiwarn-translate-language-disabled-source": "لغة المصدر لهذه المجموعة هي $1; يُرجَى تحديد لغة أخرى للترجمة إليها."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/ast.json b/www/wiki/extensions/Translate/i18n/api/ast.json
index 92564b08..5cfb8169 100644
--- a/www/wiki/extensions/Translate/i18n/api/ast.json
+++ b/www/wiki/extensions/Translate/i18n/api/ast.json
@@ -1,10 +1,13 @@
{
"@metadata": {
"authors": [
- "Xuacu"
+ "Xuacu",
+ "Fitoschido"
]
},
"apihelp-aggregategroups-description": "Xestionar grupos de mensaxes agregaos.\n\nPues amestar y desaniciar grupos de mensaxes agregaos y asociar o disociar grupos de mensaxes d'ellos (unu de cada vez).",
+ "apihelp-aggregategroups-summary": "Alministrar grupos de mensaxes agregaos.",
+ "apihelp-aggregategroups-extended-description": "Pues amestar y desaniciar grupos de mensaxes agregaos y asociar o disociar grupos de mensaxes d'ellos (unu de cada vez).",
"apihelp-aggregategroups-param-do": "Qué facer col grupu de mensaxes agregaos.",
"apihelp-aggregategroups-param-aggregategroup": "ID del grupu de mensaxes agregaos.",
"apihelp-aggregategroups-param-group": "ID del grupu de mensaxes.",
@@ -12,15 +15,18 @@
"apihelp-aggregategroups-param-groupdescription": "Descripción del grupu de mensaxes agregaos.",
"apihelp-aggregategroups-example-1": "Asociar un grupu",
"apihelp-groupreview-description": "Configurar los estaos del fluxu de trabayu del grupu de mensaxes.",
+ "apihelp-groupreview-summary": "Configurar los estaos del fluxu de trabayu del grupu de mensaxes.",
"apihelp-groupreview-param-group": "Grupu de mensaxes.",
"apihelp-groupreview-param-language": "Códigu de llingua.",
"apihelp-groupreview-param-state": "El nuevu estáu pal grupu.",
"apihelp-groupreview-example-1": "Marcar l'estáu de la traducción al alemán del grupu de mensaxes «grupu-Exemplu» como preparáu",
"apihelp-query+languagestats-description": "Consultar les estadístiques de llingua.",
+ "apihelp-query+languagestats-summary": "Consultar les estadístiques de llingua.",
"apihelp-query+languagestats-param-timelimit": "Tiempu máximu pa pasar calculando les estadístiques que falten. Si ye cero, sólo se devuelven los resultaos guardaos en caché dende'l principiu.",
"apihelp-query+languagestats-param-language": "Códigu de llingua.",
"apihelp-query+languagestats-example-1": "Llista d'estadístiques de completáu de traducciones pal finés.",
"apihelp-query+messagecollection-description": "Consultar MessageCollection sobro les traducciones.",
+ "apihelp-query+messagecollection-summary": "Consultar MessageCollection sobro les traducciones.",
"apihelp-query+messagecollection-param-group": "Grupu de mensaxes.",
"apihelp-query+messagecollection-param-language": "Códigu de llingua.",
"apihelp-query+messagecollection-param-limit": "Cantidá de mensaxes a amosar (después de filtriar).",
@@ -32,6 +38,8 @@
"apihelp-query+messagecollection-example-3": "Llista de mensaxes opcionales en finlandés con etiquetes pal grupu «page-Exemplu»",
"apihelp-query+messagecollection-example-4": "Más información tocante a les últimes revisiones de traducciones pal grupu «page-Exemplu»",
"apihelp-query+messagegroups-description": "Devuelve información sobro grupos de mensaxes.\n\nTen en cuenta que'l parámetru «uselang» afeuta a la salida de les partes dependientes de la llingua.",
+ "apihelp-query+messagegroups-summary": "Devolver información de los grupos de mensaxes.",
+ "apihelp-query+messagegroups-extended-description": "Alvierte que'l parámetru uselang afeuta a la salida de les páxines dependientes de la llingua.",
"apihelp-query+messagegroups-param-depth": "Al utilizar el formatu d'árbol, llendar la fondura a esta cantidá de niveles. El valor 0 significa que nun s'amuesen subgrupos. Si se llega a la llende, el resultáu incluye un valor de \"cuenta de grupos\", qu'indica'l númberu de fíos direutos.",
"apihelp-query+messagegroups-param-filter": "Devolver sólo mensaxes con IDs que casen con una o más de les entraes daes (sin diferenciar mayúscules, separaos por barres verticales, * ye'l comodín).",
"apihelp-query+messagegroups-param-format": "Nel formatu d'árbol, los grupos de mensaxes pueden existir en múltiples llugares del árbol.",
@@ -40,27 +48,33 @@
"apihelp-query+messagegroups-param-root": "Al usar el formatu d'árbol, en llugar de principiar pol nivel superior, principiar pol grupu de mensaxes indicáu, que tien de ser un grupu de mensaxes agregáu. Al usar el formatu planu sólo se devuelve'l grupu especificáu.",
"apihelp-query+messagegroups-example-1": "Amosar grupos de mensaxes",
"apihelp-query+messagegroupstats-description": "Consultar les estadístiques del grupu de mensaxes.",
+ "apihelp-query+messagegroupstats-summary": "Consultar les estadístiques del grupu de mensaxes.",
"apihelp-query+messagegroupstats-param-timelimit": "Tiempu máximu pa pasar calculando les estadístiques que falten. Si ye cero, sólo se devuelven los resultaos guardaos en caché dende'l principiu.",
"apihelp-query+messagegroupstats-param-group": "ID del grupu de mensaxes.",
"apihelp-query+messagegroupstats-example-1": "Llista d'estadístiques d'acabamientu de traducciones pal grupu \"page-Example\"",
"apihelp-query+messagetranslations-description": "Consultar toles traducciones pa un únicu mensaxe.",
+ "apihelp-query+messagetranslations-summary": "Consultar toles traducciones pa un únicu mensaxe.",
"apihelp-query+messagetranslations-param-title": "Títulu completu d'un mensaxe conocíu.",
"apihelp-query+messagetranslations-example-1": "Llista de traducciones na wiki pa \"MediaWiki:January\"",
"apihelp-translatesandbox-description": "Rexistrar y xestionar usuarios aislaos (en \"sandbox\").",
+ "apihelp-translatesandbox-summary": "Rexistrar y xestionar usuarios aisllaos (en \"sandbox\").",
"apihelp-translatesandbox-param-do": "Qué facer.",
"apihelp-translatesandbox-param-userid": "IDs de los usuarios que tan siendo xestionaos. Usa 0 pa les creaciones.",
"apihelp-translatesandbox-param-username": "Nome d'usuariu al crear l'usuariu.",
"apihelp-translatesandbox-param-password": "Contraseña al crear l'usuariu.",
"apihelp-translatesandbox-param-email": "Corréu electrónicu al crear l'usuariu.",
"apihelp-translationaids-description": "Consultar toles ayudes a la traducción.",
+ "apihelp-translationaids-summary": "Consultar toles ayudes a la traducción.",
"apihelp-translationaids-param-title": "Títulu completu d'un mensaxe conocíu.",
"apihelp-translationaids-param-group": "Grupu de mensaxes al que pertenez el mensaxe. Si ta vacío, usase'l grupu primariu.",
"apihelp-translationaids-param-prop": "Qué ayudes a la traducción incluir.",
"apihelp-translationaids-example-1": "Ver les ayudes pa [[MediaWiki:January/fi]]",
"apihelp-translationreview-description": "Marcar les traducciones como revisaes.",
+ "apihelp-translationreview-summary": "Marcar les traducciones como revisaes.",
"apihelp-translationreview-param-revision": "El númberu de revisión a revisar.",
"apihelp-translationreview-example-1": "Revisar revisión 1",
"apihelp-translationstash-description": "Amestar traducciones a la reserva.",
+ "apihelp-translationstash-summary": "Amestar traducciones a la reserva.",
"apihelp-translationstash-param-subaction": "Aición.",
"apihelp-translationstash-param-title": "Títulu de la páxina de la unidá de traducción.",
"apihelp-translationstash-param-translation": "Traducción fecha pol usuariu.",
@@ -69,12 +83,14 @@
"apihelp-translationstash-example-1": "Amestar una traducción a la reserva pa [[MediaWiki:Jan/fi]]",
"apihelp-translationstash-example-2": "Consultar la reserva",
"apihelp-ttmserver-description": "Consultar les suxerencies de les memories de traducción.",
+ "apihelp-ttmserver-summary": "Consultar les suxerencies de les memories de traducción.",
"apihelp-ttmserver-param-service": "Que servicios de traducción usar d'ente los disponibles.",
"apihelp-ttmserver-param-sourcelanguage": "El códigu de llingua del testu fonte.",
"apihelp-ttmserver-param-targetlanguage": "El códigu de llingua de la suxerencia.",
"apihelp-ttmserver-param-text": "El testu pal qu'alcontrar suxerencies.",
"apihelp-ttmserver-example-1": "Recibir suxerencies pa traducir «Help» del inglés al finés",
"apihelp-searchtranslations-description": "Buscar traducciones.",
+ "apihelp-searchtranslations-summary": "Buscar traducciones.",
"apihelp-searchtranslations-param-service": "Que servicios de traducción usar d'ente los disponibles.",
"apihelp-searchtranslations-param-query": "La cadena que buscar.",
"apihelp-searchtranslations-param-sourcelanguage": "El códigu de llingua del testu fonte.",
@@ -83,8 +99,32 @@
"apihelp-searchtranslations-param-filter": "Filtru d'estáu de traducción del mensaxe",
"apihelp-searchtranslations-param-match": "Coincide con cualquier/toles palabres de busca.",
"apihelp-searchtranslations-param-case": "Coincidir (o non) les mayúscules.",
- "apihelp-searchtranslations-param-offset": "\"Offset\" pa les traducciones.",
+ "apihelp-searchtranslations-param-offset": "Desplazamientu pa les traducciones.",
"apihelp-searchtranslations-param-limit": "Tamañu del resultáu.",
"apihelp-searchtranslations-example-1": "Amosar les traducciones de la llingua.",
- "apihelp-searchtranslations-example-2": "Amosar los mensaxes sin traducir que casen cola consulta na llingua orixinal"
+ "apihelp-searchtranslations-example-2": "Amosar los mensaxes sin traducir que casen cola consulta na llingua orixinal",
+ "apihelp-translationcheck-description": "Validar la entrada de traducción dada escontra comprobadores de mensaxes.",
+ "apihelp-translationcheck-summary": "Validar traducciones.",
+ "apihelp-translationcheck-param-title": "Títulu de páxina con espaciu de nomes y códigu de llingua.",
+ "apihelp-translationcheck-param-translation": "La traducción a validar.",
+ "apierror-translate-duplicateaggregategroup": "El grupu de mensaxes yá existe",
+ "apierror-translate-fuzzymessage": "Nun pueden revisase les traducciones aproximaes",
+ "apierror-translate-groupreviewdisabled": "La revisión del grupu de mensaxes nun ta n'usu.",
+ "apierror-translate-invalidaggregategroup": "Grupu de mensaxes agregaos inválidu",
+ "apierror-translate-invalidaggregategroupname": "Nome de grupu de mensaxes agregaos inválidu",
+ "apierror-translate-invalidgroup": "El grupu nun esiste o nun ye válidu",
+ "apierror-translate-invalidstate": "L'estáu solicitáu nun ye válidu.",
+ "apierror-translate-invalidlanguage": "La llingua solicitada ye inválida.",
+ "apierror-translate-invalidupdate": "Anovamientu inválidu",
+ "apierror-translate-language-disabled": "La traducción a $1 ta desactivada",
+ "apierror-translate-language-disabled-reason": "La traducción a $1 ta desactivada: $2",
+ "apierror-translate-nodynamicgroups": "Nun s'almiten equí los grupos de mensaxes dinámicos",
+ "apierror-translate-nomessagefortitle": "El títulu nun casa con un mensaxe traducible",
+ "apierror-translate-notranslationservices": "Nun se configuró nengún serviciu públicu de traducciones. L'alministrador de la wiki tien de configurar <var>$wgTranslateTranslationServices</var> afechiscamente pa poder utilizar esta función.",
+ "apierror-translate-owntranslation": "Nun pueden revisase les traducciones propies",
+ "apierror-translate-sandboxdisabled": "La función de zona de pruebes nun ta n'usu",
+ "apierror-translate-sandbox-invalidppassword": "Contraseña inválida",
+ "apierror-translate-unknownmessage": "Mensaxe desconocíu",
+ "apiwarn-translate-alreadyreviewedbyyou": "Yá ta marcada como revisada por ti",
+ "apiwarn-translate-language-disabled-source": "L'idioma orixinal d'esti grupu ye $1. Escueye otru idioma al que traducir."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/be-tarask.json b/www/wiki/extensions/Translate/i18n/api/be-tarask.json
new file mode 100644
index 00000000..2c481705
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/be-tarask.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Renessaince"
+ ]
+ },
+ "apihelp-translationreview-description": "Пазначыць пераклады як правераныя.",
+ "apihelp-translationreview-summary": "Пазначыць пераклады як правераныя."
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/bg.json b/www/wiki/extensions/Translate/i18n/api/bg.json
new file mode 100644
index 00000000..ed34c2bc
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/bg.json
@@ -0,0 +1,61 @@
+{
+ "@metadata": {
+ "authors": [
+ "StanProg",
+ "Vlad5250"
+ ]
+ },
+ "apihelp-aggregategroups-summary": "Управление на насъбрани групи съобщения.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID на насъбраната група съобщения.",
+ "apihelp-aggregategroups-param-group": "ID на група съобщения.",
+ "apihelp-aggregategroups-param-groupname": "Название на насъбраната групата съобщения.",
+ "apihelp-aggregategroups-param-groupdescription": "Описание на насъбраната група съобщения.",
+ "apihelp-aggregategroups-example-1": "Асоцииране на група.",
+ "apihelp-groupreview-description": "Задаване на състояния на разработеност на групата съобщения.",
+ "apihelp-groupreview-summary": "Задаване на състояния на разработеност на групата съобщения.",
+ "apihelp-groupreview-param-group": "Група съобщения.",
+ "apihelp-groupreview-param-language": "Езиков код.",
+ "apihelp-groupreview-param-state": "Новото състояние на групата.",
+ "apihelp-groupreview-example-1": "Отбелязване на състоянието на немския превод за групата съобщения „група-Пример“ като готов",
+ "apihelp-query+languagestats-param-language": "Езиков код.",
+ "apihelp-query+messagecollection-param-group": "Група съобщения.",
+ "apihelp-query+messagecollection-param-language": "Езиков код.",
+ "apihelp-query+messagecollection-param-limit": "Колко съобщения да бъдат показани (след филтриране).",
+ "apihelp-query+messagecollection-example-1": "Списък на поддържаните езици",
+ "apihelp-query+messagecollection-example-2": "Списък на определения на задължителните съобщения за групата „page-Example“",
+ "apihelp-query+messagecollection-example-4": "Повече информация за най-новите преработки на превода за групата „page-Example“",
+ "apihelp-query+messagegroups-summary": "Дай информация за групи съобщения.",
+ "apihelp-query+messagegroups-example-1": "Показване на групите съобщения",
+ "apihelp-query+messagegroupstats-description": "Искане на статистики за група съобщения.",
+ "apihelp-query+messagegroupstats-summary": "Искане на статистики за група съобщения.",
+ "apihelp-query+messagegroupstats-param-group": "ID на група съобщения.",
+ "apihelp-query+messagetranslations-example-1": "Списък на преводи в уикито за „MediaWiki:January“",
+ "apihelp-translatesandbox-description": "Регистрация и управление на потребители в пясъчника.",
+ "apihelp-translatesandbox-summary": "Регистрация и управление на потребители в пясъчника.",
+ "apihelp-translatesandbox-param-username": "Потребителско име при създаване на потребителя.",
+ "apihelp-translatesandbox-param-password": "Парола при създаване на потребителя.",
+ "apihelp-translatesandbox-param-email": "Е-поща при създаване на потребителя.",
+ "apihelp-translationreview-description": "Отбелязване на преводите като проверени.",
+ "apihelp-translationreview-summary": "Отбелязване на преводите като проверени.",
+ "apihelp-translationreview-example-1": "Оценка на редакция 1",
+ "apihelp-translationstash-param-subaction": "Действие.",
+ "apihelp-translationstash-param-title": "Заглавие на страницата на преводната единица.",
+ "apihelp-translationstash-param-translation": "Превод, направен от потребителя.",
+ "apihelp-translationstash-param-metadata": "JSON-обект.",
+ "apihelp-searchtranslations-description": "Търсене на преводи.",
+ "apihelp-searchtranslations-summary": "Търсене на преводи.",
+ "apihelp-searchtranslations-param-limit": "Размер на изхода.",
+ "apihelp-searchtranslations-example-1": "Показване на преводи на този език.",
+ "apihelp-translationcheck-summary": "Потвърждаване на преводи.",
+ "apihelp-translationcheck-param-translation": "Превод за потвърждение.",
+ "apierror-translate-duplicateaggregategroup": "Групата съобщения вече съществува",
+ "apierror-translate-invalidgroup": "Групата не съществува или е невалидна",
+ "apierror-translate-invalidstate": "Поисканото състояние е невалидно.",
+ "apierror-translate-invalidlanguage": "Поисканият език е невалиден.",
+ "apierror-translate-invalidupdate": "Невалидна поднова",
+ "apierror-translate-language-disabled": "Превеждането на $1 е деактивирано.",
+ "apierror-translate-language-disabled-reason": "Превеждането на $1 е деактивирано: $2",
+ "apierror-translate-owntranslation": "Не можете да проверявате свои преводи",
+ "apierror-translate-sandbox-invalidppassword": "Невалидна парола",
+ "apierror-translate-unknownmessage": "Неизвестно съобщение"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/bn.json b/www/wiki/extensions/Translate/i18n/api/bn.json
new file mode 100644
index 00000000..fa5e7850
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/bn.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftabuzzaman",
+ "আফতাবুজ্জামান"
+ ]
+ },
+ "apihelp-searchtranslations-summary": "অনুবাদ অনুসন্ধান করে।",
+ "apierror-translate-invalidlanguage": "অনুরোধকৃত ভাষাটি অবৈধ।",
+ "apierror-translate-sandbox-invalidppassword": "পাসওয়ার্ড সঠিক নয়",
+ "apierror-translate-unknownmessage": "অজানা বার্তা"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/bs.json b/www/wiki/extensions/Translate/i18n/api/bs.json
new file mode 100644
index 00000000..f609c2dc
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/bs.json
@@ -0,0 +1,122 @@
+{
+ "@metadata": {
+ "authors": [
+ "Srdjan m"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Upravljanje zbirnim grupama poruka.\n\nMožete dodavati i uklanjati zbirne grupe poruka i pridruživati ili odstranjivati iz zbirnih poruka (jednu po jednu).",
+ "apihelp-aggregategroups-summary": "Upravljaj zbirnim grupama poruka.",
+ "apihelp-aggregategroups-extended-description": "Možete dodavati i uklanjati zbirne grupe poruka i pridruživati ili odstranjivati grupe poruka iz njih (jednu po jednu).",
+ "apihelp-aggregategroups-param-do": "Šta raditi sa zbirnom grupom poruka.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID zbirne grupe poruka.",
+ "apihelp-aggregategroups-param-group": "ID grupe poruka.",
+ "apihelp-aggregategroups-param-groupname": "Naziv zbirne grupe poruka.",
+ "apihelp-aggregategroups-param-groupdescription": "Opis zbirne grupe poruka.",
+ "apihelp-aggregategroups-example-1": "Pridruži grupu",
+ "apihelp-groupreview-description": "Postavi stanja radnog toka za grupe poruka.",
+ "apihelp-groupreview-summary": "Postavi stanja radnog toka za grupe poruka.",
+ "apihelp-groupreview-param-group": "Grupa poruka.",
+ "apihelp-groupreview-param-language": "Jezički kôd.",
+ "apihelp-groupreview-param-state": "Novo stanje grupe.",
+ "apihelp-groupreview-example-1": "Označi stanje njemačkog prijevoda grupa poruka \"group-Example\" spremnim",
+ "apihelp-query+languagestats-description": "Upit jezičkih statistika.",
+ "apihelp-query+languagestats-summary": "Ispitaj jezičke statistike.",
+ "apihelp-query+languagestats-param-timelimit": "Maksimalno vrijeme koje se može potrošiti na izračunavanje statistike koja nedostaje. Ako je nula, prikazat će se samo keširani rezultati od početka.",
+ "apihelp-query+languagestats-param-language": "Jezički kôd.",
+ "apihelp-query+languagestats-example-1": "Spisak statistika dovršenosti prijevoda na finski",
+ "apihelp-query+messagecollection-description": "Izvrši upit Zbirci podataka o prijevodima.",
+ "apihelp-query+messagecollection-summary": "Izvrši upit Zbirci podataka o prijevodima.",
+ "apihelp-query+messagecollection-param-group": "Grupa poruka.",
+ "apihelp-query+messagecollection-param-language": "Jezički kôd.",
+ "apihelp-query+messagecollection-param-limit": "Koliko poruka prikazati (nakon filtriranja).",
+ "apihelp-query+messagecollection-param-offset": "Cijeli broj ili odstupanje s ključem za početak.",
+ "apihelp-query+messagecollection-param-filter": "Filteri za prikupljanje poruka. Koristite <kbd>!</kbd> za negaciju nekog uslova. Naprimjer, <kbd>!fuzzy</kbd> znači da treba ispisati sve poruke koje nisu zastarjele. Filteri se primjenjuju po ukazanom redoslijedu.\n;fuzzy:Zastarjele poruke (s oznakom \"fuzzy\").\n;optional:Poruke koje treba prevoditi samo ako je potrebna promjena.\n;ignored:Poruke koje se nikad ne prevode.\n;hastranslation:Poruke koje imaju prijevod bez obzira je li zastario.\n;translated:Poruke koje imaju prijevod koji nije zastario.\n;changed:Poruke koje su prevedene ili izmijenjene od posljednjeg izvoza.\n;reviewer&#58;N:Poruke koje među pregledavačima imaju korisnika s brojem <kbd>N</kbd>.\n;last-translator&#58;N:Poruke čiji je posljednji prevodilac korisnik s brojem <kbd>N</kbd>.",
+ "apihelp-query+messagecollection-param-prop": "Koja svojstva treba dati:\n;definition:Definicija poruke.\n;translation:Trenutni prijevod (bez niza $1 ako ga ima, koristite oznake da biste provjerili ima li zastarjelih ili pokvarenih prijevoda).\n;tags:Oznake poruka, kao što su optional, ignored i fuzzy.\n;properties:Svojstva poruka, kao što su status, revision, last-translator. Može se razlikovati od poruke do poruke.\n;revision:<span class=\"deprecated\">Zastarjelo!</span> Koristite $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Spisak podržanih jezika",
+ "apihelp-query+messagecollection-example-2": "Spisak neobaveznih definicija poruka za grupu \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "Spisak neobaveznih poruka na finskom s oznakama za grupu \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "Više informacija o najnovijim izmjenama grupe \"page-Example\"",
+ "apihelp-query+messagegroups-description": "Daj informacije za grupe poruka.\n\nImajte na umu da parametar \"uselang\" utiče na ispis jezički-zavisnih dijelova.",
+ "apihelp-query+messagegroups-summary": "Daj informacije za grupe poruka.",
+ "apihelp-query+messagegroups-extended-description": "Imajte na umu da parametar \"uselang\" utiče za ispis dijelova koji ovise o jeziku.",
+ "apihelp-query+messagegroups-param-depth": "Kad se koristi format \"stablo\", ograniči dubinu na ovoliko nivoa. Vrijednost 0 znači da se neće prikazati nijedna podgrupa. Ako se dostigne granica, na ispisu će se prikazati vrijednost \"groupcount\", koja navodi koliko je neposrednih podgrupa.",
+ "apihelp-query+messagegroups-param-filter": "Daj samo poruke s ID-ovima koji odgovaraju jednom ili više zadanih unosa (ne razlikuju se mala i velika slova, razdvaja se uspravnom crtom, džoker *).",
+ "apihelp-query+messagegroups-param-format": "U formatu \"stablo\", grupe poruka mogu biti na više mjesta u stablu.",
+ "apihelp-query+messagegroups-param-iconsize": "Željena veličina rasterizirane ikone grupe.",
+ "apihelp-query+messagegroups-param-prop": "Koje informacije u vezi s prijevodom treba dati:\n;id:Uključi ID grupe.\n;label:Uključi oznaku grupe.\n;description:Uključi opis grupe.\n;class:Uključi ime klase grupe.\n;namespace:Uključi imenski prostor grupe. Ne pripadaju sve grupe jednom imenskom prostoru.\n;exists:Uključi samokalkulirano svojstvo postojanja grupe.\n;icon:Uključi URL-ove ka ikoni grupe.\n;priority:Uključi prioritetni status, kao što je \"nepreporučeno\".\n;prioritylangs:Uključi prioritetne jezike. Ako nije postavljeno, povratna vrijednost će biti \"false\".\n;priorityforce:Uključi prioritetni status – ovo je forsirana postavka prioritetnih jezika.\n;workflowstates:Uključi stanja radnog toka za grupu poruka.",
+ "apihelp-query+messagegroups-param-root": "Kad se koristi format \"stablo\", umjesto da se započne od najvišeg nivoa, započni od date grupe poruka, koja mora biti zbirna. Kad se koristi ravni format, prikazat će se samo navedena grupa.",
+ "apihelp-query+messagegroups-example-1": "Prikaži grupe poruka",
+ "apihelp-query+messagegroupstats-description": "Ispitaj statistike grupa poruka.",
+ "apihelp-query+messagegroupstats-summary": "Ispitaj statistike grupa poruka.",
+ "apihelp-query+messagegroupstats-param-timelimit": "Maksimalno vrijeme koje se može potrošiti na izračunavanje statistike koja nedostaje. Ako je nula, prikazat će se samo keširani rezultati od početka.",
+ "apihelp-query+messagegroupstats-param-group": "ID grupe poruka.",
+ "apihelp-query+messagegroupstats-example-1": "Spisak statistike dovršenosti prijevoda za grupu \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Ispitaj sve prijevode jedne poruke.",
+ "apihelp-query+messagetranslations-summary": "Ispitaj sve prijevode jedne poruke.",
+ "apihelp-query+messagetranslations-param-title": "Cijeli naziv poznate poruke.",
+ "apihelp-query+messagetranslations-example-1": "Spisak prijevoda na wikiju za \"MediaWiki:January\"",
+ "apihelp-translatesandbox-description": "Registracija i upravljanje korisnicima u pješčaniku.",
+ "apihelp-translatesandbox-summary": "Registracija i upravljanje korisnicima u pješčaniku.",
+ "apihelp-translatesandbox-param-do": "Šta uraditi.",
+ "apihelp-translatesandbox-param-userid": "Korisnički ID-ovi korisnika kojima se upravlja. Koristite 0 za stvaranja.",
+ "apihelp-translatesandbox-param-username": "Korisničko ime pri stvaranju korisnika.",
+ "apihelp-translatesandbox-param-password": "Lozinka pri stvaranju korisnika.",
+ "apihelp-translatesandbox-param-email": "E-pošta pri stvaranju korisnika.",
+ "apihelp-translationaids-description": "Ispitaj sva prevodilačka pomagala.",
+ "apihelp-translationaids-summary": "Ispitaj sva prevodilačka pomagala.",
+ "apihelp-translationaids-param-title": "Cijeli naziv poznate poruke.",
+ "apihelp-translationaids-param-group": "Kojoj grupi pripada poruka. Ako je prazno, koristit će se glavna grupa.",
+ "apihelp-translationaids-param-prop": "Koja prevodilačka pomagala uključiti.",
+ "apihelp-translationaids-example-1": "Prikaži pomagala za [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Označi prijevode pregledanim.",
+ "apihelp-translationreview-summary": "Označi prijevode pregledanim.",
+ "apihelp-translationreview-param-revision": "Broj izmjene za pregled.",
+ "apihelp-translationreview-example-1": "Pregledaj izmjenu 1",
+ "apihelp-translationstash-description": "Dodaj prijevode u skladište.",
+ "apihelp-translationstash-summary": "Dodaj prijevode u skladište.",
+ "apihelp-translationstash-param-subaction": "Radnja.",
+ "apihelp-translationstash-param-title": "Naziv stranice prevodilačke jedinice.",
+ "apihelp-translationstash-param-translation": "Korisnikovi prijevodi.",
+ "apihelp-translationstash-param-metadata": "JSON-objekt.",
+ "apihelp-translationstash-param-username": "Ili korisnik čije skladište treba preuzeti. Ovo mogu raditi samo ovlašteni korisnici.",
+ "apihelp-translationstash-example-1": "Dodaj prijevod u skladište za [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Ispitaj skladište",
+ "apihelp-ttmserver-description": "Ispitaj prijedloge iz zapamćenih prijevoda.",
+ "apihelp-ttmserver-summary": "Ispitaj prijedloge iz zapamćenih prijevoda.",
+ "apihelp-ttmserver-param-service": "Koju od dostupnih usluga za prijevod koristiti.",
+ "apihelp-ttmserver-param-sourcelanguage": "Jezički kôd izvornog teksta.",
+ "apihelp-ttmserver-param-targetlanguage": "Jezički kôd prijedloga.",
+ "apihelp-ttmserver-param-text": "Za koji tekst naći prijedloge.",
+ "apihelp-ttmserver-example-1": "Daj prijedloge za prevođenje \"Help\" s engleskog na finski",
+ "apihelp-searchtranslations-description": "Pretraži prijevode.",
+ "apihelp-searchtranslations-summary": "Pretraži prijevode.",
+ "apihelp-searchtranslations-param-service": "Koju od dostupnih usluga za prijevod koristiti.",
+ "apihelp-searchtranslations-param-query": "Niz koji treba tražiti.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Jezički kôd izvornog teksta.",
+ "apihelp-searchtranslations-param-language": "Koji jezički kôd tražiti u nizu.",
+ "apihelp-searchtranslations-param-group": "ID grupe koju treba tražiti u nizu.",
+ "apihelp-searchtranslations-param-filter": "Filter za status prijevoda.",
+ "apihelp-searchtranslations-param-match": "Poklapanje bilo kojih/svih riječi.",
+ "apihelp-searchtranslations-param-case": "Pretraga koja (ne) razlikuje velika i mala slova.",
+ "apihelp-searchtranslations-param-offset": "Odstup za prijevode.",
+ "apihelp-searchtranslations-param-limit": "Veličina rezultata.",
+ "apihelp-searchtranslations-example-1": "Prikaži prijevode na ovaj jezik.",
+ "apihelp-searchtranslations-example-2": "Prikaži neprevedene poruke koji odgovaraju upitu na izvornom jeziku.",
+ "apierror-translate-duplicateaggregategroup": "Grupa poruka već postoji",
+ "apierror-translate-fuzzymessage": "Ne možete pregledati zastarjele prijevode",
+ "apierror-translate-groupreviewdisabled": "Pregled grupe poruka nije u upotrebi.",
+ "apierror-translate-invalidaggregategroup": "Neispravna grupa zbirnih poruka",
+ "apierror-translate-invalidaggregategroupname": "Neispravni naziv za grupu zbirnih poruka",
+ "apierror-translate-invalidgroup": "Grupa ne postoji ili nije ispravna",
+ "apierror-translate-invalidstate": "Traženo stanje nije ispravno.",
+ "apierror-translate-invalidupdate": "Neispravno ažuriranje",
+ "apierror-translate-language-disabled": "Prijevod na ovaj jezik je onemogućen",
+ "apierror-translate-nodynamicgroups": "Dinamičke grupe poruka ovdje nisu podržane",
+ "apierror-translate-nomessagefortitle": "Naslov ne odgovara prevodivoj poruci",
+ "apierror-translate-owntranslation": "Ne možete pregledati vlastite prijevode",
+ "apierror-translate-sandboxdisabled": "Funkcija pijeska nije u upotrebi",
+ "apierror-translate-sandbox-invalidppassword": "Neispravna lozinka",
+ "apierror-translate-unknownmessage": "Nepoznata poruka",
+ "apiwarn-translate-alreadyreviewedbyyou": "Već ste je označili pregledanom",
+ "apiwarn-translate-language-disabled-source": "Izvorni jezik ove grupe je $1. Izaberite jezik na koji želite prevoditi."
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/ca.json b/www/wiki/extensions/Translate/i18n/api/ca.json
index 790ef4a9..774811b1 100644
--- a/www/wiki/extensions/Translate/i18n/api/ca.json
+++ b/www/wiki/extensions/Translate/i18n/api/ca.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Alvaro Vidal-Abarca"
+ "Alvaro Vidal-Abarca",
+ "Fitoschido"
]
},
"apihelp-aggregategroups-example-1": "Associar un grup",
@@ -19,5 +20,6 @@
"apihelp-translationstash-param-metadata": "Objecte JSON.",
"apihelp-ttmserver-param-targetlanguage": "Un codi d'idioma de la proposta.",
"apihelp-ttmserver-param-text": "El text per trobar suggeriments.",
- "apihelp-ttmserver-example-1": "Obtenir suggeriments per a la traducció de \"Ajuda\" de l'anglès al finès"
+ "apihelp-ttmserver-example-1": "Obtenir suggeriments per a la traducció de \"Ajuda\" de l'anglès al finès",
+ "apierror-translate-sandbox-invalidppassword": "La contrasenya no és vàlida"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/ckb.json b/www/wiki/extensions/Translate/i18n/api/ckb.json
new file mode 100644
index 00000000..8393c2a4
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/ckb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Épine"
+ ]
+ },
+ "apiwarn-translate-language-disabled-source": "سەرچاوەی زمانی ئەم گرووپە $1ە. تکایە زمانێکی تر ھەڵبژێرە بۆ وەرگێڕان بۆی."
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/cs.json b/www/wiki/extensions/Translate/i18n/api/cs.json
index 6cb2d230..52a8836b 100644
--- a/www/wiki/extensions/Translate/i18n/api/cs.json
+++ b/www/wiki/extensions/Translate/i18n/api/cs.json
@@ -1,12 +1,17 @@
{
"@metadata": {
"authors": [
- "Vks"
+ "Vks",
+ "Want"
]
},
+ "apihelp-groupreview-param-group": "Skupina zpráv.",
+ "apihelp-groupreview-param-language": "Kód jazyka.",
+ "apihelp-groupreview-param-state": "Nový stav pro skupinu.",
"apihelp-query+languagestats-param-language": "Kód jazyka.",
"apihelp-query+messagecollection-param-group": "Skupina zpráv.",
"apihelp-query+messagecollection-param-language": "Kód jazyka.",
+ "apihelp-query+messagegroups-example-1": "Zobrazit skupinu zpráv",
"apihelp-translationstash-param-subaction": "Akce.",
"apihelp-translationstash-param-metadata": "JSON objekt."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/da.json b/www/wiki/extensions/Translate/i18n/api/da.json
new file mode 100644
index 00000000..67465d22
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/da.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saederup92"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "Beskedgruppe-ID.",
+ "apihelp-groupreview-param-group": "Beskedgruppe.",
+ "apihelp-groupreview-param-language": "Sprogkode.",
+ "apihelp-query+languagestats-param-language": "Sprogkode.",
+ "apihelp-query+messagecollection-param-group": "Beskedgruppe.",
+ "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.",
+ "apihelp-searchtranslations-param-limit": "Resultatets størrelse.",
+ "apihelp-searchtranslations-example-1": "Vis oversættelser for sproget.",
+ "apierror-translate-invalidupdate": "Ugyldig opdatering",
+ "apierror-translate-language-disabled": "Oversættelser til $1 er deaktiveret.",
+ "apierror-translate-language-disabled-reason": "Oversættelser til $1 er deaktiveret: $2",
+ "apierror-translate-sandbox-invalidppassword": "Ugyldig adgangskode",
+ "apierror-translate-unknownmessage": "Ukendt besked"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/de.json b/www/wiki/extensions/Translate/i18n/api/de.json
index 486b80d4..341ecf40 100644
--- a/www/wiki/extensions/Translate/i18n/api/de.json
+++ b/www/wiki/extensions/Translate/i18n/api/de.json
@@ -7,6 +7,7 @@
"Predatorix"
]
},
+ "apihelp-aggregategroups-summary": "Verwaltet zusammengefasste Nachrichtengruppen.",
"apihelp-aggregategroups-param-do": "Was mit der zusammengefassten Nachrichtengruppe getan werden soll.",
"apihelp-aggregategroups-param-aggregategroup": "Kennung der zusammengefassten Nachrichtengruppe.",
"apihelp-aggregategroups-param-group": "Nachrichtengruppenkennung.",
@@ -17,49 +18,64 @@
"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-summary": "Ruft MessageCollection über Übersetzungen ab.",
"apihelp-query+messagecollection-param-group": "Nachrichtengruppe.",
"apihelp-query+messagecollection-param-language": "Sprachcode.",
"apihelp-query+messagecollection-param-limit": "Wie viele Nachrichten angezeigt werden sollen (nach der Filterung).",
+ "apihelp-query+messagecollection-param-offset": "Ganzzahl oder Schlüsselversatz für den Start.",
"apihelp-query+messagecollection-example-1": "Liste unterstützter Sprachen",
"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-format": "Im Baumformat können Nachrichtengruppen an mehreren Orten im Baum vorhanden sein.",
"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-summary": "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",
"apihelp-translationreview-description": "Markiert Übersetzungen als überprüft.",
+ "apihelp-translationreview-summary": "Markiert Übersetzungen als überprüft.",
"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.",
"apihelp-translationstash-param-metadata": "JSON-Objekt.",
"apihelp-translationstash-example-1": "Fügt eine Übersetzung zum Übersetzungsspeicher für [[MediaWiki:Jan/fi]] hinzu",
+ "apihelp-translationstash-example-2": "Ruft den Speicher ab.",
"apihelp-ttmserver-description": "Frage Vorschläge aus den gespeicherten Übersetzungen ab.",
+ "apihelp-ttmserver-summary": "Ruft Vorschläge von den Übersetzungsspeichern ab.",
"apihelp-ttmserver-param-service": "Welche der verfügbaren Übersetzungsdienste verwendet werden sollen.",
"apihelp-ttmserver-param-sourcelanguage": "Der Sprachcode des Quelltextes.",
"apihelp-ttmserver-param-targetlanguage": "Der Sprachcode des Vorschlags.",
"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.",
@@ -70,5 +86,29 @@
"apihelp-searchtranslations-param-case": "Suche (un)abhängig von Groß- und Kleinschreibung.",
"apihelp-searchtranslations-param-offset": "Versatz für die Übersetzungen.",
"apihelp-searchtranslations-param-limit": "Größe des Ergebnisses.",
- "apihelp-searchtranslations-example-1": "Übersetzungen für die Sprache anzeigen."
+ "apihelp-searchtranslations-example-1": "Übersetzungen für die Sprache anzeigen.",
+ "apihelp-searchtranslations-example-2": "Zeigt nicht übersetzte Nachrichten an, die der Anfrage in der Quellsprache entsprechen.",
+ "apihelp-translationcheck-summary": "Validiert Übersetzungen.",
+ "apihelp-translationcheck-param-title": "Seitentitel mit Namensraum und Sprachcode.",
+ "apihelp-translationcheck-param-translation": "Die zu validierende Übersetzung.",
+ "apierror-translate-duplicateaggregategroup": "Die Nachrichtengruppe ist bereits vorhanden",
+ "apierror-translate-fuzzymessage": "Veraltete Übersetzungen können nicht überprüft werden",
+ "apierror-translate-groupreviewdisabled": "Die Nachrichtengruppenüberprüfung ist nicht in Verwendung.",
+ "apierror-translate-invalidaggregategroup": "Ungültige zusammengefasste Nachrichtengruppe",
+ "apierror-translate-invalidaggregategroupname": "Ungültiger zusammengefasster Nachrichtengruppenname",
+ "apierror-translate-invalidgroup": "Die Gruppe ist nicht vorhanden oder ist ungültig",
+ "apierror-translate-invalidstate": "Der angeforderte Status ist ungültig.",
+ "apierror-translate-invalidlanguage": "Die angeforderte Sprache ist ungültig.",
+ "apierror-translate-invalidupdate": "Ungültige Aktualisierung",
+ "apierror-translate-language-disabled": "Übersetzungen nach $1 sind deaktiviert.",
+ "apierror-translate-language-disabled-reason": "Übersetzungen nach $1 sind deaktiviert: $2",
+ "apierror-translate-nodynamicgroups": "Dynamische Nachrichtengruppen werden hier nicht unterstützt",
+ "apierror-translate-nomessagefortitle": "Der Titel entspricht nicht einer übersetzbaren Nachricht",
+ "apierror-translate-notranslationservices": "Es wurden keine öffentlichen Übersetzungsdienste konfiguriert. Der Administrator des Wikis muss <var>$wgTranslateTranslationServices</var> passend festlegen, bevor diese Funktion verwendet werden kann.",
+ "apierror-translate-owntranslation": "Eigene Übersetzungen können nicht überprüft werden",
+ "apierror-translate-sandboxdisabled": "Die Spielwiesenfunktion ist nicht in Verwendung",
+ "apierror-translate-sandbox-invalidppassword": "Ungültiges Passwort",
+ "apierror-translate-unknownmessage": "Unbekannte Nachricht",
+ "apiwarn-translate-alreadyreviewedbyyou": "Von dir bereits als überprüft markiert",
+ "apiwarn-translate-language-disabled-source": "Die Quellsprache dieser Nachrichtengruppe ist $1. Bitte wähle eine andere Sprache zur Übersetzung aus."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/diq.json b/www/wiki/extensions/Translate/i18n/api/diq.json
new file mode 100644
index 00000000..dc570cb1
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/diq.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kumkumuk",
+ "Mirzali"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "Kamiya Gruba mesacan",
+ "apihelp-aggregategroups-param-groupname": "Namey gruba mesacê aredi.",
+ "apihelp-aggregategroups-param-groupdescription": "Akerdena gruba mesacê aredi",
+ "apihelp-aggregategroups-example-1": "Gruba Verlisansi",
+ "apihelp-groupreview-param-group": "Gruba mesaca.",
+ "apihelp-groupreview-param-language": "Kodê zıwani.",
+ "apihelp-groupreview-param-state": "Qandê gruber dewleta newi.",
+ "apihelp-query+languagestats-description": "Perseya istatistikanê zıwani.",
+ "apihelp-query+languagestats-param-language": "Kodê zıwani.",
+ "apihelp-query+languagestats-example-1": "Lisya temam biyayışê istatistikané açarnayışanê Finki",
+ "apihelp-query+messagecollection-description": "Heqdê MessagesCollection i persi",
+ "apihelp-query+messagecollection-param-group": "Gruba mesaca.",
+ "apihelp-query+messagecollection-param-language": "Kodê zıwani.",
+ "apihelp-translatesandbox-param-do": "Çıçi.",
+ "apihelp-translationstash-param-subaction": "Kerdış.",
+ "apihelp-translationstash-param-metadata": "JSON çi.",
+ "apihelp-searchtranslations-description": "Açarnayışan cı geyre.",
+ "apihelp-searchtranslations-param-limit": "Ebadê neticeyi.",
+ "apihelp-searchtranslations-example-1": "Qandê zıwani açarnayışan bımocne."
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/en.json b/www/wiki/extensions/Translate/i18n/api/en.json
index 3299330a..926cb9c0 100644
--- a/www/wiki/extensions/Translate/i18n/api/en.json
+++ b/www/wiki/extensions/Translate/i18n/api/en.json
@@ -3,7 +3,9 @@
"authors": [
]
},
- "apihelp-aggregategroups-description": "Manage aggregate message groups.\n\nYou can add and remove aggregate messagegroups and associate or dissociate message groups from them (one at a time).",
+ "apihelp-aggregategroups-description": "Manage aggregate message groups.\n\nYou can add and remove aggregate message groups and associate or dissociate message groups from them (one at a time).",
+ "apihelp-aggregategroups-summary": "Manage aggregate message groups.",
+ "apihelp-aggregategroups-extended-description": "You can add and remove aggregate message groups and associate or dissociate message groups from them (one at a time).",
"apihelp-aggregategroups-param-do": "What to do with aggregate message group.",
"apihelp-aggregategroups-param-aggregategroup": "Aggregate message group ID.",
"apihelp-aggregategroups-param-group": "Message group ID.",
@@ -11,15 +13,18 @@
"apihelp-aggregategroups-param-groupdescription": "Aggregate message group description.",
"apihelp-aggregategroups-example-1": "Associate a group",
"apihelp-groupreview-description": "Set message group workflow states.",
+ "apihelp-groupreview-summary": "Set message group workflow states.",
"apihelp-groupreview-param-group": "Message group.",
"apihelp-groupreview-param-language": "Language code.",
"apihelp-groupreview-param-state": "The new state for the group.",
"apihelp-groupreview-example-1": "Mark the state of the German translation for the message group \"group-Example\" as ready",
"apihelp-query+languagestats-description": "Query language stats.",
+ "apihelp-query+languagestats-summary": "Query language stats.",
"apihelp-query+languagestats-param-timelimit": "Maximum time to spend calculating missing statistics. If zero, only the cached results from the beginning are returned.",
"apihelp-query+languagestats-param-language": "Language code.",
"apihelp-query+languagestats-example-1": "List of translation completion statistics for Finnish",
"apihelp-query+messagecollection-description": "Query MessageCollection about translations.",
+ "apihelp-query+messagecollection-summary": "Query MessageCollection about translations.",
"apihelp-query+messagecollection-param-group": "Message group.",
"apihelp-query+messagecollection-param-language": "Language code.",
"apihelp-query+messagecollection-param-limit": "How many messages to show (after filtering).",
@@ -31,6 +36,8 @@
"apihelp-query+messagecollection-example-3": "List of optional messages in Finnish with tags for the group \"page-Example\"",
"apihelp-query+messagecollection-example-4": "More information about latest translation revisions for the group \"page-Example\"",
"apihelp-query+messagegroups-description": "Return information about message groups.\n\nNote that the uselang parameter affects the output of language dependent parts.",
+ "apihelp-query+messagegroups-summary": "Return information about message groups.",
+ "apihelp-query+messagegroups-extended-description": "Note that the uselang parameter affects the output of language dependent parts.",
"apihelp-query+messagegroups-param-depth": "When using the tree format, limit the depth to this many levels. Value 0 means that no subgroups are shown. If the limit is reached, the output includes a \"groupcount\" value, which states the number of direct children.",
"apihelp-query+messagegroups-param-filter": "Only return messages with IDs that match one or more of the inputs given (case-insensitive, separated by pipes, * wildcard).",
"apihelp-query+messagegroups-param-format": "In the tree format message groups can exist in multiple places in the tree.",
@@ -39,27 +46,33 @@
"apihelp-query+messagegroups-param-root": "When using the tree format, instead of starting from top level start from the given message group, which must be an aggregate message group. When using flat format only the specified group is returned.",
"apihelp-query+messagegroups-example-1": "Show message groups",
"apihelp-query+messagegroupstats-description": "Query message group stats.",
+ "apihelp-query+messagegroupstats-summary": "Query message group stats.",
"apihelp-query+messagegroupstats-param-timelimit": "Maximum time to spend calculating missing statistics. If zero, only the cached results from the beginning are returned.",
"apihelp-query+messagegroupstats-param-group": "Message group ID.",
"apihelp-query+messagegroupstats-example-1": "List of translation completion statistics for the group \"page-Example\"",
"apihelp-query+messagetranslations-description": "Query all translations for a single message.",
+ "apihelp-query+messagetranslations-summary": "Query all translations for a single message.",
"apihelp-query+messagetranslations-param-title": "Full title of a known message.",
"apihelp-query+messagetranslations-example-1": "List of translations in the wiki for \"MediaWiki:January\"",
"apihelp-translatesandbox-description": "Signup and manage sandboxed users.",
+ "apihelp-translatesandbox-summary": "Signup and manage sandboxed users.",
"apihelp-translatesandbox-param-do": "What to do.",
"apihelp-translatesandbox-param-userid": "User IDs of the users being managed. Use 0 for creations.",
"apihelp-translatesandbox-param-username": "Username when creating user.",
"apihelp-translatesandbox-param-password": "Password when creating user.",
"apihelp-translatesandbox-param-email": "Email when creating user.",
"apihelp-translationaids-description": "Query all translations aids.",
+ "apihelp-translationaids-summary": "Query all translations aids.",
"apihelp-translationaids-param-title": "Full title of a known message.",
"apihelp-translationaids-param-group": "Message group the message belongs to. If empty then primary group is used.",
"apihelp-translationaids-param-prop": "Which translation helpers to include.",
"apihelp-translationaids-example-1": "Show aids for [[MediaWiki:January/fi]]",
"apihelp-translationreview-description": "Mark translations reviewed.",
+ "apihelp-translationreview-summary": "Mark translations reviewed.",
"apihelp-translationreview-param-revision": "The revision number to review.",
"apihelp-translationreview-example-1": "Review revision 1",
"apihelp-translationstash-description": "Add translations to stash.",
+ "apihelp-translationstash-summary": "Add translations to stash.",
"apihelp-translationstash-param-subaction": "Action.",
"apihelp-translationstash-param-title": "Title of the translation unit page.",
"apihelp-translationstash-param-translation": "Translation made by the user.",
@@ -68,12 +81,14 @@
"apihelp-translationstash-example-1": "Add a translation to the stash for [[MediaWiki:Jan/fi]]",
"apihelp-translationstash-example-2": "Query the stash",
"apihelp-ttmserver-description": "Query suggestions from translation memories.",
+ "apihelp-ttmserver-summary": "Query suggestions from translation memories.",
"apihelp-ttmserver-param-service": "Which of the available translation services to use.",
"apihelp-ttmserver-param-sourcelanguage": "The language code of the source text.",
"apihelp-ttmserver-param-targetlanguage": "The language code of the suggestion.",
"apihelp-ttmserver-param-text": "The text to find suggestions for.",
"apihelp-ttmserver-example-1": "Get suggestions for translating \"Help\" from English to Finnish",
"apihelp-searchtranslations-description": "Search translations.",
+ "apihelp-searchtranslations-summary": "Search translations.",
"apihelp-searchtranslations-param-service": "Which of the available translation services to use.",
"apihelp-searchtranslations-param-query": "The string to search for.",
"apihelp-searchtranslations-param-sourcelanguage": "The language code of the source text.",
@@ -85,5 +100,31 @@
"apihelp-searchtranslations-param-offset": "Offset for the translations.",
"apihelp-searchtranslations-param-limit": "Size of the result.",
"apihelp-searchtranslations-example-1": "Show translations for the language.",
- "apihelp-searchtranslations-example-2": "Show untranslated messages matching the query in the source language."
+ "apihelp-searchtranslations-example-2": "Show untranslated messages matching the query in the source language.",
+ "apihelp-translationcheck-description": "Validate given translation input against message checkers.",
+ "apihelp-translationcheck-summary": "Validate translations.",
+ "apihelp-translationcheck-param-title": "Page title with namespace and language code.",
+ "apihelp-translationcheck-param-translation": "The translation to validate.",
+ "apierror-translate-duplicateaggregategroup": "Message group already exists",
+ "apierror-translate-fuzzymessage": "Cannot review fuzzy translations",
+ "apierror-translate-groupreviewdisabled": "Message group review not in use.",
+ "apierror-translate-invalidaggregategroup": "Invalid aggregate message group",
+ "apierror-translate-invalidaggregategroupname": "Invalid aggregate message group name",
+ "apierror-translate-invalidfilter": "$1",
+ "apierror-translate-invalidgroup": "Group does not exist or invalid",
+ "apierror-translate-invalidstate": "The requested state is invalid.",
+ "apierror-translate-invalidlanguage": "The requested language is invalid.",
+ "apierror-translate-invalidupdate": "Invalid update",
+ "apierror-translate-language-disabled": "Translation to $1 is disabled.",
+ "apierror-translate-language-disabled-reason": "Translation to $1 is disabled: $2",
+ "apierror-translate-nodynamicgroups": "Dynamic message groups are not supported here",
+ "apierror-translate-nomessagefortitle": "Title does not correspond to a translatable message",
+ "apierror-translate-notranslationservices": "No public translation services have been configured. The wiki administrator needs to set <var>$wgTranslateTranslationServices</var> appropriately before this feature can be used.",
+ "apierror-translate-owntranslation": "Cannot review own translations",
+ "apierror-translate-sandboxdisabled": "Sandbox feature is not in use",
+ "apierror-translate-sandbox-invalidparam": "$1",
+ "apierror-translate-sandbox-invalidppassword": "Invalid password",
+ "apierror-translate-unknownmessage": "Unknown message",
+ "apiwarn-translate-alreadyreviewedbyyou": "Already marked as reviewed by you",
+ "apiwarn-translate-language-disabled-source": "The source language of this group is $1. Please select another language to translate into."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/es.json b/www/wiki/extensions/Translate/i18n/api/es.json
index 2262513c..589e25ad 100644
--- a/www/wiki/extensions/Translate/i18n/api/es.json
+++ b/www/wiki/extensions/Translate/i18n/api/es.json
@@ -4,7 +4,9 @@
"Macofe",
"Fitoschido",
"Csbotero",
- "Lemondoge"
+ "Lemondoge",
+ "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).",
@@ -20,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.",
@@ -35,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\").",
@@ -47,28 +52,33 @@
"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.",
"apihelp-translationaids-example-1": "Mostrar ayuda para [[MediaWiki:January/fi]]",
"apihelp-translationreview-description": "Marcar traducciones como revisadas.",
+ "apihelp-translationreview-summary": "Marcar traducciones como revisadas.",
"apihelp-translationreview-param-revision": "El número de revisión que revisar.",
"apihelp-translationreview-example-1": "Revisar revisión 1",
- "apihelp-translationstash-description": "Añadir traducciones a la reserva.",
+ "apihelp-translationstash-description": "Añadir traducciones al almacén provisional.",
+ "apihelp-translationstash-summary": "Añadir traducciones al almacén provisional.",
"apihelp-translationstash-param-subaction": "Acción",
"apihelp-translationstash-param-title": "Título de la página de la unidad de traducción.",
"apihelp-translationstash-param-translation": "Traducción realizada por el usuario.",
"apihelp-translationstash-param-metadata": "Objeto JSON.",
- "apihelp-translationstash-param-username": "Opcionalmente, la reserva del usuario que obtener. Esto solo lo pueden hacer usuarios privilegiados.",
- "apihelp-translationstash-example-1": "Añadir una traducción en la reserva para [[MediaWiki:Jan/fi]]",
- "apihelp-translationstash-example-2": "Consultar la reserva",
- "apihelp-ttmserver-description": "Consultar sugerencias de la memoria de traducción.",
+ "apihelp-translationstash-param-username": "Opcionalmente, el usuario cuyo almacén provisional se debe obtener. Esto solo lo pueden realizar usuarios privilegiados.",
+ "apihelp-translationstash-example-1": "Añadir una traducción al almacén provisional de [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Consultar el almacén provisional",
+ "apihelp-ttmserver-description": "Consultar sugerencias de memorias de traducción.",
+ "apihelp-ttmserver-summary": "Consultar sugerencias de memorias de traducción.",
"apihelp-ttmserver-param-service": "Qué servicios de traducción disponibles usar.",
"apihelp-ttmserver-param-sourcelanguage": "El código de idioma del texto fuente.",
"apihelp-ttmserver-param-targetlanguage": "El código de idioma de la sugerencia.",
"apihelp-ttmserver-param-text": "El texto para el cual buscar sugerencias.",
"apihelp-ttmserver-example-1": "Obtener sugerencias para traducir «Help» del inglés al finés",
"apihelp-searchtranslations-description": "Buscar traducciones.",
+ "apihelp-searchtranslations-summary": "Buscar en las traducciones.",
"apihelp-searchtranslations-param-service": "Qué servicios de traducción disponibles usar.",
"apihelp-searchtranslations-param-query": "La cadena que buscar.",
"apihelp-searchtranslations-param-sourcelanguage": "El código de idioma del texto fuente.",
@@ -76,8 +86,27 @@
"apihelp-searchtranslations-param-group": "El identificador de grupo en el que buscar la cadena.",
"apihelp-searchtranslations-param-filter": "Filtro de estado de traducción de mensajes.",
"apihelp-searchtranslations-param-match": "Coincide con cualquier/todas las palabras de búsqueda.",
- "apihelp-searchtranslations-param-offset": "\"Offset\" para las traducciones.",
+ "apihelp-searchtranslations-param-case": "Búsqueda que distingue (o no) el uso de mayúsculas.",
+ "apihelp-searchtranslations-param-offset": "Desfase para las traducciones.",
"apihelp-searchtranslations-param-limit": "Tamaño del resultado.",
"apihelp-searchtranslations-example-1": "Mostrar las traducciones para el idioma.",
- "apihelp-searchtranslations-example-2": "Mostrar mensajes sin traducir que coincidan con la consulta en el idioma de origen."
+ "apihelp-searchtranslations-example-2": "Mostrar mensajes sin traducir que coincidan con la consulta en el idioma de origen.",
+ "apihelp-translationcheck-summary": "Validar traducciones.",
+ "apihelp-translationcheck-param-title": "Título de página con espacio de nombres y código de idioma.",
+ "apihelp-translationcheck-param-translation": "La traducción que validar.",
+ "apierror-translate-duplicateaggregategroup": "El grupo de mensajes ya existe",
+ "apierror-translate-invalidgroup": "El grupo no existe o no es válido",
+ "apierror-translate-invalidstate": "El estado solicitado no es válido.",
+ "apierror-translate-invalidlanguage": "El idioma solicitado no es válido.",
+ "apierror-translate-invalidupdate": "Actualización no válida",
+ "apierror-translate-language-disabled": "Se ha desactivado la traducción al $1.",
+ "apierror-translate-language-disabled-reason": "Se ha desactivado la traducción al $1: $2",
+ "apierror-translate-nodynamicgroups": "No se admiten aquí los grupos de mensajes dinámicos",
+ "apierror-translate-nomessagefortitle": "El título no se corresponde con un mensaje traducible",
+ "apierror-translate-notranslationservices": "No se ha configurado ningún servicio público de traducciones. Los administradores del wiki deben configurar <var>$wgTranslateTranslationServices</var> adecuadamente para poder utilizar esta función.",
+ "apierror-translate-owntranslation": "No se pueden revisar las traducciones propias",
+ "apierror-translate-sandbox-invalidppassword": "La contraseña no es válida",
+ "apierror-translate-unknownmessage": "Mensaje desconocido",
+ "apiwarn-translate-alreadyreviewedbyyou": "Ya la marcaste como revisada",
+ "apiwarn-translate-language-disabled-source": "El idioma original de este grupo es el $1. Selecciona otro idioma al cual traducir."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/eu.json b/www/wiki/extensions/Translate/i18n/api/eu.json
index fc4684ab..126d3f7f 100644
--- a/www/wiki/extensions/Translate/i18n/api/eu.json
+++ b/www/wiki/extensions/Translate/i18n/api/eu.json
@@ -10,9 +10,11 @@
"apihelp-query+languagestats-param-language": "Hizkuntza-kodea.",
"apihelp-query+messagecollection-param-language": "Hizkuntza-kodea.",
"apihelp-query+messagecollection-example-1": "Onartutako hizkuntzen zerrenda",
+ "apihelp-query+messagegroups-example-1": "Erakutsi mezu-taldeak",
"apihelp-translatesandbox-param-do": "Egin beharrekoa.",
"apihelp-translationstash-param-subaction": "Ekintza.",
"apihelp-translationstash-param-translation": "Erabiltzaileak egindako itzulpena.",
"apihelp-translationstash-param-metadata": "JSON objektua.",
- "apihelp-searchtranslations-description": "Itzulpenak bilatu"
+ "apihelp-searchtranslations-description": "Itzulpenak bilatu",
+ "apierror-translate-unknownmessage": "Mezu ezezaguna"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/fa.json b/www/wiki/extensions/Translate/i18n/api/fa.json
index 961943cb..d283d944 100644
--- a/www/wiki/extensions/Translate/i18n/api/fa.json
+++ b/www/wiki/extensions/Translate/i18n/api/fa.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Reza1615",
- "Huji"
+ "Huji",
+ "Ladsgroup"
]
},
"apihelp-aggregategroups-description": "مدیریت گروه‌های پیغام دسته‌جمعی.\n\nشما می توانید گروه‌های پیغام دسته‌جمعی را بیفزایید یا حذف کنید یا گروه‌های پیغام را به آن‌ها متصل یا جدا کنید (در هر زمان یکی).",
@@ -13,12 +14,42 @@
"apihelp-aggregategroups-param-groupdescription": "توصیف گروه پیغام دسته‌جمعی.",
"apihelp-aggregategroups-example-1": "متصل کردن یک گروه",
"apihelp-groupreview-description": "مشخص کردن حالت‌های روند کار گروه پیغام.",
- "apihelp-groupreview-param-group": "گروه پیغام‌ها.",
+ "apihelp-groupreview-param-group": "گروه پیغام.",
"apihelp-groupreview-param-language": "کد زبان.",
"apihelp-groupreview-param-state": "حالت تازه برای گروه.",
+ "apihelp-query+languagestats-description": "کوئری آمار زبان",
+ "apihelp-query+languagestats-summary": "کوئری آمار زبان",
"apihelp-query+languagestats-param-language": "کد زبان.",
"apihelp-query+messagecollection-param-group": "گروه پیغام‌ها.",
"apihelp-query+messagecollection-param-language": "کد زبان.",
+ "apihelp-query+messagecollection-example-1": "فهرست زبان‌های پشتیبانی شده",
+ "apihelp-query+messagegroups-summary": "بازگردانی اطلاعات درباره گروه‌های پیام",
+ "apihelp-query+messagegroups-example-1": "نمایش گروه‌های پیام",
+ "apihelp-query+messagegroupstats-param-group": "شناسهٔ گروه پیغام.",
+ "apihelp-query+messagetranslations-param-title": "عنوان کامل یک پیام شناخته شده.",
+ "apihelp-translatesandbox-param-do": "چه کاری برای انجام دادن هست.",
+ "apihelp-translatesandbox-param-email": "رایانامه هنگام ایجاد حساب",
+ "apihelp-translationreview-example-1": "بازبینی نسخه ۱",
"apihelp-translationstash-param-subaction": "فعالیت.",
- "apihelp-searchtranslations-description": "جستجوی ترجمه‌ها."
+ "apihelp-translationstash-param-metadata": "شی JSON",
+ "apihelp-ttmserver-param-sourcelanguage": "کد زبان متن مبدا",
+ "apihelp-ttmserver-param-targetlanguage": "کد زبان پیشنهاد",
+ "apihelp-ttmserver-param-text": "متن برای یافتن پیشنهاد",
+ "apihelp-searchtranslations-description": "جستجوی ترجمه‌ها.",
+ "apihelp-searchtranslations-summary": "جستجوی ترجمه‌ها.",
+ "apihelp-searchtranslations-param-query": "متن برای جستجو",
+ "apihelp-searchtranslations-param-limit": "اندازه نتیجه",
+ "apihelp-translationcheck-summary": "اعتبارسنجی ترجمه‌ها.",
+ "apihelp-translationcheck-param-translation": "ترجمه‌های برای اعتبارسنجی",
+ "apierror-translate-duplicateaggregategroup": "گروه پیام پیش از این وجود دارد.",
+ "apierror-translate-invalidgroup": "گروه وجود ندارد یا نامعتبر است.",
+ "apierror-translate-invalidstate": "وضعیت درخواستی نامعتبر است.",
+ "apierror-translate-invalidlanguage": "زبان درخواستی نامعتبر است.",
+ "apierror-translate-invalidupdate": "برورزسانی نامعتبر",
+ "apierror-translate-language-disabled": "ترجمه روی $1 غیرفعال شده‌است.",
+ "apierror-translate-language-disabled-reason": "ترجمه روی $1 غیرفعال شده‌است:$2",
+ "apierror-translate-owntranslation": "نمی‌توانید پیام‌های خودتان را بازبینی کنید",
+ "apierror-translate-sandbox-invalidppassword": "گذرواژه نامعتبر",
+ "apierror-translate-unknownmessage": "پیام ناشناخته",
+ "apiwarn-translate-alreadyreviewedbyyou": "قبلا به عنوان بازبینی‌شده توسط شما علامت خورده است"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/fi.json b/www/wiki/extensions/Translate/i18n/api/fi.json
index 4e5527bf..6b526aed 100644
--- a/www/wiki/extensions/Translate/i18n/api/fi.json
+++ b/www/wiki/extensions/Translate/i18n/api/fi.json
@@ -1,7 +1,9 @@
{
"@metadata": {
"authors": [
- "Nike"
+ "Nike",
+ "Pyscowicz",
+ "Valtlait"
]
},
"apihelp-aggregategroups-param-group": "Viestiryhmän tunnus.",
@@ -12,14 +14,42 @@
"apihelp-groupreview-param-group": "Viestiryhmä.",
"apihelp-groupreview-param-language": "Kielikoodi.",
"apihelp-groupreview-param-state": "Viestiryhmän uusi tila.",
- "apihelp-groupreview-example-1": "Merkitsee ryhmän \"group-Example\" saksankielisen käännöksen tilan 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",
"apihelp-query+messagecollection-param-group": "Viestiryhmä.",
"apihelp-query+messagecollection-param-language": "Kielikoodi.",
"apihelp-query+messagecollection-param-limit": "Kuinka monta viestiä näytetään (suotimien jälkeen).",
"apihelp-query+messagecollection-example-1": "Palauttaa luettelon tuetuista kielistä",
+ "apihelp-query+messagegroups-example-1": "Näytä viestiryhmät",
+ "apihelp-query+messagegroupstats-param-group": "Viestiryhmän tunnus.",
+ "apihelp-translatesandbox-param-do": "Mitä tehdä.",
+ "apihelp-translatesandbox-param-username": "Käyttäjimi käyttäjää luodessa",
+ "apihelp-translatesandbox-param-password": "Salasana käyttäjää luodessa",
+ "apihelp-translatesandbox-param-email": "Sähköpostiosoite käyttäjää luodessa",
+ "apihelp-translationreview-description": "Merkitse käännökset tarkastetuiksi.",
"apihelp-translationstash-param-metadata": "JSON-objekti.",
"apihelp-translationstash-param-username": "Käyttäjä, jonka kätkö ladataan. Vain erioikeutetut käyttäjät voivat lukea toisten kätköjä.",
- "apihelp-searchtranslations-description": "Etsi käännöksiä."
+ "apihelp-ttmserver-param-sourcelanguage": "Lähdetekstin kielikoodi.",
+ "apihelp-ttmserver-param-targetlanguage": "Ehdotuksen kielikoodi.",
+ "apihelp-searchtranslations-description": "Etsi käännöksiä.",
+ "apihelp-searchtranslations-summary": "Hae käännöksiä.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Lähdetekstin kielikoodi.",
+ "apihelp-searchtranslations-param-limit": "Tuloksen koko.",
+ "apihelp-searchtranslations-example-1": "Näytä käännökset kielelle.",
+ "apihelp-translationcheck-param-title": "Sivun otsikko nimiavaruudella ja kielikoodilla.",
+ "apierror-translate-duplicateaggregategroup": "Viestiryhmä on jo olemassa",
+ "apierror-translate-invalidgroup": "Ryhmä ei ole olemassa tai se on virheellinen",
+ "apierror-translate-invalidlanguage": "Pyydetty kieli ei kelpaa.",
+ "apierror-translate-invalidupdate": "Virheellinen päivitys",
+ "apierror-translate-language-disabled": "Kääntäminen kielelle $1 ei ole mahdollista.",
+ "apierror-translate-language-disabled-reason": "Kääntäminen kielelle $1 ei ole mahdollista: $2",
+ "apierror-translate-nodynamicgroups": "Dynaamisiä viestiryhmiä ei tueta täällä",
+ "apierror-translate-nomessagefortitle": "Otsikko ei vastaa käännettävää viesti",
+ "apierror-translate-owntranslation": "Ei voida tarkistaa omia käännöksiä",
+ "apierror-translate-sandboxdisabled": "Hiekkalaatikko-ominaisuus ei ole käytössä",
+ "apierror-translate-sandbox-invalidppassword": "Virheellinen salasana",
+ "apierror-translate-unknownmessage": "Tuntematon viesti",
+ "apiwarn-translate-language-disabled-source": "Tämän ryhmän lähdekieli on $1. Valitse toinen kieli käännöksille."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/fr.json b/www/wiki/extensions/Translate/i18n/api/fr.json
index 82dd7b57..a7430afe 100644
--- a/www/wiki/extensions/Translate/i18n/api/fr.json
+++ b/www/wiki/extensions/Translate/i18n/api/fr.json
@@ -8,10 +8,15 @@
"Wladek92",
"Sacamol",
"Hpetit",
- "Verdy p"
+ "Verdy p",
+ "Derugon",
+ "Urhixidur",
+ "ALDO CP"
]
},
"apihelp-aggregategroups-description": "Gérer les groupes d'agrégation de messages.\n\nVous pouvez ajouter et supprimer des agrégats de groupes de messages et les associer ou de les dissocier les uns des autres (un à la fois).",
+ "apihelp-aggregategroups-summary": "Gérer des groupes de messages aggrégés.",
+ "apihelp-aggregategroups-extended-description": "Vous pouvez ajouter et supprimer des groupes de messages agrégés et leur associer ou non des groupes de messages (un par un).",
"apihelp-aggregategroups-param-do": "Que faire avec le groupe de message agrégé.",
"apihelp-aggregategroups-param-aggregategroup": "ID du groupe de message agrégé.",
"apihelp-aggregategroups-param-group": "ID du groupe de messages.",
@@ -19,55 +24,66 @@
"apihelp-aggregategroups-param-groupdescription": "Description du groupe de messages agrégé.",
"apihelp-aggregategroups-example-1": "Associer un groupe",
"apihelp-groupreview-description": "Définir les états de transition du groupe de messages.",
+ "apihelp-groupreview-summary": "Définir les états de flux de travail du groupe de messages.",
"apihelp-groupreview-param-group": "Groupe de messages.",
"apihelp-groupreview-param-language": "Code de langue",
"apihelp-groupreview-param-state": "Le nouvel état pour le groupe.",
"apihelp-groupreview-example-1": "Marquer l’état de la traduction allemande du groupe de messages « group-Example » comme prêt",
"apihelp-query+languagestats-description": "Demande les statistiques de langue.",
+ "apihelp-query+languagestats-summary": "Demander des statistiques de langue.",
"apihelp-query+languagestats-param-timelimit": "Temps Maximum pour calculer les statistiques manquantes. S'il vaut zéro, seuls les résultats mis en cache depuis le début sont retournés.",
"apihelp-query+languagestats-param-language": "Code de langue.",
"apihelp-query+languagestats-example-1": "Liste de statistiques des traductions terminées pour le finlandais",
"apihelp-query+messagecollection-description": "Requête MessageCollection sur les traductions.",
+ "apihelp-query+messagecollection-summary": "Rechercher des traductions dans MessageCollection.",
"apihelp-query+messagecollection-param-group": "Groupe du message.",
"apihelp-query+messagecollection-param-language": "Code de langue.",
"apihelp-query+messagecollection-param-limit": "Combien de messages à afficher (après filtrage).",
"apihelp-query+messagecollection-param-offset": "Entier ou clé de décalage pour le début.",
"apihelp-query+messagecollection-param-filter": "Filtres sur les collections de messages. Utilisez <kbd>! </kbd> pour nier la condition. Par exemple <kbd>!floue</kbd> signifie uniquement la liste de tous les messages non-floue . Les filtres sont appliqués dans l'ordre indiqué.\n;floue: messages avec étiquette fuzzy.\n;optionnel: messages qui doivent être traduits que si des changements sont nécessaires.\n;ignoré: messages qui ne sont jamais traduits.\n;possède traduction: messages qui ont une traduction peu importe si elle est floue ou pas.\n;traduit: messages qui ont une traduction qui n'est pas floue.\n;changé: messages qui ont été traduits ou changé depuis la dernière exportation.\n;examinateur&#58;N: messages dont le numéro d'utilisateur <kbd>N</kbd> figure parmi les examinateurs.\n;dernier traducteur&#58;N: messages dont le numéro d'utilisateur <kbd>N</kbd> est celui de la dernière personne qui a traduit.",
- "apihelp-query+messagecollection-param-prop": "Quelles sont les propriétés à obtenir:\n;definition: la définition du message.\n;translation: traduction actuelle (sans la chaîne $1 si elle est présente, utiliser les étiquettes pour vérifier les traductions obsolètes ou cassées).\n;tags: balises de message, comme optionel, ignoré et floue.\n;properties: les propriétés d'un message, comme le status, la révision, le dernier traducteur. Peut varier entre les messages.\n;revision:<span class=\"deprecated\">Obsolète! </span> Utiliser $2prop=propriétés.",
+ "apihelp-query+messagecollection-param-prop": "Quelles sont les propriétés à obtenir :\n;definition : la définition du message.\n;translation : traduction actuelle (sans la chaîne $1 si elle est présente, utiliser les étiquettes pour vérifier les traductions désuètes ou cassées).\n;tags : balises de message, comme optionnel, ignoré et flou.\n;properties : les propriétés d’un message, comme son état, la révision, le dernier traducteur. Peut varier entre les messages.\n;revision :<span class=\"deprecated\">Désuet !</span> Utiliser $2prop=propriétés.",
"apihelp-query+messagecollection-example-1": "Liste des langues prises en charge",
"apihelp-query+messagecollection-example-2": "Liste des définitions de messages non-facultatifs pour le groupe \"Exemple-de-page\"",
"apihelp-query+messagecollection-example-3": "Liste des messages facultatifs en finnois, avec les balises pour le groupe de la \"page d'exemple\"",
"apihelp-query+messagecollection-example-4": "Plus d'informations sur les dernières révisions de traduction pour le groupe de la \"page d'exemple\"",
"apihelp-query+messagegroups-description": "Retourne des informations sur les groupes de messages.\n\nNotez que le paramètre uselang concerne la sortie des éléments dépendants de la langue.",
+ "apihelp-query+messagegroups-summary": "Renvoie des informations concernant les groupes de messges.",
+ "apihelp-query+messagegroups-extended-description": "Soyez conscient que le paramètre « uselang » modifie la sortie de tous les éléments qui sont dépendants de la langue.",
"apihelp-query+messagegroups-param-depth": "Lors de l'utilisation sous forme d'arbre, limiter la profondeur à ces différents niveaux. La valeur 0 signifie qu'aucun des sous-groupes n'est présenté. Si la limite est atteinte, la sortie inclut un \"compteur de groupes\", qui indique le nombre d'enfants directs.",
"apihelp-query+messagegroups-param-filter": "Seulement les messages retournés avec l'Id correspondant à l'une ou plusieurs des entrées fournies (insensible à la casse, séparées par des canaux (pipes), caractère générique *).",
"apihelp-query+messagegroups-param-format": "Dans la présentation sous forme d'arbre, les groupes de messages peuvent exister en plusieurs endroits de l'arborescence.",
"apihelp-query+messagegroups-param-iconsize": "La taille préférée de l'icône pixellisée du groupe.",
- "apihelp-query+messagegroups-param-prop": "Quelle information relative à la traduction obtenir:\n;id: contient l'ID du groupe.\n;label: contient l'étiquette du groupe.\n;description: contient la description du groupe.\n;class: contient le nom de classe du groupe.\n;namespace: contient le nom de l'espace de noms du groupe. Tous les groupes n'appartiennent pas forcément à un unique espace de noms.\n;exists: contient une propriété d'existence du groupe auto-calculée.\n;icon: contient des Url vers l'icône du groupe.\n;priority: contient le status de la priorité comme découragé.\n;prioritylangs: contient les langues préférées. S'il n'est pas initialisé, retourne false.\n;priorityforce: inclus le status de la priorité - est forcé sur la priorité des langues.\n;workflowstates: il contient les états du processus pour le groupe de messages.",
+ "apihelp-query+messagegroups-param-prop": "Quelle information relative à la traduction obtenir :\n;id: contient l’ID du groupe.\n;label: contient l’étiquette du groupe.\n;description: contient la description du groupe.\n;class: contient le nom de classe du groupe.\n;namespace: contient l’espace de noms du groupe. Tous les groupes n’appartiennent pas forcément à un unique espace de noms.\n;exists: contient une propriété d’existence du groupe auto-calculée.\n;icon: contient des URLs vers l’icône du groupe.\n;priority: contient l’état de priorité (par ex., 'découragé').\n;prioritylangs: contient les langues préférées. S’il n’est pas renseigné, retourne false.\n;priorityforce: inclut l’état de priorité —prioritylangs est-il forcé ?\n;workflowstates: contient les états du processus pour le groupe de messages.",
"apihelp-query+messagegroups-param-root": "En utilisant le format arborescent, au lieu de démarrer depuis le plus haut niveau, partir du groupe de message fourni, qui doit être un groupe de message agrégé. En utilisant le format plat, seul le groupe spécifié est renvoyé.",
"apihelp-query+messagegroups-example-1": "Affiche les groupes de message",
"apihelp-query+messagegroupstats-description": "Demande de statistiques de groupe de message.",
+ "apihelp-query+messagegroupstats-summary": "Demander les statistiques des groupes de messages.",
"apihelp-query+messagegroupstats-param-timelimit": "Durée maximale pour calculer les statistiques manquantes. Si c’est zéro, seuls les résultats en cache depuis le début seront renvoyés.",
"apihelp-query+messagegroupstats-param-group": "Identifiant du groupe de message.",
"apihelp-query+messagegroupstats-example-1": "Liste des statistiques d’achèvement des traductions pour le groupe « page-Example »",
"apihelp-query+messagetranslations-description": "Demande l'ensemble des traductions pour un seul message.",
+ "apihelp-query+messagetranslations-summary": "Recherche toutes les traductions d'un unique message.",
"apihelp-query+messagetranslations-param-title": "Titre complet d'un message connu.",
"apihelp-query+messagetranslations-example-1": "Liste des traductions du wiki pour «MediaWiki:janvier»",
"apihelp-translatesandbox-description": "Inscrivez-vous et gérez les utilisateurs du bac à sable.",
+ "apihelp-translatesandbox-summary": "Inscrivez-vous et gérez les utilisateurs du bac à sable.",
"apihelp-translatesandbox-param-do": "Que faire.",
"apihelp-translatesandbox-param-userid": "IDs des utilisateurs gérés. Utiliser 0 pour les créations.",
"apihelp-translatesandbox-param-username": "Nom d'utilisateur lors de la création d'un utilisateur.",
"apihelp-translatesandbox-param-password": "Mot de passe lors de la création d'un utilisateur.",
- "apihelp-translatesandbox-param-email": "E-mail lors de la création d'un utilisateur.",
+ "apihelp-translatesandbox-param-email": "Courriel lors de la création d’un utilisateur.",
"apihelp-translationaids-description": "Recherche toutes les aides à la traduction.",
+ "apihelp-translationaids-summary": "Rechercher toutes les aides à la traduction.",
"apihelp-translationaids-param-title": "Titre complet d'un message connu.",
"apihelp-translationaids-param-group": "Le groupe de messages auquel appartient le message. S'il est vide, alors le groupe principal est utilisé.",
"apihelp-translationaids-param-prop": "Quelles aides à la traduction inclure.",
"apihelp-translationaids-example-1": "Afficher les aides pour [[MediaWiki:January/fi]]",
"apihelp-translationreview-description": "Marquer les traductions comme relues.",
+ "apihelp-translationreview-summary": "Marquer les traductions relues.",
"apihelp-translationreview-param-revision": "Le numéro de révision à revoir.",
"apihelp-translationreview-example-1": "Relire la révision 1",
"apihelp-translationstash-description": "Ajouter des traductions à la réserve.",
+ "apihelp-translationstash-summary": "Mettre des traductions en réserve.",
"apihelp-translationstash-param-subaction": "Action.",
"apihelp-translationstash-param-title": "Titre de la page d’unité de traduction.",
"apihelp-translationstash-param-translation": "Traduction faite par l’utilisateur.",
@@ -76,12 +92,14 @@
"apihelp-translationstash-example-1": "Ajouter une traduction à la réserve pour [[MediaWiki:Jan/fi]]",
"apihelp-translationstash-example-2": "Interroger la réserve",
"apihelp-ttmserver-description": "Rechercher des suggestions à partire de l'historique des traductions.",
+ "apihelp-ttmserver-summary": "Rechercher des suggestions à partir de l'historique des traductions.",
"apihelp-ttmserver-param-service": "Quels services de traduction disponibles utiliser.",
"apihelp-ttmserver-param-sourcelanguage": "Le code de langue du texte de la source.",
"apihelp-ttmserver-param-targetlanguage": "Le code de langue de la suggestion.",
"apihelp-ttmserver-param-text": "Le texte pour lequel on cherche des suggestions.",
"apihelp-ttmserver-example-1": "Obtenir des suggestions pour la traduire \"Aide\" de l'anglais vers le finnois",
"apihelp-searchtranslations-description": "Rechercher des traductions.",
+ "apihelp-searchtranslations-summary": "Rechercher des traductions.",
"apihelp-searchtranslations-param-service": "Quels services de traduction disponibles utiliser.",
"apihelp-searchtranslations-param-query": "La chaîne à rechercher.",
"apihelp-searchtranslations-param-sourcelanguage": "Le code de langue du texte de la source.",
@@ -93,5 +111,29 @@
"apihelp-searchtranslations-param-offset": "Décalage pour les traductions.",
"apihelp-searchtranslations-param-limit": "Taille du résultat.",
"apihelp-searchtranslations-example-1": "Afficher les traductions pour la langue.",
- "apihelp-searchtranslations-example-2": "Afficher les messages non traduits correspondant à la demande dans la langue source."
+ "apihelp-searchtranslations-example-2": "Afficher les messages non traduits correspondant à la demande dans la langue source.",
+ "apihelp-translationcheck-description": "Valider la saisie de la traduction fournie d’après les vérificateurs de message.",
+ "apihelp-translationcheck-summary": "Valider les traductions.",
+ "apihelp-translationcheck-param-title": "Titre de page avec espace de noms et code langue.",
+ "apihelp-translationcheck-param-translation": "La traduction à valider.",
+ "apierror-translate-duplicateaggregategroup": "Le groupe de messages existe déjà",
+ "apierror-translate-fuzzymessage": "Impossible de relire des traductions trop vagues",
+ "apierror-translate-groupreviewdisabled": "La revue du groupe de message n'est pas utilisée.",
+ "apierror-translate-invalidaggregategroup": "Groupe de messages aggrégés invalide",
+ "apierror-translate-invalidaggregategroupname": "Nom du groupe de messages aggrégés invalide",
+ "apierror-translate-invalidgroup": "Le groupe n'existe pas ou n'est pas valide",
+ "apierror-translate-invalidstate": "L'état demandé n'est pas valide.",
+ "apierror-translate-invalidlanguage": "La langue demandée n'est pas valide.",
+ "apierror-translate-invalidupdate": "Correction invalide",
+ "apierror-translate-language-disabled": "La traduction en $1 est désactivée.",
+ "apierror-translate-language-disabled-reason": "La traduction en $1 est désactivée: $2",
+ "apierror-translate-nodynamicgroups": "Les groupes de messages dynamiques ne sont pas pris en charge ici",
+ "apierror-translate-nomessagefortitle": "Le titre ne correspond pas à un message traductible",
+ "apierror-translate-notranslationservices": "Aucun service de traduction public n’a été configuré. L’administrateur du wiki doit positionner <var>$wgTranslateTranslationServices</var> comme il faut avant que cette fonctionnalité puisse être utilisée.",
+ "apierror-translate-owntranslation": "Impossible de relire ses propres traductions",
+ "apierror-translate-sandboxdisabled": "Les fonctions du bac à sable ne sont pas utilisées",
+ "apierror-translate-sandbox-invalidppassword": "Mot de passe invalide",
+ "apierror-translate-unknownmessage": "Message inconnu",
+ "apiwarn-translate-alreadyreviewedbyyou": "Déjà marqué comme ayant été relu par vous",
+ "apiwarn-translate-language-disabled-source": "La langue source de ce groupe est $1. Veuillez sélectionner une autre langue vers laquelle traduire."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/fy.json b/www/wiki/extensions/Translate/i18n/api/fy.json
index 520d3346..07ce2545 100644
--- a/www/wiki/extensions/Translate/i18n/api/fy.json
+++ b/www/wiki/extensions/Translate/i18n/api/fy.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Robin0van0der0vliet"
+ "Robin0van0der0vliet",
+ "Robin van der Vliet"
]
},
"apihelp-groupreview-param-group": "Berjochtgroep.",
diff --git a/www/wiki/extensions/Translate/i18n/api/gl.json b/www/wiki/extensions/Translate/i18n/api/gl.json
index a0d85d57..e0803c4c 100644
--- a/www/wiki/extensions/Translate/i18n/api/gl.json
+++ b/www/wiki/extensions/Translate/i18n/api/gl.json
@@ -14,15 +14,18 @@
"apihelp-aggregategroups-param-groupdescription": "Descrición do grupo de mensaxes agregado.",
"apihelp-aggregategroups-example-1": "Asociar un grupo",
"apihelp-groupreview-description": "Establecer os estados de fluxo de traballo dos grupos de mensaxes.",
+ "apihelp-groupreview-summary": "Establecer os estados de fluxo de traballo dos grupos de mensaxes.",
"apihelp-groupreview-param-group": "Grupo de mensaxes.",
"apihelp-groupreview-param-language": "Código da lingua.",
"apihelp-groupreview-param-state": "Novo estado para o grupo.",
"apihelp-groupreview-example-1": "Marcar o estado da tradución alemán do grupo de mensaxes \"grupo-Exemplo\" como listo",
"apihelp-query+languagestats-description": "Consultar estatísticas de idioma.",
+ "apihelp-query+languagestats-summary": "Consultar estatísticas de idioma.",
"apihelp-query+languagestats-param-timelimit": "Tempo máximo para calcular as estatísticas que faltan. Se cero, só se devolven os resultados almacenados ó comezo.",
"apihelp-query+languagestats-param-language": "Código da lingua.",
"apihelp-query+languagestats-example-1": "Lista de estatíticas de traducións completadas en finés.",
"apihelp-query+messagecollection-description": "Consultar MessageCollection sobre traducións.",
+ "apihelp-query+messagecollection-summary": "Consultar MessageCollection sobre traducións.",
"apihelp-query+messagecollection-param-group": "Grupo de mensaxes.",
"apihelp-query+messagecollection-param-language": "Código da lingua.",
"apihelp-query+messagecollection-param-limit": "Número de mensaxes a amosar (despois de filtrar).",
@@ -34,35 +37,42 @@
"apihelp-query+messagecollection-example-3": "Lista de mensaxes opcionais en finlandés con etiquetas para o grupo \"page-Example\"",
"apihelp-query+messagecollection-example-4": "Máis información acerca das últimas revisións de tradución para o grupo \"page-Example\"",
"apihelp-query+messagegroups-description": "Devolver información sobre grupos de mensaxes.\n\nTeña en conta que o parámetro \"uselang\" afecta á saída das partes dependentes do idioma.",
- "apihelp-query+messagegroups-param-depth": "Candos se usa o formato en árbore, limitar a profundidade ós seus niveis. O valor 0 indica que non se mostran subgrupos. Se o límite é alcanzado, a saínda inclúe un valor \"groupcount\" que indica o número de fillos directos.",
+ "apihelp-query+messagegroups-summary": "Devolver información sobre grupos de mensaxes.",
+ "apihelp-query+messagegroups-param-depth": "Candos se usa o formato en árbore, limitar a profundidade ós seus niveis. O valor 0 indica que non se amosan subgrupos. Se o límite é alcanzado, a saída inclúe un valor \"groupcount\" (conta de grupos) que indica o número de fillos directos.",
"apihelp-query+messagegroups-param-filter": "Só devolver mensaxes con identificadores que se correspondan cunha ou máis das entradas indicadas (sen diferenciar maiúsculas e minúsculas, separados por barras verticais, comodín *).",
"apihelp-query+messagegroups-param-format": "Nos grupos de mensaxes en forma de árbore poden existir en múltiples lugares na árbore.",
"apihelp-query+messagegroups-param-iconsize": "Tamaño preferido da icona de grupo rasterizada.",
"apihelp-query+messagegroups-param-prop": "Que información obter sobre a tradución:\n;id:Inclúe o identificador do grupo.\n;label:Inclúe a etiqueta do grupo.\n;description:Inclúe a descrición do grupo.\n;class:Inclúe o nome de clase do grupo.\n;namespace:Inclúe o espazo de nomes do grupo. Non todos os grupos pertencen a un único espazo de nomes.\n;exists:Inclúe a propiedade de existencia auto-calculada do grupo.\n;icon:Inclúe as URLs á icona do grupo.\n;priority:Inclúe o estado de prioridade como discouraged.\n;prioritylangs:Inclúe linguas preferidas. Se non ten valor, devolve falso.\n;priorityforce:Inclúe o estado de prioridade - se a configuración de prioridade de linguas está activo.\n;workflowstates:Inclúe os estados do fluxo de traballo para as mensaxes do grupo.",
"apihelp-query+messagegroups-param-root": "Cando se usa o formato en árbore, no canto de comezar dende o nivel superior comezar dende o grupo de mensaxes indicado, que debe ser un grupo de mensaxes agregado. Cando se usa o formato plano só se devolve o grupo especificado.",
- "apihelp-query+messagegroups-example-1": "Mostrar grupos de mensaxes",
+ "apihelp-query+messagegroups-example-1": "Amosar grupos de mensaxes",
"apihelp-query+messagegroupstats-description": "Consultar estatísticas do grupo de mensaxes.",
+ "apihelp-query+messagegroupstats-summary": "Consultar estatísticas do grupo de mensaxes.",
"apihelp-query+messagegroupstats-param-timelimit": "Tempo máximo para calcular as estatísticas que faltan. Se cero, só se devolven os resultados almacenados ó comezo.",
"apihelp-query+messagegroupstats-param-group": "Identificador do grupo de mensaxes.",
"apihelp-query+messagegroupstats-example-1": "Lista de estatísticas de finalización de traducións para o grupo \"páxina-Exemplo\"",
"apihelp-query+messagetranslations-description": "Consultar todas as traducións para unha única mensaxe.",
+ "apihelp-query+messagetranslations-summary": "Consultar todas as traducións para unha única mensaxe.",
"apihelp-query+messagetranslations-param-title": "Título completo dunha mensaxe coñecida.",
"apihelp-query+messagetranslations-example-1": "Lista de traducións na wiki para \"MediaWiki:January\"",
"apihelp-translatesandbox-description": "Rexistrar e xestionar usuarios illados (en \"sandbox\").",
+ "apihelp-translatesandbox-summary": "Rexistrar e xestionar usuarios illados (en \"sandbox\").",
"apihelp-translatesandbox-param-do": "Que facer.",
"apihelp-translatesandbox-param-userid": "Identificadores de usuario dos usuarios a xestionar. Use 0 para creacións.",
"apihelp-translatesandbox-param-username": "Nome de usuario ó crear o usuario.",
"apihelp-translatesandbox-param-password": "Contrasinal ó crear o usuario.",
"apihelp-translatesandbox-param-email": "Correo electrónico ó crear o usuario.",
"apihelp-translationaids-description": "Consultar todas as asistencias de traducións.",
+ "apihelp-translationaids-summary": "Consultar todas as asistencias de traducións.",
"apihelp-translationaids-param-title": "Título completo dunha mensaxe coñecida.",
"apihelp-translationaids-param-group": "Grupo de mensaxes ó que pertence a mensaxe. Se está baleiro úsase o grupo primario.",
"apihelp-translationaids-param-prop": "Que asistentes de tradución incluír.",
- "apihelp-translationaids-example-1": "Mostrar axudas para [[MediaWiki:January/fi]]",
+ "apihelp-translationaids-example-1": "Amosar axudas para [[MediaWiki:January/fi]]",
"apihelp-translationreview-description": "Marcar traducións como revisadas.",
+ "apihelp-translationreview-summary": "Marcar traducións como revisadas.",
"apihelp-translationreview-param-revision": "Número de revisión a revisar.",
"apihelp-translationreview-example-1": "Revisar revisión 1",
"apihelp-translationstash-description": "Engadir traducións á reserva.",
+ "apihelp-translationstash-summary": "Engadir traducións á reserva.",
"apihelp-translationstash-param-subaction": "Acción.",
"apihelp-translationstash-param-title": "Título da páxina da unidade de tradución.",
"apihelp-translationstash-param-translation": "Tradución realizada polo usuario.",
@@ -71,12 +81,14 @@
"apihelp-translationstash-example-1": "Engadir unha tradución á reserva para [[MediaWiki:Jan/fi]]",
"apihelp-translationstash-example-2": "Consultar a reserva",
"apihelp-ttmserver-description": "Consultar as suxestións da memoria de tradución.",
+ "apihelp-ttmserver-summary": "Consultar as suxestións da memoria de tradución.",
"apihelp-ttmserver-param-service": "Que servizos de tradución usar, entre os dispoñibles.",
"apihelp-ttmserver-param-sourcelanguage": "O código de lingua do texto fonte.",
"apihelp-ttmserver-param-targetlanguage": "O código de lingua da suxestión.",
"apihelp-ttmserver-param-text": "Texto para o cal buscar suxestións.",
"apihelp-ttmserver-example-1": "Obter suxestións para traducir \"Help\" do inglés ao finés",
"apihelp-searchtranslations-description": "Procurar nas traducións.",
+ "apihelp-searchtranslations-summary": "Procurar nas traducións.",
"apihelp-searchtranslations-param-service": "O servizo de tradución a utilizar.",
"apihelp-searchtranslations-param-query": "A cadea que buscar.",
"apihelp-searchtranslations-param-sourcelanguage": "O código de lingua do texto fonte.",
@@ -87,6 +99,24 @@
"apihelp-searchtranslations-param-case": "Busca sensible/non sensible a maiúsculas.",
"apihelp-searchtranslations-param-offset": "Desprazamento para as traducións.",
"apihelp-searchtranslations-param-limit": "Tamaño do resultado.",
- "apihelp-searchtranslations-example-1": "Mostrar as traducións para a lingua.",
- "apihelp-searchtranslations-example-2": "Mostrar as mensaxes non traducidas que coincidan coa pescuda na lingua de orixe."
+ "apihelp-searchtranslations-example-1": "Amosar as traducións para a lingua.",
+ "apihelp-searchtranslations-example-2": "Amosar as mensaxes non traducidas que coincidan coa pescuda na lingua de orixe.",
+ "apihelp-translationcheck-summary": "Validar traducións.",
+ "apihelp-translationcheck-param-translation": "A tradución a validar.",
+ "apierror-translate-duplicateaggregategroup": "O grupo de mensaxes xa existe",
+ "apierror-translate-groupreviewdisabled": "A revisión do grupo de mensaxes non está en uso.",
+ "apierror-translate-invalidaggregategroup": "Grupo de mensaxes agregadas non válido",
+ "apierror-translate-invalidaggregategroupname": "Nome do grupo de mensaxes agregadas non válido",
+ "apierror-translate-invalidgroup": "O grupo non existe ou non é válido",
+ "apierror-translate-invalidstate": "O estado solicitado non é válido.",
+ "apierror-translate-invalidlanguage": "A lingua solicitada non é válida.",
+ "apierror-translate-invalidupdate": "Actualización non válida",
+ "apierror-translate-language-disabled": "A tradución a esta lingua está desactivada",
+ "apierror-translate-nodynamicgroups": "Aquí non están admitidos os grupos de mensaxes dinámicas",
+ "apierror-translate-nomessagefortitle": "O título non se corresponde cunha mensaxe traducible",
+ "apierror-translate-owntranslation": "Non pode revisar as súas traducións",
+ "apierror-translate-sandboxdisabled": "A función de zona de probas non está en uso",
+ "apierror-translate-sandbox-invalidppassword": "O contrasinal non é válido",
+ "apierror-translate-unknownmessage": "Mensaxe descoñecida",
+ "apiwarn-translate-alreadyreviewedbyyou": "Xa marcada como revisada por vostede"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/he.json b/www/wiki/extensions/Translate/i18n/api/he.json
index a5408331..8d32e4ee 100644
--- a/www/wiki/extensions/Translate/i18n/api/he.json
+++ b/www/wiki/extensions/Translate/i18n/api/he.json
@@ -2,10 +2,13 @@
"@metadata": {
"authors": [
"Amire80",
- "Guycn2"
+ "Guycn2",
+ "המקיסט"
]
},
"apihelp-aggregategroups-description": "ניהול קבוצות הודעות משולבות.\n\nאפשר להוסיף ולהסיר קבוצות משולבות ולשייך אליהן קבוצות הודעות או להסיר אותן (אחת‏־אחת).",
+ "apihelp-aggregategroups-summary": "ניהול קבוצות הודעות משולבות.",
+ "apihelp-aggregategroups-extended-description": "באפשרותך להוסיף ולהסיר הודעות בקבוצות משולבות. בנוסף, ניתן לשייך הודעות לקבוצות אלו או לבטל שיוך של הודעות אליהן (הודעה אחת בכל פעם).",
"apihelp-aggregategroups-param-do": "מה לעשות עם קבוצות ההודעות המשולבת.",
"apihelp-aggregategroups-param-aggregategroup": "מזהה קבוצת ההודעות המשולבת.",
"apihelp-aggregategroups-param-group": "מזהה קבוצת הודעות.",
@@ -13,15 +16,18 @@
"apihelp-aggregategroups-param-groupdescription": "תיאור קבוצת ההודעות המשולבת.",
"apihelp-aggregategroups-example-1": "שיוך קבוצה",
"apihelp-groupreview-description": "הגדרת מצבי זרימת עבודה של קבוצת הודעות.",
+ "apihelp-groupreview-summary": "הגדרת מצבי זרימת עבודה של קבוצת הודעות.",
"apihelp-groupreview-param-group": "קבוצת הודעות.",
"apihelp-groupreview-param-language": "קוד השפה.",
"apihelp-groupreview-param-state": "המצב החדש עבור הקבוצה.",
"apihelp-groupreview-example-1": "לסמן את המצב של התרגום לגרמנית של קבוצת ההודעות \"group-Example\" כמוכן",
"apihelp-query+languagestats-description": "לעשות שאילתה על סטטיסטיקות של שפה.",
+ "apihelp-query+languagestats-summary": "ביצוע שאילתה על סטטיסטיקות של שפה.",
"apihelp-query+languagestats-param-timelimit": "הזמן המרבי שיוקדש לחישוב סטטיסטיקות חסרות. אם זה אפס, מוחזרות רק תוצאות מוטמנות מההתחלה.",
"apihelp-query+languagestats-param-language": "קוד השפה.",
"apihelp-query+languagestats-example-1": "רשימת סטטיסטיקות השלמות תרגומים עבור פינית",
"apihelp-query+messagecollection-description": "לעשות שאילתה ל־MessageCollection על תרגומים.",
+ "apihelp-query+messagecollection-summary": "שאילתה של MessageCollection על תרגומים.",
"apihelp-query+messagecollection-param-group": "קבוצת הודעות.",
"apihelp-query+messagecollection-param-language": "קוד השפה.",
"apihelp-query+messagecollection-param-limit": "כמה הודעות להציג (אחרי סינון).",
@@ -33,6 +39,8 @@
"apihelp-query+messagecollection-example-3": "רשימת הודעות אופציונליות בפינית עם תגים עבור הקבוצה \"page-Example\"",
"apihelp-query+messagecollection-example-4": "יותר מידע על סקירות התרגום האחרונות עבור הקבוצה \"page-Example\"",
"apihelp-query+messagegroups-description": "החזרת מידע על קבוצות הודעות.\n\nשימו לב שהפרמטר uselang משפיע על הפלט של החלקים שתלויים בשפה.",
+ "apihelp-query+messagegroups-summary": "החזרת מידע על קבוצות של הודעות.",
+ "apihelp-query+messagegroups-extended-description": "יש לשים לב לכך שהפרמטר uselang משפיע על הפלט של החלקים התלויים בשפה.",
"apihelp-query+messagegroups-param-depth": "בעת שימוש בתסדיר עץ, להגביל את העומק למספר כזה של רמות. ערך 0 אומר שלא תוצג שום תת־קבוצה. כשמושגת ההגבלה, הפלט כולל ערך \"groupcount\", שמציין את מספר הילדים הישיר.",
"apihelp-query+messagegroups-param-filter": "להחזיר רק הודעות עם מזים שמתאימים לאחד מהקלטים שניתנו (אינו תלוי־רישיות, מופרד בתווי '|', תו־כול *).",
"apihelp-query+messagegroups-param-format": "בתסדיר עץ קבוצות הודעות יכולות להתקיים במספר מקומות בעץ.",
@@ -41,27 +49,33 @@
"apihelp-query+messagegroups-param-root": "בעת שימוש בתסדיר עץ, במקום להתחיל מהרמה העליונה, להתחיל מקבוצת ההודעות הנתונה, שצריכה להיות קבוצת הודעות משולבת. בעת שימוש בתסדיר שטוח רק הקבוצה שצוינה תוחזר.",
"apihelp-query+messagegroups-example-1": "להציג קבוצות הודעות",
"apihelp-query+messagegroupstats-description": "לעשות שאילתה של סטטיסטיקת קבוצת הודעות.",
+ "apihelp-query+messagegroupstats-summary": "לבצע שאילתה על סטטיסטיקות של קבוצת הודעות.",
"apihelp-query+messagegroupstats-param-timelimit": "הזמן המרבי שיוקדש לחישוב סטטיסטיקות חסרות. אם זה אפס, מוחזרות רק תוצאות מוטמנות מההתחלה.",
"apihelp-query+messagegroupstats-param-group": "מזהה קבוצת הודעות.",
"apihelp-query+messagegroupstats-example-1": "רשימה של סטטיסטיקת השלמת תרגומים עבור הקבוצה \"page-Example\"",
"apihelp-query+messagetranslations-description": "שאילתה של כל התרגומים של הודעה אחת.",
+ "apihelp-query+messagetranslations-summary": "שאילתה על כל התרגומים של הודעה אחת.",
"apihelp-query+messagetranslations-param-title": "כותרת שלמה של הודעה ידועה.",
"apihelp-query+messagetranslations-example-1": "רשימת תרגומים בוויקי עבור \"MediaWiki:January\"",
"apihelp-translatesandbox-description": "רשיום וניהול משתמשים בארגז חול.",
+ "apihelp-translatesandbox-summary": "רישום וניהול משתמשים בארגז חול.",
"apihelp-translatesandbox-param-do": "מה לעשות.",
"apihelp-translatesandbox-param-userid": "מזהי משתמשים של המשתמשים המנוהלים. יש להשתם ב־0 בשביל יצירה.",
"apihelp-translatesandbox-param-username": "שם משתמש בעת יצירת משתמש.",
"apihelp-translatesandbox-param-password": "ססמה בעת יצירת משתמש.",
"apihelp-translatesandbox-param-email": "דואל אלקטרוני בעת יצירת משתמש.",
"apihelp-translationaids-description": "שאילתה על כל עזרי התרגום.",
+ "apihelp-translationaids-summary": "שאילתה על כל עזרי התרגום.",
"apihelp-translationaids-param-title": "כותרת מלאה של הודעה ידועה.",
"apihelp-translationaids-param-group": "לאיזו קבוצת הודעות ההודעה שייכת. אם זה ריק, תשמש הקבוצה הראשית.",
"apihelp-translationaids-param-prop": "אילו עזרי תרגום לכלול.",
"apihelp-translationaids-example-1": "הצגת עזרים עבור [[MediaWiki:January/fi]]",
"apihelp-translationreview-description": "סימון תרגומים בתור נסקרים.",
+ "apihelp-translationreview-summary": "סימון תרגומים בתור נסקרים.",
"apihelp-translationreview-param-revision": "מספר הגרסה לסקירה.",
"apihelp-translationreview-example-1": "סקירת גרסה 1",
"apihelp-translationstash-description": "הוספת תרגומים למחסן.",
+ "apihelp-translationstash-summary": "הוספת תרגומים למחסן.",
"apihelp-translationstash-param-subaction": "פעולה.",
"apihelp-translationstash-param-title": "כותרת דף יחידת התרגום.",
"apihelp-translationstash-param-translation": "תרגומים שעשה המשתמש.",
@@ -70,12 +84,14 @@
"apihelp-translationstash-example-1": "הוספת למחסן של התרגום של [[MediaWiki:Jan/fi]].",
"apihelp-translationstash-example-2": "שאילתה למחסן",
"apihelp-ttmserver-description": "שאילתת הצעות מזיכרון תרגום.",
+ "apihelp-ttmserver-summary": "שאילתה על הצעות מזיכרון התרגום.",
"apihelp-ttmserver-param-service": "באיזה משירותי התרגום הזמינים להשתמש.",
"apihelp-ttmserver-param-sourcelanguage": "קוד השפה של טקסט המקור.",
"apihelp-ttmserver-param-targetlanguage": "קוד השפה של ההצעה.",
"apihelp-ttmserver-param-text": "עבור איזה טקסט למצוא הצעות.",
"apihelp-ttmserver-example-1": "קבלת הצעות לתרגום המחרוזת \"Help\" מאנגלית לפינית",
"apihelp-searchtranslations-description": "חיפוש תרגומים.",
+ "apihelp-searchtranslations-summary": "חפש תרגומים",
"apihelp-searchtranslations-param-service": "באילו משירותי התרגום הזמינים להשתמש.",
"apihelp-searchtranslations-param-query": "איזו מחרוזת לחפש.",
"apihelp-searchtranslations-param-sourcelanguage": "קוד השפה של טקסט המקור.",
@@ -87,5 +103,29 @@
"apihelp-searchtranslations-param-offset": "היסט לתרגומים.",
"apihelp-searchtranslations-param-limit": "גודל התוצאה.",
"apihelp-searchtranslations-example-1": "הצגת תרגומים בשפה.",
- "apihelp-searchtranslations-example-2": "הצגת הודעות לא מתורגמות שמתאימות לשאילתה בשפת המקור."
+ "apihelp-searchtranslations-example-2": "הצגת הודעות לא מתורגמות שמתאימות לשאילתה בשפת המקור.",
+ "apihelp-translationcheck-description": "בדיקת תרגום נתון מול בודקי הודעות.",
+ "apihelp-translationcheck-summary": "אימות תרגומים.",
+ "apihelp-translationcheck-param-title": "שם הדף עם מרחב השם וקוד השפה.",
+ "apihelp-translationcheck-param-translation": "התרגום שיאומת.",
+ "apierror-translate-duplicateaggregategroup": "קבוצת ההודעות כבר קיימת",
+ "apierror-translate-fuzzymessage": "לא ניתן לסקור תרגומים שאינם מעודכנים",
+ "apierror-translate-groupreviewdisabled": "סקירת קבוצת ההודעות אינה בשימוש.",
+ "apierror-translate-invalidaggregategroup": "קבוצת הודעות משולבת בלתי־תקינה",
+ "apierror-translate-invalidaggregategroupname": "שם קבוצת הודעות משולבת בלתי־תקין",
+ "apierror-translate-invalidgroup": "הקבוצה אינה קיימת או בלתי־תקינה",
+ "apierror-translate-invalidstate": "השם המבוקש אינו תקין.",
+ "apierror-translate-invalidlanguage": "השפה המבוקשת אינה תקינה.",
+ "apierror-translate-invalidupdate": "עדכון בלתי־תקין",
+ "apierror-translate-language-disabled": "התרגום לשפה $1 מבוטל.",
+ "apierror-translate-language-disabled-reason": "התרגום לשפה $1 מבוטל: $2",
+ "apierror-translate-nodynamicgroups": "קבוצת הודעות דינמיות אינן נתמכות כאן",
+ "apierror-translate-nomessagefortitle": "הכותרת אינה מתאימה לשום הודעה בת־תרגום",
+ "apierror-translate-notranslationservices": "לא הוגדרו שירותי תרגום ציבוריים. מנהל אתר הוויקי צריך להגדיר את <var dir=\"ltr\">$wgTranslateTranslationServices</var> באופן תקין כדי שניתן יהיה להשתמש בתכונה זו.",
+ "apierror-translate-owntranslation": "לא ניתן לסקור את ההודעות של עצמך",
+ "apierror-translate-sandboxdisabled": "ארגז החול אינו בשימוש",
+ "apierror-translate-sandbox-invalidppassword": "ססמה בלתי־תקינה",
+ "apierror-translate-unknownmessage": "הודעה בלתי־ידועה",
+ "apiwarn-translate-alreadyreviewedbyyou": "כבר סומנה בתור הודעה הודעה שנסקרה על־ידיך",
+ "apiwarn-translate-language-disabled-source": "שפת המקור של הקבוצה הזו היא $1. נא לבחור שפה אחרת לתרגום."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/hi.json b/www/wiki/extensions/Translate/i18n/api/hi.json
index c225c45f..07c84af3 100644
--- a/www/wiki/extensions/Translate/i18n/api/hi.json
+++ b/www/wiki/extensions/Translate/i18n/api/hi.json
@@ -10,7 +10,15 @@
"apihelp-query+languagestats-param-language": "भाषा कोड",
"apihelp-query+messagecollection-param-group": "संदेश-समूह",
"apihelp-query+messagecollection-param-language": "भाषा कोड",
+ "apihelp-translatesandbox-param-do": "क्या करें",
"apihelp-translationreview-example-1": "अवलोकन अवतरण 1",
"apihelp-translationstash-param-subaction": "क्रिया",
- "apihelp-searchtranslations-description": "अनुवाद खोजें।"
+ "apihelp-ttmserver-param-sourcelanguage": "स्रोत पाठ का भाषा कोड",
+ "apihelp-ttmserver-param-targetlanguage": "सुझाव का भाषा कोड",
+ "apihelp-ttmserver-param-text": "जिसके लिए सुझाव ढूँढना है, वह पाठ",
+ "apihelp-searchtranslations-description": "अनुवाद खोजें।",
+ "apihelp-searchtranslations-param-limit": "परिणाम का आकार",
+ "apihelp-searchtranslations-example-1": "भाषा का अनुवाद दिखाएँ",
+ "apierror-translate-invalidupdate": "अमान्य अद्यतन",
+ "apierror-translate-unknownmessage": "अज्ञात संदेश"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/hr.json b/www/wiki/extensions/Translate/i18n/api/hr.json
new file mode 100644
index 00000000..5fad2ad4
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/hr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bugoslav"
+ ]
+ },
+ "apiwarn-translate-language-disabled-source": "Izvorni jezik ove grupe je $1. Molimo Vas, izaberite drugi jezik na koji želite prevoditi."
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/hu.json b/www/wiki/extensions/Translate/i18n/api/hu.json
index 0dc284ec..c8e3009f 100644
--- a/www/wiki/extensions/Translate/i18n/api/hu.json
+++ b/www/wiki/extensions/Translate/i18n/api/hu.json
@@ -5,6 +5,8 @@
]
},
"apihelp-aggregategroups-description": "Összesített üzenetcsoportok kezelése.\n\nHozzá tudsz adni és el tudsz távolítani összesített üzenetcsoportokat, és hozzájuk tudsz adni vagy el tudsz távolítani belőlük üzenetcsoportokat (egyszerre egyet).",
+ "apihelp-aggregategroups-summary": "Összesített üzenetcsoportok kezelése.",
+ "apihelp-aggregategroups-extended-description": "Összesített üzenetcsoportok hozzáadása és eltávolítása, illetve üzenetcsoportok hozzáadása egy összesített csoporthoz vagy eltávolítása onnan (egyszerre egy).",
"apihelp-aggregategroups-param-do": "Mit csináljon az összesített üzenetcsoporttal.",
"apihelp-aggregategroups-param-aggregategroup": "Összesített üzenetcsoport azonosítója.",
"apihelp-aggregategroups-param-group": "Üzenetcsoport azonosítója.",
@@ -14,10 +16,92 @@
"apihelp-groupreview-param-group": "Üzenetcsoport.",
"apihelp-groupreview-param-language": "Nyelvkód.",
"apihelp-groupreview-param-state": "A csoport új állapota.",
- "apihelp-groupreview-example-1": "„group-Example” német nyelven készként jelölése",
+ "apihelp-groupreview-example-1": "A „group-Example” csoport német fordításának állapota késznek jelölése",
+ "apihelp-query+languagestats-description": "Nyelvi statisztika lekérdezése.",
+ "apihelp-query+languagestats-summary": "Nyelvi statisztika lekérdezése.",
+ "apihelp-query+languagestats-param-timelimit": "Maximális idő, ami a hiányzó statisztikák kiszámításával tölthető. Ha nulla, csak a gyorsítótárazott eredményeket adja vissza az elejétől.",
"apihelp-query+languagestats-param-language": "Nyelvkód.",
+ "apihelp-query+languagestats-example-1": "A finn fordítások készültségi fokainak listája",
+ "apihelp-query+messagecollection-description": "MessageCollection lekérése a fordításokról.",
+ "apihelp-query+messagecollection-summary": "MessageCollection lekérése a fordításokról.",
"apihelp-query+messagecollection-param-group": "Üzenetcsoport.",
"apihelp-query+messagecollection-param-language": "Nyelvkód.",
"apihelp-query+messagecollection-param-limit": "Mennyi üzenetet mutasson (szűrés után).",
- "apihelp-query+messagecollection-example-1": "Támogatott nyelvek listája"
+ "apihelp-query+messagecollection-example-1": "Támogatott nyelvek listája",
+ "apihelp-query+messagegroups-summary": "Információk lekérése üzenetcsoportokról.",
+ "apihelp-query+messagegroups-extended-description": "A <var>uselang</var> paraméterrel befolyásolható a nyelvfüggő részek kimenete.",
+ "apihelp-query+messagegroups-param-depth": "A fa formátum használatakor a fa mélységének korlátozása ennyi szintre. A 0 jelenti csak a legfelső szint megjelenítését. A limit elérésekor a kimenet tartalmaz egy <code>groupcount</code> értéket, a közvetlen gyerekek számát.",
+ "apihelp-query+messagegroups-param-filter": "Csak a megadott azonosítójú üzenetek lekérése (a kis- és nagybetűk nem különbözőek, a * helyettesítő karakter).",
+ "apihelp-query+messagegroups-param-format": "A fa formátumban egyes üzenetcsoportok többször is szerepelhetnek a fában.",
+ "apihelp-query+messagegroups-param-iconsize": "A raszterizált ikon preferált mérete.",
+ "apihelp-query+messagegroups-param-root": "A fa formátum használatakor a legfelső szint helyett kezdés ettől az üzenetcsoporttól, aminek egy összesített csoportnak kell lennie. A lapos formátum használatakor csak az adott csoport visszaadása.",
+ "apihelp-query+messagegroups-example-1": "Üzenetcsoportok megjelenítése",
+ "apihelp-query+messagegroupstats-description": "Üzenetcsoport-statisztika lekérdezése.",
+ "apihelp-query+messagegroupstats-summary": "Üzenetcsoport-statisztika lekérdezése.",
+ "apihelp-query+messagegroupstats-param-timelimit": "Maximális idő, ami a hiányzó statisztikák kiszámításával tölthető. Ha nulla, csak a gyorsítótárazott eredményeket adja vissza az elejétől.",
+ "apihelp-query+messagegroupstats-param-group": "Üzenetcsoport azonosítója.",
+ "apihelp-query+messagetranslations-description": "Egy üzenet összes fordításának lekérdezése.",
+ "apihelp-query+messagetranslations-summary": "Egy üzenet összes fordításának lekérdezése.",
+ "apihelp-query+messagetranslations-param-title": "Egy ismert üzenet teljes címe.",
+ "apihelp-query+messagetranslations-example-1": "A „MediaWiki:January” fordításainak listázása a wikin.",
+ "apihelp-translatesandbox-param-do": "A végrehajtandó művelet.",
+ "apihelp-translatesandbox-param-userid": "A kezelendő felhasználók azonosítói, 0 a létrehozáshoz.",
+ "apihelp-translatesandbox-param-username": "Felhasználónév felhasználó létrehozásakor.",
+ "apihelp-translatesandbox-param-password": "Jelszó felhasználó létrehozásakor.",
+ "apihelp-translatesandbox-param-email": "E-mail-cím felhasználó létrehozásakor.",
+ "apihelp-translationaids-description": "Az összes fordítási segítség lekérdezése.",
+ "apihelp-translationaids-summary": "Az összes fordítási segítség lekérdezése.",
+ "apihelp-translationaids-param-title": "Egy ismert üzenet teljes címe.",
+ "apihelp-translationaids-param-group": "Üzenetcsoport, amihez az üzenet tartozik. Ha üres, az alapértelmezett üzenetcsoport lesz használva.",
+ "apihelp-translationaids-param-prop": "A befoglalandó fordítási segítségek.",
+ "apihelp-translationaids-example-1": "Segítségek megjelenítése a [[MediaWiki:January/fi]] üzenethez",
+ "apihelp-translationreview-description": "Fordítások átnézettnek jelölése.",
+ "apihelp-translationreview-summary": "Fordítások átnézettnek jelölése.",
+ "apihelp-translationreview-param-revision": "Az átnézettnek jelölendő változat azonosítója.",
+ "apihelp-translationreview-example-1": "Az 1. lapváltozat átnézettnek jelölése",
+ "apihelp-translationstash-param-subaction": "Művelet.",
+ "apihelp-translationstash-param-title": "A fordítási egység lapcíme.",
+ "apihelp-translationstash-param-translation": "A felhasználó fordítása.",
+ "apihelp-translationstash-param-metadata": "JSON-objektum.",
+ "apihelp-ttmserver-description": "Javaslatok lekérdezése a fordítási memóriából.",
+ "apihelp-ttmserver-summary": "Javaslatok lekérdezése a fordítási memóriából.",
+ "apihelp-ttmserver-param-sourcelanguage": "A forrásszöveg nyelvkódja.",
+ "apihelp-ttmserver-param-targetlanguage": "A javaslat nyelve.",
+ "apihelp-ttmserver-param-text": "A fordítandó szöveg.",
+ "apihelp-ttmserver-example-1": "Javaslatok lekérése a „Help” angolról finnre fordításához.",
+ "apihelp-searchtranslations-description": "Fordítások keresése.",
+ "apihelp-searchtranslations-summary": "Fordítások keresése.",
+ "apihelp-searchtranslations-param-query": "A keresendő szöveg.",
+ "apihelp-searchtranslations-param-sourcelanguage": "A forrásszöveg nyelvkódja.",
+ "apihelp-searchtranslations-param-language": "A keresendő nyelv kódja.",
+ "apihelp-searchtranslations-param-group": "Keresés ebben a csoportazonosítójú csoportban.",
+ "apihelp-searchtranslations-param-filter": "Az üzenet fordítási állapotának szűrése.",
+ "apihelp-searchtranslations-param-match": "Az összes/bármely szó keresése.",
+ "apihelp-searchtranslations-param-case": "Kis- és nagybetűk megkülönböztetése.",
+ "apihelp-searchtranslations-param-limit": "Az eredmény mérete.",
+ "apihelp-searchtranslations-example-1": "Fordítások megjelenítése a nyelvre.",
+ "apihelp-searchtranslations-example-2": "Lefordítatlan üzenetek megjelenítése, amik illeszkednek a lekérdezésre a forrásnyelven.",
+ "apihelp-translationcheck-description": "A megadott fordítás érvényesítése üzenet-ellenőrzőkkel.",
+ "apihelp-translationcheck-summary": "Fordítások ellenőrzése.",
+ "apihelp-translationcheck-param-title": "Lapcím névtérrel és nyelvkóddal.",
+ "apihelp-translationcheck-param-translation": "Az érvényesítendő fordítás.",
+ "apierror-translate-duplicateaggregategroup": "Az üzenetcsoport már létezik",
+ "apierror-translate-groupreviewdisabled": "Az üzenetcsoport-ellenőrzés nincs használatban.",
+ "apierror-translate-invalidaggregategroup": "Érvénytelen összesített üzenetcsoport",
+ "apierror-translate-invalidaggregategroupname": "Érvénytelen név összesített üzenetcsoportnak",
+ "apierror-translate-invalidgroup": "A csoport nem létezik vagy érvénytelen",
+ "apierror-translate-invalidstate": "A kért állapot érvénytelen.",
+ "apierror-translate-invalidlanguage": "A kért nyelv érvénytelen.",
+ "apierror-translate-invalidupdate": "Érvénytelen frissítés",
+ "apierror-translate-language-disabled": "$1 nyelvre a fordítás le van tiltva.",
+ "apierror-translate-language-disabled-reason": "$1 nyelvre a fordítás le van tiltva: $2",
+ "apierror-translate-nodynamicgroups": "A dinamikus üzenetcsoportok itt nem támogatottak",
+ "apierror-translate-nomessagefortitle": "A cím nem tartozik egy lefordítható üzenethez",
+ "apierror-translate-notranslationservices": "Nincs beállítva nyilvános fordítási szolgáltatás. A wiki rendszergazdájának be kell állítania megfelelően a <var>$wgTranslateTranslationServices</var> változót, mielőtt ez a funkció használható lenne.",
+ "apierror-translate-owntranslation": "Nem lehet ellenőrizni saját fordításokat",
+ "apierror-translate-sandboxdisabled": "A homokozófunkció nincs használatban",
+ "apierror-translate-sandbox-invalidppassword": "Érvénytelen jelszó",
+ "apierror-translate-unknownmessage": "Ismeretlen üzenet",
+ "apiwarn-translate-alreadyreviewedbyyou": "Már megjelölted átnézettként",
+ "apiwarn-translate-language-disabled-source": "Ennek az üzenetcsoportnak a forrásnyelve $1. Válassz egy másik nyelvet a fordításhoz."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/ia.json b/www/wiki/extensions/Translate/i18n/api/ia.json
index cf673db6..8b6cddbc 100644
--- a/www/wiki/extensions/Translate/i18n/api/ia.json
+++ b/www/wiki/extensions/Translate/i18n/api/ia.json
@@ -4,12 +4,32 @@
"McDutchie"
]
},
+ "apihelp-aggregategroups-description": "Gerer le gruppos de messages aggregate.\n\nTu pote adder e mover gruppos de messages aggregate e associar o dissociar gruppos de messages a illos (un al vice).",
+ "apihelp-aggregategroups-summary": "Gerer gruppos de messages aggregate.",
+ "apihelp-aggregategroups-extended-description": "Tu pote adder e remover gruppos de messages aggregate e associar o dissociar gruppos de messages a illos (un al vice).",
+ "apihelp-aggregategroups-param-do": "Que facer con le gruppo de messages aggregate.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID del gruppo de messages aggregate.",
+ "apihelp-aggregategroups-param-group": "ID del gruppo de messages.",
+ "apihelp-aggregategroups-param-groupname": "Nomine del gruppo de messages aggregate.",
+ "apihelp-aggregategroups-param-groupdescription": "Description del gruppo de messages aggregate.",
+ "apihelp-aggregategroups-example-1": "Associar un gruppo",
+ "apihelp-groupreview-description": "Definir le statos de fluxo de travalio del gruppos de messages.",
+ "apihelp-groupreview-summary": "Definir le statos de fluxo de travalio del gruppos de messages.",
+ "apihelp-groupreview-param-group": "Gruppo de messages.",
+ "apihelp-groupreview-param-language": "Codice de lingua.",
+ "apihelp-groupreview-param-state": "Le nove stato pro le gruppo.",
+ "apihelp-groupreview-example-1": "Marcar le stato del traduction in germano pro le gruppo de messages \"group-Example\" como preste",
+ "apihelp-query+languagestats-description": "Consultar statisticas de lingua.",
+ "apihelp-query+languagestats-summary": "Consultar statisticas de lingua.",
+ "apihelp-query+languagestats-param-timelimit": "Maximo de tempore a usar pro calcular statisticas mancante. Si zero, essera retornate solmente le resultatos immagazinate in cache ab initio.",
+ "apihelp-query+languagestats-param-language": "Codice de lingua.",
+ "apihelp-query+languagestats-example-1": "Lista de statisticas de completion de traduction pro finnese",
"apihelp-query+messagecollection-param-limit": "Numero de messages a monstrar (post filtration).",
- "apihelp-query+messagecollection-example-3": "Lista de messages optional in finnese con etiquettas pro le pagina del gruppo - Exemplo",
+ "apihelp-query+messagecollection-example-3": "Lista de messages optional in finnese con etiquettas pro le gruppo \"page-Example\"",
"apihelp-query+messagegroups-param-iconsize": "Dimension preferite del icone de gruppo rasterisate.",
"apihelp-translatesandbox-param-username": "Nomine de usator al momento de creation del usator.",
"apihelp-translationaids-description": "Consultar tote le adjutas de traduction.",
"apihelp-translationstash-param-metadata": "Objecto JSON.",
- "apihelp-ttmserver-param-targetlanguage": "Un codice de lingua del suggestion.",
+ "apihelp-ttmserver-param-targetlanguage": "Le codice de lingua del suggestion.",
"apihelp-ttmserver-param-text": "Le texto pro le qual cercar suggestiones."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/id.json b/www/wiki/extensions/Translate/i18n/api/id.json
new file mode 100644
index 00000000..a5188f30
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/id.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gombang"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "ID kelompok pesan.",
+ "apihelp-groupreview-param-group": "Kelompok pesan.",
+ "apihelp-groupreview-param-language": "Kode bahasa.",
+ "apihelp-query+languagestats-param-language": "Kode bahasa.",
+ "apihelp-query+messagecollection-param-group": "Kelompok pesan.",
+ "apihelp-query+messagecollection-param-language": "Kode bahasa."
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/is.json b/www/wiki/extensions/Translate/i18n/api/is.json
new file mode 100644
index 00000000..fde0955c
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/is.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sveinn í Felli",
+ "MyraMidnight"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Þýðingahópur.",
+ "apihelp-groupreview-param-language": "Tungumálakóði.",
+ "apihelp-query+languagestats-param-language": "Tungumálakóði.",
+ "apihelp-query+messagecollection-param-group": "Þýðingahópur.",
+ "apihelp-query+messagecollection-param-language": "Tungumálakóði.",
+ "apihelp-query+messagecollection-param-limit": "Hversu mörg skilaboð viltu sjá (eftir síun).",
+ "apihelp-query+messagecollection-example-1": "Listi yfir studd tungumál",
+ "apihelp-query+messagetranslations-param-title": "Heildartitill á þekktum skilaboðum.",
+ "apihelp-translatesandbox-param-do": "Hvað skal gera.",
+ "apihelp-translatesandbox-param-username": "Notendanafn við sköpun notanda.",
+ "apihelp-translatesandbox-param-password": "Lykilorð við sköpun notanda.",
+ "apihelp-translatesandbox-param-email": "Netfang við sköpun notanda.",
+ "apihelp-translationaids-param-title": "Heildartitill á þekktum skilaboðum.",
+ "apihelp-translationstash-param-subaction": "Aðgerð.",
+ "apihelp-searchtranslations-description": "Leita í þýðingum",
+ "apihelp-searchtranslations-summary": "Leita í þýðingum",
+ "apierror-translate-sandbox-invalidppassword": "Ógilt lykilorð",
+ "apierror-translate-unknownmessage": "Ókunn skilaboð"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/it.json b/www/wiki/extensions/Translate/i18n/api/it.json
index 86d061ab..23f08114 100644
--- a/www/wiki/extensions/Translate/i18n/api/it.json
+++ b/www/wiki/extensions/Translate/i18n/api/it.json
@@ -4,9 +4,11 @@
"Ricordisamoa",
"F. Cosoleto",
"Statix64",
- "Beta16"
+ "Beta16",
+ "Anto"
]
},
+ "apihelp-aggregategroups-description": "Gestisci gruppi di messaggi aggregati.\n\nPuoi aggiungere e rimuovere gruppi di messaggi aggregati e associare o dissociare i gruppi di messaggi l'uno dall'altro (uno alla volta).",
"apihelp-aggregategroups-param-do": "Cosa fare il gruppo messaggi aggregato.",
"apihelp-aggregategroups-param-aggregategroup": "ID gruppo messaggi aggregato.",
"apihelp-aggregategroups-param-group": "ID gruppo messaggi.",
@@ -23,8 +25,10 @@
"apihelp-query+messagecollection-param-language": "Codice lingua.",
"apihelp-query+messagecollection-param-limit": "Il numero di messaggi da visualizzare (dopo applicazione del filtro).",
"apihelp-query+messagecollection-example-1": "Elenco delle lingue supportate",
+ "apihelp-query+messagegroups-summary": "Restituisce informazioni sui gruppi di messaggi.",
"apihelp-query+messagegroups-example-1": "Mostra gruppi di messaggi",
"apihelp-query+messagegroupstats-param-group": "ID gruppo messaggi.",
+ "apihelp-query+messagetranslations-summary": "Interroga tutte le traduzioni per un singolo messaggio.",
"apihelp-query+messagetranslations-param-title": "Titolo completo di un messaggio conosciuto.",
"apihelp-translatesandbox-param-do": "Che cosa fare.",
"apihelp-translationaids-param-title": "Titolo completo di un messaggio conosciuto.",
@@ -36,6 +40,24 @@
"apihelp-ttmserver-param-text": "Testo per il quale trovare suggerimenti.",
"apihelp-ttmserver-example-1": "Ottieni suggerimenti per la traduzione di \"help\" dall'inglese al finlandese",
"apihelp-searchtranslations-description": "Cerca traduzioni.",
+ "apihelp-searchtranslations-summary": "Cerca traduzioni.",
"apihelp-searchtranslations-param-limit": "Dimensione del risultato.",
- "apihelp-searchtranslations-example-1": "Mostra le traduzioni per la lingua."
+ "apihelp-searchtranslations-example-1": "Mostra le traduzioni per la lingua.",
+ "apierror-translate-duplicateaggregategroup": "Il gruppo messaggi esiste già.",
+ "apierror-translate-fuzzymessage": "Non puoi revisionare traduzioni da aggiornare",
+ "apierror-translate-groupreviewdisabled": "Revisione gruppo messaggi non in uso.",
+ "apierror-translate-invalidaggregategroup": "Gruppo messaggi aggregati non valido",
+ "apierror-translate-invalidaggregategroupname": "Nome del gruppo messaggi aggregati non valido",
+ "apierror-translate-invalidgroup": "Gruppo non esistente o non valido",
+ "apierror-translate-invalidstate": "Lo stato richiesto non è valido.",
+ "apierror-translate-invalidlanguage": "La lingua richiesta non è valida.",
+ "apierror-translate-invalidupdate": "Aggiornamento non valido",
+ "apierror-translate-language-disabled": "Le traduzioni in $1 sono disabilitate.",
+ "apierror-translate-nodynamicgroups": "I gruppi messaggi dinamici non sono supportati qui",
+ "apierror-translate-nomessagefortitle": "Il titolo non corrisponde a un messaggio traducibile",
+ "apierror-translate-owntranslation": "Non puoi revisionare le tue traduzioni",
+ "apierror-translate-sandboxdisabled": "La funzione Sandbox non è in uso",
+ "apierror-translate-sandbox-invalidppassword": "Password non valida",
+ "apierror-translate-unknownmessage": "Messaggio sconosciuto",
+ "apiwarn-translate-alreadyreviewedbyyou": "Già contrassegnata come revisionata da te"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/ja.json b/www/wiki/extensions/Translate/i18n/api/ja.json
index ff4bc40c..ee3393f2 100644
--- a/www/wiki/extensions/Translate/i18n/api/ja.json
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/i18n/api/kab.json b/www/wiki/extensions/Translate/i18n/api/kab.json
new file mode 100644
index 00000000..9a0e09a4
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/kab.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Belkacem77"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Agraw n yiznan.",
+ "apihelp-groupreview-param-language": "Tangalt n tutlayt.",
+ "apihelp-query+languagestats-description": "Asuter n tidaddanin n tutlayt.",
+ "apihelp-query+languagestats-summary": "Asuter n tidaddanin n tutlayt.",
+ "apihelp-query+languagestats-param-language": "Tangalt n tutlayt.",
+ "apihelp-query+messagecollection-param-group": "Agraw n yiznan.",
+ "apihelp-query+messagecollection-param-language": "Tangalt n tutlayt.",
+ "apihelp-query+messagecollection-example-1": "Tabdart n tutlayin yettwasefraken",
+ "apihelp-query+messagegroups-example-1": "Sken igrawen n yiznan",
+ "apihelp-query+messagetranslations-param-title": "Azwel ummid n yizen yettwassnen.",
+ "apihelp-query+messagetranslations-example-1": "Abdart n tsuqilin deg uwiki i \"MediaWiki:Yennayer\"",
+ "apihelp-translatesandbox-param-do": "Acu ara txedmeḍ.",
+ "apihelp-translatesandbox-param-userid": "Isulay n iseqdacen yettwasefraken. Seqdec 0 i tmerna.",
+ "apihelp-translatesandbox-param-username": "Ismawen n iseqdacen di tmerna n useqdac.",
+ "apihelp-translatesandbox-param-password": "Awal uffir di tmerna n useqdac.",
+ "apihelp-translatesandbox-param-email": "Imayl di tmerna n useqdac.",
+ "apihelp-translationaids-description": "Anadai n tallelt n tsuqilt",
+ "apihelp-translationaids-summary": "Anadi n tallelt n tsuqilt.",
+ "apihelp-translationaids-param-title": "Azwel ummid n yizen yettwassnen.",
+ "apihelp-translationaids-param-group": "Agraw n yiznan aniɣer ittekka yizen. Ma d ilem, ihi agraw agejdan yettwaseqdec.",
+ "apihelp-translationaids-param-prop": "Anta tallelt n tsuqilt ara yeddun.",
+ "apihelp-ttmserver-param-sourcelanguage": "Tangalt n tutlayt n uḍris n uɣbalu.",
+ "apihelp-searchtranslations-description": "Nadi tisuqilin.",
+ "apihelp-searchtranslations-param-service": "Anwa imeẓla n tsuqilt yellan ara tesqedceḍ.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Tangalt n tutlayt n uḍris n uɣbalu.",
+ "apihelp-searchtranslations-param-filter": "Imzizdeg n waddad n tsuqilt n yizen.",
+ "apihelp-searchtranslations-example-1": "Sken tisuqilin i tutlayt.",
+ "apierror-translate-fuzzymessage": "Ur tezmireḍ ara ad alseḍ taɣuri n tsuqilt ur yemmiden ara",
+ "apierror-translate-language-disabled": "Tasuqilt ar tutlayt-agi tensa",
+ "apierror-translate-owntranslation": "Ur tezmireḍ ara ad alseḍ taɣuri n tsuqilt i teggid"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/kjp.json b/www/wiki/extensions/Translate/i18n/api/kjp.json
new file mode 100644
index 00000000..c35733e8
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/kjp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "apihelp-query+messagecollection-param-group": "ပ်ုယုံ့ဆ်ုပြိုင့်ကုံလွာဲ"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/ko.json b/www/wiki/extensions/Translate/i18n/api/ko.json
index 6b61ce58..b7bf93fe 100644
--- a/www/wiki/extensions/Translate/i18n/api/ko.json
+++ b/www/wiki/extensions/Translate/i18n/api/ko.json
@@ -2,14 +2,36 @@
"@metadata": {
"authors": [
"LiteHell",
- "아라"
+ "아라",
+ "Ykhwong"
]
},
"apihelp-aggregategroups-param-group": "메시지 그룹 ID.",
"apihelp-groupreview-param-group": "메시지 그룹.",
"apihelp-groupreview-param-language": "언어 코드.",
+ "apihelp-query+languagestats-param-language": "언어 코드입니다.",
"apihelp-query+messagecollection-param-group": "메시지 그룹.",
"apihelp-query+messagecollection-param-language": "언어 코드.",
"apihelp-query+messagecollection-example-1": "지원하는 언어 목록",
- "apihelp-ttmserver-param-targetlanguage": "제안의 언어 코드입니다."
+ "apihelp-query+messagegroups-summary": "메시지 그룹에 관한 정보를 반환합니다.",
+ "apihelp-query+messagegroupstats-param-group": "메시지 그룹 ID입니다.",
+ "apihelp-translationreview-summary": "번역을 검토한 것으로 표시합니다.",
+ "apihelp-ttmserver-param-targetlanguage": "제안의 언어 코드입니다.",
+ "apihelp-searchtranslations-param-query": "검색할 문자열입니다.",
+ "apihelp-searchtranslations-param-limit": "결과의 크기입니다.",
+ "apihelp-translationcheck-summary": "번역을 확인합니다.",
+ "apihelp-translationcheck-param-title": "이름공간과 언어 코드가 있는 문서 제목입니다.",
+ "apihelp-translationcheck-param-translation": "확인할 번역입니다.",
+ "apierror-translate-duplicateaggregategroup": "메시지 그룹이 이미 존재합니다",
+ "apierror-translate-invalidgroup": "그룹이 존재하지 않거나 잘못되었습니다",
+ "apierror-translate-invalidlanguage": "요청한 언어는 유효하지 않습니다.",
+ "apierror-translate-invalidupdate": "유효하지 않은 업데이트",
+ "apierror-translate-language-disabled": "$1로의 번역이 비활성화되어 있습니다.",
+ "apierror-translate-language-disabled-reason": "$1로의 번역이 비활성화되어 있습니다: $2",
+ "apierror-translate-nomessagefortitle": "제목이 번역 가능한 메시지와 일치하지 않습니다",
+ "apierror-translate-notranslationservices": "공용 번역 서비스가 구성되지 않았습니다. 위키 관리자는 <var>$wgTranslateTranslationServices</var>를 적절하게 설정해야 이 기능을 사용할 수 있습니다.",
+ "apierror-translate-sandboxdisabled": "연습장 기능을 사용하고 있지 않습니다",
+ "apierror-translate-sandbox-invalidppassword": "유효하지 않은 비밀번호",
+ "apierror-translate-unknownmessage": "알 수 없는 메시지",
+ "apiwarn-translate-language-disabled-source": "이 그룹의 원본 언어는 $1입니다. 번역 결과물에 쓰일 다른 언어를 선택해 주십시오."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/ksh.json b/www/wiki/extensions/Translate/i18n/api/ksh.json
index d21cc83e..2ecca084 100644
--- a/www/wiki/extensions/Translate/i18n/api/ksh.json
+++ b/www/wiki/extensions/Translate/i18n/api/ksh.json
@@ -51,8 +51,6 @@
"apihelp-translatesandbox-param-username": "Der Nahme, wann ene Metmaacher neu aanjelaht weed.",
"apihelp-translatesandbox-param-password": "Et Paßwoot, wann ene Metmaacher neu aanjelaht weed.",
"apihelp-translatesandbox-param-email": "De Adräß för de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">e-mail</i> wann ene Metmaacher aanjelaht weed.",
- "apihelp-translateuser-description": "Aanjahbe övve dä Metmaacher em Zersammehang mem Övversäze.",
- "apihelp-translateuser-example-1": "Aanjahbe övver dä Metmaacher aanzeije",
"apihelp-translationaids-description": "Frohch alle Zoote Hölper vum Övversäze.",
"apihelp-translationaids-param-title": "De kumplätte Övverschreff vun ene bikannte Nohreesch udder enem bikanne Täx.",
"apihelp-translationaids-param-group": "Di Jropp, woh dä Täx udder de Nohreesch dren es.\nDe primary group <!--\nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-translationaids-param-group/ksh\n--> weed jenumme, wann se läddesch es.",
diff --git a/www/wiki/extensions/Translate/i18n/api/ku-latn.json b/www/wiki/extensions/Translate/i18n/api/ku-latn.json
index c0cb0e08..5be63017 100644
--- a/www/wiki/extensions/Translate/i18n/api/ku-latn.json
+++ b/www/wiki/extensions/Translate/i18n/api/ku-latn.json
@@ -6,6 +6,9 @@
]
},
"apihelp-groupreview-param-language": "Koda ziman.",
+ "apihelp-query+languagestats-param-language": "Koda ziman.",
"apihelp-query+messagecollection-param-group": "Koma peyamê.",
- "apihelp-query+messagecollection-param-language": "Koda zimanê."
+ "apihelp-query+messagecollection-param-language": "Koda zimanê.",
+ "apihelp-query+messagegroups-example-1": "Komên peyaman nîşan bide",
+ "apihelp-searchtranslations-description": "Li wergeran bigere."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/lb.json b/www/wiki/extensions/Translate/i18n/api/lb.json
index 060da1b1..1e6b6f1a 100644
--- a/www/wiki/extensions/Translate/i18n/api/lb.json
+++ b/www/wiki/extensions/Translate/i18n/api/lb.json
@@ -13,15 +13,34 @@
"apihelp-query+messagetranslations-param-title": "Kompletten Titel vun engem bekannte Message.",
"apihelp-query+messagetranslations-example-1": "Lëscht vun Iwwersetzungen an der Wiki fir \"MediaWiki:January\"",
"apihelp-translatesandbox-param-do": "Wat maachen.",
- "apihelp-translateuser-example-1": "Informatioun iwwer de Benotzer weisen",
+ "apihelp-translationaids-description": "All Iwwersetzungshëllefen ofruffen.",
"apihelp-translationaids-param-title": "Kompletten Titel vun engem bekannte Message.",
+ "apihelp-translationreview-description": "Iwwersetzungen als nogekuckt markéieren.",
+ "apihelp-translationreview-summary": "Nogekuckt Iwwersetzunge markéieren.",
"apihelp-translationreview-param-revision": "D'Nummer vun der Versioun fir nozekucken.",
"apihelp-translationreview-example-1": "Versioun 1 nokucken",
"apihelp-translationstash-param-subaction": "Aktioun.",
+ "apihelp-translationstash-param-translation": "Iwwersetzung vum Benotzer.",
"apihelp-translationstash-param-metadata": "JSON-Objet.",
+ "apihelp-ttmserver-param-sourcelanguage": "De Sproochcode vum Quelltext.",
+ "apihelp-ttmserver-param-targetlanguage": "De Sproochcode vum Virschlag.",
"apihelp-searchtranslations-description": "Iwwersetzunge sichen.",
+ "apihelp-searchtranslations-summary": "Iwwersetzunge sichen.",
"apihelp-searchtranslations-param-service": "Wat fir ee vun den disponibelen Iwwersetzungsservicer benotzt gi soll.",
"apihelp-searchtranslations-param-query": "D'Zeechen no deene gesicht gi soll.",
"apihelp-searchtranslations-param-limit": "Gréisst vum Resultat",
- "apihelp-searchtranslations-example-1": "Iwwersetzunge fir d'Sprooch weisen."
+ "apihelp-searchtranslations-example-1": "Iwwersetzunge fir d'Sprooch weisen.",
+ "apihelp-translationcheck-summary": "Iwwersetzunge validéieren.",
+ "apihelp-translationcheck-param-translation": "D'Iwweersetzung fir ze validéieren.",
+ "apierror-translate-duplicateaggregategroup": "De Grupp vu Message gëtt et schonn",
+ "apierror-translate-fuzzymessage": "Fuzzy Iwwersetzunge kënnen net nogekuckt ginn",
+ "apierror-translate-invalidlanguage": "Déi gefrot Sprooch ass net valabel.",
+ "apierror-translate-invalidupdate": "Net valabel Datum",
+ "apierror-translate-language-disabled": "Iwwersetzung op $1 ass ausgeschalt.",
+ "apierror-translate-language-disabled-reason": "Iwwersetzung op $1 ass desaktivéiert: $2",
+ "apierror-translate-owntranslation": "Eegen Iwwersetzunge kënnen net nogekuckt ginn",
+ "apierror-translate-sandboxdisabled": "Sandkëscht-Funktioun gëtt net benotzt",
+ "apierror-translate-sandbox-invalidppassword": "Net valabelt Passwuert",
+ "apierror-translate-unknownmessage": "Onbekannte Message",
+ "apiwarn-translate-alreadyreviewedbyyou": "Scho markéiert wéi wann et vun Iech nogekuckt ass"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/li.json b/www/wiki/extensions/Translate/i18n/api/li.json
new file mode 100644
index 00000000..cdfe5e16
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/li.json
@@ -0,0 +1,61 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ooswesthoesbes"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "Berichgroep-id.",
+ "apihelp-groupreview-param-group": "Berichgroep.",
+ "apihelp-groupreview-param-language": "Spraokcode.",
+ "apihelp-query+languagestats-description": "Queryspraokstattestieke.",
+ "apihelp-query+languagestats-summary": "Queryspraokstattestieke.",
+ "apihelp-query+languagestats-param-language": "Spraokcode.",
+ "apihelp-query+messagecollection-param-group": "Berichgroep.",
+ "apihelp-query+messagecollection-param-language": "Spraokcode.",
+ "apihelp-query+messagecollection-param-limit": "Wieväöl te tuine berichte (nao filter).",
+ "apihelp-query+messagecollection-example-1": "Lies van óngerstäönde spraoke",
+ "apihelp-query+messagegroups-example-1": "Tuin berichtegruup",
+ "apihelp-query+messagegroupstats-param-group": "Berichgroep-id.",
+ "apihelp-query+messagegroupstats-example-1": "Liest mit euverzèttingsstattestieke veur de groep \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Vraog alle euverzèttinge veur ei berich op.",
+ "apihelp-query+messagetranslations-summary": "Vraog alle euverzèttinge veur ei berich op.",
+ "apihelp-query+messagetranslations-param-title": "Gansen titel van e bekand berich.",
+ "apihelp-query+messagetranslations-example-1": "Lies mit euverzèttinge in de wiki veur \"MediaWiki:January\"",
+ "apihelp-translatesandbox-description": "Sjrief dich in en behieër zandjbakgebroekers.",
+ "apihelp-translatesandbox-summary": "Sjrief dich in en behieër zandjbakgebroekers.",
+ "apihelp-translatesandbox-param-do": "Waat te doon.",
+ "apihelp-translatesandbox-param-userid": "Gebroeker-id's van gebroekers die waere behieërd. Gebroek 0 veur aanmake.",
+ "apihelp-translatesandbox-param-username": "Gebroekersnaam bie 't aanmake.",
+ "apihelp-translatesandbox-param-password": "Wachwaord bie 't aanmake van de gebroeker.",
+ "apihelp-translatesandbox-param-email": "E-mailadres bie 't aanmake van de gebroeker.",
+ "apihelp-translationaids-description": "Vraog alle euverzèttingshölpmiddele op.",
+ "apihelp-translationaids-summary": "Vraog alle euverzèttingshölpmiddele op.",
+ "apihelp-translationaids-param-title": "Gansen titel van e bekand berich.",
+ "apihelp-translationaids-example-1": "Tuin hölpmiddele veur [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Markeer euverzèttinge es proofgelaeze.",
+ "apihelp-translationreview-summary": "Markeer euverzèttinge es proofgelaeze.",
+ "apihelp-translationreview-param-revision": "Proof te laeze bewirkingsnómmer.",
+ "apihelp-translationreview-example-1": "Laes bewirking 1 proof",
+ "apihelp-translationstash-description": "Veug euverzètte tou aan stash.",
+ "apihelp-translationstash-summary": "Veug euverzètte tou aan stash.",
+ "apihelp-translationstash-param-subaction": "Hanjeling.",
+ "apihelp-translationstash-param-title": "Naam van de euverzèttingseinheidspagina.",
+ "apihelp-translationstash-param-translation": "Euverzètting gemaak door de gebroeker.",
+ "apihelp-translationstash-param-metadata": "JSON-veurwerp.",
+ "apihelp-searchtranslations-description": "Doorzeuk euverzèttinge.",
+ "apihelp-searchtranslations-summary": "Doorzeuk euverzèttinge.",
+ "apihelp-searchtranslations-param-query": "De te zeuke string.",
+ "apihelp-searchtranslations-param-sourcelanguage": "De spraokcode veur de brónteks.",
+ "apihelp-searchtranslations-param-language": "De spraokcode veur de string van te zeuke.",
+ "apihelp-searchtranslations-param-group": "De groep-id veur de string van te zeuke.",
+ "apihelp-searchtranslations-param-limit": "Gruuedje van 't rizzeltaot.",
+ "apihelp-searchtranslations-example-1": "Tuin euverzèttinge veur de spraok.",
+ "apihelp-searchtranslations-example-2": "Tuin óneuvergezatje berichte die euvereinkómme mit de query in de brónspraok.",
+ "apierror-translate-invalidupdate": "Óngeljigen update",
+ "apierror-translate-language-disabled": "Euverzètte nao dees spraok is oetgezatj",
+ "apierror-translate-owntranslation": "Kan gein eige euverzèttinge prooflaeze",
+ "apierror-translate-sandboxdisabled": "Zandjbak-óngerdeil weurt neet gebroek",
+ "apierror-translate-sandbox-invalidppassword": "Óngeljig wachwaord",
+ "apierror-translate-unknownmessage": "Ónbekand berich",
+ "apiwarn-translate-alreadyreviewedbyyou": "Al gemarkeerd es proofgelaeze door dich"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/lt.json b/www/wiki/extensions/Translate/i18n/api/lt.json
new file mode 100644
index 00000000..2debe428
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/lt.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200"
+ ]
+ },
+ "apihelp-translatesandbox-param-do": "Ką daryti.",
+ "apihelp-translatesandbox-param-username": "Vartotojo vardas, kai kuriamas vartotojas.",
+ "apihelp-translatesandbox-param-password": "Slaptažodis, kai kuriamas vartotojas.",
+ "apihelp-translatesandbox-param-email": "El. paštas, kai kuriamas vartotojas.",
+ "apihelp-translationaids-param-title": "Pilnas žinomos žinutės pavadinimas.",
+ "apihelp-translationaids-param-prop": "Kuriuos vertimo pagalbininkus įtraukti.",
+ "apihelp-translationreview-description": "Pažymėti vertimus peržiūrėtais.",
+ "apihelp-translationstash-param-subaction": "Veiksmas.",
+ "apihelp-translationstash-param-translation": "Vertimas atliktas vartotojo.",
+ "apihelp-translationstash-param-metadata": "JSON objektas.",
+ "apihelp-ttmserver-param-service": "Kurią iš galimų vertimų paslaugų naudoti.",
+ "apihelp-ttmserver-param-sourcelanguage": "Šaltinio teksto kalbos kodas.",
+ "apihelp-ttmserver-param-targetlanguage": "Siūlymo kalbos kodas.",
+ "apihelp-ttmserver-param-text": "Tekstas, kuriam rasti pasiūlymus.",
+ "apihelp-ttmserver-example-1": "Gauti pasiūlymus verčiant „Help“ iš anglų k. į suomių k.",
+ "apihelp-searchtranslations-description": "Ieškoti vertimų.",
+ "apihelp-searchtranslations-param-service": "Kurią iš galimų vertimų paslaugų naudoti.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Šaltinio teksto kalbos kodas.",
+ "apihelp-searchtranslations-param-filter": "Pranešimo vertimo būsenos filtras.",
+ "apihelp-searchtranslations-param-limit": "Rezultato dydis.",
+ "apihelp-searchtranslations-example-1": "Rodyti kalbos vertimus.",
+ "apierror-translate-duplicateaggregategroup": "Pranešimo grupė jau egzistuoja",
+ "apierror-translate-invalidlanguage": "Prašoma kalba negalima.",
+ "apierror-translate-invalidupdate": "Negalimas atnaujinimas",
+ "apierror-translate-language-disabled": "Vertimai į šią kalbą yra išjungtas",
+ "apierror-translate-owntranslation": "Negalima peržiūrėti savo paties vertimų",
+ "apierror-translate-sandboxdisabled": "Smėlio dėžės funkcija nenaudojama",
+ "apierror-translate-unknownmessage": "Nežinomas pranešimas",
+ "apiwarn-translate-alreadyreviewedbyyou": "Jau pažymėtas kaip peržiūrėtas jūsų"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/lv.json b/www/wiki/extensions/Translate/i18n/api/lv.json
index 966ec69a..581c4cbf 100644
--- a/www/wiki/extensions/Translate/i18n/api/lv.json
+++ b/www/wiki/extensions/Translate/i18n/api/lv.json
@@ -8,5 +8,19 @@
"apihelp-groupreview-param-group": "Ziņojumu grupa.",
"apihelp-groupreview-param-language": "Valodas kods.",
"apihelp-query+languagestats-param-language": "Valodas kods.",
- "apihelp-query+messagecollection-param-language": "Valodas kods."
+ "apihelp-query+messagecollection-param-group": "Ziņojumu grupa.",
+ "apihelp-query+messagecollection-param-language": "Valodas kods.",
+ "apihelp-query+messagecollection-example-1": "Atbalstīto valodu saraksts",
+ "apihelp-query+messagegroups-example-1": "Rādīt ziņojumu grupas",
+ "apihelp-query+messagegroupstats-param-group": "Ziņojumu grupas ID.",
+ "apihelp-translatesandbox-param-do": "Ko darīt.",
+ "apihelp-translationstash-param-subaction": "Darbība.",
+ "apihelp-translationstash-param-metadata": "JSON objekts.",
+ "apihelp-searchtranslations-description": "Meklēt tulkojumus.",
+ "apihelp-searchtranslations-summary": "Meklēt tulkojumus.",
+ "apihelp-searchtranslations-param-limit": "Rezultāta izmērs.",
+ "apihelp-searchtranslations-example-1": "Rādīt tulkojumus valodai.",
+ "apihelp-translationcheck-summary": "Validēt tulkojumus.",
+ "apierror-translate-owntranslation": "Savus tulkojumus nevar pārlasīt",
+ "apierror-translate-sandbox-invalidppassword": "Nederīga parole"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/mk.json b/www/wiki/extensions/Translate/i18n/api/mk.json
index 202332ce..cba4c664 100644
--- a/www/wiki/extensions/Translate/i18n/api/mk.json
+++ b/www/wiki/extensions/Translate/i18n/api/mk.json
@@ -1,10 +1,13 @@
{
"@metadata": {
"authors": [
- "Bjankuloski06"
+ "Bjankuloski06",
+ "Vlad5250"
]
},
- "apihelp-aggregategroups-description": "Раководење со насобрани групи пораки.\n\nМожете да додавате или отстранувате насобрани групи пораки и да ги придружување во или отстранувате од збировите (една по една).",
+ "apihelp-aggregategroups-description": "Раководење со насобрани групи пораки.\n\nМожете да додавате или отстранувате насобрани групи пораки и да ги придружувате во или отстранувате од збировите (една по една).",
+ "apihelp-aggregategroups-summary": "Управување со насобрани групи пораки.",
+ "apihelp-aggregategroups-extended-description": "Можете да додавате или отстранувате насобрани групи пораки и да ги придружувате во или отстранувате од збировите (една по една).",
"apihelp-aggregategroups-param-do": "Што да се прави во насобрана група пораки.",
"apihelp-aggregategroups-param-aggregategroup": "Назнака на насобраната група пораки.",
"apihelp-aggregategroups-param-group": "Назнака на групата пораки.",
@@ -12,15 +15,18 @@
"apihelp-aggregategroups-param-groupdescription": "Опис на насобраната група пораки.",
"apihelp-aggregategroups-example-1": "Придружи група.",
"apihelp-groupreview-description": "Задај состојби на разработеност на групата пораки.",
+ "apihelp-groupreview-summary": "Задај состојби на разработеност на групата пораки.",
"apihelp-groupreview-param-group": "Група пораки.",
"apihelp-groupreview-param-language": "Јазичен код.",
"apihelp-groupreview-param-state": "Новата состојба на групата.",
- "apihelp-groupreview-example-1": "Означи ја групата „група-Пример“ како готова за германски",
+ "apihelp-groupreview-example-1": "Означи ја состојбата на германскиот превод на групата пораки „група-Пример“ како готов",
"apihelp-query+languagestats-description": "Статистики за јазикот на барањето.",
- "apihelp-query+languagestats-param-timelimit": "Максимално време што треба да се потроши за пресметување на отустните статистики. Ако е нула, ќе се дадат само меѓускладираните резултати од почетокот.",
+ "apihelp-query+languagestats-summary": "Статистики за јазикот на барањето.",
+ "apihelp-query+languagestats-param-timelimit": "Највеќе време што може да се потроши за пресметување на отустните статистики. Ако е нула, ќе се даде само меѓускладираниот исход од почетокот.",
"apihelp-query+languagestats-param-language": "Јазичен код.",
"apihelp-query+languagestats-example-1": "Список на статистики за потполноста на преводите на фински",
"apihelp-query+messagecollection-description": "Побарај преводи од Збирка пораки",
+ "apihelp-query+messagecollection-summary": "Побарај преводи од Збирка пораки",
"apihelp-query+messagecollection-param-group": "Група пораки.",
"apihelp-query+messagecollection-param-language": "Јазичен код.",
"apihelp-query+messagecollection-param-limit": "Колку страници да се прикажат (по филтрирањето).",
@@ -32,6 +38,8 @@
"apihelp-query+messagecollection-example-3": "Список на незадолжителни пораки на фински со ознаки за групата „page-Example“",
"apihelp-query+messagecollection-example-4": "Повеќе информации за најновите преработки на преводот за групата „page-Example“",
"apihelp-query+messagegroups-description": "Дај информации за групите пораки.\n\nИмајте на ум дека параметарот „uselang“ влијае врз јазично-зависните делови.",
+ "apihelp-query+messagegroups-summary": "Дај информации за групи пораки.",
+ "apihelp-query+messagegroups-extended-description": "Имајте на ум дека параметарот „uselang“ го засега изводот на јазично зависните делови.",
"apihelp-query+messagegroups-param-depth": "Кога го користите форматот „дрво“, ограничете ја длабочината на олку нивоа. Вредноста 0 значи дека нема да се покажат подгрупи. Ако се достигне границата, во изводот ќе има и вредност „groupcount“, која ќе го наведе бројот на непосредни подгрупи.",
"apihelp-query+messagegroups-param-filter": "Давај само пораки со назнаки што одговараат на еден или повеќе зададени вносови (не разликува голема/мала буква, одделете со исправени црти, џокер *)",
"apihelp-query+messagegroups-param-format": "Во форматот „дрво“, групите пораки можат да постојат на повеќе места во дрвото.",
@@ -40,29 +48,33 @@
"apihelp-query+messagegroups-param-root": "Кога се користи форматот „дрво“, наместо да се започне од најгоното ниво, започни од дадената група пораки, која мора да биде насобрана. Кога се користи рамен формат, ќе се даде само укажаната група.",
"apihelp-query+messagegroups-example-1": "Прикажи групи пораки",
"apihelp-query+messagegroupstats-description": "Побарај статистики за група пораки.",
- "apihelp-query+messagegroupstats-param-timelimit": "Максимално време што треба да се потроши за пресметување на отустните статистики. Ако е нула, ќе се дадат само меѓускладираните резултати од почетокот.",
+ "apihelp-query+messagegroupstats-summary": "Побарај статистики за група пораки.",
+ "apihelp-query+messagegroupstats-param-timelimit": "Највеќе време што може да се потроши за пресметување на отсутните статистики. Ако е нула, ќе се дадае само меѓускладираните исход од почетокот.",
"apihelp-query+messagegroupstats-param-group": "Назнака на групата пораки.",
"apihelp-query+messagegroupstats-example-1": "Список на статистики за потполност на преводите за групата „page-Example“",
"apihelp-query+messagetranslations-description": "Побарај ги сите преводи на една порака.",
+ "apihelp-query+messagetranslations-summary": "Побарај ги сите преводи на една порака.",
"apihelp-query+messagetranslations-param-title": "Целосен наслов на позната порака.",
"apihelp-query+messagetranslations-example-1": "Список на преводи во викито за „MediaWiki:January“",
"apihelp-translatesandbox-description": "Регистрација и управување со корисници во песочникот.",
+ "apihelp-translatesandbox-summary": "Регистрација и управување со корисници во песочникот.",
"apihelp-translatesandbox-param-do": "Што да се прави.",
"apihelp-translatesandbox-param-userid": "Кориснички назнаки на корисниците што се раководени. Користете 0 за создавања.",
"apihelp-translatesandbox-param-username": "Корисничко име при создавање на корисникот.",
"apihelp-translatesandbox-param-password": "Лозинка при создавање на корисникот.",
"apihelp-translatesandbox-param-email": "Е-пошта при создавање на корисникот.",
- "apihelp-translateuser-description": "Преведувачки информации за корисникот.",
- "apihelp-translateuser-example-1": "Прикажи информации за корисникот",
"apihelp-translationaids-description": "Барај по сите преводни помагала.",
+ "apihelp-translationaids-summary": "Барај по сите преводни помагала.",
"apihelp-translationaids-param-title": "Целосен наслов на позната порака.",
- "apihelp-translationaids-param-group": "На која група припаѓа пораката. Ако е празно, тогаш се користи главнатагрупа.",
+ "apihelp-translationaids-param-group": "На која група припаѓа пораката. Ако е празно, тогаш се користи главната група.",
"apihelp-translationaids-param-prop": "Кои преводни помагала да се вклучат.",
"apihelp-translationaids-example-1": "Прикажи помагала за [[MediaWiki:January/fi]]",
"apihelp-translationreview-description": "Означи ги преводите како проверени.",
+ "apihelp-translationreview-summary": "Означи ги преводите како проверени.",
"apihelp-translationreview-param-revision": "Број на преработката за проверување.",
"apihelp-translationreview-example-1": "Оцени преработка 1",
"apihelp-translationstash-description": "Додај преводи во складот.",
+ "apihelp-translationstash-summary": "Додај преводи во складот.",
"apihelp-translationstash-param-subaction": "Дејство.",
"apihelp-translationstash-param-title": "Наслов на страницата на преводната единица.",
"apihelp-translationstash-param-translation": "Превод направен од корисникот.",
@@ -71,12 +83,14 @@
"apihelp-translationstash-example-1": "Додај превод во складот за [[MediaWiki:Jan/fi]]",
"apihelp-translationstash-example-2": "Побарај во складот",
"apihelp-ttmserver-description": "Побарај предлози од преводните помнила.",
+ "apihelp-ttmserver-summary": "Побарај предлози од преводните помнила.",
"apihelp-ttmserver-param-service": "Која од расположивите преводни служби да се користи.",
"apihelp-ttmserver-param-sourcelanguage": "Јазичниот код на изворниот текст.",
"apihelp-ttmserver-param-targetlanguage": "Јазичниот код на предлогот.",
"apihelp-ttmserver-param-text": "За кој текст да се најдат предлози.",
"apihelp-ttmserver-example-1": "Дај предлози за преведување на „Help“ од англиски на фински",
"apihelp-searchtranslations-description": "Пребарајте преводи.",
+ "apihelp-searchtranslations-summary": "Пребарајте преводи.",
"apihelp-searchtranslations-param-service": "Која од расположивите преводни служби да се користи.",
"apihelp-searchtranslations-param-query": "Низата што треба да се побара.",
"apihelp-searchtranslations-param-sourcelanguage": "Јазичниот код на изворниот текст.",
@@ -88,5 +102,29 @@
"apihelp-searchtranslations-param-offset": "Отстап за преводите.",
"apihelp-searchtranslations-param-limit": "Големина на исходот.",
"apihelp-searchtranslations-example-1": "Прикажи преводи на овој јазик.",
- "apihelp-searchtranslations-example-2": "Приказ на непреведени статии што одвораваат на бараното на изворниот јазик."
+ "apihelp-searchtranslations-example-2": "Приказ на непреведени статии што одвораваат на бараното на изворниот јазик.",
+ "apihelp-translationcheck-description": "Потврди даден преводен внос според проверувачите на пораки.",
+ "apihelp-translationcheck-summary": "Потврди преводи.",
+ "apihelp-translationcheck-param-title": "Наслов на страницата со именски простор и јазичен код.",
+ "apihelp-translationcheck-param-translation": "Превод за потврда.",
+ "apierror-translate-duplicateaggregategroup": "Групата пораки веќе постои",
+ "apierror-translate-fuzzymessage": "Не можете да проверувате застарени пораки",
+ "apierror-translate-groupreviewdisabled": "Проверката на групи пораки не е во употреба.",
+ "apierror-translate-invalidaggregategroup": "Неважечка група збирни пораки",
+ "apierror-translate-invalidaggregategroupname": "Неважечки назив за групата збирни пораки",
+ "apierror-translate-invalidgroup": "Групата не постои или е неважечка",
+ "apierror-translate-invalidstate": "Побараната состојба е неважечка.",
+ "apierror-translate-invalidlanguage": "Бараниот јазик е неважечки.",
+ "apierror-translate-invalidupdate": "Неважечка поднова",
+ "apierror-translate-language-disabled": "Преведувањето на $1 е оневозможено.",
+ "apierror-translate-language-disabled-reason": "Преведувањето на $1 е оневозможено: $2",
+ "apierror-translate-nodynamicgroups": "Динамичките групи пораки не се поддржани овде",
+ "apierror-translate-nomessagefortitle": "Насловот не соодветствува на преводлива порака",
+ "apierror-translate-notranslationservices": "Нема поставено јавни преводни служби. Администраторот на викито треба соодветно да го постави <var>$wgTranslateTranslationServices</var> пред да може да се користи оваа можност.",
+ "apierror-translate-owntranslation": "Не можете да проверувате свои преводи",
+ "apierror-translate-sandboxdisabled": "Песочничката функција не е во употреба",
+ "apierror-translate-sandbox-invalidppassword": "Неважечка лозинка",
+ "apierror-translate-unknownmessage": "Непозната порака",
+ "apiwarn-translate-alreadyreviewedbyyou": "Веќе ја имате означено како проверена",
+ "apiwarn-translate-language-disabled-source": "Изворниот јазик на оваа група е $1. Изберете на кој јазик сакате да преведувате."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/ms.json b/www/wiki/extensions/Translate/i18n/api/ms.json
index 93867560..038190df 100644
--- a/www/wiki/extensions/Translate/i18n/api/ms.json
+++ b/www/wiki/extensions/Translate/i18n/api/ms.json
@@ -4,6 +4,5 @@
"Anakmalaysia"
]
},
- "apihelp-query+languagestats-param-language": "Kod bahasa.",
- "apihelp-translateuser-example-1": "Paparkan maklumat mengenai pengguna ini"
+ "apihelp-query+languagestats-param-language": "Kod bahasa."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/my.json b/www/wiki/extensions/Translate/i18n/api/my.json
new file mode 100644
index 00000000..7315cca3
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/my.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dr Lotus Black"
+ ]
+ },
+ "apihelp-groupreview-param-group": "မက်ဆေ့အုပ်စု",
+ "apihelp-groupreview-param-language": "ဘာသာစကားကုဒ်",
+ "apihelp-query+languagestats-param-language": "ဘာသာစကားကုဒ်",
+ "apihelp-query+messagecollection-param-group": "မက်ဆေ့အုပ်စု",
+ "apihelp-query+messagecollection-param-language": "ဘာသာစကားကုဒ်",
+ "apihelp-query+messagecollection-example-1": "ထောက်ပံ့ထားသော ဘာသားစကားများ၏ စာရင်း",
+ "apihelp-query+messagegroups-example-1": "မက်ဆေ့အုပ်စုများကို ပြရန်",
+ "apihelp-query+messagegroupstats-param-group": "မက်ဆေ့အုပ်စု အိုင်ဒီ",
+ "apihelp-translationstash-param-translation": "အသုံးပြုသူ လုပ်ဆောင်သော ဘာသာပြန်ဆိုမှု။",
+ "apihelp-searchtranslations-description": "ဘာသာပြန်များ ရှာဖွေရန်။",
+ "apihelp-searchtranslations-summary": "ဘာသာပြန်များ ရှာဖွေရန်။",
+ "apihelp-searchtranslations-example-1": "ဘာသာစကားအတွက် ဘာသာပြန်များကို ပြရန်။",
+ "apierror-translate-duplicateaggregategroup": "မက်ဆေ့အုပ်စု ရှိနှင့်ပြီးဖြစ်သည်",
+ "apierror-translate-language-disabled": "$1 သို့ ဘာသာပြန်ခြင်းကို ပိတ်ထားသည်။",
+ "apierror-translate-language-disabled-reason": "$1 သို့ ဘာသာပြန်ခြင်းကို ပိတ်ထားသည်: $2",
+ "apierror-translate-owntranslation": "ကိုယ်ပိုင်ဘာသာပြန်များကို ပြန်လည်မဆန်းစစ်နိုင်ပါ",
+ "apierror-translate-sandbox-invalidppassword": "မဆီလျော်သော စကားဝှက်",
+ "apierror-translate-unknownmessage": "အမည်မသိ မက်ဆေ့",
+ "apiwarn-translate-alreadyreviewedbyyou": "သင်မှ ပြန်လည်ဆန်းစစ်ပြီးဖြစ်ကြောင်း လုပ်ဆောင်နှင့်ပြီးသားဖြစ်သည်",
+ "apiwarn-translate-language-disabled-source": "ဤအုပ်စု၏ ရင်းမြစ်ဘာသာစကားမှာ $1 ဖြစ်သည်။ ကျေးဇူးပြု၍ ဘာသာပြန်ရန် အခြားဘာသာစကားကို ရွေးချယ်ပါ။"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/nb.json b/www/wiki/extensions/Translate/i18n/api/nb.json
new file mode 100644
index 00000000..0e3fef32
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/nb.json
@@ -0,0 +1,106 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kingu",
+ "Jon Harald Søby"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Behandle aggregatmeldingsgrupper.\n\nDu kan legge til og fjerne aggregatmeldingsgrupper og assosiere eller disassosiere meldingsgrupper fra dem (én av gangen).",
+ "apihelp-aggregategroups-summary": "Behandle aggregatmeldingsgrupper.",
+ "apihelp-aggregategroups-extended-description": "Du kan legge til og fjerne aggregatmeldingsgrupper og assosiere eller disassosiere meldingsgrupeer fra dem (én av gangen).",
+ "apihelp-aggregategroups-param-do": "Hva som skal gjøres med aggregatmeldingsgruppa.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID for aggregatmeldingsgruppe.",
+ "apihelp-aggregategroups-param-group": "Meldingsgruppe-ID.",
+ "apihelp-aggregategroups-param-groupname": "Navn på aggregatmeldingsgruppe.",
+ "apihelp-aggregategroups-param-groupdescription": "Beskrivelse for aggregatmeldingsgruppe.",
+ "apihelp-aggregategroups-example-1": "Assosier ei gruppe",
+ "apihelp-groupreview-description": "Sett arbeidsflytstilstander for meldingsgruppe.",
+ "apihelp-groupreview-summary": "Sett arbeidsflytstilstander for meldingsgruppe.",
+ "apihelp-groupreview-param-group": "Beskjedgruppe.",
+ "apihelp-groupreview-param-language": "Språkkode.",
+ "apihelp-groupreview-param-state": "Gruppas nye tilstand.",
+ "apihelp-groupreview-example-1": "Merk tilstanden for den tyske oversettelsen av meldingsgruppa «group-Example» som klar",
+ "apihelp-query+languagestats-description": "Spør om språkstatistikk.",
+ "apihelp-query+languagestats-summary": "Spør om språkstatistikk.",
+ "apihelp-query+languagestats-param-timelimit": "Maksimal tid som skal brukes til å regne ut manglende statistikk. Om den er satt til null vil bare de mellomlagrede resultatene fra begynnelsen returneres.",
+ "apihelp-query+languagestats-param-language": "Språkkode.",
+ "apihelp-query+languagestats-example-1": "Liste over statistikk for fullførte oversettelser til finsk",
+ "apihelp-query+messagecollection-description": "Spør MessageCollection om oversettelser.",
+ "apihelp-query+messagecollection-summary": "Spør MessageCollection om oversettelser.",
+ "apihelp-query+messagecollection-param-group": "Beskjedgruppe.",
+ "apihelp-query+messagecollection-param-language": "Språkkode.",
+ "apihelp-query+messagecollection-param-limit": "Hvor mange beskjeder som skal vises (etter filtrering).",
+ "apihelp-query+messagecollection-param-offset": "Heltall eller nøkkeloffset til å begynne med.",
+ "apihelp-query+messagecollection-param-filter": "Filtre for beskjedsamlinger. Bruk <kbd>!</kbd> for å få motsatt av den gitte effekten. For eksempel vil betyr <kbd>!fuzzy</kbd> alle beskjeder som ikke er fuzzy. Filtre brukes i den ordren som blir gitt.\n;fuzzy:Beskjeder med fuzzy-tagg.\n;optional:Beskjeder som kun bør oversettes om det er nødvendig å endre dem.\n;ignored:Beskjeder som aldre oversettes.\n;hastranslation:Beskjeder som har en oversettelse uavhengig av om den er fuzzy eller ikke.\n;translated:Beskjeder som har en oversettelse som ikke er fuzzy.\n;changed:Beskjeder som har blitt oversatt eller endret siden forrige eksport.\n;reviewer&#58;N: Beskjeder der bruker nummer <kbd>N</kbd> er blant godkjennerne.\n;last-translator&#58;N:Beskjeder der bruker nummer <kbd>N</kbd> er siste oversetter.",
+ "apihelp-query+messagecollection-param-prop": "Hvilke egenskaper som skal hentes:\n;definition:Beskjeddefinisjonen.\n;translation:Den gjeldende oversettelsen (uten $1-streng om det er noen, bruk taggene for å sjekke utdaterte eller ugyldige oversettelser).\n;tags:Beskjedtagger, som optional, ignored og fuzzy.\n;properties:Beskjedegenskaper, som status, revision, last-translator. Kan variere mellom beskjeder.\n;revision:<span class=\"deprecated\">Foreldet!</span> Bruk $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Liste over støttede språk",
+ "apihelp-query+messagecollection-example-2": "Liste over ikke-valgfrie beskjeddefinisjoner for gruppa «page-Example»",
+ "apihelp-query+messagecollection-example-3": "Liste over valgfrie beskjeder på finsk med tagger for gruppa «page-Example»",
+ "apihelp-query+messagecollection-example-4": "Mer informasjon om de siste oversettelsesrevisjonene for gurppa «page-Example»",
+ "apihelp-query+messagegroups-description": "Returnerer informasjon om beskjedgrupper.\n\nMerk at parameteren uselang påvirker resultatet i språkavhengige deler.",
+ "apihelp-query+messagegroups-summary": "Returnerer informasjon om beskjedgrupper.",
+ "apihelp-query+messagegroups-extended-description": "Merk at parameteren uselang påvirker resultatet i språkavhengige deler.",
+ "apihelp-query+messagegroups-param-depth": "Når du bruker treformatet, begrens dybden til så mange nivåer. Verdien 0 betyr at ingen undergrupper vises. Hvis grensa nås vil resultatet inkludere en «groupcount»-verdi, som viser antall direkte barn.",
+ "apihelp-query+messagegroups-param-filter": "Bare returner beskjeder med ID-er som matcher én eller flere av de gitte innputtene (uavhengig av små og store bokstaver, atskilt med vertikalstreker, * som jokertegn).",
+ "apihelp-query+messagegroups-param-format": "I treformatet kan beskjedgrupper eksistere på flere steder i treet.",
+ "apihelp-query+messagegroups-param-iconsize": "Foretrukket størrelse for rasterisert gruppeikon.",
+ "apihelp-query+messagegroups-param-prop": "Hvilken oversettelsesrelatert informasjon som skal hentes:\n;id:Inkluder gruppas ID.\n;label:Inkluder gruppas etikett.\n;description:Inkluder gruppas beskrivelse.\n;class:Inkluder gruppas klasse.\n;namespace:Inkluder gruppas navnerom. Ikke alle grupper hører til ett enkelt navnerom.\n;exists:Inkluder selv-utregnet eksistensegenskap for gruppa.\n;icon:Inkluder URL-er til gruppas ikon.\n;priority:Inkluder prioritetsstatus, som f.eks. frarådet.\n;prioritylangs:Inkluder foretrukne språk. Om det ikke er satt returnerer denne false.\n;priorityforce:Inkluder prioritetsstatus – er innstillingen for prioriterte språk påtvunget?\n;workflowstates:Inkluder arbeidsflyttilstanden for beskjedgruppa.",
+ "apihelp-query+messagegroups-param-root": "Under bruk av treformatet: I stedet for å starte fra toppnivået, start fra den gitte meldingsgruppa, som må være en aggregatgruppe. Når du bruker flatt format vil bare den gitte gruppa returneres.",
+ "apihelp-query+messagegroups-example-1": "Vis beskjedgrupper",
+ "apihelp-query+messagegroupstats-description": "Kjør spørring på meldingsgruppestatistikk.",
+ "apihelp-query+messagegroupstats-summary": "Kjør spørring på meldingsgruppestatistikk.",
+ "apihelp-query+messagegroupstats-param-timelimit": "Maksimal tid som skal brukes på å regne ut manglende statistikk. Om denne er satt til null vil bare de mellomlagrede resultatene fra begynnelsen returneres.",
+ "apihelp-query+messagegroupstats-param-group": "Meldingsgruppe-ID.",
+ "apihelp-query+messagegroupstats-example-1": "List opp oversettelsesfullføringsstatistikk for gruppa «page-Example»",
+ "apihelp-query+messagetranslations-description": "Spør om alle oversettelser av en enkelt beskjed.",
+ "apihelp-query+messagetranslations-summary": "Spør om alle oversettelser av en enkelt beskjed.",
+ "apihelp-query+messagetranslations-param-title": "Den hele tittelen til en kjent beskjed.",
+ "apihelp-query+messagetranslations-example-1": "List opp oversettelser i wikien for «MediaWiki:January»",
+ "apihelp-translatesandbox-description": "Registrering og behandling av sandkassebrukere.",
+ "apihelp-translatesandbox-summary": "Registrering og behandling av sandkassebrukere.",
+ "apihelp-translatesandbox-param-do": "Hva som skal gjøres.",
+ "apihelp-translatesandbox-param-userid": "Bruker-ID-ene til brukerne som behandles. Bruk 0 for opprettelser.",
+ "apihelp-translatesandbox-param-username": "Brukernavn når ny bruker opprettes.",
+ "apihelp-translatesandbox-param-password": "Passord når ny bruker opprettes.",
+ "apihelp-translatesandbox-param-email": "Epost når ny bruker opprettes.",
+ "apihelp-translationaids-description": "Spør mot alle oversettelseshjelpemilder.",
+ "apihelp-translationaids-summary": "Spør mot alle oversettelseshjelpemidler.",
+ "apihelp-translationaids-param-title": "Den hele tittelen til en kjent beskjed.",
+ "apihelp-translationaids-param-group": "Meldingsgruppe meldingsgruppa hører til. Om den er tom vil primærgruppa brukes.",
+ "apihelp-translationaids-param-prop": "Hvilke oversettelseshjelpemidler som skal inkluderes.",
+ "apihelp-translationaids-example-1": "Vis hjelp for [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Mark oversettelser som godkjent.",
+ "apihelp-translationreview-summary": "Merk oversettelser som godkjent.",
+ "apihelp-translationreview-param-revision": "Revisjonsnummeret som skal godkjennes.",
+ "apihelp-translationreview-example-1": "Godkjenn revisjon 1",
+ "apihelp-translationstash-description": "Legg til oversettelser til stashen.",
+ "apihelp-translationstash-summary": "Legg til oversettelser til stashen.",
+ "apihelp-translationstash-param-subaction": "Handling.",
+ "apihelp-translationstash-param-title": "Tittelen på sida med oversettelsesenheter.",
+ "apihelp-translationstash-param-translation": "Oversettelse gjort av brukeren.",
+ "apihelp-translationstash-param-metadata": "JSON-objekt.",
+ "apihelp-translationstash-example-1": "Legg til en oversettelse for stashen for [[MediaWiki:Jan/fi]]",
+ "apihelp-searchtranslations-description": "Søk i oversettelser.",
+ "apihelp-searchtranslations-summary": "Søk i oversettelser.",
+ "apihelp-searchtranslations-param-service": "Hvilken av de tilgjengelige oversettelsestjenestene som skal brukes.",
+ "apihelp-searchtranslations-param-query": "Strengen det skal søkes etter.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Språkkoden til kildeteksten.",
+ "apihelp-searchtranslations-param-language": "Språkkoden strengen skal søkes etter i.",
+ "apihelp-searchtranslations-param-group": "Gruppe-ID-en strengen skal søkes etter i.",
+ "apihelp-searchtranslations-param-filter": "Filter for meldingsoversettelsesstatus.",
+ "apihelp-searchtranslations-param-limit": "Resultatets størrelse.",
+ "apihelp-searchtranslations-example-1": "Vis oversettelser for språket.",
+ "apihelp-searchtranslations-example-2": "Vis uoversatte beskjeder som matcher spørringen på målspråket.",
+ "apierror-translate-duplicateaggregategroup": "Meldingsgruppa finnes allerede",
+ "apierror-translate-invalidaggregategroup": "Ugyldig aggregatmeldingsgruppe",
+ "apierror-translate-invalidaggregategroupname": "Ugyldig navn på aggregatmeldingsgruppe",
+ "apierror-translate-invalidgroup": "Gruppa finnes ikke eller er ugyldig",
+ "apierror-translate-invalidstate": "Den forespurte tilstanden er ugyldig.",
+ "apierror-translate-invalidupdate": "Ugyldig oppdatering",
+ "apierror-translate-language-disabled": "Oversettelse til dette språket er slått av",
+ "apierror-translate-nodynamicgroups": "Dynamiske beskjedgrupper støttes ikke her",
+ "apierror-translate-nomessagefortitle": "Tittelen samsvarer ikke med en oversettbar melding",
+ "apierror-translate-sandboxdisabled": "Sandkassefunksjonen er ikke i bruk",
+ "apierror-translate-sandbox-invalidppassword": "Ugyldig passord",
+ "apierror-translate-unknownmessage": "Ukjent melding"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/nl.json b/www/wiki/extensions/Translate/i18n/api/nl.json
index 03a70e4a..9b67cc30 100644
--- a/www/wiki/extensions/Translate/i18n/api/nl.json
+++ b/www/wiki/extensions/Translate/i18n/api/nl.json
@@ -3,19 +3,39 @@
"authors": [
"Sjoerddebruin",
"Siebrand",
- "Robin0van0der0vliet"
+ "Robin0van0der0vliet",
+ "Mainframe98",
+ "Robin van der Vliet",
+ "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.",
"apihelp-query+messagecollection-param-group": "Berichtgroep.",
"apihelp-query+messagecollection-param-language": "Taalcode.",
+ "apihelp-query+messagecollection-example-1": "Lijst van ondersteunde talen",
"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-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/www/wiki/extensions/Translate/i18n/api/nn.json b/www/wiki/extensions/Translate/i18n/api/nn.json
new file mode 100644
index 00000000..18bfd44f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/nn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Njardarlogar"
+ ]
+ },
+ "apiwarn-translate-language-disabled-source": "Kjeldespråket til denne gruppa er $1. Vel eit anna språk å setja om til."
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/oc.json b/www/wiki/extensions/Translate/i18n/api/oc.json
new file mode 100644
index 00000000..b31bee23
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/oc.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "apihelp-groupreview-param-language": "Còdi de lenga.",
+ "apihelp-query+languagestats-param-language": "Còdi de lenga.",
+ "apihelp-query+messagecollection-description": "Requèsta MessageCollection sus las traduccions.",
+ "apihelp-query+messagecollection-param-language": "Còdi de lenga.",
+ "apihelp-query+messagetranslations-description": "Demanda l'ensemble de las traduccions per un sol messatge.",
+ "apihelp-query+messagetranslations-example-1": "Lista de las traduccions del wiki per «MediaWiki:genièr»",
+ "apihelp-translationaids-description": "Recèrca totas las ajudas a la traduccion.",
+ "apihelp-translationreview-description": "Marcar las traduccions coma repassadas.",
+ "apihelp-translationstash-description": "Apondre de traduccions a la resèrva.",
+ "apihelp-ttmserver-example-1": "Obténer de suggestions per traduire \"Ajuda\" de l'anglés cap al finés",
+ "apihelp-searchtranslations-description": "Recercar de traduccions.",
+ "apihelp-searchtranslations-param-offset": "Decalatge per las traduccions.",
+ "apihelp-searchtranslations-example-1": "Afichar las traduccions per la lenga."
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/pam.json b/www/wiki/extensions/Translate/i18n/api/pam.json
new file mode 100644
index 00000000..de5b647a
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/pam.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Leeheonjin"
+ ]
+ },
+ "apierror-translate-sandbox-invalidppassword": "E ustung udyat"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/pl.json b/www/wiki/extensions/Translate/i18n/api/pl.json
index 4326ceba..ac099bdb 100644
--- a/www/wiki/extensions/Translate/i18n/api/pl.json
+++ b/www/wiki/extensions/Translate/i18n/api/pl.json
@@ -4,14 +4,25 @@
"Chrumps"
]
},
+ "apihelp-aggregategroups-summary": "Zarządzaj grupami zbiorczymi komunikatów.",
+ "apihelp-aggregategroups-param-groupname": "Nazwa zbiorczej grupy komunikatów.",
+ "apihelp-aggregategroups-param-groupdescription": "Opis zbiorczej grupy komunikatów.",
"apihelp-groupreview-param-group": "Grupa komunikatów.",
"apihelp-groupreview-param-language": "Kod języka.",
"apihelp-query+languagestats-param-language": "Kod języka.",
+ "apihelp-query+messagecollection-param-group": "Grupa komunikatów.",
"apihelp-query+messagecollection-param-language": "Kod języka.",
+ "apihelp-query+messagecollection-param-limit": "Liczba komunikatów do pokazania (po filtrowaniu).",
"apihelp-query+messagecollection-example-1": "Lista obsługiwanych języków",
"apihelp-query+messagegroups-param-iconsize": "Preferowany rozmiar zrasteryzowanej grupy ikon.",
"apihelp-query+messagegroups-example-1": "Pokaż grupy komunikatów",
- "apihelp-translateuser-example-1": "Pokaż informacje o użytkowniku",
+ "apihelp-translatesandbox-param-username": "Nazwa użytkownika podczas tworzenia użytkownika.",
+ "apihelp-translatesandbox-param-password": "Hasło podczas tworzenia użytkownika.",
+ "apihelp-translatesandbox-param-email": "E-mail podczas tworzenia użytkownika.",
+ "apihelp-translationreview-description": "Oznacz tłumaczenia jako przejrzane.",
+ "apihelp-translationreview-summary": "Oznacz tłumaczenia jako przejrzane.",
+ "apihelp-translationstash-param-subaction": "Działanie.",
+ "apihelp-translationstash-param-title": "Tytuł strony jednostki tłumaczeniowej.",
"apihelp-translationstash-param-translation": "Tłumaczenia wykonane przez użytkownika.",
"apihelp-translationstash-param-metadata": "Obiekt JSON.",
"apihelp-ttmserver-param-sourcelanguage": "Kod języka tekstu źródłowego.",
@@ -20,5 +31,23 @@
"apihelp-searchtranslations-param-sourcelanguage": "Kod języka tekstu źródłowego.",
"apihelp-searchtranslations-param-language": "Kod języka do wyszukiwania ciąg znaków.",
"apihelp-searchtranslations-param-limit": "Rozmiar wyniku.",
- "apihelp-searchtranslations-example-1": "Pokaż tłumaczenia dla języka."
+ "apihelp-searchtranslations-example-1": "Pokaż tłumaczenia dla języka.",
+ "apihelp-translationcheck-param-title": "Tytuł strony z przestrzenią nazw i kodem języka.",
+ "apihelp-translationcheck-param-translation": "Tłumaczenie do sprawdzenia poprawności.",
+ "apierror-translate-duplicateaggregategroup": "Grupa komunikatów już istnieje",
+ "apierror-translate-groupreviewdisabled": "Przeglądanie grup komunikatów nie jest używane.",
+ "apierror-translate-invalidaggregategroup": "Nieprawidłowa zbiorcza grupa komunikatów",
+ "apierror-translate-invalidaggregategroupname": "Nieprawidłowa nazwa zbiorczej grupy komunikatów",
+ "apierror-translate-invalidgroup": "Grupa nie istnieje lub jest nieprawidłowa",
+ "apierror-translate-invalidupdate": "Nieprawidłowa aktualizacja",
+ "apierror-translate-language-disabled": "Tłumaczenie na $1 jest wyłączone.",
+ "apierror-translate-language-disabled-reason": "Tłumaczenie na $1 jest wyłączone: $2",
+ "apierror-translate-nodynamicgroups": "Dynamiczne grupy komunikatów nie są tutaj obsługiwane",
+ "apierror-translate-nomessagefortitle": "Tytuł nie odpowiada komunikatowi do tłumaczenia",
+ "apierror-translate-owntranslation": "Nie można przeglądać własnych tłumaczeń",
+ "apierror-translate-sandboxdisabled": "Funkcja brudnopisu nie jest używana",
+ "apierror-translate-sandbox-invalidppassword": "Nieprawidłowe hasło",
+ "apierror-translate-unknownmessage": "Nieznany komunikat",
+ "apiwarn-translate-alreadyreviewedbyyou": "Już oznaczono jako przejrzane przez ciebie",
+ "apiwarn-translate-language-disabled-source": "Językiem źródłowym tej grupy jest $1. Wybierz inny język, na który chcesz tłumaczyć."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/pt-br.json b/www/wiki/extensions/Translate/i18n/api/pt-br.json
index 53e56ea3..f0ecd7c8 100644
--- a/www/wiki/extensions/Translate/i18n/api/pt-br.json
+++ b/www/wiki/extensions/Translate/i18n/api/pt-br.json
@@ -2,11 +2,132 @@
"@metadata": {
"authors": [
"Mordecool",
- "Dianakc"
+ "Dianakc",
+ "Felipe L. Ewald",
+ "Eduardo Addad de Oliveira",
+ "TheEduGobi"
]
},
- "apihelp-groupreview-param-language": "Código do idioma.",
- "apihelp-query+languagestats-param-language": "Código da linguagem",
+ "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).",
+ "apihelp-aggregategroups-summary": "Gerencie grupos de mensagens agregadas.",
+ "apihelp-aggregategroups-extended-description": "Você pode adicionar e remover grupos de mensagens agregados e associar ou dissociar grupos de mensagens deles (um de cada vez).",
+ "apihelp-aggregategroups-param-do": "O que fazer com o grupo de mensagens agregadas.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID agregada do grupo de mensagens.",
+ "apihelp-aggregategroups-param-group": "ID do grupo de mensagens.",
+ "apihelp-aggregategroups-param-groupname": "Agregar grupo de mensagens por nome.",
+ "apihelp-aggregategroups-param-groupdescription": "Descrição agregada do grupo de mensagens.",
+ "apihelp-aggregategroups-example-1": "Associar um grupo",
+ "apihelp-groupreview-description": "Defina estados de fluxo de trabalho do grupo de mensagens.",
+ "apihelp-groupreview-summary": "Defina estados de fluxo de trabalho do grupo de mensagens.",
+ "apihelp-groupreview-param-group": "Grupo de mensagens.",
+ "apihelp-groupreview-param-language": "Código da linguagem.",
+ "apihelp-groupreview-param-state": "O novo estado para o grupo.",
+ "apihelp-groupreview-example-1": "Marque o estado da tradução alemã para o grupo de mensagens \"group-Example\" como preparado",
+ "apihelp-query+languagestats-description": "Consultar estatísticas de idioma.",
+ "apihelp-query+languagestats-summary": "Consultar estatísticas de idioma.",
+ "apihelp-query+languagestats-param-timelimit": "Tempo máximo para gastar no cálculo das estatísticas faltantes. Se zero, apenas os resultados em cache desde o início são retornados.",
+ "apihelp-query+languagestats-param-language": "Código da linguagem.",
+ "apihelp-query+languagestats-example-1": "Lista de estatísticas de conclusão de tradução para finlandês",
+ "apihelp-query+messagecollection-description": "Consultar MessageCollection sobre traduções.",
+ "apihelp-query+messagecollection-summary": "Consultar MessageCollection sobre traduções.",
+ "apihelp-query+messagecollection-param-group": "Grupo de mensagens.",
+ "apihelp-query+messagecollection-param-language": "Código da linguagem.",
+ "apihelp-query+messagecollection-param-limit": "Quantas mensagem mostrar (após a filtragem).",
+ "apihelp-query+messagecollection-param-offset": "Inteiro ou deslocamento da chave para o início.",
+ "apihelp-query+messagecollection-param-filter": "Filtros de cobrança de mensagens. Use <kbd>!</Kbd> para negar a condição. Por exemplo, <kbd>!fuzzy</kbd> significa listar apenas todas as mensagens não difusas. Os filtros são aplicados na ordem indicada.\n;fuzzy:Mensagens com tag fuzzy.\n;opcional:Mensagens que devem ser traduzidas somente se forem necessárias alterações.\n;ignoradas:Mensagens que nunca são traduzidas.\n;hastranslation:Mensagens que têm uma tradução, independentemente se for difusa ou não.\n;traduzido:Mensagens que têm uma tradução que não é difusa.\n;alterada:Mensagens que foram traduzidas ou alteradas desde a última exportação.\n;reviewer&#58;N:Mensagens onde o número de usuário <kbd>N</kbd> está entre os revisores.\n;last-translator&#58;N:Mensagens onde o número de usuário <kbd>N</kbd> é o último tradutor.",
+ "apihelp-query+messagecollection-param-prop": "Quais propriedades obter:\n;definição:Definição da mensagem.\n;tradução:Tradução atual (sem a string $1, se houver, use as tags para verificar traduções desatualizadas ou quebradas).\n;tags:Tags de mensagens, como opcionais, ignorado e fuzzy.\n;properties:Propriedades da mensagem, como status, revisão, último tradutor. Pode variar entre as mensagens.\n;revision:<span class=\"deprecated\">Obsoleto!</span> Use $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Lista de idiomas suportados",
+ "apihelp-query+messagecollection-example-2": "Lista de definições de mensagens não-opcionais para o grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "Lista de mensagens opcionais em finlandês com tags para o grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "Mais informações sobre revisões de tradução mais recentes para o grupo \"page-Example\"",
+ "apihelp-query+messagegroups-description": "Retorna informações sobre grupos de mensagens.\n\nNote que o parâmetro uselang afeta a saída de partes dependentes do idioma.",
+ "apihelp-query+messagegroups-summary": "Retorna informações sobre grupos de mensagens.",
+ "apihelp-query+messagegroups-extended-description": "Observe que o parâmetro uselang afeta a saída de partes dependentes do idioma.",
+ "apihelp-query+messagegroups-param-depth": "Ao usar o formato da árvore, limite a profundidade para esses vários níveis. O valor 0 significa que nenhum subgrupo é mostrado. Se o limite for atingido, a saída inclui um valor de \"goupcount\", que indica o número de crianças diretas.",
+ "apihelp-query+messagegroups-param-filter": "Somente retornar mensagens com IDs que correspondem a uma ou mais das entradas fornecidas (sem diferenciação de maiúsculas e minúsculas, separadas por pipes, * curinga).",
+ "apihelp-query+messagegroups-param-format": "No formato da árvore, os grupos de mensagens podem existir em vários lugares na árvore.",
+ "apihelp-query+messagegroups-param-iconsize": "Tamanho preferido do ícone do grupo rasterizado.",
+ "apihelp-query+messagegroups-param-prop": "Qual informação relacionada à tradução para obter:\n;id:Incluir ID do grupo.\n;rótulo:Incluir rótulo do grupo.\n;descrição:Incluir descrição do grupo.\n;classe:Incluir nome da classe do grupo.\n;namespace:Incluir espaço nominal do grupo. Nem todos os grupos pertencem a um único espaço nominal.\n;existe:Incluir propriedade de existência auto-calculada do grupo.\n;ícone:Incluir URLs para o ícone do grupo.\n;prioridade:incluir status de prioridade como desencorajado.\n;prioritylangs:Incluir idiomas preferenciais. Se não for definido, isso retorna false.\n;priorityforce:Incluir status de prioridade - é a configuração de idioma de prioridade forçada.\n;workflowstates:Inclua os estados de fluxo de trabalho para o grupo de mensagens.",
+ "apihelp-query+messagegroups-param-root": "Ao usar o formato da árvore, em vez de começar do início do nível superior do grupo de mensagens fornecido, que deve ser um grupo de mensagens agregado. Ao usar apenas o formato plano, o grupo especificado é retornado.",
+ "apihelp-query+messagegroups-example-1": "Mostrar grupos de mensagens",
+ "apihelp-query+messagegroupstats-description": "Consultar estatísticas do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-summary": "Consultar estatísticas do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-param-timelimit": "Tempo máximo para gastar no cálculo das estatísticas faltantes. Se zero, apenas os resultados em cache desde o início são retornados.",
+ "apihelp-query+messagegroupstats-param-group": "ID do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-example-1": "Lista de estatísticas de conclusão de tradução para o grupo \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Consultar todas as traduções para uma única mensagem.",
+ "apihelp-query+messagetranslations-summary": "Consultar todas as traduções para uma única mensagem.",
+ "apihelp-query+messagetranslations-param-title": "Título completo de uma mensagem conhecida.",
+ "apihelp-query+messagetranslations-example-1": "Lista de traduções na wiki para \"MediaWiki:January\"",
+ "apihelp-translatesandbox-description": "Inscreva-se e gerencie usuários da sandbox.",
+ "apihelp-translatesandbox-summary": "Inscreva-se e gerencie usuários da sandbox.",
"apihelp-translatesandbox-param-do": "O que fazer.",
- "apihelp-translationstash-param-subaction": "Ação."
+ "apihelp-translatesandbox-param-userid": "IDs de usuários dos usuários que estão sendo gerenciados. Use 0 para criações.",
+ "apihelp-translatesandbox-param-username": "Nome de usuário ao criar usuário.",
+ "apihelp-translatesandbox-param-password": "Senha ao criar usuário.",
+ "apihelp-translatesandbox-param-email": "E-mail ao criar usuário.",
+ "apihelp-translationaids-description": "Consultar todas as ajudas de tradução.",
+ "apihelp-translationaids-summary": "Consultar todas as ajudas de tradução.",
+ "apihelp-translationaids-param-title": "Título completo de uma mensagem conhecida.",
+ "apihelp-translationaids-param-group": "O grupo de mensagens à qual a mensagem pertence. Se estiver vazio, o grupo primário é usado.",
+ "apihelp-translationaids-param-prop": "Que ajudantes de tradução incluir.",
+ "apihelp-translationaids-example-1": "Mostrar ajudas para [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Marcar traduções revisadas.",
+ "apihelp-translationreview-summary": "Marcar traduções revisadas.",
+ "apihelp-translationreview-param-revision": "O número da revisão a ser revisado.",
+ "apihelp-translationreview-example-1": "Revisar revisão 1",
+ "apihelp-translationstash-description": "Adicione traduções para o stash.",
+ "apihelp-translationstash-summary": "Adicione traduções para o stash.",
+ "apihelp-translationstash-param-subaction": "Ação.",
+ "apihelp-translationstash-param-title": "Título da página da unidade de tradução.",
+ "apihelp-translationstash-param-translation": "Tradução feita pelo usuário.",
+ "apihelp-translationstash-param-metadata": "Objeto JSON.",
+ "apihelp-translationstash-param-username": "Opcionalmente, o usuário cujo stash obter. Somente os usuários privilegiados podem fazer isso.",
+ "apihelp-translationstash-example-1": "Adiciona uma tradução ao stash para [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Consulta o stash",
+ "apihelp-ttmserver-description": "Consultar sugestões das memórias de tradução.",
+ "apihelp-ttmserver-summary": "Consultar sugestões das memórias de tradução.",
+ "apihelp-ttmserver-param-service": "Qual dos serviços de tradução disponíveis para usar.",
+ "apihelp-ttmserver-param-sourcelanguage": "O código de idioma do texto original.",
+ "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": "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.",
+ "apihelp-searchtranslations-param-language": "O código de idioma para o qual procurar string.",
+ "apihelp-searchtranslations-param-group": "O ID do grupo para pesquisar a string.",
+ "apihelp-searchtranslations-param-filter": "Filtro de status da tradução de mensagens.",
+ "apihelp-searchtranslations-param-match": "Corresponder qualquer/todas as palavras da pesquisa.",
+ "apihelp-searchtranslations-param-case": "Pesquisa caso (não)sensitiva.",
+ "apihelp-searchtranslations-param-offset": "Offset para as traduções.",
+ "apihelp-searchtranslations-param-limit": "Tamanho do resultado.",
+ "apihelp-searchtranslations-example-1": "Mostrar traduções para o idioma.",
+ "apihelp-searchtranslations-example-2": "Mostre mensagens não traduzidas correspondentes à consulta no idioma de origem.",
+ "apihelp-translationcheck-description": "Validar a tradução fornecida contra os verificadores de mensagens.",
+ "apihelp-translationcheck-summary": "Validar traduções.",
+ "apihelp-translationcheck-param-title": "Título de página com espaço nominal e código de língua.",
+ "apihelp-translationcheck-param-translation": "A tradução para validar.",
+ "apierror-translate-duplicateaggregategroup": "Grupo de mensagens já existe",
+ "apierror-translate-fuzzymessage": "Não é possível revisar as traduções imprecisas",
+ "apierror-translate-groupreviewdisabled": "Revisão do grupo de mensagens não está em uso.",
+ "apierror-translate-invalidaggregategroup": "Grupo de mensagens agregadas inválido",
+ "apierror-translate-invalidaggregategroupname": "Nome do grupo de mensagens agregado inválido",
+ "apierror-translate-invalidgroup": "O grupo não existe ou é inválido",
+ "apierror-translate-invalidstate": "O estado solicitado é inválido.",
+ "apierror-translate-invalidlanguage": "O idioma solicitado é inválido.",
+ "apierror-translate-invalidupdate": "Atualização inválida",
+ "apierror-translate-language-disabled": "A tradução para $1 foi impossibilitada.",
+ "apierror-translate-language-disabled-reason": "A tradução para $1 foi impossibilitada: $2",
+ "apierror-translate-nodynamicgroups": "Os grupos de mensagens dinâmicas não são suportados aqui",
+ "apierror-translate-nomessagefortitle": "O título não corresponde a uma mensagem traduzível",
+ "apierror-translate-notranslationservices": "Não foram configurados serviços públicos de tradução. O administrador da wiki precisa de definir <var>$wgTranslateTranslationServices</var> devidamente para esta funcionalidade poder ser usada.",
+ "apierror-translate-owntranslation": "Não é possível revisar as próprias traduções",
+ "apierror-translate-sandboxdisabled": "O recurso sandbox não está em uso",
+ "apierror-translate-sandbox-invalidppassword": "Senha inválida",
+ "apierror-translate-unknownmessage": "Mensagem desconhecida",
+ "apiwarn-translate-alreadyreviewedbyyou": "Já marcado como revisado por você",
+ "apiwarn-translate-language-disabled-source": "O idioma de origem deste grupo é $1. Selecione outro idioma, para a qual irá traduzir, por favor."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/pt.json b/www/wiki/extensions/Translate/i18n/api/pt.json
index 975f3c1b..55224063 100644
--- a/www/wiki/extensions/Translate/i18n/api/pt.json
+++ b/www/wiki/extensions/Translate/i18n/api/pt.json
@@ -2,14 +2,130 @@
"@metadata": {
"authors": [
"Vitorvicentevalente",
- "Fúlvio"
+ "Fúlvio",
+ "Hamilton Abreu"
]
},
- "apihelp-groupreview-param-language": "Código de idioma.",
- "apihelp-query+languagestats-param-language": "Código de idioma.",
- "apihelp-query+messagecollection-param-language": "Código de idioma.",
- "apihelp-query+messagecollection-example-1": "Lista de idiomas suportados.",
+ "apihelp-aggregategroups-description": "Administrar grupos agregadores de mensagens.\n\nPode adicionar e remover grupos agregadores de mensagens e associar-lhes ou desassociar-lhes grupos de mensagens (um de cada vez).",
+ "apihelp-aggregategroups-summary": "Administrar grupos agregadores de mensagens.",
+ "apihelp-aggregategroups-extended-description": "Pode adicionar e remover grupos agregadores de mensagens e associar-lhes ou desassociar-lhes grupos de mensagens (um de cada vez).",
+ "apihelp-aggregategroups-param-do": "O que fazer com o grupo agregador de mensagens.",
+ "apihelp-aggregategroups-param-aggregategroup": "Identificador do grupo agregador de mensagens.",
+ "apihelp-aggregategroups-param-group": "Identificador do grupo de mensagens.",
+ "apihelp-aggregategroups-param-groupname": "Nome do grupo agregador de mensagens.",
+ "apihelp-aggregategroups-param-groupdescription": "Descrição do grupo agregador de mensagens.",
+ "apihelp-aggregategroups-example-1": "Associar um grupo",
+ "apihelp-groupreview-description": "Definir estados do fluxo de trabalho dos grupos de mensagens.",
+ "apihelp-groupreview-summary": "Definir estados do fluxo de trabalho dos grupos de mensagens.",
+ "apihelp-groupreview-param-group": "Grupo de mensagens.",
+ "apihelp-groupreview-param-language": "Código de língua.",
+ "apihelp-groupreview-param-state": "O novo estado do grupo.",
+ "apihelp-groupreview-example-1": "Marcar o estado da tradução para alemão do grupo de mensagens \"group-Example\" como pronta",
+ "apihelp-query+languagestats-description": "Consultar estatísticas de línguas.",
+ "apihelp-query+languagestats-summary": "Consultar estatísticas de línguas.",
+ "apihelp-query+languagestats-param-timelimit": "Máximo de tempo a usar para calcular estatísticas em falta. Se zero, só são devolvidos os resultados armazenados na ''cache'' desde o início.",
+ "apihelp-query+languagestats-param-language": "Código de língua.",
+ "apihelp-query+languagestats-example-1": "Lista das estatísticas de finalização de traduções para finlandês",
+ "apihelp-query+messagecollection-description": "Consultar MessageCollection sobre traduções.",
+ "apihelp-query+messagecollection-summary": "Consultar MessageCollection sobre traduções.",
+ "apihelp-query+messagecollection-param-group": "Grupo de mensagens.",
+ "apihelp-query+messagecollection-param-language": "Código de língua.",
+ "apihelp-query+messagecollection-param-limit": "Número de mensagens a serem mostradas (após filtragem).",
+ "apihelp-query+messagecollection-param-offset": "Número inteiro ou posição da chave de início.",
+ "apihelp-query+messagecollection-param-filter": "Filtros de recolha de mensagens. Use <kbd>!</kbd> para negar uma condição. Por exemplo, <kbd>!fuzzy</kbd> significa listar só as mensagens não sinalizadas com FUZZY. Os filtros são aplicados na ordem fornecida.\n;fuzzy:Mensagens com a etiqueta FUZZY.\n;optional:Mensagens que só devem ser traduzidas se forem necessárias mudanças.\n;ignored:Mensagens que nunca são traduzidas.\n;hastranslation:Mensagens que têm uma tradução, sinalizada ou não com a etiqueta FUZZY.\n;translated:Mensagens que têm uma tradução não sinalizada com a etiqueta FUZZY.\n;changed:Mensagens que foram traduzidas ou alteradas desde a última exportação.\n;reviewer&#58;N:Mensagens onde o utilizador nº <kbd>N</kbd> está entre os revisores.\n;last-translator&#58;N:Mensagens onde o utilizador nº <kbd>N</kbd> é o último tradutor.",
+ "apihelp-query+messagecollection-param-prop": "As propriedades que serão obtidas:\n;definition:Definição da mensagem.\n;translation:Tradução atual (sem o texto $1, se existir, usar as etiquetas para verificar se as traduções são antigas ou incorretas).\n;tags:Etiquetas da mensagem, como \"optional\" (opcional), \"ignored\" (ignorada) e \"fuzzy\".\n;properties:Propriedades da mensagem, como \"status\" (estado), \"revision\" (revisão), \"last-translator\" (último tradutor). Pode variar entre mensagens.\n;revision:<span class=\"deprecated\">Obsoleto!</span> Usar $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Lista de línguas suportadas.",
+ "apihelp-query+messagecollection-example-2": "Lista de definições obrigatórias de mensagens do grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "Lista de mensagens opcionais em finlandês com etiquetas para o grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "Mais informação sobre as últimas revisões de traduções para o grupo \"page-Example\"",
+ "apihelp-query+messagegroups-description": "Devolver informação sobre grupos de mensagens.\n\nNota que o parâmetro \"uselang\" afeta o resultado das partes dependentes da língua.",
+ "apihelp-query+messagegroups-summary": "Devolver informação sobre grupos de mensagens.",
+ "apihelp-query+messagegroups-extended-description": "Nota que o parâmetro \"uselang\" afeta o resultado das partes dependentes da língua.",
+ "apihelp-query+messagegroups-param-depth": "Quando for usado o formato de árvore, limitar a profundidade a esta quantidade de níveis. O valor 0 significa que não serão mostrados subgrupos. Se o limite for atingido, o resultado inclui um valor de \"contagem de grupo\", que indica o número de filhos diretos.",
+ "apihelp-query+messagegroups-param-filter": "Só devolver mensagens com identificadores que correspondam a uma ou mais das entradas fornecidas (sem diferenciar maiúsculas e minúsculas, separados por barras verticais, * como carácter de substituição).",
+ "apihelp-query+messagegroups-param-format": "Em forma de árvore, os grupos de mensagens podem existir em mais do que um lugar na árvore.",
+ "apihelp-query+messagegroups-param-iconsize": "Tamanho preferido do ícone de grupo em formato ''raster''.",
+ "apihelp-query+messagegroups-param-prop": "Que informação será obtida sobre a tradução:\n;id:Incluir o identificador do grupo.\n;label:Incluir a etiqueta do grupo.\n;description:Incluir a descrição do grupo.\n;class:Incluir o nome de classe do grupo.\n;namespace:Incluir o espaço nominal do grupo. Nem todos os grupos pertencem a um único espaço nominal.\n;exists:Incluir a propriedade de existência autocalculada do grupo.\n;icon:Incluir URL para ícone do grupo.\n;priority:Incluir o estado de prioridade, como desencorajado.\n;prioritylangs:Incluir línguas preferidas. Se não estiver definido, devolve \"false\" (falso).\n;priorityforce:Incluir o estado da prioridade - se a definição de prioridade de línguas é forçada.\n;workflowstates:Incluir os estados do fluxo de trabalho do grupo de mensagens.",
+ "apihelp-query+messagegroups-param-root": "Quando for usado o formato de árvore, em vez de começar pelo nível de topo, começar pelo grupo de mensagens fornecido, que tem de ser um grupo agregador de mensagens. Quando for usado o formato simples só é devolvido o grupo especificado.",
+ "apihelp-query+messagegroups-example-1": "Mostrar grupos de mensagens",
+ "apihelp-query+messagegroupstats-description": "Consultar estatísticas do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-summary": "Consultar estatísticas do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-param-timelimit": "Máximo de tempo a usar para calcular estatísticas em falta. Se zero, só são devolvidos os resultados armazenados na ''cache'' desde o início.",
+ "apihelp-query+messagegroupstats-param-group": "Identificador do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-example-1": "Lista das estatísticas de finalização de traduções para o grupo \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Consultar todas as traduções de uma única mensagem.",
+ "apihelp-query+messagetranslations-summary": "Consultar todas as traduções de uma única mensagem.",
+ "apihelp-query+messagetranslations-param-title": "Título completo de uma mensagem conhecida.",
+ "apihelp-query+messagetranslations-example-1": "Lista de traduções na wiki de \"MediaWiki:January\"",
+ "apihelp-translatesandbox-description": "Registar e gerir os utilizadores em teste.",
+ "apihelp-translatesandbox-summary": "Registar e gerir os utilizadores em teste.",
+ "apihelp-translatesandbox-param-do": "O que fazer.",
+ "apihelp-translatesandbox-param-userid": "Identificadores dos utilizadores a serem geridos. Use 0 para criá-los.",
+ "apihelp-translatesandbox-param-username": "Nome de utilizador ao criá-lo.",
+ "apihelp-translatesandbox-param-password": "Palavra-passe ao criar o utilizador.",
+ "apihelp-translatesandbox-param-email": "Correio eletrónico ao criar o utilizador.",
+ "apihelp-translationaids-description": "Consultar todos os auxiliares de tradução.",
+ "apihelp-translationaids-summary": "Consultar todos os auxiliares de tradução.",
+ "apihelp-translationaids-param-title": "Título completo de uma mensagem conhecida.",
+ "apihelp-translationaids-param-group": "Grupo de mensagens ao qual a mensagem pertence. Se vazio, será usado o grupo principal.",
+ "apihelp-translationaids-param-prop": "Os auxiliares de tradução a serem incluídos.",
+ "apihelp-translationaids-example-1": "Mostrar auxílios para [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Marcar as traduções como revistas.",
+ "apihelp-translationreview-summary": "Marcar as traduções como revistas.",
+ "apihelp-translationreview-param-revision": "O número da revisão a ser revista.",
+ "apihelp-translationreview-example-1": "Revisar a revisão 1",
+ "apihelp-translationstash-description": "Adicionar traduções à área temporária.",
+ "apihelp-translationstash-summary": "Adicionar traduções à área temporária.",
"apihelp-translationstash-param-subaction": "Ação.",
+ "apihelp-translationstash-param-title": "Título da página da unidade de tradução.",
+ "apihelp-translationstash-param-translation": "Tradução realizada pelo utilizador.",
"apihelp-translationstash-param-metadata": "Objeto JSON.",
- "apihelp-ttmserver-param-targetlanguage": "O código de idioma da sugestão."
+ "apihelp-translationstash-param-username": "Opcionalmente, o utilizador cuja área temporária de traduções será obtida. Só os utilizadores privilegiados podem fazer isto.",
+ "apihelp-translationstash-example-1": "Adicionar à área temporária de traduções uma tradução para [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Consultar a área temporária de traduções",
+ "apihelp-ttmserver-description": "Consultar as sugestões das memórias de tradução.",
+ "apihelp-ttmserver-summary": "Consultar as sugestões das memórias de tradução.",
+ "apihelp-ttmserver-param-service": "Que serviços de tradução disponíveis usar.",
+ "apihelp-ttmserver-param-sourcelanguage": "O código de língua do texto de origem.",
+ "apihelp-ttmserver-param-targetlanguage": "O código de língua da sugestão.",
+ "apihelp-ttmserver-param-text": "O texto para o qual procurar sugestões.",
+ "apihelp-ttmserver-example-1": "Obter sugestões para traduzir \"Help\" de inglês para finlandês",
+ "apihelp-searchtranslations-description": "Pesquisar nas traduções.",
+ "apihelp-searchtranslations-summary": "Pesquisar nas traduções.",
+ "apihelp-searchtranslations-param-service": "Que serviços de tradução disponíveis usar.",
+ "apihelp-searchtranslations-param-query": "O texto a pesquisar.",
+ "apihelp-searchtranslations-param-sourcelanguage": "O código de língua do texto de origem.",
+ "apihelp-searchtranslations-param-language": "O código da língua na qual pesquisar o texto.",
+ "apihelp-searchtranslations-param-group": "O identificador do grupo no qual pesquisar o texto.",
+ "apihelp-searchtranslations-param-filter": "Filtro do estado de tradução de mensagens.",
+ "apihelp-searchtranslations-param-match": "Coincide com qualquer ou todos os termos de pesquisa.",
+ "apihelp-searchtranslations-param-case": "Pesquisa com ou sem distinção de maiúsculas e minúsculas.",
+ "apihelp-searchtranslations-param-offset": "Posição de início para as traduções.",
+ "apihelp-searchtranslations-param-limit": "Tamanho do resultado.",
+ "apihelp-searchtranslations-example-1": "Mostrar as traduções para a língua.",
+ "apihelp-searchtranslations-example-2": "Mostrar as mensagens não traduzidas que coincidam com a consulta na língua de origem.",
+ "apihelp-translationcheck-description": "Validar a tradução fornecida contra os verificadores de mensagens.",
+ "apihelp-translationcheck-summary": "Validar traduções.",
+ "apihelp-translationcheck-param-title": "Título de página com espaço nominal e código de língua.",
+ "apihelp-translationcheck-param-translation": "A tradução para ser validada.",
+ "apierror-translate-duplicateaggregategroup": "O grupo de mensagens já existe",
+ "apierror-translate-fuzzymessage": "Não se pode rever traduções sinalizadas com FUZZY",
+ "apierror-translate-groupreviewdisabled": "A revisão de grupos de mensagens não está em uso.",
+ "apierror-translate-invalidaggregategroup": "O grupo agregador de mensagens é inválido",
+ "apierror-translate-invalidaggregategroupname": "O nome do grupo agregador de mensagens é inválido",
+ "apierror-translate-invalidgroup": "O grupo não existe ou é inválido",
+ "apierror-translate-invalidstate": "O estado pedido é inválido.",
+ "apierror-translate-invalidlanguage": "A língua pedida é inválida.",
+ "apierror-translate-invalidupdate": "Atualização inválida",
+ "apierror-translate-language-disabled": "A tradução para $1 foi impossibilitada.",
+ "apierror-translate-language-disabled-reason": "A tradução para $1 foi impossibilitada: $2",
+ "apierror-translate-nodynamicgroups": "Não são suportados aqui grupos de mensagens dinâmicos",
+ "apierror-translate-nomessagefortitle": "O título não corresponde a uma mensagem traduzível",
+ "apierror-translate-notranslationservices": "Não foram configurados serviços públicos de tradução. O administrador da wiki precisa de definir <var>$wgTranslateTranslationServices</var> devidamente para esta funcionalidade poder ser usada.",
+ "apierror-translate-owntranslation": "Não pode rever as suas traduções",
+ "apierror-translate-sandboxdisabled": "A função de utilizadores em teste não está a ser usada",
+ "apierror-translate-sandbox-invalidppassword": "Palavra-passe inválida",
+ "apierror-translate-unknownmessage": "Mensagem desconhecida",
+ "apiwarn-translate-alreadyreviewedbyyou": "Já marcada como revista por si",
+ "apiwarn-translate-language-disabled-source": "A língua de origem deste grupo é $1. Selecione outra língua, para a qual irá traduzir, por favor."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/qqq.json b/www/wiki/extensions/Translate/i18n/api/qqq.json
index 8de1fecf..39b6fb5c 100644
--- a/www/wiki/extensions/Translate/i18n/api/qqq.json
+++ b/www/wiki/extensions/Translate/i18n/api/qqq.json
@@ -5,10 +5,13 @@
"Liuxinyu970226",
"Amire80",
"Nemo bis",
- "Purodha"
+ "Purodha",
+ "Raymond"
]
},
"apihelp-aggregategroups-description": "{{doc-apihelp-description|aggregategroups}}",
+ "apihelp-aggregategroups-summary": "{{doc-apihelp-summary|aggregategroups}}",
+ "apihelp-aggregategroups-extended-description": "{{doc-apihelp-extended-description|aggregategroups}}",
"apihelp-aggregategroups-param-do": "{{doc-apihelp-param|aggregategroups|do}}",
"apihelp-aggregategroups-param-aggregategroup": "{{doc-apihelp-param|aggregategroups|aggregategroup}}",
"apihelp-aggregategroups-param-group": "{{doc-apihelp-param|aggregategroups|group}}",
@@ -16,26 +19,31 @@
"apihelp-aggregategroups-param-groupdescription": "{{doc-apihelp-param|aggregategroups|groupdescription}}",
"apihelp-aggregategroups-example-1": "{{doc-apihelp-example|aggregategroups}}",
"apihelp-groupreview-description": "{{doc-apihelp-description|groupreview}}",
+ "apihelp-groupreview-summary": "{{doc-apihelp-summary|groupreview}}",
"apihelp-groupreview-param-group": "{{doc-apihelp-param|groupreview|group}}",
"apihelp-groupreview-param-language": "{{doc-apihelp-param|groupreview|language}}\n{{Identical|Language code}}",
"apihelp-groupreview-param-state": "{{doc-apihelp-param|groupreview|state}}",
"apihelp-groupreview-example-1": "{{doc-apihelp-example|groupreview}}",
"apihelp-query+languagestats-description": "{{doc-apihelp-description|query+languagestats}}",
+ "apihelp-query+languagestats-summary": "{{doc-apihelp-summary|query+languagestats}}",
"apihelp-query+languagestats-param-timelimit": "{{doc-apihelp-param|query+languagestats|timelimit}}",
"apihelp-query+languagestats-param-language": "{{doc-apihelp-param|query+languagestats|language}}\n{{Identical|Language code}}",
"apihelp-query+languagestats-example-1": "{{doc-apihelp-example|query+languagestats}}",
"apihelp-query+messagecollection-description": "{{doc-apihelp-description|query+messagecollection}}",
+ "apihelp-query+messagecollection-summary": "{{doc-apihelp-summary|query+messagecollection}}",
"apihelp-query+messagecollection-param-group": "{{doc-apihelp-param|query+messagecollection|group}}",
"apihelp-query+messagecollection-param-language": "{{doc-apihelp-param|query+messagecollection|language}}\n{{Identical|Language code}}",
"apihelp-query+messagecollection-param-limit": "{{doc-apihelp-param|query+messagecollection|limit}}",
"apihelp-query+messagecollection-param-offset": "{{doc-apihelp-param|query+messagecollection|offset}}",
"apihelp-query+messagecollection-param-filter": "Copy \"&amp;#58;N\", which appears twice towards the end as is. It is the character \":\", which cannot be used because it would be considered markup.\n\n{{doc-apihelp-param|query+messagecollection|filter}}",
- "apihelp-query+messagecollection-param-prop": "{{doc-apihelp-param|query+messagecollection|prop}}",
+ "apihelp-query+messagecollection-param-prop": "{{doc-apihelp-param|query+messagecollection|prop}}\n{{doc-important|You can translate the word \"Deprecated\", but please do not alter the <code><nowiki>class=\"deprecated\"</nowiki></code> attribute}}",
"apihelp-query+messagecollection-example-1": "{{doc-apihelp-example|query+messagecollection}}",
"apihelp-query+messagecollection-example-2": "{{doc-apihelp-example|query+messagecollection}}",
"apihelp-query+messagecollection-example-3": "{{doc-apihelp-example|query+messagecollection}}",
"apihelp-query+messagecollection-example-4": "{{doc-apihelp-example|query+messagecollection}}",
"apihelp-query+messagegroups-description": "{{doc-apihelp-description|query+messagegroups}}",
+ "apihelp-query+messagegroups-summary": "{{doc-apihelp-summary|query+messagegroups}}",
+ "apihelp-query+messagegroups-extended-description": "{{doc-apihelp-extended-description|query+messagegroups}}",
"apihelp-query+messagegroups-param-depth": "{{doc-apihelp-param|query+messagegroups|depth}}",
"apihelp-query+messagegroups-param-filter": "{{doc-apihelp-param|query+messagegroups|filter}}",
"apihelp-query+messagegroups-param-format": "{{doc-apihelp-param|query+messagegroups|format}}",
@@ -44,27 +52,33 @@
"apihelp-query+messagegroups-param-root": "{{doc-apihelp-param|query+messagegroups|root}}",
"apihelp-query+messagegroups-example-1": "{{doc-apihelp-example|query+messagegroups}}",
"apihelp-query+messagegroupstats-description": "{{doc-apihelp-description|query+messagegroupstats}}",
+ "apihelp-query+messagegroupstats-summary": "{{doc-apihelp-summary|query+messagegroupstats}}",
"apihelp-query+messagegroupstats-param-timelimit": "{{doc-apihelp-param|query+messagegroupstats|timelimit}}",
"apihelp-query+messagegroupstats-param-group": "{{doc-apihelp-param|query+messagegroupstats|group}}",
"apihelp-query+messagegroupstats-example-1": "{{doc-apihelp-example|query+messagegroupstats}}",
"apihelp-query+messagetranslations-description": "{{doc-apihelp-description|query+messagetranslations}}",
+ "apihelp-query+messagetranslations-summary": "{{doc-apihelp-summary|query+messagetranslations}}",
"apihelp-query+messagetranslations-param-title": "{{doc-apihelp-param|query+messagetranslations|title}}",
"apihelp-query+messagetranslations-example-1": "Don't translate \"MediaWiki:January\".\n\n{{doc-apihelp-example|query+messagetranslations}}",
"apihelp-translatesandbox-description": "{{doc-apihelp-description|translatesandbox}}",
+ "apihelp-translatesandbox-summary": "{{doc-apihelp-summary|translatesandbox}}",
"apihelp-translatesandbox-param-do": "{{doc-apihelp-param|translatesandbox|do}}",
"apihelp-translatesandbox-param-userid": "{{doc-apihelp-param|translatesandbox|userid}}",
"apihelp-translatesandbox-param-username": "{{doc-apihelp-param|translatesandbox|username}}",
"apihelp-translatesandbox-param-password": "{{doc-apihelp-param|translatesandbox|password}}",
"apihelp-translatesandbox-param-email": "{{doc-apihelp-param|translatesandbox|email}}",
"apihelp-translationaids-description": "{{doc-apihelp-description|translationaids}}",
+ "apihelp-translationaids-summary": "{{doc-apihelp-summary|translationaids}}",
"apihelp-translationaids-param-title": "{{doc-apihelp-param|translationaids|title}}",
"apihelp-translationaids-param-group": "{{doc-apihelp-param|translationaids|group}}\n\nThe term \"primary group\" is explained at https://www.mediawiki.org/wiki/Help:Extension:Translate/Glossary\nas \"primary message group\".",
"apihelp-translationaids-param-prop": "{{doc-apihelp-param|translationaids|prop}}",
"apihelp-translationaids-example-1": "Don't translate \"<nowiki>[[MediaWiki:January/fi]]</nowiki>\".\n\n{{doc-apihelp-example|translationaids}}",
"apihelp-translationreview-description": "{{doc-apihelp-description|translationreview}}",
+ "apihelp-translationreview-summary": "{{doc-apihelp-summary|translationreview}}",
"apihelp-translationreview-param-revision": "{{doc-apihelp-param|translationreview|revision}}",
"apihelp-translationreview-example-1": "{{doc-apihelp-example|translationreview}}",
"apihelp-translationstash-description": "See the [[mw:Help:Extension:Translate/Glossary|glossary item for \"stash\"]].\n----\n{{doc-apihelp-description|translationstash}}",
+ "apihelp-translationstash-summary": "See the [[mw:Help:Extension:Translate/Glossary|glossary item for \"stash\"]].\n----\n{{doc-apihelp-summary|translationstash}}",
"apihelp-translationstash-param-subaction": "{{doc-apihelp-param|translationstash|subaction}}\n{{Identical|Action}}",
"apihelp-translationstash-param-title": "See the [[mw:Help:Extension:Translate/Glossary|Translate glossary]] for a definition.\n----\n{{doc-apihelp-param|translationstash|title}}",
"apihelp-translationstash-param-translation": "{{doc-apihelp-param|translationstash|translation}}",
@@ -73,12 +87,14 @@
"apihelp-translationstash-example-1": "See the [[mw:Help:Extension:Translate/Glossary|glossary item for \"stash\"]].\n----\n{{doc-apihelp-example|translationstash}}\nThe stash is also called [[mw:Translation_UX/Specification#Translation_sandbox|sandbox]].",
"apihelp-translationstash-example-2": "See the [[mw:Help:Extension:Translate/Glossary|glossary item for \"stash\"]].\n----\n{{doc-apihelp-example|translationstash}}\nThe stash is also called [[mw:Translation_UX/Specification#Translation_sandbox|sandbox]].",
"apihelp-ttmserver-description": "{{doc-apihelp-description|ttmserver}}",
+ "apihelp-ttmserver-summary": "{{doc-apihelp-summary|ttmserver}}",
"apihelp-ttmserver-param-service": "{{doc-apihelp-param|ttmserver|service}}",
"apihelp-ttmserver-param-sourcelanguage": "{{doc-apihelp-param|ttmserver|sourcelanguage}}",
"apihelp-ttmserver-param-targetlanguage": "{{doc-apihelp-param|ttmserver|targetlanguage}}",
"apihelp-ttmserver-param-text": "{{doc-apihelp-param|ttmserver|text}}",
"apihelp-ttmserver-example-1": "{{doc-apihelp-example|ttmserver}}",
"apihelp-searchtranslations-description": "{{doc-apihelp-description|searchtranslations}}",
+ "apihelp-searchtranslations-summary": "{{doc-apihelp-summary|searchtranslations}}",
"apihelp-searchtranslations-param-service": "{{doc-apihelp-param|searchtranslations|service}}",
"apihelp-searchtranslations-param-query": "{{doc-apihelp-param|searchtranslations|query}}",
"apihelp-searchtranslations-param-sourcelanguage": "{{doc-apihelp-param|searchtranslations|sourcelanguage}}",
@@ -90,5 +106,31 @@
"apihelp-searchtranslations-param-offset": "{{doc-apihelp-param|searchtranslations|offset}}",
"apihelp-searchtranslations-param-limit": "{{doc-apihelp-param|searchtranslations|limit}}",
"apihelp-searchtranslations-example-1": "{{doc-apihelp-example|searchtranslations}}",
- "apihelp-searchtranslations-example-2": "{{doc-apihelp-example|searchtranslations}}"
+ "apihelp-searchtranslations-example-2": "{{doc-apihelp-example|searchtranslations}}",
+ "apihelp-translationcheck-description": "{{doc-apihelp-description|translationcheck}}",
+ "apihelp-translationcheck-summary": "{{doc-apihelp-summary|translationcheck}}",
+ "apihelp-translationcheck-param-title": "{{doc-apihelp-param|translationcheck|title}}",
+ "apihelp-translationcheck-param-translation": "{{doc-apihelp-param|translationcheck|translation}}",
+ "apierror-translate-duplicateaggregategroup": "{{doc-apierror}}",
+ "apierror-translate-fuzzymessage": "{{doc-apierror}}",
+ "apierror-translate-groupreviewdisabled": "{{doc-apierror}}",
+ "apierror-translate-invalidaggregategroup": "{{doc-apierror}}",
+ "apierror-translate-invalidaggregategroupname": "{{doc-apierror}}",
+ "apierror-translate-invalidfilter": "{{doc-apierror}}\n\nParameters:\n* $1 - Filter provided",
+ "apierror-translate-invalidgroup": "{{doc-apierror}}",
+ "apierror-translate-invalidstate": "{{doc-apierror}}",
+ "apierror-translate-invalidlanguage": "{{doc-apierror}}",
+ "apierror-translate-invalidupdate": "{{doc-apierror}}",
+ "apierror-translate-language-disabled": "{{doc-apierror}}",
+ "apierror-translate-language-disabled-reason": "{{doc-apierror}}\n\nParameters:\n* $1 - language name\n* $2 - reason, probably in English",
+ "apierror-translate-nodynamicgroups": "{{doc-apierror}}",
+ "apierror-translate-nomessagefortitle": "{{doc-apierror}}",
+ "apierror-translate-notranslationservices": "{{doc-apierror}}",
+ "apierror-translate-owntranslation": "{{doc-apierror}}",
+ "apierror-translate-sandboxdisabled": "{{doc-apierror}}",
+ "apierror-translate-sandbox-invalidparam": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception message, probably in English",
+ "apierror-translate-sandbox-invalidppassword": "{{doc-apierror}}",
+ "apierror-translate-unknownmessage": "{{doc-apierror}}",
+ "apiwarn-translate-alreadyreviewedbyyou": "{{doc-apierror}}",
+ "apiwarn-translate-language-disabled-source": "{{doc-apierror}}\n\nParameters:\n* $1 - language name"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/qu.json b/www/wiki/extensions/Translate/i18n/api/qu.json
new file mode 100644
index 00000000..8afa62c5
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/qu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "apihelp-searchtranslations-summary": "T'ikrasqakunapi maskay."
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/roa-tara.json b/www/wiki/extensions/Translate/i18n/api/roa-tara.json
index 482eef91..7e882288 100644
--- a/www/wiki/extensions/Translate/i18n/api/roa-tara.json
+++ b/www/wiki/extensions/Translate/i18n/api/roa-tara.json
@@ -4,7 +4,59 @@
"Joetaras"
]
},
+ "apihelp-aggregategroups-description": "Gestisce gruppe de messàgge aggregate.\n\nPuè aggiungere e luà gruppe de messàgge aggregate e associà o luà le gruppe de messàgge l'une da l'otre (une a vote).",
+ "apihelp-aggregategroups-summary": "Gestisce gruppe de messàgge aggregate.",
+ "apihelp-aggregategroups-extended-description": "Puè aggiungere e luà gruppe de messàgge aggregate e associà o luà le gruppe de messàgge l'une da l'otre (une a vote).",
+ "apihelp-aggregategroups-param-do": "Ce puè ffà cu 'u gruppe de messàgge aggregate.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID d'u gruppe de messàgge aggregate.",
+ "apihelp-aggregategroups-param-group": "ID d'u gruppe de messàgge.",
+ "apihelp-aggregategroups-param-groupname": "Nome d'u gruppe de messàgge aggregate.",
+ "apihelp-aggregategroups-param-groupdescription": "Descrizione d'u gruppe de messàgge aggregate.",
+ "apihelp-aggregategroups-example-1": "Associe 'nu gruppe",
+ "apihelp-groupreview-description": "'Mboste 'state d'u flusse d'u gruppe de messàgge.",
+ "apihelp-groupreview-summary": "'Mboste 'state d'u flusse d'u gruppe de messàgge.",
+ "apihelp-groupreview-param-group": "Gruppe de messàgge.",
+ "apihelp-groupreview-param-language": "Codece d'a Lènghe.",
+ "apihelp-groupreview-param-state": "'U state nuève pu gruppe.",
+ "apihelp-groupreview-example-1": "'Mboste 'u state d'a traduziune jndr'à 'u tedesche (d'a Germanie) pu gruppe de messàgge \"group-Example\" cumme pronde",
+ "apihelp-query+languagestats-description": "Statisteche de le 'nderrogaziune d'a lènghe.",
+ "apihelp-query+languagestats-summary": "Statisteche de le 'nderrogaziune d'a lènghe.",
+ "apihelp-query+languagestats-param-language": "Codece d'a Lènghe.",
+ "apihelp-query+languagestats-example-1": "Elenghe de le statisteche de combletamende d'a traduzione pu finlandese",
+ "apihelp-query+messagecollection-description": "'Nderroghe MessageCollection sus a le traduziune.",
+ "apihelp-query+messagecollection-summary": "'Nderroghe MessageCollection sus a le traduziune.",
"apihelp-query+messagecollection-param-group": "Gruppe de messàgge.",
"apihelp-query+messagecollection-param-language": "Codece d'a Lènghe.",
- "apihelp-query+messagecollection-param-limit": "Quanda messàgge da 'ndrucà (apprisse 'u filtre)."
+ "apihelp-query+messagecollection-param-limit": "Quanda messàgge da 'ndrucà (apprisse 'u filtre).",
+ "apihelp-query+messagecollection-param-offset": "Indere o distanze d'a chiave pe accumenzà.",
+ "apihelp-query+messagecollection-example-1": "Elenghe de le lènghe supportate",
+ "apihelp-query+messagegroups-summary": "Torne le 'mbormaziune sus a le gruppe de messàgge.",
+ "apihelp-query+messagegroups-example-1": "'Ndruche le gruppe de messàgge",
+ "apihelp-query+messagegroupstats-description": "'Nderroghe le statisteche de le gruppe de messàgge.",
+ "apihelp-query+messagegroupstats-summary": "'Nderroghe le statisteche de le gruppe de messàgge.",
+ "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.",
+ "apihelp-translationaids-param-title": "Titole comblete de 'nu messàgge canusciute.",
+ "apihelp-translationstash-description": "Aggiunge le traduziune a 'a scorte.",
+ "apihelp-translationstash-summary": "Aggiunge le traduziune a 'a scorte.",
+ "apihelp-translationstash-param-subaction": "Azione.",
+ "apihelp-translationstash-param-title": "Titole d'a pàgene de aunità d'a traduzione.",
+ "apihelp-translationstash-param-metadata": "Oggette JSON.",
+ "apihelp-searchtranslations-param-limit": "Dimenzione d'u resultate.",
+ "apihelp-searchtranslations-example-1": "Fà 'ndrucà le traduziune pa lènghe.",
+ "apierror-translate-invalidupdate": "Aggiornamente invalide",
+ "apierror-translate-language-disabled": "'A traduzione jndr'à $1 jè disabbilitate.",
+ "apierror-translate-nodynamicgroups": "Le gruppe de messàgge dinamece non ge sò supportate aqquà",
+ "apierror-translate-nomessagefortitle": "Quiste non ge corresponne a 'nu messàgge traducibbile",
+ "apierror-translate-owntranslation": "Non ge puè revisionà le traduziune tune",
+ "apierror-translate-sandboxdisabled": "'A funzione Sandbox non ge s'ause",
+ "apierror-translate-sandbox-invalidppassword": "Password invalide",
+ "apierror-translate-unknownmessage": "Messàgge scanusciute",
+ "apiwarn-translate-alreadyreviewedbyyou": "Già signate cumme revisionate da te"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/ru.json b/www/wiki/extensions/Translate/i18n/api/ru.json
index 07a109c3..0b8a4be4 100644
--- a/www/wiki/extensions/Translate/i18n/api/ru.json
+++ b/www/wiki/extensions/Translate/i18n/api/ru.json
@@ -3,38 +3,94 @@
"authors": [
"Okras",
"Kaganer",
- "Дмитрий"
+ "Дмитрий",
+ "Туллук",
+ "Kareyac",
+ "ЛосЯш",
+ "Putnik",
+ "Ole Yves",
+ "Stjn",
+ "Movses"
]
},
+ "apihelp-aggregategroups-description": "Вы можете добавлять и удалять агрегированные группы сообщений, группировать и разгруппировывать сообщения в них (по одному за раз) .",
+ "apihelp-aggregategroups-summary": "Управлять агрегированными группами сообщений.",
+ "apihelp-aggregategroups-extended-description": "Вы можете добавлять и удалять агрегированные группы сообщений, ассоциировать и диссоциировать сообщения в них (по одному за раз).",
+ "apihelp-aggregategroups-param-do": "Что нужно сделать с агрегированной группой сообщений.",
"apihelp-aggregategroups-param-aggregategroup": "ID агрегированной группы сообщений",
"apihelp-aggregategroups-param-group": "ID группы сообщений",
+ "apihelp-aggregategroups-param-groupname": "Название агрегированной группы сообщений.",
+ "apihelp-aggregategroups-param-groupdescription": "Описание агрегированной группы сообщений.",
+ "apihelp-aggregategroups-example-1": "Ассоциировать группу",
+ "apihelp-groupreview-description": "Задать состояния рабочего процесса группы сообщений.",
+ "apihelp-groupreview-summary": "Задать состояния рабочего процесса группы сообщений.",
"apihelp-groupreview-param-group": "Группа сообщений.",
"apihelp-groupreview-param-language": "Код языка.",
"apihelp-groupreview-param-state": "Новое состояние группы.",
+ "apihelp-groupreview-example-1": "Задать состояние немецкого перевода для группы сообщений «group-Example» как готовое",
+ "apihelp-query+languagestats-description": "Запросить статистику языка.",
+ "apihelp-query+languagestats-summary": "Запросить статистику языка.",
+ "apihelp-query+languagestats-param-timelimit": "Максимальное время, которое следует затрачивать на подсчёт отсутствующей статистики. Если равно нулю, будут возвращены только кэшированные с самого начала результаты.",
"apihelp-query+languagestats-param-language": "Код языка.",
+ "apihelp-query+languagestats-example-1": "Список статистики завершённости перевода для финского.",
+ "apihelp-query+messagecollection-description": "Запросить MessageCollection о переводах.",
+ "apihelp-query+messagecollection-summary": "Запросить MessageCollection о переводах.",
"apihelp-query+messagecollection-param-group": "Группа сообщений.",
"apihelp-query+messagecollection-param-language": "Код языка.",
"apihelp-query+messagecollection-param-limit": "Сколько сообщений показывать (после фильтрации).",
+ "apihelp-query+messagecollection-param-offset": "Целое число или ключ, с которого следует начать.",
"apihelp-query+messagecollection-example-1": "Список поддерживаемых языков",
"apihelp-query+messagecollection-example-2": "Список обязательных определений сообщений для группы «page-Example»",
"apihelp-query+messagecollection-example-3": "Список необязательных сообщений на финском языке с метками для группы «page-Example»",
+ "apihelp-query+messagecollection-example-4": "Больше информации о последних версиях перевода для группы «page-Example»",
+ "apihelp-query+messagegroups-description": "Получить информацию о группах сообщений.\n\nУчтите, что параметр uselang влияет на вывод языкозависимых частей.",
+ "apihelp-query+messagegroups-summary": "Получить информацию о группах сообщений.",
+ "apihelp-query+messagegroups-extended-description": "Учтите, что параметр uselang влияет на вывод языкозависимых частей.",
"apihelp-query+messagegroups-example-1": "Показать группы сообщений",
"apihelp-query+messagegroupstats-description": "Запросить статистику группы сообщений",
+ "apihelp-query+messagegroupstats-summary": "Запросить статистику группы сообщений.",
"apihelp-query+messagegroupstats-param-group": "ID группы сообщений.",
+ "apihelp-query+messagetranslations-description": "Запросить все переводы для одного сообщения.",
+ "apihelp-query+messagetranslations-summary": "Запросить все переводы для одного сообщения.",
"apihelp-query+messagetranslations-param-title": "Полный заголовок известного сообщения.",
"apihelp-query+messagetranslations-example-1": "Список переводов в вики для «MediaWiki:January»",
+ "apihelp-translatesandbox-description": "Зарегистрировать и управлять пользователями в песочнице.",
+ "apihelp-translatesandbox-summary": "Зарегистрировать и управлять пользователями в песочнице.",
"apihelp-translatesandbox-param-do": "Что делать.",
- "apihelp-translateuser-example-1": "Показать информацию об участнике",
+ "apihelp-translatesandbox-param-username": "Имя учётной записи при её создании.",
+ "apihelp-translatesandbox-param-password": "Пароль при создании учётной записи.",
+ "apihelp-translatesandbox-param-email": "Электронная почта при создании учётной записи.",
+ "apihelp-translationaids-description": "Запросить всю справку по переводу.",
+ "apihelp-translationaids-summary": "Запросить всю справку по переводу.",
"apihelp-translationaids-param-title": "Полный заголовок известного сообщения.",
+ "apihelp-translationaids-param-prop": "Каких помощников перевода следует включить.",
+ "apihelp-translationaids-example-1": "Показать справку по [[MediaWiki:January/fi]]",
"apihelp-translationreview-description": "Пометить переводы как проверенные.",
+ "apihelp-translationreview-summary": "Пометить переводы как проверенные.",
+ "apihelp-translationreview-param-revision": "Номер версии для проверки.",
+ "apihelp-translationreview-example-1": "Проверить версию 1",
"apihelp-translationstash-param-subaction": "Действие.",
"apihelp-translationstash-param-translation": "Перевод, сделанный участником.",
"apihelp-translationstash-param-metadata": "Объект JSON.",
"apihelp-ttmserver-param-sourcelanguage": "Код языка исходного текста.",
"apihelp-searchtranslations-description": "Поиск переводов.",
+ "apihelp-searchtranslations-summary": "Поиск переводов.",
+ "apihelp-searchtranslations-param-service": "Какие из доступных сервисов перевода следует использовать.",
"apihelp-searchtranslations-param-query": "Строка для поиска.",
"apihelp-searchtranslations-param-sourcelanguage": "Код языка исходного текста.",
+ "apihelp-searchtranslations-param-language": "Языковой код, на котором следует искать строку.",
+ "apihelp-searchtranslations-param-group": "Идентификатор группы, в которой следует искать строку.",
+ "apihelp-searchtranslations-param-filter": "Фильтр статуса перевода сообщения.",
"apihelp-searchtranslations-param-limit": "Размер результата.",
"apihelp-searchtranslations-example-1": "Показать переводы на язык.",
- "apihelp-searchtranslations-example-2": "Показать непереведённые сообщения, соответствующие запросу на исходном языке."
+ "apihelp-searchtranslations-example-2": "Показать непереведённые сообщения, соответствующие запросу на исходном языке.",
+ "apierror-translate-invalidupdate": "Недопустимое обновление.",
+ "apierror-translate-language-disabled": "Перевод на $1 отключён.",
+ "apierror-translate-nodynamicgroups": "Динамические группы сообщений здесь не поддерживаются.",
+ "apierror-translate-nomessagefortitle": "Заголовок не соответствует переводимому сообщению.",
+ "apierror-translate-owntranslation": "Не может проверять собственные переводы",
+ "apierror-translate-sandboxdisabled": "Функция песочницы не используется.",
+ "apierror-translate-sandbox-invalidppassword": "Неверный пароль",
+ "apierror-translate-unknownmessage": "Неизвестное сообщение",
+ "apiwarn-translate-alreadyreviewedbyyou": "Уже отмечены как просмотренные Вами"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/sah.json b/www/wiki/extensions/Translate/i18n/api/sah.json
index e1006f3d..b144e33b 100644
--- a/www/wiki/extensions/Translate/i18n/api/sah.json
+++ b/www/wiki/extensions/Translate/i18n/api/sah.json
@@ -1,9 +1,11 @@
{
"@metadata": {
"authors": [
- "HalanTul"
+ "HalanTul",
+ "Туллук"
]
},
+ "apihelp-aggregategroups-description": "Биллэриилэр бөлөхтөрүн оҥоруоххун сөп, кинилэри бөлөхтүөххүн эбэтэр тус туспа араарыаххын сөп (биири биир кэмҥэ)",
"apihelp-groupreview-param-group": "Этиилэр бөлөхтөрө.",
"apihelp-query+messagecollection-param-group": "Этиилэр бөлөхтөрө."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/skr-arab.json b/www/wiki/extensions/Translate/i18n/api/skr-arab.json
new file mode 100644
index 00000000..7cf0fd8f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/skr-arab.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saraiki"
+ ]
+ },
+ "apihelp-query+languagestats-param-language": "زبان دا کوڈ۔",
+ "apihelp-query+messagecollection-param-language": "زبان دا کوڈ۔"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/sq.json b/www/wiki/extensions/Translate/i18n/api/sq.json
new file mode 100644
index 00000000..21d8aa10
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/sq.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjakupi"
+ ]
+ },
+ "apierror-translate-language-disabled": "Perkthimi ne $1 eshte pa-mundesuar.",
+ "apierror-translate-language-disabled-reason": "Perkthimi ne $1 eshte i pamundesuar:$2",
+ "apiwarn-translate-language-disabled-source": "Gjuha baze e ketij grupi eshte $1. Ju lutemi perzgjidhni gjuhen per te perkthyer ne ate gjuhe."
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/sr-ec.json b/www/wiki/extensions/Translate/i18n/api/sr-ec.json
new file mode 100644
index 00000000..6170314c
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/sr-ec.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Obsuser",
+ "Acamicamacaraca"
+ ]
+ },
+ "apierror-translate-sandbox-invalidppassword": "Невалидна лозинка"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/sr-el.json b/www/wiki/extensions/Translate/i18n/api/sr-el.json
new file mode 100644
index 00000000..8e278e9a
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/sr-el.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "apierror-translate-sandbox-invalidppassword": "Nevalidna lozinka"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/sv.json b/www/wiki/extensions/Translate/i18n/api/sv.json
index ae125f8b..94744830 100644
--- a/www/wiki/extensions/Translate/i18n/api/sv.json
+++ b/www/wiki/extensions/Translate/i18n/api/sv.json
@@ -4,7 +4,9 @@
"Lokal Profil",
"WikiPhoenix",
"Dan Koehl",
- "Victorsa"
+ "Victorsa",
+ "Josve05a",
+ "Bengtsson96"
]
},
"apihelp-aggregategroups-param-group": "Meddelandegrupp-ID.",
@@ -23,13 +25,39 @@
"apihelp-translatesandbox-param-username": "Användarnamn när du skapar en användare.",
"apihelp-translatesandbox-param-password": "Lösenord när du skapar en användare.",
"apihelp-translatesandbox-param-email": "E-post när du skapar en användare.",
- "apihelp-translateuser-example-1": "Visa information om användaren",
+ "apihelp-translationaids-param-title": "Fullständig titel på ett känt meddelande.",
+ "apihelp-translationaids-example-1": "Visa hjälp för [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Markera översättningar som granskade.",
+ "apihelp-translationreview-param-revision": "Sidversionsnumret att granska.",
+ "apihelp-translationreview-example-1": "Granska sidversion 1",
"apihelp-translationstash-param-subaction": "Åtgärd.",
"apihelp-translationstash-param-translation": "Översättning som gjorts av användaren.",
"apihelp-translationstash-param-metadata": "JSON-objekt.",
+ "apihelp-ttmserver-description": "Förfråga förslag från översättningsminnen.",
"apihelp-ttmserver-param-service": "Vilken av de tillgängliga översättningstjänsterna som bör användas.",
"apihelp-ttmserver-param-sourcelanguage": "Språkkoden för källtexten.",
"apihelp-ttmserver-param-targetlanguage": "Språkkoden för förslaget.",
"apihelp-ttmserver-param-text": "Texten att hitta förslag på.",
- "apihelp-ttmserver-example-1": "Få förslag för att översätta \"Hjälp\" från engelska till finska"
+ "apihelp-ttmserver-example-1": "Få förslag för att översätta \"Hjälp\" från engelska till finska",
+ "apihelp-searchtranslations-description": "Sök översättningar.",
+ "apihelp-searchtranslations-summary": "Sök översättningar.",
+ "apihelp-searchtranslations-param-service": "Vilka tillgängliga översättningstjänster att använda.",
+ "apihelp-searchtranslations-param-query": "Strängen att söka efter.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Språkkoden för källtexten.",
+ "apihelp-searchtranslations-param-match": "Matcha något/alla sökord.",
+ "apihelp-searchtranslations-param-case": "Skiftläges(o)känslig sökning.",
+ "apihelp-searchtranslations-param-limit": "Resultatets storlek.",
+ "apihelp-searchtranslations-example-1": "Visa översättningar för språket.",
+ "apihelp-searchtranslations-example-2": "Visa oöversatta meddelanden som överensstämmer förfrågan i källkoden.",
+ "apierror-translate-duplicateaggregategroup": "Meddelandegruppen finns redan",
+ "apierror-translate-fuzzymessage": "Kan inte granska föråldrade översättningar",
+ "apierror-translate-invalidlanguage": "Det begärda språket är inte giltigt.",
+ "apierror-translate-invalidupdate": "Ogiltig uppdatering",
+ "apierror-translate-language-disabled": "Översättning till $1 är inaktiverat.",
+ "apierror-translate-language-disabled-reason": "Översättning till $1 är inaktiverat: $2",
+ "apierror-translate-notranslationservices": "Inga offentliga översättningstjänster har konfigurerats. Wikiadministratörerna behöver ändra set <var>$wgTranslateTranslationServices</var> på lämpligt sätt innan denna funktion kan användas.",
+ "apierror-translate-owntranslation": "Kan inte granska egna översättningar",
+ "apierror-translate-sandbox-invalidppassword": "Ogiltigt lösenord",
+ "apierror-translate-unknownmessage": "Okänt meddelande",
+ "apiwarn-translate-alreadyreviewedbyyou": "Har redan markerats som granskad av dig"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/ta.json b/www/wiki/extensions/Translate/i18n/api/ta.json
new file mode 100644
index 00000000..1ead96ed
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/ta.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rakeshonwiki"
+ ]
+ },
+ "apihelp-aggregategroups-description": "மொத்த தகவல்களின் தொகுதியை நிர்வகி.\n\nநீங்கள் மொத்த தகவல்களின் தொகுதியை சேர்க்க மற்றும் நீக்க முடியம், மேலும் தகவல்களின் தொகுதியை இணைக்க அல்லது துண்டிக்க முடியும்(ஒவ்வொன்றாக)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/th.json b/www/wiki/extensions/Translate/i18n/api/th.json
new file mode 100644
index 00000000..c99b278a
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/th.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Octahedron80"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "ไอดีกลุ่มข้อความ",
+ "apihelp-groupreview-param-group": "กลุ่มข้อความ",
+ "apihelp-groupreview-param-language": "รหัสภาษา",
+ "apihelp-query+languagestats-param-language": "รหัสภาษา",
+ "apihelp-query+messagecollection-param-group": "กลุ่มข้อความ",
+ "apihelp-query+messagecollection-param-language": "รหัสภาษา",
+ "apihelp-query+messagecollection-example-1": "รายชื่อภาษาที่รองรับ",
+ "apihelp-query+messagegroups-example-1": "แสดงกลุ่มข้อความ",
+ "apihelp-query+messagegroupstats-param-group": "ไอดีกลุ่มข้อความ",
+ "apihelp-searchtranslations-description": "ค้นหาการแปล"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/tl.json b/www/wiki/extensions/Translate/i18n/api/tl.json
new file mode 100644
index 00000000..068ee37c
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/tl.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Leeheonjin",
+ "Emem.calist",
+ "Jojit fb"
+ ]
+ },
+ "apierror-translate-language-disabled": "Ang pagsasaling wika sa $1 ay naka-'disabled'",
+ "apierror-translate-sandbox-invalidppassword": "Di-wastong password"
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/tr.json b/www/wiki/extensions/Translate/i18n/api/tr.json
index 3cc8f929..dd7e0997 100644
--- a/www/wiki/extensions/Translate/i18n/api/tr.json
+++ b/www/wiki/extensions/Translate/i18n/api/tr.json
@@ -1,7 +1,9 @@
{
"@metadata": {
"authors": [
- "Arystanbek"
+ "Arystanbek",
+ "Sayginer",
+ "Vito Genovese"
]
},
"apihelp-aggregategroups-param-group": "Mesaj grup KİMLİĞİ.",
@@ -34,10 +36,8 @@
"apihelp-translatesandbox-param-do": "Ne.",
"apihelp-translatesandbox-param-userid": "Kullanıcılar yönetilen kullanıcı Kimlikleri. Yarattıkları için 0 kullanın.",
"apihelp-translatesandbox-param-username": "Kullanıcı oluştururken kullanıcı adı.",
- "apihelp-translatesandbox-param-password": "Kullanıcı oluştururken şifre.",
+ "apihelp-translatesandbox-param-password": "Kullanıcı oluştururken parola.",
"apihelp-translatesandbox-param-email": "Kullanıcı oluşturma e-posta.",
- "apihelp-translateuser-description": "Çeviri kullanıcı hakkında bilgi ile ilgili.",
- "apihelp-translateuser-example-1": "Kullanıcı hakkındaki bilgileri gösterir",
"apihelp-translationaids-description": "Tüm çeviriler aıds sorgu.",
"apihelp-translationaids-param-title": "Bilinen bir mesajın tam başlık.",
"apihelp-translationaids-param-group": "İleti grup mesajı aittir. Boş ise o zaman birinci grup kullanılır.",
@@ -59,5 +59,6 @@
"apihelp-ttmserver-param-sourcelanguage": "Kaynak metnin dil kodu.",
"apihelp-ttmserver-param-targetlanguage": "Öneri dil kodu.",
"apihelp-ttmserver-param-text": "Metin için öneriler bulmak için.",
- "apihelp-ttmserver-example-1": "Çeviri \"\" ingilizce Yardım için öneriler"
+ "apihelp-ttmserver-example-1": "Çeviri \"\" ingilizce Yardım için öneriler",
+ "apierror-translate-invalidlanguage": "İstenilen dil geçersiz."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/tt-cyrl.json b/www/wiki/extensions/Translate/i18n/api/tt-cyrl.json
new file mode 100644
index 00000000..0fc81d68
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/api/tt-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ильнар"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Язмалар төркеме."
+}
diff --git a/www/wiki/extensions/Translate/i18n/api/uk.json b/www/wiki/extensions/Translate/i18n/api/uk.json
index 27126e0c..0076e893 100644
--- a/www/wiki/extensions/Translate/i18n/api/uk.json
+++ b/www/wiki/extensions/Translate/i18n/api/uk.json
@@ -9,6 +9,8 @@
]
},
"apihelp-aggregategroups-description": "Керування агрегованими групами повідомлень.\n\nВи можете додавати або вилучати агреговані групи повідомлень та додавати чи вилучати повідомлення з них (одне за раз).",
+ "apihelp-aggregategroups-summary": "Керування агрегованими групами повідомлень.",
+ "apihelp-aggregategroups-extended-description": "Ви можете додавати або вилучати агреговані групи повідомлень та додавати чи вилучати повідомлення з них (одне за раз).",
"apihelp-aggregategroups-param-do": "Що робити з агрегованою групою повідомлень.",
"apihelp-aggregategroups-param-aggregategroup": "Ідентифікатор агрегованої групи повідомлень.",
"apihelp-aggregategroups-param-group": "Ідентифікатор групи повідомлень.",
@@ -16,15 +18,18 @@
"apihelp-aggregategroups-param-groupdescription": "Опис агрегованої групи повідомлень.",
"apihelp-aggregategroups-example-1": "Додати до групи",
"apihelp-groupreview-description": "Встановити повідомлення робочого процесу групи.",
+ "apihelp-groupreview-summary": "Встановити повідомлення робочого процесу групи.",
"apihelp-groupreview-param-group": "Група повідомлень.",
"apihelp-groupreview-param-language": "Мовний код.",
"apihelp-groupreview-param-state": "Новий стан для групи",
"apihelp-groupreview-example-1": "Позначити стан німецького перекладу групи повідомлень «group-Example» як «готово»",
"apihelp-query+languagestats-description": "Запитати мовну статистику.",
+ "apihelp-query+languagestats-summary": "Запитати мовну статистику.",
"apihelp-query+languagestats-param-timelimit": "Максимальний час, який витратити на обчислення пропущеної статистики. Якщо нуль, лише кешовані результати з початку буде повернено.",
"apihelp-query+languagestats-param-language": "Код мови.",
"apihelp-query+languagestats-example-1": "Перелічити статистику завершеності перекладу фінською",
"apihelp-query+messagecollection-description": "Запитати MessageCollection про переклади.",
+ "apihelp-query+messagecollection-summary": "Запитати MessageCollection про переклади.",
"apihelp-query+messagecollection-param-group": "Група повідомлень.",
"apihelp-query+messagecollection-param-language": "Код мови.",
"apihelp-query+messagecollection-param-limit": "Скільки повідомлень показувати (після фільтрації)",
@@ -36,6 +41,8 @@
"apihelp-query+messagecollection-example-3": "Список додаткових повідомлень фінською мовою з теґами для групи «page-Example»",
"apihelp-query+messagecollection-example-4": "Більше інформації про останні версії перекладів для групи «page-Example»",
"apihelp-query+messagegroups-description": "Видати інформацію про групи повідомлень.\n\nЗверніть увагу, що параметр uselang впливає на результати частин, що залежать від мови.",
+ "apihelp-query+messagegroups-summary": "Вивести інформацію про групи повідомлень.",
+ "apihelp-query+messagegroups-extended-description": "Зверніть увагу, що параметр uselang впливає на результат відображення частин, які залежать від мови.",
"apihelp-query+messagegroups-param-depth": "При використанні формату дерева, обмежити глибину до такої кількості рівнів. Значення 0 означає, що жодні підгрупи не відображаються. Якщо ліміту досягнуто, результат включає значення «groupcount», яке містить кількість безпосередніх підгруп.",
"apihelp-query+messagegroups-param-filter": "Видавати лише повідомлення з ідентифікаторами, які відповідають одному або кільком поданим характеристикам (без урахування регістру, розділені вертикальною рискою, байдужий символ *).",
"apihelp-query+messagegroups-param-format": "У деревоподібному форматі групи повідомлень можуть існувати в декількох місцях дерева.",
@@ -44,27 +51,33 @@
"apihelp-query+messagegroups-param-root": "При використанні деревоподібного формату, замість починати від верхнього, почати з даної групи повідомлень, яка має бути агрегованою групою повідомлень. При використанні плоского формату видається лише зазначена група.",
"apihelp-query+messagegroups-example-1": "Показати групи повідомлень",
"apihelp-query+messagegroupstats-description": "Зробити запит на статистику групи повідомлень.",
+ "apihelp-query+messagegroupstats-summary": "Зробити запит на статистику групи повідомлень.",
"apihelp-query+messagegroupstats-param-timelimit": "Максимальний час, який витратити на обчислення пропущеної статистики. Якщо нуль, лише кешовані результати з початку буде повернено.",
"apihelp-query+messagegroupstats-param-group": "Ідентифікатор групи повідомлень.",
"apihelp-query+messagegroupstats-example-1": "Список статистики завершеності перекладів для групи «page-Example»",
"apihelp-query+messagetranslations-description": "Зробити запит на всі переклади одного повідомлення.",
+ "apihelp-query+messagetranslations-summary": "Зробити запит на всі переклади одного повідомлення.",
"apihelp-query+messagetranslations-param-title": "Повна назва відомого повідомлення.",
"apihelp-query+messagetranslations-example-1": "Список перекладів у вікі для «MediaWiki:January»",
"apihelp-translatesandbox-description": "Зареєструватися й управляти користувачами в пісочниці.",
+ "apihelp-translatesandbox-summary": "Зареєструватися й управляти користувачами в пісочниці.",
"apihelp-translatesandbox-param-do": "Що робити.",
"apihelp-translatesandbox-param-userid": "Ідентифікатори користувачів, управління якими здійснюється. Використайте 0 для створюваних.",
"apihelp-translatesandbox-param-username": "Ім'я користувача при створенні користувача.",
"apihelp-translatesandbox-param-password": "Пароль при створенні користувача.",
"apihelp-translatesandbox-param-email": "Електронна пошта при створенні користувача.",
"apihelp-translationaids-description": "Зробити запит на усі підказки перекладу.",
+ "apihelp-translationaids-summary": "Зробити запит на усі підказки перекладу.",
"apihelp-translationaids-param-title": "Повна назва відомого повідомлення.",
"apihelp-translationaids-param-group": "Група повідомлень, до якої належить повідомлення. Якщо порожня, то буде використано первинну групу.",
"apihelp-translationaids-param-prop": "Яких помічників перекладу включати.",
"apihelp-translationaids-example-1": "Показати підказки для [[MediaWiki:January/fi]]",
"apihelp-translationreview-description": "Позначити переклади як перевірені.",
+ "apihelp-translationreview-summary": "Позначити переклади як перевірені.",
"apihelp-translationreview-param-revision": "Номер версії для перевірки.",
"apihelp-translationreview-example-1": "Перевірка версій",
"apihelp-translationstash-description": "Додати переклади у стеш.",
+ "apihelp-translationstash-summary": "Додати переклади у сховок.",
"apihelp-translationstash-param-subaction": "Дія.",
"apihelp-translationstash-param-title": "Заголовок сторінки блоку перекладу.",
"apihelp-translationstash-param-translation": "Переклад, зроблений користувачем.",
@@ -73,12 +86,14 @@
"apihelp-translationstash-example-1": "Додати переклад у стеш для [[MediaWiki:Jan/fi]]",
"apihelp-translationstash-example-2": "Зробити запит на стеш",
"apihelp-ttmserver-description": "Зробити запит на пропозиції з пам'яті перекладів",
+ "apihelp-ttmserver-summary": "Зробити запит на пропозиції з пам'яті перекладів",
"apihelp-ttmserver-param-service": "Який з доступних сервісів перекладу використати.",
"apihelp-ttmserver-param-sourcelanguage": "Код мови вихідного тексту.",
"apihelp-ttmserver-param-targetlanguage": "Код мови пропозиції.",
"apihelp-ttmserver-param-text": "Текст, для якого знайти пропозиції.",
"apihelp-ttmserver-example-1": "Отримати пропозиції для перекладу «Help» з англійської на фінську",
"apihelp-searchtranslations-description": "Пошук перекладів.",
+ "apihelp-searchtranslations-summary": "Пошук перекладів.",
"apihelp-searchtranslations-param-service": "Який з доступних сервісів перекладу використати.",
"apihelp-searchtranslations-param-query": "Рядок для пошуку.",
"apihelp-searchtranslations-param-sourcelanguage": "Код мови вихідного тексту.",
@@ -90,5 +105,29 @@
"apihelp-searchtranslations-param-offset": "Зміщення для перекладів.",
"apihelp-searchtranslations-param-limit": "Розмір результату.",
"apihelp-searchtranslations-example-1": "Показати переклади для мови.",
- "apihelp-searchtranslations-example-2": "Показати запит на подібні неперекладені збіги мовою оригіналу."
+ "apihelp-searchtranslations-example-2": "Показати запит на подібні неперекладені збіги мовою оригіналу.",
+ "apihelp-translationcheck-description": "Перевірити введений переклад за допомогою засобів перевірки повідомлень.",
+ "apihelp-translationcheck-summary": "Перевірити переклади.",
+ "apihelp-translationcheck-param-title": "Назва сторінки з простором назв та кодом мови.",
+ "apihelp-translationcheck-param-translation": "Переклад, який слід перевірити.",
+ "apierror-translate-duplicateaggregategroup": "Група повідомлень вже існує",
+ "apierror-translate-fuzzymessage": "Не вдалося переглянути застарілі переклади",
+ "apierror-translate-groupreviewdisabled": "Група повідомлень не використовується.",
+ "apierror-translate-invalidaggregategroup": "Недійсна загальна група повідомлень",
+ "apierror-translate-invalidaggregategroupname": "Недійсна назва загальної групи повідомлень",
+ "apierror-translate-invalidgroup": "Група не існує або є недійсною",
+ "apierror-translate-invalidstate": "Запитуваний стан недійсний.",
+ "apierror-translate-invalidlanguage": "Запитувана мова є недійсною.",
+ "apierror-translate-invalidupdate": "Недійсне оновлення",
+ "apierror-translate-language-disabled": "Переклад мовою «$1» вимкнено",
+ "apierror-translate-language-disabled-reason": "Переклад мовою «$1» вимкнено: $2",
+ "apierror-translate-nodynamicgroups": "Динамічні групи повідомлень не підтримуються тут",
+ "apierror-translate-nomessagefortitle": "Назва не відповідає перекладному повідомленню",
+ "apierror-translate-notranslationservices": "Не налаштовано ще жодного публічного сервісу перекладу. Адміністратор цієї вікі повинен належним чином налаштувати <var>$wgTranslateTranslationServices</var>, перш ніж цю функцію можна буде використовувати.",
+ "apierror-translate-owntranslation": "Не вдалося перевірити власні переклади",
+ "apierror-translate-sandboxdisabled": "Функція пісочниці не використовується",
+ "apierror-translate-sandbox-invalidppassword": "Недійсний пароль",
+ "apierror-translate-unknownmessage": "Невідоме повідомлення",
+ "apiwarn-translate-alreadyreviewedbyyou": "Вже позначено Вами як перевірено",
+ "apiwarn-translate-language-disabled-source": "Вихідна мова цієї групи — $1. Будь ласка, виберіть іншу мову для перекладу."
}
diff --git a/www/wiki/extensions/Translate/i18n/api/yi.json b/www/wiki/extensions/Translate/i18n/api/yi.json
new file mode 100644
index 00000000..d3d6ccea
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/i18n/api/yue.json b/www/wiki/extensions/Translate/i18n/api/yue.json
new file mode 100644
index 00000000..882bddd0
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/i18n/api/zh-hans.json b/www/wiki/extensions/Translate/i18n/api/zh-hans.json
index 1069aa27..7098a2ed 100644
--- a/www/wiki/extensions/Translate/i18n/api/zh-hans.json
+++ b/www/wiki/extensions/Translate/i18n/api/zh-hans.json
@@ -7,23 +7,28 @@
"LNDDYL"
]
},
- "apihelp-aggregategroups-description": "管理聚合信息组。\n\n您可以添加和移除聚合信息组,以及从组中关联或分离信息(一次一个)。",
- "apihelp-aggregategroups-param-do": "想要操作哪个聚合信息组。",
- "apihelp-aggregategroups-param-aggregategroup": "聚合信息组ID。",
- "apihelp-aggregategroups-param-group": "信息组ID。",
- "apihelp-aggregategroups-param-groupname": "聚合信息组名称。",
- "apihelp-aggregategroups-param-groupdescription": "聚合信息组说明。",
- "apihelp-aggregategroups-example-1": "定义一个群组",
+ "apihelp-aggregategroups-description": "管理聚合消息组。\n\n您可以添加和移除聚合消息组,以及从组中关联或分离消息(一次一个)。",
+ "apihelp-aggregategroups-summary": "管理聚合消息组。",
+ "apihelp-aggregategroups-extended-description": "您可以添加和移除聚合消息组,以及从组中关联或分离消息(一次一个)。",
+ "apihelp-aggregategroups-param-do": "想要操作哪个聚合消息组。",
+ "apihelp-aggregategroups-param-aggregategroup": "聚合消息组ID。",
+ "apihelp-aggregategroups-param-group": "消息组ID。",
+ "apihelp-aggregategroups-param-groupname": "聚合消息组的名称。",
+ "apihelp-aggregategroups-param-groupdescription": "聚合消息组的描述。",
+ "apihelp-aggregategroups-example-1": "关联一个群组",
"apihelp-groupreview-description": "设置信息组工作流状态。",
+ "apihelp-groupreview-summary": "设置信息组工作流状态。",
"apihelp-groupreview-param-group": "信息组。",
"apihelp-groupreview-param-language": "语言代码。",
"apihelp-groupreview-param-state": "组的新状态。",
"apihelp-groupreview-example-1": "将用于消息组“group-Example”的德语翻译状态标记为已就绪",
"apihelp-query+languagestats-description": "查询语言状态。",
+ "apihelp-query+languagestats-summary": "查询语言状态。",
"apihelp-query+languagestats-param-timelimit": "花费在统计缺失信息上的最长时间。如果为零,立即返回缓存的结果。",
"apihelp-query+languagestats-param-language": "语言代码。",
"apihelp-query+languagestats-example-1": "芬兰语的翻译完成统计列表",
"apihelp-query+messagecollection-description": "查询有关翻译的MessageCollection。",
+ "apihelp-query+messagecollection-summary": "查询有关翻译的MessageCollection。",
"apihelp-query+messagecollection-param-group": "信息组。",
"apihelp-query+messagecollection-param-language": "语言代码。",
"apihelp-query+messagecollection-param-limit": "显示的消息数量(过滤后)。",
@@ -35,6 +40,8 @@
"apihelp-query+messagecollection-example-3": "芬兰语中的可选消息列表,带有用于“page-Example”组的标签",
"apihelp-query+messagecollection-example-4": "更多有关“page-Example”组最近翻译修订的信息",
"apihelp-query+messagegroups-description": "返回有关消息组的信息。\n\n注意uselang参数会影响语言相关部分的输出。",
+ "apihelp-query+messagegroups-summary": "返回有关消息组的信息。",
+ "apihelp-query+messagegroups-extended-description": "注意uselang测试影响语言依赖部分的输出。",
"apihelp-query+messagegroups-param-depth": "当使用树形格式时,限制深度至如此多水平。值0意味着不会显示子组。如果达到限制,输出会包含一个“groupcount”值,它指出直系子组的数值。",
"apihelp-query+messagegroups-param-filter": "只返回匹配一个或更多输入内容的ID的消息(不区分大小写,以逗号分隔,* 通配符)。",
"apihelp-query+messagegroups-param-format": "在树格式信息组可以存在于树中的多个位置。",
@@ -43,27 +50,33 @@
"apihelp-query+messagegroups-param-root": "何时使用树形格式,而不是从来自指定信息组最高级开始,那样必须是一个聚合信息组。当使用单调格式时只有指定组被返回。",
"apihelp-query+messagegroups-example-1": "显示信息组",
"apihelp-query+messagegroupstats-description": "查询信息组状态。",
+ "apihelp-query+messagegroupstats-summary": "查询信息组状态。",
"apihelp-query+messagegroupstats-param-timelimit": "计算缺失统计所花费的最长时间。如果为零,则只有从开始起缓存的结果会被返回。",
"apihelp-query+messagegroupstats-param-group": "信息组ID。",
"apihelp-query+messagegroupstats-example-1": "用于“page-Example”组的翻译完成统计列表",
"apihelp-query+messagetranslations-description": "查询单个信息的所有翻译。",
+ "apihelp-query+messagetranslations-summary": "查询单个信息的所有翻译。",
"apihelp-query+messagetranslations-param-title": "已知消息的完整标题。",
"apihelp-query+messagetranslations-example-1": "Wiki中用于“MediaWiki:January”的翻译列表",
"apihelp-translatesandbox-description": "注册和管理沙盒化用户。",
+ "apihelp-translatesandbox-summary": "注册和管理沙盒化用户。",
"apihelp-translatesandbox-param-do": "要干什么。",
"apihelp-translatesandbox-param-userid": "要管理的用户的用户ID。0用于创建者。",
"apihelp-translatesandbox-param-username": "创建用户时的用户名。",
"apihelp-translatesandbox-param-password": "创建用户时的密码。",
"apihelp-translatesandbox-param-email": "创建用户时发送电子邮件。",
"apihelp-translationaids-description": "查询所有翻译帮助。",
+ "apihelp-translationaids-summary": "查询所有翻译帮助。",
"apihelp-translationaids-param-title": "已知消息的完整标题。",
"apihelp-translationaids-param-group": "信息属于哪个信息组。如果为空则使用首要组。",
"apihelp-translationaids-param-prop": "包含的翻译助手。",
"apihelp-translationaids-example-1": "显示[[MediaWiki:January/fi]]的建议",
"apihelp-translationreview-description": "标记该翻译为已复核。",
+ "apihelp-translationreview-summary": "标记该翻译为已复核。",
"apihelp-translationreview-param-revision": "要复核的修订版本号。",
"apihelp-translationreview-example-1": "复核修订版本1",
"apihelp-translationstash-description": "将译文放在藏匿处。",
+ "apihelp-translationstash-summary": "将译文放在藏匿处。",
"apihelp-translationstash-param-subaction": "操作。",
"apihelp-translationstash-param-title": "翻译单位页面的标题。",
"apihelp-translationstash-param-translation": "由用户做出的翻译。",
@@ -72,12 +85,14 @@
"apihelp-translationstash-example-1": "加入[[MediaWiki:Jan/fi]]的一次翻译至藏匿处",
"apihelp-translationstash-example-2": "查询藏匿",
"apihelp-ttmserver-description": "从翻译记忆库查询建议。",
+ "apihelp-ttmserver-summary": "从翻译记忆库查询建议。",
"apihelp-ttmserver-param-service": "哪些翻译服务可供使用。",
"apihelp-ttmserver-param-sourcelanguage": "原始文本的语言代码。",
"apihelp-ttmserver-param-targetlanguage": "建议的语言代码。",
"apihelp-ttmserver-param-text": "用于寻找建议的文本。",
"apihelp-ttmserver-example-1": "获取有关将“Help”从英语翻译成芬兰语的建议",
"apihelp-searchtranslations-description": "搜索译文。",
+ "apihelp-searchtranslations-summary": "搜索译文。",
"apihelp-searchtranslations-param-service": "哪些翻译服务可供使用。",
"apihelp-searchtranslations-param-query": "要搜索的字符串。",
"apihelp-searchtranslations-param-sourcelanguage": "原始文本的语言代码。",
@@ -89,5 +104,29 @@
"apihelp-searchtranslations-param-offset": "用于译文的偏移。",
"apihelp-searchtranslations-param-limit": "结果的大小。",
"apihelp-searchtranslations-example-1": "显示用于语言的翻译。",
- "apihelp-searchtranslations-example-2": "显示在原始语言中匹配查询未翻译信息。"
+ "apihelp-searchtranslations-example-2": "显示在原始语言中匹配查询未翻译信息。",
+ "apihelp-translationcheck-description": "验证提供的翻译是否符合消息检查者的要求。",
+ "apihelp-translationcheck-summary": "验证翻译。",
+ "apihelp-translationcheck-param-title": "带名字空间和语言代码的页面标题。",
+ "apihelp-translationcheck-param-translation": "要验证的翻译。",
+ "apierror-translate-duplicateaggregategroup": "消息组已存在",
+ "apierror-translate-fuzzymessage": "不能复核模糊翻译",
+ "apierror-translate-groupreviewdisabled": "未使用消息组复核。",
+ "apierror-translate-invalidaggregategroup": "无效的聚合消息组",
+ "apierror-translate-invalidaggregategroupname": "无效的聚合消息组名称",
+ "apierror-translate-invalidgroup": "组不存在或无效",
+ "apierror-translate-invalidstate": "请求的状态无效。",
+ "apierror-translate-invalidlanguage": "请求的语言无效。",
+ "apierror-translate-invalidupdate": "无效更新",
+ "apierror-translate-language-disabled": "至$1的翻译已禁用。",
+ "apierror-translate-language-disabled-reason": "至$1的翻译已禁用:$2",
+ "apierror-translate-nodynamicgroups": "动态消息组在此不支持",
+ "apierror-translate-nomessagefortitle": "标题与可翻译消息不一致",
+ "apierror-translate-notranslationservices": "未配置公开翻译服务。在此功能可以使用前,wiki管理员需要适当设置<var>$wgTranslateTranslationServices</var>。",
+ "apierror-translate-owntranslation": "不能复核自己的翻译",
+ "apierror-translate-sandboxdisabled": "未使用沙盒功能",
+ "apierror-translate-sandbox-invalidppassword": "无效密码",
+ "apierror-translate-unknownmessage": "未知消息",
+ "apiwarn-translate-alreadyreviewedbyyou": "已被您标记为已复核",
+ "apiwarn-translate-language-disabled-source": "此组的原始语言是$1。请选择另一语言进行翻译。"
}
diff --git a/www/wiki/extensions/Translate/i18n/api/zh-hant.json b/www/wiki/extensions/Translate/i18n/api/zh-hant.json
index 2bd24229..3b882341 100644
--- a/www/wiki/extensions/Translate/i18n/api/zh-hant.json
+++ b/www/wiki/extensions/Translate/i18n/api/zh-hant.json
@@ -2,15 +2,130 @@
"@metadata": {
"authors": [
"Liuxinyu970226",
- "LNDDYL"
+ "LNDDYL",
+ "Kly"
]
},
+ "apihelp-aggregategroups-description": "管理集合訊息群組。\n\n您可以添加或移除集合訊息群組,以及從其中來關聯或取消關聯訊息群組(每一次一個)。",
+ "apihelp-aggregategroups-summary": "管理集合訊息群組。",
+ "apihelp-aggregategroups-extended-description": "您可以添加或移除集合訊息群組,以及從其中來關聯或取消關聯訊息群組(每一次一個)。",
+ "apihelp-aggregategroups-param-do": "要與集合訊息群組做的項目。",
+ "apihelp-aggregategroups-param-aggregategroup": "集合訊息群組 ID。",
+ "apihelp-aggregategroups-param-group": "訊息群組 ID。",
+ "apihelp-aggregategroups-param-groupname": "集合訊息群組名稱。",
+ "apihelp-aggregategroups-param-groupdescription": "集合訊息群組描述。",
+ "apihelp-aggregategroups-example-1": "關聯群組",
+ "apihelp-groupreview-description": "設定訊息群組的工作流狀態。",
+ "apihelp-groupreview-summary": "設定訊息群組的工作流狀態。",
+ "apihelp-groupreview-param-group": "訊息群組。",
"apihelp-groupreview-param-language": "語言代碼。",
+ "apihelp-groupreview-param-state": "群組的新狀態。",
+ "apihelp-groupreview-example-1": "標記訊息群組「group-Example」的德語翻譯狀態為就緒",
+ "apihelp-query+languagestats-description": "查詢語言統計。",
+ "apihelp-query+languagestats-summary": "查詢語言統計。",
+ "apihelp-query+languagestats-param-timelimit": "花費計算遺失統計資料的最長時間。若為零,僅會回傳從起始快取的內容。",
+ "apihelp-query+languagestats-param-language": "語言代碼。",
+ "apihelp-query+languagestats-example-1": "芬蘭語的翻譯完成統計狀態清單",
+ "apihelp-query+messagecollection-description": "查詢有關翻譯的 MessageCollection。",
+ "apihelp-query+messagecollection-summary": "查詢有關翻譯的 MessageCollection。",
+ "apihelp-query+messagecollection-param-group": "訊息群組。",
"apihelp-query+messagecollection-param-language": "語言代碼。",
+ "apihelp-query+messagecollection-param-limit": "要顯示的訊息多寡(在篩選後)。",
+ "apihelp-query+messagecollection-param-offset": "起始的整數或鍵值偏差。",
+ "apihelp-query+messagecollection-param-filter": "訊息集合篩選。使用 <kbd>!</kbd> 來使條件無效。例如 <kbd>!fuzzy</kbd> 代表僅列出未過時的訊息。篩選是以指定的排序來套用。\n;fuzzy:帶有已過時標籤的訊息。\n;optional:僅在需要更改時翻譯的訊息。\n;ignored:不需翻譯的訊息。\n;hastranslation:有被翻譯到的訊息,無論是否過時。\n;translated:有被翻譯到且非過時的訊息。\n;changed:自上一次匯出時,有被翻譯或更改的訊息。\n;reviewer&#58;N:在複審員裡使用者編號為 <kbd>N</kbd> 的訊息。\n;last-translator&#58;N:最後一位翻譯者之使用者編號為 <kbd>N</kbd> 的訊息。",
+ "apihelp-query+messagecollection-param-prop": "要取得的參數:\n;definition:訊息定義。\n;translation:目前翻譯(若不帶有 $1 字串,使用標籤來檢查舊有或損壞翻譯)。\n;tags:訊息標籤,像是可選用、已忽略和已過時。\n;properties:訊息參數,像是狀態、修訂、最後的翻譯者。可在訊息間變動。\n;revision:<span class=\"deprecated\">已棄用!</span>請改用 $2prop=properties。",
+ "apihelp-query+messagecollection-example-1": "支援語言清單",
+ "apihelp-query+messagecollection-example-2": "群組「group-Example」的非選用群組定義清單",
+ "apihelp-query+messagecollection-example-3": "用於群組「group-Example」,芬蘭語中帶標籤的選用群組清單",
+ "apihelp-query+messagecollection-example-4": "更多有關群組「group-Example」最新翻譯修訂的資訊",
+ "apihelp-query+messagegroups-description": "回傳有關訊息群組的資訊。\n\n請注意 uselang 參數會影響語言相依部份的輸出內容。",
+ "apihelp-query+messagegroups-summary": "回傳有關訊息群組的資訊。",
+ "apihelp-query+messagegroups-extended-description": "請注意 uselang 參數會影響語言相依部份的輸出內容。",
+ "apihelp-query+messagegroups-param-depth": "當使用樹狀格式,會限制到這樣多層級的深度。值 0 代表著不會顯示子群組。如果已達到限制,輸出內容會包含一個「groupcount」值,此代表著直系子組的數目。",
+ "apihelp-query+messagegroups-param-filter": "僅回傳符合一個或多個所提供輸入內容的帶 ID 訊息(不區分大小寫、以豎線符號分隔、* 萬用字元)。",
+ "apihelp-query+messagegroups-param-format": "樹狀格式訊息群組可存在於樹狀的多個位置裡。",
+ "apihelp-query+messagegroups-param-iconsize": "點陣化群組圖標首選尺寸大小。",
+ "apihelp-query+messagegroups-param-prop": "要取得的翻譯相關資訊:\n;id:包含群組的 ID。\n;label:包含群組的標籤。\n;description:包含群組的描述。\n;class:包含群組的類別名稱。\n;namespace:包含群組的命名空間。並非所有群組都屬於單一命名空間。\n;exists:包含自我估計的群組存有屬性。\n;icon:包含至群組圖標的 URL。\n;priority:包含的優先狀態,例如像是不建議。\n;prioritylangs:包含首選的語言。若未設定,則回傳 false。\n;priorityforce:包含的優先狀態 - 優先語言是否被強制設定。\n;workflowstates:包含群組訊息的工作流狀態。",
+ "apihelp-query+messagegroups-param-root": "當使用樹狀格式時,不要從所提供訊息群組起始的最高層級來開始,這必須是個集合訊息群組。當使用平面格式時僅會回傳指定群組。",
+ "apihelp-query+messagegroups-example-1": "顯示訊息群組",
+ "apihelp-query+messagegroupstats-description": "查詢訊息群組統計。",
+ "apihelp-query+messagegroupstats-summary": "查詢訊息群組統計。",
+ "apihelp-query+messagegroupstats-param-timelimit": "花費計算遺失統計資料的最長時間。若為零,僅會回傳從起始快取的內容。",
+ "apihelp-query+messagegroupstats-param-group": "訊息群組 ID。",
+ "apihelp-query+messagegroupstats-example-1": "針對「page-Example」群組的翻譯完成度統計清單",
+ "apihelp-query+messagetranslations-description": "查詢單一訊息的所有翻譯。",
+ "apihelp-query+messagetranslations-summary": "查詢單一訊息的所有翻譯。",
+ "apihelp-query+messagetranslations-param-title": "已知訊息的完整標題。",
+ "apihelp-query+messagetranslations-example-1": "Wiki 裡用於「MediaWiki:January」的翻譯清單",
+ "apihelp-translatesandbox-description": "註冊並管理沙盒使用者。",
+ "apihelp-translatesandbox-summary": "註冊並管理沙盒使用者。",
+ "apihelp-translatesandbox-param-do": "要做什麼。",
+ "apihelp-translatesandbox-param-userid": "要管理的使用者 ID。0 用於創建。",
+ "apihelp-translatesandbox-param-username": "建立使用者時的使用者名稱。",
+ "apihelp-translatesandbox-param-password": "建立使用者時的密碼。",
+ "apihelp-translatesandbox-param-email": "建立使用者時發送電子郵件。",
+ "apihelp-translationaids-description": "查詢所有翻譯協助。",
+ "apihelp-translationaids-summary": "查詢所有翻譯協助。",
+ "apihelp-translationaids-param-title": "已知訊息的完整標題。",
+ "apihelp-translationaids-param-group": "訊息所屬於訊息群組。若為空則使用主群組。",
+ "apihelp-translationaids-param-prop": "要包含的翻譯助手。",
+ "apihelp-translationaids-example-1": "顯示 [[MediaWiki:January/fi]] 的協助",
+ "apihelp-translationreview-description": "標記翻譯為已審查。",
+ "apihelp-translationreview-summary": "標記翻譯為已審查。",
+ "apihelp-translationreview-param-revision": "要審查的修訂號碼。",
+ "apihelp-translationreview-example-1": "審查修訂 1",
+ "apihelp-translationstash-description": "添加翻譯至暫存區。",
+ "apihelp-translationstash-summary": "添加翻譯至暫存區。",
+ "apihelp-translationstash-param-subaction": "操作。",
+ "apihelp-translationstash-param-title": "翻譯單元頁面的標題。",
+ "apihelp-translationstash-param-translation": "由使用者所做出的翻譯。",
+ "apihelp-translationstash-param-metadata": "JSON 物件。",
+ "apihelp-translationstash-param-username": "選用的暫存區取得使用者。僅帶有特定權限的使用者可以執行此操作。",
+ "apihelp-translationstash-example-1": "添加翻譯到 [[MediaWiki:Jan/fi]] 的暫存區",
+ "apihelp-translationstash-example-2": "查詢暫存區",
+ "apihelp-ttmserver-description": "從翻譯記憶查詢建議。",
+ "apihelp-ttmserver-summary": "從翻譯記憶查詢建議。",
+ "apihelp-ttmserver-param-service": "可供使用的翻譯服務。",
+ "apihelp-ttmserver-param-sourcelanguage": "原始文字的語言代碼。",
+ "apihelp-ttmserver-param-targetlanguage": "建議的語言代碼。",
+ "apihelp-ttmserver-param-text": "用於尋找建議的文字。",
+ "apihelp-ttmserver-example-1": "取得將「Help」從英語翻譯成芬蘭語的建議",
"apihelp-searchtranslations-description": "搜尋翻譯。",
+ "apihelp-searchtranslations-summary": "搜尋翻譯。",
+ "apihelp-searchtranslations-param-service": "可供使用的翻譯服務。",
"apihelp-searchtranslations-param-query": "欲搜尋的字串。",
"apihelp-searchtranslations-param-sourcelanguage": "原始文字的語言碼。",
+ "apihelp-searchtranslations-param-language": "要搜尋字串的語言代碼。",
+ "apihelp-searchtranslations-param-group": "要搜尋字串的群組 ID。",
"apihelp-searchtranslations-param-filter": "訊息翻譯狀態篩選器。",
"apihelp-searchtranslations-param-match": "符合任何/所有搜尋文字。",
- "apihelp-searchtranslations-param-limit": "結果的大小。"
+ "apihelp-searchtranslations-param-case": "(不)區分大小寫搜尋。",
+ "apihelp-searchtranslations-param-offset": "翻譯偏差",
+ "apihelp-searchtranslations-param-limit": "結果的大小。",
+ "apihelp-searchtranslations-example-1": "顯示用於語言的翻譯。",
+ "apihelp-searchtranslations-example-2": "顯示在來源語言裡符合查詢的尚未翻譯訊息。",
+ "apihelp-translationcheck-description": "驗證提供的翻譯輸入內容是否符合訊息檢查者要求。",
+ "apihelp-translationcheck-summary": "驗證翻譯。",
+ "apihelp-translationcheck-param-title": "帶有命名空間與語言代碼的頁面標題。",
+ "apihelp-translationcheck-param-translation": "要驗證的翻譯。",
+ "apierror-translate-duplicateaggregategroup": "訊息群組已存在",
+ "apierror-translate-fuzzymessage": "不能審查已過時翻譯",
+ "apierror-translate-groupreviewdisabled": "未使用訊息群組審查。",
+ "apierror-translate-invalidaggregategroup": "無效集合訊息群組",
+ "apierror-translate-invalidaggregategroupname": "無效集合訊息群組名稱",
+ "apierror-translate-invalidgroup": "群組不存在或無效",
+ "apierror-translate-invalidstate": "請求的狀態無效。",
+ "apierror-translate-invalidlanguage": "請求的語言無效。",
+ "apierror-translate-invalidupdate": "無效更新",
+ "apierror-translate-language-disabled": "對$1的翻譯已停用。",
+ "apierror-translate-language-disabled-reason": "對$1的翻譯已停用:$2",
+ "apierror-translate-nodynamicgroups": "在此不支援動態訊息群組",
+ "apierror-translate-nomessagefortitle": "標題與可翻譯訊息不一致",
+ "apierror-translate-notranslationservices": "未設置開放翻譯服務。在此功能可使用前,Wiki 管理員需適當設定 <var>$wgTranslateTranslationServices</var>。",
+ "apierror-translate-owntranslation": "不能審查自己的翻譯",
+ "apierror-translate-sandboxdisabled": "未使用沙盒功能",
+ "apierror-translate-sandbox-invalidppassword": "無效密碼",
+ "apierror-translate-unknownmessage": "未知訊息",
+ "apiwarn-translate-alreadyreviewedbyyou": "已由您標記為已審查",
+ "apiwarn-translate-language-disabled-source": "此群組的來源語言是$1。請選擇其它的語言來翻譯。"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/abs.json b/www/wiki/extensions/Translate/i18n/core/abs.json
new file mode 100644
index 00000000..53e3d5db
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/abs.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anok kutai jang"
+ ]
+ },
+ "translate-documentation-language": "Dokumentasi pasang"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/ace.json b/www/wiki/extensions/Translate/i18n/core/ace.json
index 8e60231a..7c9a2d0e 100644
--- a/www/wiki/extensions/Translate/i18n/core/ace.json
+++ b/www/wiki/extensions/Translate/i18n/core/ace.json
@@ -3,14 +3,12 @@
"authors": [
"Rachmat.Wahidi",
"Ayie7791",
- "Si Gam Acèh"
+ "Si Gam Acèh",
+ "Rachmat04"
]
},
"translate": "Teujeumah",
"translate-desc": "[[Special:Translate|Laman kusuih]] keu neuteujeumah MediaWiki ngön nyang la'én",
- "translate-taskui-view": "Peudeuh ban dum peusan",
- "translate-taskui-untranslated": "Peudeuh peusan nyang gohlom meuteujeumah",
- "translate-taskui-reviewall": "Kalön ban dum teujeumah",
"translate-taction-translate": "Teujeumah",
"translate-taction-proofread": "Kalön",
"translate-taction-lstats": "Keunira bahsa",
@@ -33,16 +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-ext-url": "<hr />Alamat wèb: $1",
+ "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-edit-committed": "Teujeumah lam peukakah leumiek jinoe",
+ "translate-manage-import-new": "Peusan barô $1",
"translate-documentation-language": "Dokumentasi peusan"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/aeb-arab.json b/www/wiki/extensions/Translate/i18n/core/aeb-arab.json
new file mode 100644
index 00000000..2569f5e1
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/aeb-arab.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Csisc"
+ ]
+ },
+ "tux-proofread-edit-label": "بدّل"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/af.json b/www/wiki/extensions/Translate/i18n/core/af.json
index cb500417..ae714128 100644
--- a/www/wiki/extensions/Translate/i18n/core/af.json
+++ b/www/wiki/extensions/Translate/i18n/core/af.json
@@ -6,16 +6,12 @@
"Byeboer",
"Naudefj",
"SPQRobin",
- "පසිඳු කාවින්ද"
+ "පසිඳු කාවින්ද",
+ "Fwolff"
]
},
"translate": "Vertaal",
- "translate-desc": "[[Special:Translate|Spesiale bladsy]] vir vertaal van MediaWiki en meer",
- "translate-taskui-view": "Wys alle boodskappe",
- "translate-taskui-untranslated": "Wys onvertaalde boodskappe",
- "translate-taskui-optional": "Wys opsionele boodskappe.",
- "translate-taskui-acceptqueue": "Slegs boodskappe wat ek kan aanvaar",
- "translate-taskui-reviewall": "Kontroleer alle vertalings",
+ "translate-desc": "[[Special:Translate|Spesiale bladsy]] om MediaWiki en meer te vertaal",
"translate-taction-translate": "Vertaal",
"translate-taction-proofread": "Proeflees",
"translate-taction-lstats": "Taalstatistieke",
@@ -41,7 +37,6 @@
"translate-page-description-legend": "Inligting oor hierdie groep",
"translate-page-description-hasoptional-open": "Wys opsionele boodskappe.",
"translate-page-edit": "wysig",
- "translate-ext-url": "<hr />Webwerf: $1",
"translate-optional": "(opsioneel)",
"translate-ignored": "(geïgnoreer)",
"translate-edit-title": "Wysig \"$1\"",
@@ -51,9 +46,7 @@
"translate-edit-no-information": "''Die boodskap het geen dokumentasie nie.''\n''As u weet waar die boodskap gebruik word, kan u ander gebruikers help deur dokumentasie by te voeg.''",
"translate-edit-information": "Inligting oor boodskap ($1)",
"translate-edit-in-other-languages": "Boodskap in ander tale",
- "translate-edit-committed": "Huidige vertaling in sagteware",
"translate-edit-warnings": "Waarskuwings oor onvoltooide vertalings",
- "translate-edit-tmsugs": "Voorstelle uit die vertaalgeheue",
"translate-edit-tmmatch-source": "Bronteks vir vertaling: $1",
"translate-edit-tmmatch": "$1% ooreenkoms",
"translate-use-suggestion": "Vervang die huidige vertaling met hierdie voorstel.",
@@ -104,7 +97,7 @@
"translate-rc-translation-filter": "Filter vertalings:",
"translate-rc-translation-filter-no": "Doen niks nie",
"translate-rc-translation-filter-only": "Wys slegs vertalings",
- "translate-rc-translation-filter-filter": "Filter vertalings uit",
+ "translate-rc-translation-filter-filter": "Filtreer vertalings uit",
"translate-rc-translation-filter-site": "Slegs veranderinge aan werfboodskappe",
"translationstats": "Vertaalstatistieke",
"translate-stats-edits": "Wysigings",
@@ -132,7 +125,6 @@
"translate-statsf-language": "Kommageskeide lys van taalkodes:",
"translate-statsf-group": "Kommageskeide lys van groepkodes:",
"translate-statsf-submit": "Voorskou",
- "translate-tag-category": "Vertaalbare bladsye",
"translate-tag-page-desc": "Vertaling van die wikibladsy [[$2|$1]].",
"translate-sidebar-alltrans": "In ander tale",
"translations": "Alle vertalings",
@@ -161,7 +153,7 @@
"translate-language": "Taal",
"translate-total": "Boodskappe",
"translate-untranslated": "Onvertaal",
- "translate-percentage-complete": "Vertaal",
+ "translate-percentage-complete": "Vertaald",
"translate-percentage-fuzzy": "Verouderd",
"translate-languagestats-overall": "Alle boodskapgroepe saam",
"translate-ls-submit": "Wys statistieke",
@@ -181,7 +173,7 @@
"supportedlanguages-translators": "{{PLURAL:$2|Vertaler|Vertalers}}: $1",
"supportedlanguages-recenttranslations": "onlangse vertalings",
"supportedlanguages-count": "$1 {{PLURAL:$1|taal|tale}} in totaal.",
- "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|wysiging|wysigings}} - laaste wysiging {{PLURAL:$3|gister|$1 dae}} gelede",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|wysiging|wysigings}} - laaste wysiging {{PLURAL:$3|gister|$3 dae gelede}}",
"translate-save": "Stoor ($1)",
"translate-jssti-add": "Voeg by lys",
"managemessagegroups": "Beheer boodskapgroepe",
@@ -203,7 +195,6 @@
"translate-manage-toolong": "Die maksimum verwerkingstyd van $1 {{PLURAL:$1|sekonde|sekondes}} is oorskry.\nDien die opdrag asseblief weer in.",
"translate-manage-import-summary": "Besig met die importering van 'n nuwe weergawe vanuit 'n eksterne bron",
"translate-manage-conflict-summary": "Besig met die importering van 'n nuwe weergawe vanuit 'n eksterne bron.\nKontroleer die wysiging.",
- "translate-manage-fuzzy-summary": "Die boodskap se definisie is gewysig",
"translate-manage-submit": "Voer uit",
"translate-manage-import-ok": "Nuwe weergawe van die bladsy $1 is gelaai.",
"translate-manage-import-done": "Klaar!",
@@ -220,9 +211,7 @@
"translate-js-summary": "Samevatting:",
"translate-js-save": "Stoor",
"translate-js-next": "Stoor en open die volgende",
- "translate-js-nonext": "Dit was die laaste boodskap op hierdie bladsy.",
"translate-js-skip": "Slaan oor en volgende",
- "translate-js-save-failed": "Stoor het misluk. Rapporteer asb. hierdie fout.",
"translate-js-history": "Vertaalgeskiedenis",
"translate-js-support": "Vra 'n vraag",
"translate-js-support-title": "Vra vir hulp as daar nie genoeg inligting is om hierdie boodskap korrek te vertaal nie.",
@@ -239,21 +228,9 @@
"translate-documentation-language": "Boodskapbeskrywing",
"translate-searchprofile": "Vertalings",
"translate-searchprofile-tooltip": "Soek in alle vertalings",
- "translate-search-languagefilter": "Filter deur taal:",
+ "translate-searchprofile-note": "Die [$1 vertalingssoekfunsie] bied meer opsies.",
+ "translate-search-languagefilter": "Filtreer volgens taal:",
"translate-search-nofilter": "Geen filter",
- "translate-messagereview-submit": "Aanvaar",
- "translate-messagereview-progress": "Besig om te aanvaar...",
- "translate-messagereview-failure": "Besig om te aanvaar... Gefaal: $1",
- "translate-messagereview-done": "Aanvaar",
- "translate-messagereview-reviews": "Aanvaar deur {{PLURAL:$1|'n gebruiker|$1 gebruikers}}",
- "translate-messagereview-reviewswithyou": "Aanvaar deur {{PLURAL:$1|u|$1 gebruikers, insluitende uself}}",
- "api-error-invalidrevision": "Die vertaling is nie gevind nie.",
- "api-error-unknownmessage": "Die boodskap is nie gevind nie.",
- "api-error-fuzzymessage": "Die vertaling is gemerk 'n fuzzy",
- "api-error-owntranslation": "Jy kan nie jou eie vertalings aanvaar",
- "translate-messagereview-no-fuzzy": "Fuzzy vertalings kan nie aanvaar word nie.",
- "translate-messagereview-no-own": "Jy kan nie jou eie vertalings aanvaar.",
- "translate-messagereview-doit": "Aanvaar hierdie vertaling as 'n korrekte vertaling.",
"log-name-translationreview": "Vertaling review log",
"log-description-translationreview": "Logboek met alle kontroles van vertalings en boodskapgroepe.",
"logentry-translationreview-message": "$1 {{GENDER:$2|het}} die vertaling $3 aanvaar",
@@ -267,7 +244,6 @@
"translate-dynagroup-recent-label": "onlangse vertalings",
"translate-dynagroup-additions-label": "Onlangse toevoegings",
"translate-dynagroup-additions-desc": "Hierdie boodskapgroep wys nuwe en gewysigde boodskappe:",
- "translate-gethelp": "Hulp",
"translate-msggroupselector-projects": "Boodskapgroep",
"translate-msggroupselector-search-placeholder": "Soek groepe",
"translate-msggroupselector-search-all": "Alle",
@@ -277,13 +253,13 @@
"tux-tab-all": "Alle",
"tux-tab-untranslated": "Onvertaald",
"tux-tab-outdated": "Verouderd",
- "tux-tab-translated": "Vertaal",
+ "tux-tab-translated": "Vertaald",
"tux-tab-unproofread": "Ongekontroleerd",
"tux-edit": "Wysig",
"tux-status-optional": "Opsioneel",
"tux-status-fuzzy": "Verouderd",
"tux-status-proofread": "Gekontroleerd",
- "tux-status-translated": "Vertaal",
+ "tux-status-translated": "Vertaald",
"tux-status-saving": "Stoor...",
"tux-status-unsaved": "Ongestoor",
"tux-editor-placeholder": "U vertaling",
@@ -322,7 +298,7 @@
"tux-editor-doc-editor-cancel": "Kanselleer",
"tux-messagetable-more-messages": "Nog {{PLURAL:$1|een boodskap|$1 boodskappe}}",
"tux-messagetable-loading-messages": "Besig met laai van {{PLURAL:$1|boodskap|boodskappe}}...",
- "tux-message-filter-placeholder": "Filter lys",
+ "tux-message-filter-placeholder": "Filtreer lys",
"tux-message-filter-result": "{{PLURAL:$1|Een resultaat|$1 resultate}} gevind vir \"$2\"",
"tux-message-filter-advanced-button": "Uitgebreide soektog",
"tux-message-filter-optional-messages-label": "Opsionele boodskappe",
diff --git a/www/wiki/extensions/Translate/i18n/core/ais.json b/www/wiki/extensions/Translate/i18n/core/ais.json
new file mode 100644
index 00000000..6771822f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/ais.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bunukwiki",
+ "Benel",
+ "Tokoabibi"
+ ]
+ },
+ "translate-edit-translation": "mibelih",
+ "translate-export-form-format": "kese",
+ "translate-statsf-count-registrations": "baluhay misaungayay",
+ "translations": "sacahamin a belih nu kamu",
+ "translate-langstats-collapse": "piked",
+ "translate-documentation-language": "palatuh buhci tu kamu a sulit",
+ "translate-searchprofile": "mibelih",
+ "tux-editor-discard-changes-button-label": "miales tu masumaday",
+ "tux-warnings-hide": "midimut",
+ "tux-editor-message-desc-less": "mikabu",
+ "tux-editor-translate-mode": "piazihan tu sulit",
+ "tux-editor-close-tooltip": "edeben",
+ "tux-editor-collapse-tooltip": "piked",
+ "tux-editor-message-tools-translations": "sacahamin a belih nu kamu",
+ "tux-editor-loading": "miasip henay ayza..."
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/aln.json b/www/wiki/extensions/Translate/i18n/core/aln.json
index 1ec63243..b37e7122 100644
--- a/www/wiki/extensions/Translate/i18n/core/aln.json
+++ b/www/wiki/extensions/Translate/i18n/core/aln.json
@@ -21,7 +21,6 @@
"translate-prev": "Faqja e mëparshme",
"translate-page-description-legend": "Informata për grupin e",
"translate-page-edit": "redaktoj",
- "translate-ext-url": "<hr /> Website: $1",
"translate-optional": "(Optional)",
"translate-ignored": "(Injorohen)",
"translate-edit-definition": "përkufizim Mesazh",
@@ -29,9 +28,7 @@
"translate-edit-no-information": "''Ky mesazh nuk ka asnjë dokumentacion. Nëse ju e dini se ku apo se si ky mesazh është përdorur, ju mund të ndihmoni përkthyes të tjerë duke dokumentacionin në këtë mesazh.''",
"translate-edit-information": "Informacion rreth mesazh \"$2\" ($1)",
"translate-edit-in-other-languages": "Mesazhi \"$1\" në gjuhë të tjera",
- "translate-edit-committed": "përkthimin e tanishme në softuer",
"translate-edit-warnings": "Paralajmërimet për përkthime të plota",
- "translate-edit-tmsugs": "Sugjerime nga memorie përkthimi",
"translate-edit-tmmatch": "ndeshje $1%",
"translate-manage-import-diff": "Mesazhi $1 | Veprimi: $2",
"translate-manage-import-new": "mesazh i ri $1",
@@ -46,7 +43,6 @@
"translate-manage-toolong": "Përpunimit kohë maksimale prej $1 {{PLURAL:$1|sekonda|dytë}} tejkalohen. Ju lutemi të rikthejë formën për të vazhduar të përpunimit.",
"translate-manage-import-summary": "Importimi i një version të ri nga burimet e jashtme",
"translate-manage-conflict-summary": "Importimi i një version të ri nga burimi i jashtëm. Ju lutem kontrolloni.",
- "translate-manage-fuzzy-summary": "Përkufizimi ka ndryshuar",
"translate-manage-submit": "Kryej",
"translate-manage-intro-other": "Më poshtë është lista e ndryshimeve të përkthimit në gjuhën e $1. Ju lutemi të shqyrtuar ndryshimet dhe të zgjidhni një veprim që ju doni të bëni për çdo përkthim. Nëse ju vendosni të injorojë ndryshime, ata do të kapërcehet në eksportin e ardhshme.",
"translate-manage-import-ok": "version i importuar i ri i faqes $1.",
diff --git a/www/wiki/extensions/Translate/i18n/core/ami.json b/www/wiki/extensions/Translate/i18n/core/ami.json
new file mode 100644
index 00000000..7d3f271a
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/ami.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vickylin77s"
+ ]
+ },
+ "translate-documentation-language": " pitahapinangan to lihaf a codad"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/ar.json b/www/wiki/extensions/Translate/i18n/core/ar.json
index 3897c383..8a5f6c2c 100644
--- a/www/wiki/extensions/Translate/i18n/core/ar.json
+++ b/www/wiki/extensions/Translate/i18n/core/ar.json
@@ -15,61 +15,67 @@
"لطرش احمد الهاشمي",
"Gagnabil",
"محمد أحمد عبد الفتاح",
- "Maroen1990"
+ "Maroen1990",
+ "Mr. Ibrahem",
+ "ديفيد",
+ "Hhaboh162002"
]
},
"translate": "ترجمة",
+ "translate-extensionname": "ترجمة",
"translate-desc": "[[Special:Translate|صفحة خاصة]] لترجمة الميدياويكي وما بعده",
- "translate-taskui-view": "أظهر كل الرسائل",
- "translate-taskui-untranslated": "أظهر الرسائل غير المترجمة",
- "translate-taskui-optional": "أظهر الرسائل الاختيارية",
- "translate-taskui-acceptqueue": "فقط الرسائل التي يمكنني مراجعتها",
- "translate-taskui-reviewall": "مراجعة كل الترجمات",
+ "translate-fuzzybot-desc": "هذا حساب نظام خاص يستخدمه [https://www.mediawiki.org/wiki/Extension:Translate امتداد ترجمة] ميدياويكي ومستخدم للحفاظ على الترجمات،\nهذا الحساب جزء من برنامج ميدياويكي وليس مملوك لأي مستخدم.",
+ "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-taction-disabled": "هذا التصرف معطل على هذا الويكي.",
"translate-page-no-such-language": "لم تكن اللغة المحددة صحيحة.",
"translate-page-no-such-group": "المجموعة المحددة غير صحيحة.",
"translate-page-disabled": "الترجمات إلى هذه اللغة في هذه المجموعة تم تعطيلها. السبب:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 هي لغة المصدر لهذه الصفحة.",
- "translate-language-disabled": "الترجمات لهذه اللغة غير مفعلة.",
+ "translate-language-disabled": "الترجمات إلى هذه اللغة غير مفعلة.",
"translate-page-settings-legend": "الإعدادات",
"translate-page-group": "المجموعة",
"translate-page-language": "اللغة",
"translate-page-limit": "الحد",
"translate-page-limit-option": "{{PLURAL:$1||رسالة واحدة|رسالتان|$1 رسالات|$1 رسالة}} للصفحة",
"translate-submit": "اجلب",
- "translate-page-navigation-legend": "الإبحار",
+ "translate-page-navigation-legend": "التصفح",
"translate-page-showing": "عرض الرسائل من $1 إلى $2 ل $3.",
"translate-page-showing-all": "عرض {{PLURAL:$1||رسالة واحدة|رسالتين|$1 رسائل|$1 رسالة}}.",
+ "translate-page-showing-none": "لا رسائل للعرض.",
"translate-next": "الصفحة التالية",
"translate-prev": "الصفحة السابقة",
"translate-page-description-legend": "معلومات حول المجموعة",
- "translate-page-description-hasoptional": "مجموعة الرسائل هذه تحتوي على رسائل اختيارية.\n\nتترجم الرسائل الاختيارية عندما تكون لغتك بحاجة الى متطلبات خاصة\n\nمثل عدم استخدام مسافات أو ترجمة اسماء فريدة. $1",
+ "translate-page-description-hasoptional": "مجموعة الرسائل هذه تحتوي على رسائل اختيارية.\n\nيجب أن تترجم الرسائل الاختيارية فقط حينما تكون لغتك لها متطلبات خاصة\n\nمثل عدم استخدام مسافات أو الترجمة الحرفية لأسماء العلم. $1",
"translate-page-description-hasoptional-open": "إظهار الرسائل الاختيارية.",
"translate-page-edit": "عدل",
- "translate-ext-url": "<hr />موقع الوب: $1",
"translate-optional": "(اختياري)",
"translate-ignored": "(متجاهل)",
"translate-edit-title": "عدل \"$1\"",
"translate-edit-definition": "تعريف الرسالة",
"translate-edit-translation": "الترجمة",
"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-warnings": "التحذيرات حول الترجمات غير المكتملة",
+ "translate-edit-warnings": "التحذيرات الخاصة بالترجمات غير المكتملة",
"translate-edit-tmmatch-source": "نص المصدر للترجمة: $1",
"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-help": "يمكنك ترجمة أسماء الصفحات الخاصة، والكلمات السحرية، وأسماء النطاقات.\n\nأسماء الصفحات الخاصة والكلمات السحرية يمكن أن يكون لها ترجمات متعددة.\nالترجمات تفصل بواسطة فاصلة (,).\nأسماء النطاقات يمكن أن يكون لها ترجمة واحدة فقط.\n\nفي ترجمات النطاقات <code>$1 talk</code> خاص. <code>$1</code> يتم استبدالها باسم الموقع (على سبيل المثال <code>{{ns:project_talk}}</code>).\nلو أنه من غير الممكن في لغتك صياغة تعبير صحيح بدون تغيير اسم الموقع، من فضلك اتصل بمطور.\n\nتحتاج إلى أن تكون في مجموعة المترجمين لحفظ التغييرات.\nالتغييرات لن يتم حفظها حتى تضغط زر الحفظ بالأسفل.",
- "translate-magic-module": "مكونة:",
+ "translate-magic-help": "يمكنك ترجمة أسماء الصفحات الخاصة، والكلمات السحرية، وأسماء النطاقات.\n\nأسماء الصفحات الخاصة والكلمات السحرية يمكن أن يكون لها ترجمات متعددة.\nالترجمات تفصل بواسطة فاصلة (,).\nأسماء النطاقات يمكن أن يكون لها ترجمة واحدة فقط.\n\nترجمة نطاق نقاش المشروع <code>$1 talk</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": "لا يوجد شيء يمكن تصديره.",
@@ -77,9 +83,9 @@
"translate-magic-cm-current": "حالي",
"translate-magic-cm-original": "الأصلي",
"translate-magic-cm-comment": "تعليق:",
- "translate-magic-cm-save": "احفظ",
+ "translate-magic-cm-save": "حفظ",
"translate-magic-cm-updatedusing": "حدث باستخدام [[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]",
- "translate-magic-cm-savefailed": "الحفظ فشل",
+ "translate-magic-cm-savefailed": "فشل الحفظ",
"translate-magic-special": "أسماء الصفحات الخاصة",
"translate-magic-words": "كلمات سحرية",
"translate-magic-namespace": "أسماء النطاقات",
@@ -93,20 +99,36 @@
"translate-checks-links-missing": "{{PLURAL:$2||الوصلة التالية مفقودة|الوصلتان التاليتان مفقودتان|ال$2 وصلات التالية مفقودة|ال$2 وصلة التالية مفقودة}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "من فضلك استبدل {{PLURAL:$2||الوسم التالي|الوسمين التاليين|الوسوم التالية}} بالوسوم الصحيحة:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "التعريف يستخدم <nowiki>{{PLURAL:}}</nowiki> لكن الترجمة لا.",
+ "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|sheep|sheep}}</nowiki> ينبغي أن تتم كتابتها ك <nowiki>{{PLURAL:$1|sheep}}</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-fudforum-syntax": "استخدم <nowiki>$1</nowiki> بدلًا من <nowiki>$2</nowiki> في هذا المشروع.",
- "translate-pref-nonewsletter": "لا ترسل إليّ إخطارات بريدية بالبريد الإلكتروني",
+ "translate-pref-nonewsletter": "لا ترسل إليّ نشرات إخبارية عن طريق البريد الإلكتروني",
"translate-pref-editassistlang": "لغات المساعد:",
"prefs-translate": "خيارات الترجمة",
"translate-pref-editassistlang-help": "قائمة برموز اللغات مفصولة بفواصل.\nتُعرض ترجمة الرسالة بهذه اللغات عندما تترجم.\nقائمة اللغات المبدئية تعتمد على لغتك.",
"translate-pref-editassistlang-bad": "رمز لغة غير صالح في القائمة:\n<nowiki>$1</nowiki>.",
"right-translate": "التعديل باستخدام واجهة الترجمة",
+ "action-translate": "التعديل باستخدام واجهة الترجمة",
"right-translate-manage": "إدارة مجموعات الرسائل",
"action-translate-manage": "إدارة مجموعات الرسائل",
"right-translate-import": "استيراد الترجمات من الخارج",
+ "action-translate-import": "استيراد الترجمات من الخارج",
"right-translate-messagereview": "مراجعة الترجمات",
+ "action-translate-messagereview": "مراجعة الترجمات",
+ "right-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-rc-translation-filter": "رشّح الترجمات:",
"translate-rc-translation-filter-no": "لا تفعل شيئا",
"translate-rc-translation-filter-only": "اعرض الترجمات فقط",
@@ -118,8 +140,8 @@
"translate-stats-registrations": "التسجيلات",
"translate-stats-reviews": "المراجعات",
"translate-stats-reviewers": "المراجعون",
- "translate-statsf-intro": "يمكنك توليد إحصاءات بسيطة بهذه الاستمارة. كل القيم لها حدود عليا وسفلى.",
- "translate-statsf-options": "خيارات الرسم",
+ "translate-statsf-intro": "يمكنك توليد إحصاءات بسيطة مستخدما هذا النموذج.\nكل القيم لها حدود قصوى ودنيا.",
+ "translate-statsf-options": "خيارات الرسم البياني",
"translate-statsf-width": "العرض بالبكسل:",
"translate-statsf-height": "الارتفاع بالبكسل:",
"translate-statsf-days": "فترة زمنية باليوم:",
@@ -144,11 +166,11 @@
"translations-summary": "أدخل اسم رسالة أسفله لعرض كل الترجمات المتوفرة.",
"translate-translations-no-message": "\"$1\" ليست رسالة قابلة للترجمة",
"translate-translations-none": "لا يوجد ترجمات ل\"$1\"",
- "translate-translations-count": "عثر {{PLURAL:$1|one translation|$1 translations}}.",
+ "translate-translations-count": "عثر على {{PLURAL:$1|ترجمة واحدة|$1 ترجمة}}.",
"translate-translations-fieldset-title": "الرسالة",
"translate-translations-messagename": "الاسم:",
"translate-translations-project": "المشروع:",
- "translate-translations-including-no-param": "من فضلك حدد مفتاح رسالة صحيح في معامل الصفحة الفرعية",
+ "translate-translations-including-no-param": "من فضلك حدد مفتاح رسالة صحيح في متغير الصفحة الفرعية",
"translate-translations-history-short": "ت",
"languagestats": "إحصاءات اللغة",
"languagestats-summary": "هذه الصفحة تعرض إحصاءات الترجمة لكل مجموعات الرسائل للغة.",
@@ -163,33 +185,43 @@
"translate-language-code": "رمز اللغة",
"translate-language-code-field-name": "رمز اللغة:",
"translate-suppress-complete": "تخطَ مجموعات الرسائل المترجمة كليا",
- "translate-ls-noempty": "تخطَ مجموعات الرسائل الغير مترجمة كليا",
+ "translate-ls-noempty": "تخطَ مجموعات الرسائل غير المترجمة كليا",
"translate-language": "اللغة",
"translate-total": "الرسائل",
- "translate-untranslated": "غير المترجمة",
- "translate-percentage-complete": "المكتمل",
- "translate-percentage-fuzzy": "غير المحدث",
- "translate-languagestats-overall": "جميع مجموعات الرسالة معا",
+ "translate-untranslated": "غير مترجمة",
+ "translate-percentage-complete": "مكتملة",
+ "translate-percentage-fuzzy": "غير محدثة",
+ "translate-percentage-proofread": "مراجعة",
+ "translate-languagestats-overall": "جميع مجموعات الرسائل معا",
"translate-ls-submit": "أظهر الإحصاءات",
- "translate-ls-column-group": "رسالة المجموعة",
+ "translate-ls-column-group": "مجموعة الرسائل",
"translate-mgs-pagename": "إحصاءات مجموعة الرسائل",
"translate-mgs-fieldset": "عرض التفضيلات",
- "translate-mgs-group": "رسالة المجموعة:",
- "translate-mgs-nocomplete": "لا تعرض اللغات التي أنجزت ترجمتها",
- "translate-mgs-noempty": "لا تعرض اللغات التي لم تنجز ترجمتها",
+ "translate-mgs-group": "مجموعة الرسائل:",
+ "translate-mgs-nocomplete": "لا تعرض اللغات التي تحتوي على ترجمات مكتملة",
+ "translate-mgs-noempty": "لا تعرض اللغات التي لا تحتوي على أية ترجمة",
"translate-mgs-submit": "أظهر الإحصاءات",
"translate-mgs-column-language": "اللغة",
- "translate-mgs-totals": "كل اللغات معا",
- "translate-mgs-invalid-group": "المجموعة المحددة $1 موجود على.",
- "translate-mgs-nothing": "لا شيء لاظهار الاحصاءات المطلوبة.",
+ "translate-mgs-totals": "كل $1 {{PLURAL:$1|لغة|لغات}} سويا",
+ "translate-mgs-invalid-group": "المجموعة المحددة $1 ليست موجودة.",
+ "translate-mgs-nothing": "لا يوجد شيء يعرض للإحصاءات المطلوبة.",
"supportedlanguages": "اللغات المدعومة",
- "supportedlanguages-summary": "تظهر هذه الصفحة قائمة بكل اللغات التي يدعمها {{SITENAME}}، مع أسماء المترجمين الذين يعملون على هذه اللغة. كلما ظهر اسم المترجم بخط أكبر، كان عدد تعديلاته أكثر. ويشير لون الخط السفلي إلى حداثة نشاط المترجم هنا.",
+ "supportedlanguages-summary": "تظهر هذه الصفحة قائمة بكل اللغات التي يدعمها {{SITENAME}}،\nمع أسماء المترجمين الذين يعملون على هذه اللغة.\nكلما ظهر اسم المترجم بخط أكبر، كان عدد تعديلاته أكثر.\nويشير لون الخط السفلي إلى حداثة نشاط المترجم هنا.",
+ "supportedlanguages-colorlegend": "مفتاح الألوان: آخر ترجمة منذ $1 يوم.",
+ "supportedlanguages-sqlite-error": "SQLite غير مدعوم",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|مترجم|مترجمة}}|مترجمون}}: $1",
"supportedlanguages-recenttranslations": "الترجمات الأخيرة",
- "translate-save": "احفظ ($1)",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|لغة|لغات}} إجمالا.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|تعديل|تعديلات}} - آخر تعديل منذ $3 {{PLURAL:$3|يوم|أيام}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "النص المصدر لوحدة الترجمة",
+ "translate-save": "حفظ ($1)",
"translate-jssti-add": "أضف إلى القائمة",
"managemessagegroups": "إدارة مجموعة الرسائل",
- "translate-smg-notallowed": "غير مسموح لك بتنفيذ هذا الفعل.",
+ "translate-smg-notallowed": "غير مسموح لك بتنفيذ هذا التصرف.",
"translate-smg-nochanges": "لا توجد تغييرات لمعالجتها.",
+ "translate-smg-submit": "إرسال التغييرات للمعالجة",
+ "translate-smg-submitted": "تعريفات الرسائل تم تحديثها. التغييرات تتم معالجتها في الخلفية.",
+ "translate-smg-more": "ستكون هناك المزيد من التغييرات للعملية بعد إرسال هذه التغييرات.",
"translate-smg-left": "محتوى الرسائل في الويكي",
"translate-smg-right": "التغييرات القادمة",
"translate-manage-import-diff": "الرسالة $1 | الإجراءات: $2",
@@ -206,7 +238,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": "استورد ترجمات",
@@ -220,11 +252,9 @@
"translate-import-err-no-headers": "الملف ليس ملف Gettext صحيح بصيغة امتداد الترجمة:\nغير قادر على تحديد المجموعة واللغة من مقدمة الملف.",
"translate-import-err-warnings": "الملف ليس مكونا بشكل صحيح.\nتأكد من أن محررك لا يزيل حقول msgctxt .\nالتفاصيل: $1",
"translate-js-summary": "ملخص:",
- "translate-js-save": "احفظ",
+ "translate-js-save": "حفظ",
"translate-js-next": "احفظ وافتح التالية",
- "translate-js-nonext": "كانت هذه آخر رسالة على هذه الصفحة.",
"translate-js-skip": "تخطَ إلى التالية",
- "translate-js-save-failed": "فشل الحفظ. من فضلك بلّغ عن هذا الخطأ.",
"translate-js-history": "تاريخ الترجمة",
"translate-js-support": "اطرح سؤالا",
"translate-js-support-title": "اطلب المساعدة إذا لم تكن لديك معلومات كافية لترجمة هذه الرسالة بشكل صحيح.",
@@ -238,33 +268,29 @@
"translate-gs-count": "العدد",
"translate-gs-total": "المجموع",
"translate-gs-avgscore": "معدل الدرجات",
- "translate-documentation-language": "رسالة التوثيق",
+ "translate-documentation-language": "توثيق الرسالة",
"translate-searchprofile": "ترجمات",
"translate-searchprofile-tooltip": "البحث عن كل الترجمات",
+ "translate-searchprofile-note": "المزيد من خيارات البحث متوفرة مع [$1 بحث الترجمة].",
"translate-search-languagefilter": "فلترة حسب اللغة",
"translate-search-nofilter": "لا فلترة",
- "translate-messagereview-submit": "علم كمراجعة",
- "translate-messagereview-progress": "جار التعليم كمراجعة...",
- "translate-messagereview-failure": "جاري الموافقة... فشل: $1",
- "translate-messagereview-done": "مراجعة",
- "translate-messagereview-reviews": "قبلها {{PLURAL:$1|مستخدم واحد|$1 مستخدمين}}",
- "translate-messagereview-reviewswithyou": "قبلها {{PLURAL:$1|مستخدم واحد|$1 مستخدمين}} بمن فيهم أنت",
- "api-error-invalidrevision": "لم يتم العثور على الترجمة",
- "api-error-unknownmessage": "لم يتم العثور على الرسالة",
- "api-error-fuzzymessage": "علمت الترجمة كغامضة",
- "api-error-owntranslation": "لا يمكنك قبول الترجمات الخاصة بك",
- "translate-messagereview-no-fuzzy": "الترجمات الغامضة لا يمكن قبولها.",
- "translate-messagereview-no-own": "لا يجوز لك قبول ترجماتك الشخصية.",
- "translate-messagereview-doit": "علم هذه الترجمة بوصفها مراجعة.",
"log-name-translationreview": "سجل مراجعة الترجمة",
"log-description-translationreview": "سجل كل مراجعات الترجمة ورسائل المجموعات.",
- "logentry-translationreview-message": "$1 {{GENDER:$2|قبل|قبلت}} الترجمة $3",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|راجع|راجعت}} الترجمة $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|غير|غيرت}} حالة ترجمات $4 ل$3 من $6 إلى $7",
"group-translate-sandboxed": "مترجمون غير موافق عليهم",
"group-translate-sandboxed-member": "{{GENDER:$1|مترجم غير موافق عليه|مترجمة غير موافق عليها}}",
+ "right-translate-sandboxmanage": "إدارة المستخدمين في الملعب",
+ "action-translate-sandboxmanage": "إدارة المستخدمين في الملعب",
+ "right-translate-sandboxaction": "نفذ الأفعال في القائمة البيضاء للمستخدمين في الملعب",
+ "action-translate-sandboxaction": "نفذ الأفعال في القائمة البيضاء للمستخدمين في الملعب",
"translate-workflow-state-": "(إلغاء المحدد)",
"translate-workflowstatus": "الحالة: $1",
"translate-workflow-set-doing": "إعداد...",
+ "translate-workflow-autocreated-summary": "إنشاء تلقائي للصفحة لحالة العمل $1",
"translate-stats-workflow": "الحالة",
+ "translate-workflowgroup-label": "حالات العمل",
+ "translate-workflowgroup-desc": "مجموعة الرسائل هذه تعرض حالات عمل الترجمة.\nالحالات معرفة في متغير الضبط $wgTranslateWorkflowStates.",
"translate-dynagroup-recent-label": "أحدث الترجمات",
"translate-dynagroup-recent-desc": "تظهر مجموعة الرسائل هذه كل الترجمات الحديثة لهذه اللغة. مفيدة لمهام المراجعة.",
"translate-dynagroup-additions-label": "الإضافات الأخيرة",
@@ -273,6 +299,7 @@
"translate-msggroupselector-search-placeholder": "ابحث عن المجموعات",
"translate-msggroupselector-search-all": "الكل",
"translate-msggroupselector-search-recent": "الأخيرة",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|مجموعة فرعية|مجموعات فرعية}}",
"tux-languageselector": "ترجم إلى",
"tux-tab-all": "الكل",
"tux-tab-untranslated": "غير المترجمة",
@@ -283,17 +310,20 @@
"tux-status-optional": "اختيارية",
"tux-status-fuzzy": "غير محدثة",
"tux-status-proofread": "جرى مراجعتها",
- "tux-status-translated": "ترجمت",
+ "tux-status-translated": "تُرجمت",
"tux-status-saving": "يحفظ...",
"tux-status-unsaved": "غير محفوظة",
+ "tux-save-unknown-error": "خطأ غير معروف حدث.",
"tux-editor-placeholder": "ترجمتك",
+ "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-edit-desc": "عدل التوثيق",
"tux-editor-add-desc": "إضافة توثيق",
"tux-editor-suggestions-title": "اقتراحات",
@@ -318,11 +348,11 @@
"tux-editor-outdated-warning": "قد تحتاج هذه الترجمة إلى تحديث.",
"tux-editor-outdated-warning-diff-link": "أظهر الفروق",
"tux-editor-doc-editor-placeholder": "توثيق الرسالة",
- "tux-editor-doc-editor-save": "احفظ التوثيق",
+ "tux-editor-doc-editor-save": "حفظ التوثيق",
"tux-editor-doc-editor-cancel": "ألغ",
"tux-messagetable-more-messages": "{{PLURAL:$1|رسالة أخرى|رسالتان أخرتان|$1 رسائل أخرى|$1 رسالة أخرى}}",
"tux-messagetable-loading-messages": "جار تحميل {{PLURAL:$1|الرسالة|الرسائل}}...",
- "tux-message-filter-placeholder": "صف القائمة",
+ "tux-message-filter-placeholder": "صفِّ القائمة",
"tux-message-filter-result": "وجد {{PLURAL:$1|لا نتائج|نتيجة واحدة|نتيجتين اثنين|$1 نتائج|$1 نتيجة}} في البحث عن \"$2\"",
"tux-message-filter-advanced-button": "بحث متقدم",
"tux-message-filter-optional-messages-label": "الرسائل الاختيارية",
@@ -348,13 +378,18 @@
"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": "احذف",
"tux-editor-message-tools-translations": "كل الترجمات",
+ "tux-editor-message-tools-linktothis": "وصلة لهذه الرسالة",
"tux-editor-loading": "تحميل...",
"translate-search-more-languages-info": "{{PLURAL:$1|لغة واحدة أخرى|لغتان أخريان|$1 لغات أخرى|$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": "خطأ في الضبط",
- "tux-nojs": "هذه الصفحة تتطلب جافاسكربت."
+ "translate-ulsdep-body": "امتداد Translate يعتمد على [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector امتداد Universal Language Selector].",
+ "tux-session-expired": "أنت لم تعد مسجل الدخول. من فضلك سجل الدخول في لسان منفصل. أو يمكنك عمل نسخة من الترجمات غير المحفوظة، تسجيل الدخول، العودة لهذه الصفحة وإدخال ترجماتك مجددا.",
+ "tux-nojs": "هذه الأداة لا تعمل بدون جافا سكريبت. الجافا سكريبت معطلة، فشلت في العمل، أو هذا المتصفح غير مدعوم."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/arc.json b/www/wiki/extensions/Translate/i18n/core/arc.json
index 7ad7e646..4fe4fcaf 100644
--- a/www/wiki/extensions/Translate/i18n/core/arc.json
+++ b/www/wiki/extensions/Translate/i18n/core/arc.json
@@ -6,9 +6,6 @@
},
"translate": "ܬܪܓܡ",
"translate-desc": "[[Special:Translate|ܦܐܬܐ ܕܝܠܢܝܬܐ]] ܠܬܘܪܓܡܐ ܕܡܝܕܝܐܘܝܩܝ ܘܒܬܪ ܗܟܢ",
- "translate-taskui-view": "ܚܘܝ ܟܠ ܐܓܪ̈ܬܐ",
- "translate-taskui-untranslated": "ܚܘܝ ܐܓܪ̈ܬܐ ܠܐ ܬܘܪ̈ܓܡܐ",
- "translate-taskui-optional": "ܚܘܝ ܐܓܪ̈ܬܐ ܓܒܝܬ̈ܐ",
"translate-taction-translate": "ܬܪܓܡ",
"translate-taction-proofread": "ܬܢܝ",
"translate-taction-lstats": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܠܫܢܐ",
@@ -36,7 +33,6 @@
"translate-edit-information": "ܝܕ̈ܥܬܐ ܥܠ ܦܐܬܐ ($1)",
"translate-edit-in-other-languages": "ܐܓܪܬܐ ܒܠܫܢ̈ܐ ܐܚܪ̈ܢܐ",
"translate-edit-warnings": "ܙܘܗܪ̈ܐ ܥܠ ܬܘܪ̈ܓܡܐ ܠܐ ܓܡܝܪ̈ܐ",
- "translate-edit-tmsugs": "ܡܚܫܚܬ̈ܐ ܡܢ ܥܘܗܕܢܐ ܕܬܘܪܓܡܐ",
"translate-edit-tmmatch": "$1% ܠܚܡܐ",
"translate-edit-askpermission": "ܫܩܘܠ ܦܣܣܐ",
"translate-magic-pagename": "ܬܘܪܓܡܐ ܕܡܝܕܝܐܘܝܩܝ ܡܬܝܚܬܐ",
@@ -93,7 +89,6 @@
"translate-js-summary": "ܦܣܝܩܬ̈ܐ:",
"translate-js-save": "ܠܒܘܟ",
"translate-js-next": "ܠܒܘܟ ܘܦܬܘܚ ܕܒܬܪܗ",
- "translate-js-nonext": "ܗܕܐ ܐܝܬܝܗܝ ܗܘܐ ܐܓܪܬܐ ܐܚܪܝܬܐ ܒܦܐܬܐ ܗܕܐ.",
"translate-js-skip": "ܫܘܪ ܠܒܬܪܗ",
"translate-js-history": "ܬܫܥܝܬܐ ܕܬܘܪܓܡܐ",
"translate-js-support": "ܫܐܠ ܫܘܐܠܐ",
diff --git a/www/wiki/extensions/Translate/i18n/core/ary.json b/www/wiki/extensions/Translate/i18n/core/ary.json
index 94b1f0c3..af782d3c 100644
--- a/www/wiki/extensions/Translate/i18n/core/ary.json
+++ b/www/wiki/extensions/Translate/i18n/core/ary.json
@@ -1,9 +1,12 @@
{
"@metadata": {
"authors": [
- "Enzoreg"
+ "Enzoreg",
+ "Reda Benkhadra"
]
},
"translate-manage-import-new": "Méṣaj jdid $1",
- "translate-manage-import-deleted": "Méṣaj memḫi $1"
+ "translate-manage-import-deleted": "Méṣaj memḫi $1",
+ "translate-msggroupselector-search-all": "كلشي",
+ "tux-tab-all": "كلشي"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/arz.json b/www/wiki/extensions/Translate/i18n/core/arz.json
index 2d664fae..cb5bb715 100644
--- a/www/wiki/extensions/Translate/i18n/core/arz.json
+++ b/www/wiki/extensions/Translate/i18n/core/arz.json
@@ -9,6 +9,7 @@
},
"translate": "ترجمة",
"translate-desc": "[[Special:Translate|صفحه خاصة]] لترجمه الميدياويكى وما بعده",
+ "translate-taction-lstats": "إحصاءات اللغه",
"translate-page-no-such-language": "لم تكن اللغه المحدده صحيحه.",
"translate-page-no-such-group": "المجموعه المحدده غير صحيحه.",
"translate-page-disabled": "الترجمات إلى هذه اللغه فى هذه المجموعه تم تعطيلها. السبب:\n\n<em>$1</em>",
@@ -22,24 +23,23 @@
"translate-page-showing": "عرض الرسائل من $1 إلى $2 ل $3.",
"translate-page-showing-all": "عرض {{PLURAL:$1||رساله واحدة|رسالتين|$1 رسائل|$1 رسالة}}.",
"translate-page-showing-none": "لا رسائل للعرض.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "الصفحه التالية",
"translate-prev": "الصفحه السابقة",
"translate-page-description-legend": "معلومات حول المجموعة",
"translate-page-edit": "عدل",
- "translate-ext-url": "<hr />موقع الوب: $1",
"translate-optional": "(اختياري)",
"translate-ignored": "(متجاهل)",
"translate-edit-definition": "تعريف الرسالة",
"translate-edit-contribute": "ساهم",
"translate-edit-no-information": "''ليس لهذه الرساله توثيق.\nإذا كنت تعرف أين أو كيف يتم استخدام هذه الرساله، فيمكنك مساعده المترجمين الآخرين بإضافه توثيق إلى هذه الرساله.''",
- "translate-edit-information": "معلومات حول الرساله \"$2\" ($1)",
- "translate-edit-in-other-languages": "الرساله \"$1\" بلغات أخرى",
- "translate-edit-committed": "الترجمه الحاليه فى البرنامج",
+ "translate-edit-information": "معلومات عن الرساله ($1)",
+ "translate-edit-in-other-languages": "الرساله بلغات تانيه",
"translate-edit-warnings": "التحذيرات حول الترجمات غير المكتملة",
- "translate-edit-tmsugs": "مقترحات من ذاكره الترجمة",
+ "translate-edit-tmmatch-source": "نص المصدر للترجمه: $1",
"translate-edit-tmmatch": "$1% مطابقة",
"translate-magic-pagename": "ترجمه ميدياويكى الممتدة",
- "translate-magic-help": "يمكنك ترجمه أسماء الصفحات الخاصه، والكلمات السحريه، وأسماء النطاقات.\n\nأسماء الصفحات الخاصه والكلمات السحريه يمكن أن يكون لها ترجمات متعدده.\nالترجمات تفصل بواسطه فاصله (,).\nأسماء النطاقات يمكن أن يكون لها ترجمه واحده فقط.\n\nفى ترجمات النطاقات <code>$1 talk</code> خاص. <code>$1</code> يتم استبدالها باسم الموقع (على سبيل المثال <code>{{ns:project_talk}}</code>).\nلو أنه من غير الممكن فى لغتك صياغه تعبير صحيح بدون تغيير اسم الموقع، من فضلك اتصل بمطور.\n\nتحتاج إلى أن تكون فى مجموعه المترجمين لحفظ التغييرات.\nالتغييرات لن يتم حفظها حتى تضغط زر الحفظ بالأسفل.",
+ "translate-magic-help": "يمكنك ترجمه أسماء الصفحات الخاصه، والكلمات السحريه، وأسماء النطاقات.\n\nأسماء الصفحات الخاصه والكلمات السحريه يمكن أن يكون لها ترجمات متعدده.\nالترجمات تفصل بواسطه فاصله (,).\nأسماء النطاقات يمكن أن يكون لها ترجمه واحده فقط.\n\nفى ترجمات النطاقات <code>$1 talk</code> خاص. <code>$1</code> يتم استبدالها باسم الموقع (على سبيل المثال <code>{{ns:project_talk}}</code>).\nلو أنه من غير الممكن فى لغتك صياغه تعبير صحيح بدون تغيير اسم الموقع، من فضلك اتصل بينا فى [[Support]].\n\nتحتاج إلى أن تكون فى مجموعه المترجمين لحفظ التغييرات.\nالتغييرات لن يتم حفظها حتى تضغط زر الحفظ بالأسفل.",
"translate-magic-module": "النوع:",
"translate-magic-submit": "اجلب",
"translate-magic-cm-export": "صدّر",
@@ -48,7 +48,7 @@
"translate-magic-cm-current": "الحالي",
"translate-magic-cm-original": "الأصلي",
"translate-magic-cm-comment": "تعليق:",
- "translate-magic-cm-save": "احفظ",
+ "translate-magic-cm-save": "سييف",
"translate-magic-cm-updatedusing": "حدث باستخدام [[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]",
"translate-magic-cm-savefailed": "الحفظ فشل",
"translate-magic-special": "أسماء الصفحات الخاصة",
@@ -56,7 +56,7 @@
"translate-magic-namespace": "أسماء النطاقات",
"translate-magic-notsaved": "تعديلك لم يُحفظ!",
"translate-magic-errors": "من فضلك أصلح {{PLURAL:$1||الخطأ|الخطأين|الأخطاء}} التاليه فى الترجمات:",
- "translate-magic-saved": "حُفظت تعديلاتك بنجاح.",
+ "translate-magic-saved": "تعديلاتك اتحفظت .",
"translate-checks-parameters": "{{PLURAL:$2||المحدد التالى غير مستخدم|المحددان التاليان غير مستخدمان|المحددات التاليه غير مستخدمة}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2||المحدد التالى غير معروف|المحددان التاليان غير معروفان|المحددات التاليه غير معروفة}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "يوجد عدد غير زوجى من {{PLURAL:$2|الأقواس}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -74,8 +74,11 @@
"translate-pref-editassistlang-help": "قائمه برموز اللغات مفصوله بفواصل.\nتُعرض ترجمه الرساله بهذه اللغات عندما تترجم.\nقائمه اللغات المبدئيه تعتمد على لغتك.",
"translate-pref-editassistlang-bad": "رمز لغه غير صالح فى القائمة:\n<nowiki>$1</nowiki>.",
"right-translate": "التعديل باستخدام واجهه الترجمة",
- "right-translate-manage": "إداره مجموعات الترجمة",
+ "right-translate-manage": "إدارة مجموعات الرسايل",
+ "action-translate-manage": "إدارة مجموعات الرسايل",
"right-translate-import": "استيراد الترجمات من الخارج",
+ "action-translate-import": "استيراد الترجمات من بره",
+ "right-translate-messagereview": "مراجعة الترجمات",
"translate-rc-translation-filter": "رشّح الترجمات:",
"translate-rc-translation-filter-no": "لا تفعل شيئا",
"translate-rc-translation-filter-only": "اعرض الترجمات فقط",
@@ -89,18 +92,20 @@
"translate-statsf-width": "العرض بالبكسل:",
"translate-statsf-height": "الارتفاع بالبكسل:",
"translate-statsf-days": "فتره زمنيه باليوم:",
- "translate-statsf-start": "فتره زمنيه باليوم:",
+ "translate-statsf-start": "تاريخ البدايه:",
"translate-statsf-scale": "التدريج:",
+ "translate-statsf-scale-months": "شهور",
+ "translate-statsf-scale-weeks": "اسابيع",
"translate-statsf-scale-days": "أيام",
"translate-statsf-scale-hours": "ساعات",
"translate-statsf-count": "قياس:",
"translate-statsf-count-edits": "عدد التعديلات",
"translate-statsf-count-users": "المترجمون النشطون",
+ "translate-statsf-count-registrations": "يوزرز جداد",
"translate-statsf-language": "قائمه بأكواد اللغات مفصوله بفاصلة:",
"translate-statsf-group": "قائمه بأكواد المجموعات مفصوله بفاصلة:",
"translate-statsf-submit": "عاين",
- "translate-tag-category": "صفحات قابله للترجمة",
- "translate-tag-page-desc": "ترجمه صفحه الويكى [[$2|$1]].",
+ "translate-tag-page-desc": "ترجمة صفحة الويكى [[$2|$1]] من $3 ($4).",
"translate-sidebar-alltrans": "بلغات أخرى",
"translations": "كل الترجمات",
"translations-summary": "أدخل اسم رساله أسفله لعرض كل الترجمات المتوفره.",
@@ -110,6 +115,7 @@
"translate-translations-messagename": "الاسم:",
"translate-translations-project": "المشروع:",
"translate-translations-including-no-param": "من فضلك حدد مفتاح رساله صحيح فى معامل الصفحه الفرعية",
+ "translate-translations-history-short": "ت",
"languagestats": "إحصاءات اللغة",
"languagestats-summary": "هذه الصفحه تعرض إحصاءات الترجمه لكل مجموعات الرسائل للغه.",
"translate-language-code": "رمز اللغة",
@@ -120,7 +126,10 @@
"translate-untranslated": "غير المترجمة",
"translate-percentage-complete": "المكتمل",
"translate-percentage-fuzzy": "غير المحدث",
- "translate-save": "احفظ ($1)",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|مترجم|مترجمه}}|مترجمين}}: $1",
+ "translate-save": "سييف ($1)",
"translate-jssti-add": "أضف إلى القائمة",
"translate-manage-import-diff": "الرساله $1 | الإجراءات: $2",
"translate-manage-import-new": "رساله جديده $1",
@@ -135,20 +144,20 @@
"translate-manage-toolong": "زمن المعالجه الأقصى ل$1 {{PLURAL:$1|second|seconds}} تم تجاوزه.\nمن فضلك أعد تنفيذ التموذج لإكمال المعالجه.",
"translate-manage-import-summary": "استيراد نسخه جديده من مصدر خارجي",
"translate-manage-conflict-summary": "استيراد نسخه جديده من مصدر خارجى.\nمن فضلك تحقق.",
- "translate-manage-fuzzy-summary": "التعريف تغير",
"translate-manage-submit": "نفّذ",
"translate-manage-intro-other": "بالأسفل قائمه بتغييرات الترجمه فى لغه $1.\nمن فضلك راجع التغييرات واختر فعلا تريد فعله لكل ترجمه.\nلو اخترت تجاهل التغييرات، ستتم الكتابه عليها عند التصدير التالى.",
- "translate-manage-import-ok": "استوردت نسخه جديده من الصفحه $1.",
- "translate-manage-import-done": "انتهى الكل!",
+ "translate-manage-import-ok": "استوردت: $1",
+ "translate-manage-import-done": "استيراد كامل!",
"importtranslations": "استورد ترجمات",
"translate-import-from-local": "رفع ملف محلي:",
"translate-import-load": "حمّل الملف",
"translate-import-err-dl-failed": "تعذّر جلب الملف:\n$1",
- "translate-import-err-ul-failed": "لم ينجح رفع الملف",
+ "translate-import-err-ul-failed": "فشل رفع الملف",
"translate-import-err-invalid-title": "اسم الملف المعطى <nowiki>$1</nowiki> غير صالح.",
"translate-import-err-no-such-file": "الملف <nowiki>$1</nowiki> غير موجود أو لم يرفع محليًا.",
"translate-import-err-no-headers": "الملف ليس ملف Gettext صحيح بصيغه امتداد الترجمة:\nغير قادر على تحديد المجموعه واللغه من مقدمه الملف.",
"translate-import-err-warnings": "الملف ليس مكونا بشكل صحيح.\nتأكد من أن محررك لا يزيل حقول msgctxt .\nالتفاصيل: $1",
+ "translate-js-save": "سييف",
"translate-gs-pos": "الترتيب",
"translate-gs-code": "الرمز",
"translate-gs-continent": "القارة",
@@ -158,5 +167,6 @@
"translate-gs-count": "العدد",
"translate-gs-total": "المجموع",
"translate-gs-avgscore": "معدل الدرجات",
- "translate-documentation-language": "رسالة التوثيق"
+ "translate-documentation-language": "رسالة التوثيق",
+ "translate-searchprofile": "ترجمات"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/as.json b/www/wiki/extensions/Translate/i18n/core/as.json
index fe6b8223..0d4cbe98 100644
--- a/www/wiki/extensions/Translate/i18n/core/as.json
+++ b/www/wiki/extensions/Translate/i18n/core/as.json
@@ -13,11 +13,6 @@
},
"translate": "অনুবাদ কৰক",
"translate-desc": "মিডিয়াৱিকি আৰু অন্য ভাঙনিৰ কাৰণে [[Special:Translate|বিশেষ পৃষ্ঠা]]",
- "translate-taskui-view": "সকলো বাৰ্তা দেখুৱাওক",
- "translate-taskui-untranslated": "ভাঙনি নোহোৱা বাৰ্তাসমূহ দেখুৱাওক",
- "translate-taskui-optional": "বৈকল্পিক বাৰ্তাসমূহ দেখুৱাওক",
- "translate-taskui-acceptqueue": "কেৱল ম‍ই পুনৰীক্ষণ হোৱা বুলি চিহ্নিত কৰিব পৰা কৰা বাৰ্তাসমূহ",
- "translate-taskui-reviewall": "ভাঙনিসমূহ পুনৰীক্ষণ কৰক",
"translate-taction-translate": "অনুবাদ কৰক",
"translate-taction-proofread": "পুনৰীক্ষণ",
"translate-taction-lstats": "ভাষাৰ পৰিসংখ্যা",
@@ -42,7 +37,6 @@
"translate-page-description-legend": "এই গোটটোৰ বিষয়ে সবিশেষ",
"translate-page-description-hasoptional-open": "বৈকল্পিক বাৰ্তাসমূহ দেখুৱাওক",
"translate-page-edit": "সম্পাদনা",
- "translate-ext-url": "<hr />ৱেবছাইট: $1",
"translate-optional": "(বিকল্পিত)",
"translate-ignored": "(উপেক্ষিত)",
"translate-edit-title": "\"$1\" সম্পাদন কৰক",
@@ -51,7 +45,6 @@
"translate-edit-contribute": "বৰঙণি",
"translate-edit-information": "বাৰ্তাটোৰৰ বিষয়ে সবিশেষ ($1)",
"translate-edit-in-other-languages": "আন ভাষাত বাৰ্তা",
- "translate-edit-committed": "ছফ্টৱেৰৰ বৰ্তমানৰ ভাঙনি",
"translate-edit-warnings": "অসমাপ্ত ভাঙনিৰ বিষয়ে সতৰ্ক বানী",
"translate-edit-tmmatch-source": "অনুবাদৰ উত্স পাঠ্য: $1",
"translate-edit-tmmatch": "$1% ৰজিতা খাইছে",
@@ -103,7 +96,6 @@
"translate-statsf-count-reviews": "ভাঙনি পুনৰীক্ষণ",
"translate-statsf-count-reviewers": "নিৰীক্ষকসকল",
"translate-statsf-submit": "খচৰা চাওক",
- "translate-tag-category": "ভাঙনি-উপযুক্ত পৃষ্ঠা",
"translate-tag-page-desc": "[[$2|$1]] ৱিকি পৃষ্ঠাৰ ভাঙনি।",
"translate-sidebar-alltrans": "আন ভাষাত",
"translations": "সকলোবোৰ ভাঙনি",
@@ -161,9 +153,7 @@
"translate-js-summary": "সাৰাংশ:",
"translate-js-save": "সাঁচি থওক",
"translate-js-next": "সাঁচক আৰু পৰৱৰ্তী বাৰ্তা খোলক",
- "translate-js-nonext": "এই পৃষ্ঠাটোৰ এইটোৱেই অন্তিম বাৰ্তা ।",
"translate-js-skip": "বাতিল কৰি পৱৱৰ্তী বাৰ্তালৈ যাওক",
- "translate-js-save-failed": "সংৰক্ষণ বিফল হৈছে। অনুগ্ৰহ কৰি এই ত্ৰুটিৰ বিষয়ে জনাওক।",
"translate-js-history": "ভাঙনিৰ খতিয়ান",
"translate-js-support": "প্ৰশ্ন সোধক",
"translate-gs-code": "কোড",
@@ -175,19 +165,11 @@
"translate-gs-avgscore": "গড় নম্বৰ",
"translate-documentation-language": "বাৰ্তা নথিকৰণ",
"translate-searchprofile": "ভাঙনিসমূহ",
- "translate-messagereview-submit": "স্বীকাৰ",
- "translate-messagereview-progress": "গ্ৰহণ কৰি আছে . . .",
- "translate-messagereview-done": "স্বীকাৰ কৰা হ’ল",
- "api-error-invalidrevision": "ভাঙনি পোৱা নগ’ল",
- "api-error-unknownmessage": "বাৰ্তাটো পোৱা নগ’ল",
- "api-error-owntranslation": "আপুনি নিজেই আপোনাৰ অনুবাদসমূহ স্বীকৃতি দিব নোৱাৰে",
- "translate-messagereview-doit": "এই ভাঙনিটো শুদ্ধ ভাঙনিৰূপে স্বীকৃতি দিয়্ক",
"log-name-translationreview": "ভাঙনি পুনৰীক্ষণ অভিলেখ",
"translate-workflowstatus": "স্থিতি: $1",
"translate-workflow-set-doing": "পছন্দসমূহ . . .",
"translate-stats-workflow": "স্থিতি",
"translate-dynagroup-recent-label": "শেহতীয়া ভাঙনিসমূহ",
- "translate-gethelp": "সহায়",
"tux-languageselector": "অনুবাদ কৰক:",
"tux-editor-proofreading-mode": "পুনঃৰীক্ষণ"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ast.json b/www/wiki/extensions/Translate/i18n/core/ast.json
index 1fd8149b..2e124e18 100644
--- a/www/wiki/extensions/Translate/i18n/core/ast.json
+++ b/www/wiki/extensions/Translate/i18n/core/ast.json
@@ -9,11 +9,7 @@
},
"translate": "Traducir",
"translate-desc": "[[Special:Translate|Páxina especial]] pa traducir MediaWiki y más",
- "translate-taskui-view": "Ver tolos mensaxes",
- "translate-taskui-untranslated": "Ver los mensaxes ensin traducir",
- "translate-taskui-optional": "Ver los mensaxes opcionales",
- "translate-taskui-acceptqueue": "Sólo los mensaxes que yo pueda marcar como revisaos",
- "translate-taskui-reviewall": "Revisar toles traducciones",
+ "translate-fuzzybot-desc": "Esta ye una cuenta especial del sistema qu'usa la [https://www.mediawiki.org/wiki/Extension:Translate estensión Translate] de MediaWiki que s'utiliza pa caltener les traducciones.\nEsta cuenta ye parte del software MediaWiki y nun pertenez a nengún usuariu.",
"translate-taskui-export-to-file": "Esportar en formatu nativu",
"translate-taskui-export-as-po": "Esportar pa traducir ensin conexón",
"translate-taction-translate": "Traducir",
@@ -25,7 +21,6 @@
"translate-page-no-such-language": "La llingua especificada nun foi válida.",
"translate-page-no-such-group": "El grupu especificáu nun foi válidu.",
"translate-page-disabled": "Desactivaronse les traducciones a esta llingua nesti grupu. Motivu:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 ye la llingua orixinal d'esta páxina.",
"translate-language-disabled": "La traducción a esta llingua ta desactivada.",
"translate-page-settings-legend": "Configuración",
"translate-page-group": "Grupu",
@@ -36,13 +31,13 @@
"translate-page-navigation-legend": "Navegación",
"translate-page-showing": "Amosando mensaxes del $1 al $2 de $3.",
"translate-page-showing-all": "Amosando $1 {{PLURAL:$1|mensaxe|mensaxes}}.",
+ "translate-page-showing-none": "Nun hai mensaxes qu'amosar.",
"translate-next": "Páxina siguiente",
"translate-prev": "Páxina anterior",
"translate-page-description-legend": "Información del grupu",
"translate-page-description-hasoptional": "Esti grupu de mensaxes contien mensaxes opcionales.\nLos mensaxes opcionales sólo deberíen traducise cuando la llingua tenga necesidaes especiales,\ncomo nun usar espacios o pa treslliterar nomes propios. $1",
"translate-page-description-hasoptional-open": "Amosar los mensaxes opcionales.",
"translate-page-edit": "editar",
- "translate-ext-url": "<hr />Sitiu web: $1",
"translate-optional": "(opcional)",
"translate-ignored": "(inoráu)",
"translate-edit-title": "Editar \"$1\"",
@@ -58,6 +53,11 @@
"translate-use-suggestion": "Sustituir la traducción actual por esta suxerencia.",
"translate-edit-nopermission": "Necesita permisu de traducción pa traducir mensaxes.",
"translate-edit-askpermission": "Pidir permisu",
+ "exporttranslations": "Esportar traducciones",
+ "translate-export-form-format": "Formatu",
+ "translate-export-invalid-format": "Especifica un formatu válidu.",
+ "translate-export-not-supported": "Nun s'almite la esportación de traducciones.",
+ "translate-export-format-notsupported": "El formatu d'esportación especificáu nun s'almite pol grupu de mensaxes.",
"translate-magic-pagename": "Traducción estendida de MediaWiki",
"translate-magic-help": "Pues traducir los nomatos de les páxines especiales, les pallabres máxiques y los nomes de los espacios de nome.\n\nLos nomatos de les páxines especiales y les pallabres máxiques puen tener múltiples traducciones.\nLes traducciones se separten con una coma (,).\nLos espacios de nome namái puen tener una traducción.\n\nTraducir l'espaciu de nomes d'alderique del proyeutu <code>$1 talk</code> pue ser abegoso. <code>$1</code> se sustituye pol nome del sitiu (por exemplu <code>{{ns:project_talk}}</code>).\nSi na to llingua nun ye posible formar una espresión válida ensin camudar el nome del sitiu, por favor informa d'ello en [[Support]].\n\nNecesites tar nel grupu de traductores pa guardar los cambios.\nLos cambios nun se graben fasta que calques nel botón guardar d'abaxo.",
"translate-magic-module": "Módulu:",
@@ -103,7 +103,16 @@
"right-translate-import": "Importar les traducciones ensin conexón",
"action-translate-import": "Importar les traducciones ensin conexón",
"right-translate-messagereview": "Revisar les traducciones",
+ "action-translate-messagereview": "revisar traducciones",
"right-translate-groupreview": "Camudar l'estáu d'organización del trabayu de los grupos de mensaxes",
+ "action-translate-groupreview": "camudar l'estáu del fluxu de trabayu de los grupos de mensaxes",
+ "translate-rcfilters-translations": "Traducciones",
+ "translate-rcfilters-translations-only-label": "Traducciones",
+ "translate-rcfilters-translations-only-desc": "Cambeos nes páxines traducíes.",
+ "translate-rcfilters-translations-filter-label": "Nun son traducciones",
+ "translate-rcfilters-translations-filter-desc": "Tolos cambeos que nun son traducciones.",
+ "translate-rcfilters-translations-site-label": "Mensaxes del sitiu",
+ "translate-rcfilters-translations-site-desc": "Personalizaciones de los mensaxes del sitiu nel espaciu de nomes MediaWiki.",
"translate-rc-translation-filter": "Filtrar traducciones:",
"translate-rc-translation-filter-no": "Nun facer nada",
"translate-rc-translation-filter-only": "Amosar traducciones namái",
@@ -176,7 +185,7 @@
"translate-mgs-noempty": "Nun amosar les llingües que nun tengan traducción dala",
"translate-mgs-submit": "Amosar estadístiques",
"translate-mgs-column-language": "Llingua",
- "translate-mgs-totals": "Toles llingües xuntes",
+ "translate-mgs-totals": "{{PLURAL:$1|La llingua|Toles $1 llingües}} en xunto",
"translate-mgs-invalid-group": "El grupu $1 especificáu nun esiste.",
"translate-mgs-nothing": "Nada qu'amosar pa les estadístiques que se pidieron.",
"supportedlanguages": "Llingües sofitaes",
@@ -186,6 +195,7 @@
"supportedlanguages-recenttranslations": "traducciones recientes",
"supportedlanguages-count": "$1 {{PLURAL:$1|llingua|llingües}} en total.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edición|ediciones}}; cabera edición hai $3 {{PLURAL:$3|día|díes}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Testu d'orixe de la unidá de traducción",
"translate-save": "Guardar ($1)",
"translate-jssti-add": "Amestar a la llista",
"managemessagegroups": "Xestión de grupos de mensaxes",
@@ -226,9 +236,7 @@
"translate-js-summary": "Resume:",
"translate-js-save": "Guardar",
"translate-js-next": "Guardar y abrir el siguiente",
- "translate-js-nonext": "Esti yera'l caberu mensaxe d'esta páxina.",
"translate-js-skip": "Saltar al siguiente",
- "translate-js-save-failed": "Falló'l guardáu. Por favor, informa d'esti fallu.",
"translate-js-history": "Historial de traducciones",
"translate-js-support": "Facer una entruga",
"translate-js-support-title": "Pidir ayuda si nun hai información bastante pa traducir esti mensaxe correutamente.",
@@ -245,21 +253,9 @@
"translate-documentation-language": "Documentación del mensaxe",
"translate-searchprofile": "Traducciones",
"translate-searchprofile-tooltip": "Guetar en toles traducciones",
+ "translate-searchprofile-note": "Hai más opciones de busca disponibles con [$1 busca de traducciones].",
"translate-search-languagefilter": "Peñerar por llingua:",
"translate-search-nofilter": "Ensin peñera",
- "translate-messagereview-submit": "Marcar como revisao",
- "translate-messagereview-progress": "Marcando como revisao...",
- "translate-messagereview-failure": "Error al marcar como revisao: $1",
- "translate-messagereview-done": "Revisao",
- "translate-messagereview-reviews": "Revisao por {{PLURAL:$1|un usuariu|$1 usuarios}}",
- "translate-messagereview-reviewswithyou": "Revisao por {{PLURAL:$1|vusté|$1 usuarios, incluíu vusté}}",
- "api-error-invalidrevision": "Nun s'alcontró la traducción",
- "api-error-unknownmessage": "Nun s'alcontró'l mensaxe",
- "api-error-fuzzymessage": "La traducción ta marcada como aproximada",
- "api-error-owntranslation": "Nun pue marcar les traducciones propies como revisaes.",
- "translate-messagereview-no-fuzzy": "Les traducciones aproximaes nun puen marcase como revisaes.",
- "translate-messagereview-no-own": "Nun pue marcar les traducciones propies como revisaes.",
- "translate-messagereview-doit": "Marcar esta traducción como revisada.",
"log-name-translationreview": "Rexistru de revisión de la traducción",
"log-description-translationreview": "Rexistru de toles revisiones de les traducciones y grupos de mensaxes.",
"logentry-translationreview-message": "$1 {{GENDER:$2|revisó}} la traducción $3",
@@ -299,7 +295,9 @@
"tux-status-translated": "Traducíu",
"tux-status-saving": "Guardando...",
"tux-status-unsaved": "Ensin guardar",
+ "tux-save-unknown-error": "Hebo un error desconocíu.",
"tux-editor-placeholder": "La to traducción",
+ "tux-editor-editsummary-placeholder": "Resume opcional",
"tux-editor-paste-original-button-label": "Apegar el testu fonte",
"tux-editor-discard-changes-button-label": "Descartar los cambeos",
"tux-editor-save-button-label": "Guardar la traducción",
@@ -307,7 +305,7 @@
"tux-editor-cancel-button-label": "Encaboxar",
"tux-editor-confirm-button-label": "Confirmar la traducción",
"tux-editor-proofread-button-label": "Marcar como revisao",
- "tux-editor-shortcut-info": "Calque \"$1\" pa guardar, \"$2\" pa saltar al siguiente mensaxe o $3 pa otros atayos.",
+ "tux-editor-shortcut-info": "Pulsia «$1» pa guardar, «$2» pa dir al siguiente mensaxe, «$4» p'apurrir un resume o «$3» pa más atayos.",
"tux-editor-edit-desc": "Editar la documentación",
"tux-editor-add-desc": "Amestar la documentación",
"tux-editor-suggestions-title": "Suxerencies",
@@ -329,7 +327,7 @@
"tux-proofread-action-tooltip": "Marcar como revisao",
"tux-proofread-edit-label": "Editar",
"tux-editor-page-mode": "Páxina",
- "tux-editor-outdated-warning": "Esta traducción pue necesitar un anovamientu.",
+ "tux-editor-outdated-warning": "Esta traducción puede necesitar anovase.",
"tux-editor-outdated-warning-diff-link": "Amosar les diferencies",
"tux-editor-doc-editor-placeholder": "Documentación del mensaxe",
"tux-editor-doc-editor-save": "Guardar documentación",
@@ -356,15 +354,17 @@
"tux-empty-nothing-new-to-proofread": "Nun hai nada nuevo pa revisar",
"tux-empty-you-can-review-already-proofread": "Pue revisar les traducciones que yá revisaron otres persones.",
"tux-empty-list-other": "Nun hai ren que traducir",
- "tux-empty-list-other-guide": "Pue ayudar a revisar les traducciones esistentes",
+ "tux-empty-list-other-guide": "Puedes ayudar a revisar les traducciones qu'esisten",
"tux-empty-list-other-action": "Revisar les traducciones",
"tux-empty-list-other-link": "Ver tolos mensaxes",
"tux-editor-close-tooltip": "Zarrar",
"tux-editor-expand-tooltip": "Espander",
"tux-editor-collapse-tooltip": "Plegar",
+ "tux-editor-message-tools-show-editor": "Amosar nel editor wiki",
"tux-editor-message-tools-history": "Historial",
"tux-editor-message-tools-delete": "Desaniciar",
"tux-editor-message-tools-translations": "Toles traducciones",
+ "tux-editor-message-tools-linktothis": "Enllaz a esti mensaxe",
"tux-editor-loading": "Cargando...",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|llingua|llingües}} más",
"translate-statsbar-tooltip": "$1% traducíos, $2% revisaos",
@@ -373,5 +373,5 @@
"translate-ulsdep-title": "Error de configuración",
"translate-ulsdep-body": "La estensión Translate depende de la [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector estensión Universal Language Selector].",
"tux-session-expired": "La sesión zarróse yá. Anicia sesión n'una llingüeta aparte. Alternativamente, copia les traducciones ensin guardar, anicia sesión, vuelvi a esta páxina y escribi les traducciones otra vuelta.",
- "tux-nojs": "Esta páxina rique JavaScript."
+ "tux-nojs": "Esta ferramienta nun funciona sin JavaScript. JavaScript ta desactiváu, nun funcionó, o nun hai encontu pa esti restolador."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/atj.json b/www/wiki/extensions/Translate/i18n/core/atj.json
new file mode 100644
index 00000000..5020153a
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/atj.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Benoit Rochon",
+ "Jeannette Coocoo"
+ ]
+ },
+ "translate-page-settings-legend": "Ke actain",
+ "translate-magic-cm-current": "Mekwatc",
+ "translate-langstats-expand": "otamirota",
+ "translate-js-summary": "Nosem:",
+ "translate-documentation-language": "E itatcitcikatek",
+ "tux-editor-page-mode": "Masinhikan",
+ "tux-message-filter-advanced-button": "Awocamec nantona",
+ "tux-editor-message-tools-delete": "Wepina"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/av.json b/www/wiki/extensions/Translate/i18n/core/av.json
index be7b4922..215061b9 100644
--- a/www/wiki/extensions/Translate/i18n/core/av.json
+++ b/www/wiki/extensions/Translate/i18n/core/av.json
@@ -1,11 +1,13 @@
{
"@metadata": {
"authors": [
- "Gazimagomedov"
+ "Gazimagomedov",
+ "Аль-Гимравий"
]
},
"translate-total": "Кагътал",
"translate-untranslated": "Таржама гьабичӀел",
"translate-mgs-group": "Кагътазул дандбакӀари:",
+ "translate-manage-submit": "ТІубазабизе",
"translate-msggroupselector-projects": "Кагътазул сияхӀ"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/avk.json b/www/wiki/extensions/Translate/i18n/core/avk.json
new file mode 100644
index 00000000..74bad8dd
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/avk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Axel xadolik"
+ ]
+ },
+ "translate-documentation-language": "Staksafa valdigara"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/awa.json b/www/wiki/extensions/Translate/i18n/core/awa.json
index f035cc41..010c203c 100644
--- a/www/wiki/extensions/Translate/i18n/core/awa.json
+++ b/www/wiki/extensions/Translate/i18n/core/awa.json
@@ -6,10 +6,6 @@
},
"translate": "अनुवाद करा जाय",
"translate-desc": "[[Special:Translate| खाश पन्ना]] मीडीयाविकि कय अनुवादन खत्तिर",
- "translate-taskui-view": "कुल सनेशा देखाव जाय",
- "translate-taskui-untranslated": "अअनुवादित सन्देश देखावा जाय",
- "translate-taskui-optional": "वैकल्पिक सन्देश देखावा जाय",
- "translate-taskui-reviewall": "कुल अनुवाद कय समीक्षा करा जाय",
"translate-taskui-export-to-file": "मूल स्वरूप में निर्यात करा जाय",
"translate-taskui-export-as-po": "ऑफ़लाइन अनुवाद खत्तिर निर्यात करा जाय",
"translate-taction-translate": "अनुवाद करा जाय",
diff --git a/www/wiki/extensions/Translate/i18n/core/az.json b/www/wiki/extensions/Translate/i18n/core/az.json
index 336305d0..59202a97 100644
--- a/www/wiki/extensions/Translate/i18n/core/az.json
+++ b/www/wiki/extensions/Translate/i18n/core/az.json
@@ -9,11 +9,6 @@
},
"translate": "Tərcümə et",
"translate-desc": "MediaViki və əlavələrini tərcümə etmək üçün [[Special:Translate|Xüsusi səhifə]]",
- "translate-taskui-view": "Bütün mesajları göstər",
- "translate-taskui-untranslated": "Tərcümə olunmayanları göstər",
- "translate-taskui-optional": "İstənilən mesajları göstər",
- "translate-taskui-acceptqueue": "Yalnız mənim yoxlamağımı gözləyən mesajlar",
- "translate-taskui-reviewall": "Bütün tərcümələri gözdən keçir",
"translate-taskui-export-to-file": "Yerli formatda ixrac et",
"translate-taction-translate": "Tərcümə et",
"translate-taction-proofread": "Yoxla",
@@ -40,7 +35,6 @@
"translate-page-description-legend": "Qrup haqqında məlumat",
"translate-page-description-hasoptional-open": "İstənilən mesajları göstər.",
"translate-page-edit": "redaktə et",
- "translate-ext-url": "<hr />Veb səhifəsi: $1",
"translate-optional": "(məcburi deyil)",
"translate-ignored": "(sayılmayan)",
"translate-edit-title": "Redaktə et \"$1\"",
@@ -51,7 +45,6 @@
"translate-edit-information": "Mesaj haqqında məlumat(lar) ($1)",
"translate-edit-in-other-languages": "Digər dillərdəki mesaj",
"translate-edit-warnings": "Yarımçıq tərcümələr haqqında xəbərdarlıqlar",
- "translate-edit-tmsugs": "Tərcümə yaddaşı və tərcümə maşınından təkliflər",
"translate-edit-tmmatch-source": "Tərcümə mənbəsi mətni: $1",
"translate-edit-tmmatch": "$1% oxşar",
"translate-use-suggestion": "Cari tərcüməni bu təkliflə dəyişdir.",
@@ -112,7 +105,6 @@
"translate-statsf-language": "Dil kodlarının vergül ilə ayrılmış siyahısı:",
"translate-statsf-group": "Qrup kodlarının vergül ilə ayrılmış siyahısı:",
"translate-statsf-submit": "Ön izləmə",
- "translate-tag-category": "Tərcümə oluna bilən səhifələr",
"translate-tag-page-desc": "[[$2|$1]] viki-səhifəsinin $3 ($4) dilindən tərcüməsi.",
"translate-sidebar-alltrans": "Başqa dillərdə",
"translations": "Bütün tərcümələr",
@@ -124,6 +116,7 @@
"translate-translations-project": "Layihə:",
"translate-translations-history-short": "t",
"languagestats": "Dil statistikaları",
+ "languagestats-stats-for": "$1 üçün tərcümə statistikası ($2).",
"languagestats-recenttranslations": "son tərcümələr",
"translate-langstats-expand": "genişləndir",
"translate-langstats-collapse": "gizlə",
@@ -171,9 +164,7 @@
"translate-js-summary": "Açıqlama:",
"translate-js-save": "Saxla",
"translate-js-next": "Saxla və sonrakını aç",
- "translate-js-nonext": "Bu səhifədəki son mesaj idi.",
"translate-js-skip": "Sonrakına keç",
- "translate-js-save-failed": "Saxlama uğursuz oldu. Lütfən bu xətanı bildirin.",
"translate-js-history": "Tərcümə tarixi",
"translate-js-support": "Sual ver",
"translate-gs-code": "Kod",
@@ -183,11 +174,7 @@
"translate-gs-total": "Ümumi",
"translate-documentation-language": "Mesaj sənədləşməsi",
"translate-searchprofile": "Tərcümələr",
- "translate-searchprofile-tooltip": "Bütün tərcümələrdən axtar",
- "translate-messagereview-submit": "Yoxlanılmış kimi işarələ",
- "translate-messagereview-progress": "Yoxlanılmış kimi işarələnir...",
- "translate-messagereview-done": "Yoxlanıldı",
- "translate-gethelp": "Kömək",
+ "translate-searchprofile-tooltip": "Bütün tərcümələrdə axtar",
"translate-msggroupselector-projects": "Mesaj qrupu",
"translate-msggroupselector-search-placeholder": "Qrupları axtar",
"translate-msggroupselector-search-all": "Hamısı",
diff --git a/www/wiki/extensions/Translate/i18n/core/azb.json b/www/wiki/extensions/Translate/i18n/core/azb.json
index 0a6ef128..0da25654 100644
--- a/www/wiki/extensions/Translate/i18n/core/azb.json
+++ b/www/wiki/extensions/Translate/i18n/core/azb.json
@@ -7,16 +7,12 @@
"Mousa",
"Reza1615",
"Koroğlu",
- "Alp Er Tunqa"
+ "Alp Er Tunqa",
+ "Ilğım"
]
},
"translate": "ترجومه ائت",
"translate-desc": "مئدیاویکی و سونرانی چئویرمک اوچون [[Special:Translate|اؤزل صحیفه]]",
- "translate-taskui-view": "بوتون مئساژلاری گؤستر",
- "translate-taskui-untranslated": "چئویریلمه‌میش مئساژلاری گؤستر",
- "translate-taskui-optional": "ایستگه باغلی مئساژلاری گؤستر",
- "translate-taskui-acceptqueue": "یالنیز من قبول ائده بیلن مئساژلاری",
- "translate-taskui-reviewall": "بوتون چئویریلری گؤزدن گئچیت",
"translate-taskui-export-to-file": "دوغما فورمت‌ده چیخارت",
"translate-taskui-export-as-po": "آفلاین چئویرمک اوچون چیخارت",
"translate-taction-translate": "چئویرمه",
@@ -30,7 +26,7 @@
"translate-page-disabled": "بو دیل‌ده بو گروپون چئویرمه‌سی باغلانیب‌دیر.\nدلیل:\n\n<em>$1</em>",
"translate-language-disabled": "بو دیله چئویرمک باغلانیب‌دیر.",
"translate-page-settings-legend": "تنظیملر",
- "translate-page-group": "قروپ",
+ "translate-page-group": "گروه",
"translate-page-language": "دیل",
"translate-page-limit": "سینیر",
"translate-page-limit-option": "صحیفه‌ده {{PLURAL:$1|بیر|$1}} مئساژ",
@@ -38,13 +34,13 @@
"translate-page-navigation-legend": "دولانماق",
"translate-page-showing": "$3 مئساژ ایچینده $1-دن $2-ه گؤستریلیر.",
"translate-page-showing-all": "{{PLURAL:$1|بیر|$1}} مئساژ گؤستریلیر.",
+ "translate-page-showing-none": "گؤسترمک اوچون بیر مئساژ یوخدور.",
"translate-next": "سونراکی صفحه",
"translate-prev": "قاباقکی صحیفه",
"translate-page-description-legend": "بو قروپ اوچون بیلگیلر",
"translate-page-description-hasoptional": "بو مئساژ گروپوندا، ایستگه باغلی مئساژلار واردیر.\nایستگه باغلی مئساژلار یالنیز دیلین خاص شرطلری اولاندا چئویرمه‌لی‌دیرلر، مثلاً اگر دیل‌ده سؤزجوک آراسی بوشلوق یوخدور، یا بعضی آدلار گرک چئویریله. $1",
"translate-page-description-hasoptional-open": "ایستگه باغلی مئساژلاری گؤستر.",
"translate-page-edit": "دَییشدیر",
- "translate-ext-url": "<hr />سایت: $1",
"translate-optional": "(ایستگه باغلی)",
"translate-ignored": "(یوخ ساییلمیش)",
"translate-edit-title": "«$1»-ی دَییشدیر",
@@ -95,7 +91,7 @@
"translate-checks-malformed": "<nowiki>$1</nowiki> پیس فورم‌دادیر.",
"translate-checks-fudforum-syntax": "بو پروژه‌ده <nowiki>$2</nowiki> یئرینه <nowiki>$1</nowiki>-ی ایشلدین.",
"translate-pref-nonewsletter": "منه ایمیل خبرنامه‌لری گؤندرمه",
- "translate-pref-editassistlang": "یاردیمچی دیل‌لر:",
+ "translate-pref-editassistlang": "کؤمکچی دیل‌لر:",
"prefs-translate": "چئویرمک سئچمه‌لری",
"translate-pref-editassistlang-help": "کاما ایله آیریلمیش دیل کودلاری.\nسیز چئویرنده، بو دیل‌ده مئساژلارین چئویرمه‌لری گؤستریلر.\nدیل‌لری ایلک لیستی، سیزین دیل‌لرینیزه باغلی‌دیر.",
"translate-pref-editassistlang-bad": "لیست‌ده گئچرسیز دیل کودو واردیر:\n<nowiki>$1</nowiki>.",
@@ -156,7 +152,7 @@
"translate-langstats-incomplete": "بو صحیفه‌ده بعضی آمارلار باشا چاتمامیش‌دیلار. لوطفاً چوخ آمار اله گتیرمک اوچون یئنی‌دن یوکله‌یین.",
"translate-langstats-expand": "گئنیشلندیر",
"translate-langstats-collapse": "گیزلت",
- "translate-langstats-expandall": "هامیسینی گئنیشلت",
+ "translate-langstats-expandall": "هامی‌سینی گؤستر",
"translate-langstats-collapseall": "هامیسینی گیزلت",
"translate-language-code": "دیلین کودو",
"translate-language-code-field-name": "دیلین کودو:",
@@ -180,7 +176,7 @@
"translate-mgs-totals": "بوتون دیل‌لر بیرلیک‌ده",
"translate-mgs-invalid-group": "بیلیندیریلمیش $1 گروپو یوخدور.",
"translate-mgs-nothing": "ایسته‌نیلمیش آمار اوچون گؤسترمه‌لی بیر شئی یوخدور.",
- "supportedlanguages": "دستکلنن دیل‌لر",
+ "supportedlanguages": "ساپورتلانان دیل‌لر",
"supportedlanguages-summary": "بو صحیفه {{SITENAME}}-ده دستکلنن بوتون دیل‌لرین لیستینی،\nهر دیل‌ده چالیشان چئویرن‌لرله بیرلیک‌ده گؤستریر.\nنه قدر بیر چئویرن چوخ چالیشماسی اولسا، اونون آدی یئکه‌رک گؤرسنیر.\nآلت‌خطی‌نین رنگی، چئویرنین نه قدر یاخین زامان‌دا بوردا چالیشقان اولماغینی گؤستریر.",
"supportedlanguages-colorlegend": "رنگ اوچون توضیح: سون چئویرمک $1 گون قاباق.",
"supportedlanguages-translators": "{{PLURAL:$2|بیر|$2}} چئویرن: $1",
@@ -220,11 +216,9 @@
"translate-import-err-no-headers": "فایلین ترجومه اوزانتی فورمتینده دوزگون Gettext فورمو یوخدور.\nفایل باشلیقلاریندان دیل و مئساژ گروپونو بیلمک اولمور.",
"translate-import-err-warnings": "فایلین دوزگون فورمو یوخدور.\nآرخایین اولون سیزین دَییشدیرَنیز msgctxt‌ فیلدلرینی سیلمیر.\nبیلگیلر: $1",
"translate-js-summary": "آچیقلاما:",
- "translate-js-save": "قئید ائت",
+ "translate-js-save": "ذخیره ائت",
"translate-js-next": "قئید ائت و سونراکینی آچ",
- "translate-js-nonext": "بو صحیفه‌ده سون مئساژ ایدی.",
"translate-js-skip": "سونراکینا آتلان",
- "translate-js-save-failed": "قئید ائدیلنمه‌دی. لوطفاً بو خطانی بیلدیرین.",
"translate-js-history": "چئویرمک گئچمیشی",
"translate-js-support": "سورغو سوروش",
"translate-js-support-title": "بو مئساژی دوزگون چئویرمک اوچون کیفایت قدر بیلگی اولماسا، یاردیم ایسته‌یین.",
@@ -243,19 +237,6 @@
"translate-searchprofile-tooltip": "بوتون چئویرمه‌لردن آختار",
"translate-search-languagefilter": "دیل ایله فیلترله:",
"translate-search-nofilter": "فیلتر یوخ",
- "translate-messagereview-submit": "قبول ائت",
- "translate-messagereview-progress": "قبول ائدیلیر...",
- "translate-messagereview-failure": "قبول ائدیلیر... اوغورسوز اولدو: $1",
- "translate-messagereview-done": "قبول ائدیلدی",
- "translate-messagereview-reviews": "{{PLURAL:$1|بیر|$1}} ایستیفاده‌چی ایله قبول ائدیلیب‌دیر",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|سیز|$1 ایستیفاده‌چی، ایچینده سیز}} ایله قبول ائدیلیب‌دیر",
- "api-error-invalidrevision": "چئویرمه تاپیلانمادی",
- "api-error-unknownmessage": "مئساژ تاپیلانمادی",
- "api-error-fuzzymessage": "چئویرمه موبهم نیشانلانیب‌دیر",
- "api-error-owntranslation": "سیز اؤز چئویرمه‌لرینیزی قبول ائده بیلنمزسینیز",
- "translate-messagereview-no-fuzzy": "موبهم چئویرمه‌لر قبول اولونانمازلار.",
- "translate-messagereview-no-own": "سیز اؤز چئویرمه‌لرینیزی قبول ائده بیلنمزسینیز.",
- "translate-messagereview-doit": "بو چئویرمه‌نی بیر دوزگون چئویرمه اولاراق قبول ائت.",
"log-name-translationreview": "چئویرمه گؤزدن گئچیتمک قئیدلری",
"log-description-translationreview": "بوتون چئویرمه‌لر و مئساژ گروپلاری گؤزدن گئچیتمک قئیدلری.",
"logentry-translationreview-message": "$1، $3 چئویرمه‌سینی {{GENDER:$2|قبول ائتدی}}",
diff --git a/www/wiki/extensions/Translate/i18n/core/ba.json b/www/wiki/extensions/Translate/i18n/core/ba.json
index 7a712d50..c7a6a6b8 100644
--- a/www/wiki/extensions/Translate/i18n/core/ba.json
+++ b/www/wiki/extensions/Translate/i18n/core/ba.json
@@ -5,7 +5,9 @@
"Haqmar",
"Roustammr",
"Рустам Нурыев",
- "Вильданова Гюзель"
+ "Вильданова Гюзель",
+ "Ләйсән",
+ "Ансар"
]
},
"translate": "Тәржемә",
@@ -22,11 +24,11 @@
"translate-page-navigation-legend": "Төп йүнәлештәр",
"translate-page-showing": "$3 яҙманан $1 - $2 эсендәгеһе сығарылған.",
"translate-page-showing-all": "$1 {{PLURAL:$1|хат}} күрһәтелгән.",
+ "translate-page-showing-none": "Яҙмалар юҡ.",
"translate-next": "Киләһе бит",
"translate-prev": "Алдағы бит",
"translate-page-description-legend": "Төркөм тураһында мәғлүмәт",
"translate-page-edit": "үҙгәртергә",
- "translate-ext-url": "<hr />Сайт: $1",
"translate-optional": "(мөһим түгел)",
"translate-ignored": "(иғтибарға алынмай)",
"translate-edit-title": "Мөхәрирләү \"$1\"",
@@ -79,7 +81,7 @@
"translate-rc-translation-filter-only": "Тәржемәләр генә",
"translate-rc-translation-filter-filter": "Тәржемәләрҙән башҡалар",
"translate-rc-translation-filter-site": "Cайттың система яҙмалары ғына",
- "translationstats": "Тәржемәләр статисикаһы",
+ "translationstats": "Тәржемәләр статистикаһы",
"translate-stats-edits": "Үҙгәртеүҙәр",
"translate-stats-users": "Тәржемәселәр",
"translate-stats-registrations": "Теркәүҙәр",
@@ -164,9 +166,7 @@
"translate-import-err-no-headers": "Файл —Translate киңәйеүе форматында дөрөҫ Gettext-файл түгел:\nФайлдың башлыҡтарынан төркөмдө һәм телде билдәләп булмай.",
"translate-import-err-warnings": "Файл дөрөҫ төҙөлмәгән.\nҺеҙҙең мөхәррирләүсегеҙ msgctxt юлдарын юймай икәнен тикшерегеҙ.\nТулыраҡ: $1",
"translate-js-next": "Һаҡларға һәм сираттағыны асырға",
- "translate-js-nonext": "Был яҙма әлеге биттә аҙаҡҡыһы булды.",
"translate-js-skip": "Сираттағыға күсергә",
- "translate-js-save-failed": "Яҙҙырып ҡуйыу үтәлмәне. Был хата тураһында хәбәр итегеҙ, зинһар.",
"translate-js-history": "Тәржемә тарихы",
"translate-js-support": "Һорау бирергә",
"translate-js-support-title": "Был яҙманы дөрөҫ тәржемә итер өсөн мәғлүмәт етмәһә, ярҙам һорап мөрәжәғәт итегеҙ.",
@@ -183,7 +183,5 @@
"translate-searchprofile": "Тәржемәләр",
"translate-search-languagefilter": "Тел буйынса фильтр:",
"translate-search-nofilter": "Фильтрһыҙ",
- "translate-messagereview-submit": "Ҡабул итергә",
- "translate-messagereview-progress": "Ҡабул итеү...",
- "translate-messagereview-done": "Ҡабул ителде"
+ "tux-nojs": "Был ҡорал JavaScript-һыҙ эшләмәй."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ban.json b/www/wiki/extensions/Translate/i18n/core/ban.json
new file mode 100644
index 00000000..0d5f876a
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/ban.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Carma citrawati"
+ ]
+ },
+ "translate-documentation-language": "Dokumentasi pesan"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/bar.json b/www/wiki/extensions/Translate/i18n/core/bar.json
index 1dc68279..e16b74f2 100644
--- a/www/wiki/extensions/Translate/i18n/core/bar.json
+++ b/www/wiki/extensions/Translate/i18n/core/bar.json
@@ -30,7 +30,7 @@
"translate-js-history": "Ywersétzungsgschicht",
"translate-js-support": "A Frog stön",
"translate-searchprofile": "Ywersétzungen",
- "translate-searchprofile-tooltip": "Suach in olle Ywersétzungen",
+ "translate-searchprofile-tooltip": "Suach in Iwasetzunga",
"tux-editor-expand-tooltip": "Auskloppn",
"tux-editor-collapse-tooltip": "eikloppn"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/be-tarask.json b/www/wiki/extensions/Translate/i18n/core/be-tarask.json
index df7c1ea9..334ecdda 100644
--- a/www/wiki/extensions/Translate/i18n/core/be-tarask.json
+++ b/www/wiki/extensions/Translate/i18n/core/be-tarask.json
@@ -11,12 +11,8 @@
]
},
"translate": "Пераклад",
+ "translate-extensionname": "Перакласьці",
"translate-desc": "[[Special:Translate|Спэцыяльная старонка]] для перакладу MediaWiki і іншых праграмаў",
- "translate-taskui-view": "Паказаць усе паведамленьні",
- "translate-taskui-untranslated": "Паказаць неперакладзеныя паведамленьні",
- "translate-taskui-optional": "Паказаць неабавязковыя паведамленьні.",
- "translate-taskui-acceptqueue": "Толькі паведамленьні для вычыткі",
- "translate-taskui-reviewall": "Праверыць усе пераклады",
"translate-taskui-export-to-file": "Экспартаваць у родным фармаце",
"translate-taskui-export-as-po": "Экспартаваць для оф-лайнавага перакладу",
"translate-taction-translate": "Пераклад",
@@ -45,7 +41,6 @@
"translate-page-description-hasoptional": "Гэтая група паведамленьняў утрымлівае неабавязковыя паведамленьні.\nНеабавязковыя паведамленьні мусяць перакладацца толькі ў тым выпадку, калі Вашая мова мае асаблівыя патрабаваньні, кшталту напісаньня без прагалаў, ці трансьлітарацыі ўласных імёнаў ці назваў. $1",
"translate-page-description-hasoptional-open": "Паказаць неабавязковыя паведамленьні.",
"translate-page-edit": "рэдагаваць",
- "translate-ext-url": "<hr />Сайт: $1",
"translate-optional": "(неабавязковае)",
"translate-ignored": "(ігнараванае)",
"translate-edit-title": "Рэдагаваньне «$1»",
@@ -55,14 +50,14 @@
"translate-edit-no-information": "<em>Гэтае паведамленьне ня мае дакумэнтацыі.\nКалі Вы ведаеце, дзе ці як выкарыстоўваецца гэтае паведамленьне, то Вы можаце дапамагчы іншым перакладчыкам, дадаўшы дакумэнтацыю да гэтага паведамленьня.</em>",
"translate-edit-information": "Інфармацыя пра паведамленьне ($1)",
"translate-edit-in-other-languages": "Паведамленьне на іншых мовах",
- "translate-edit-committed": "Цяперашні пераклад у праграме",
"translate-edit-warnings": "Папярэджаньне аб няпоўных перакладах",
- "translate-edit-tmsugs": "Прапановы з памяці перакладу",
"translate-edit-tmmatch-source": "Тэкст крыніцы перакладу: $1",
"translate-edit-tmmatch": "$1% супадзеньне",
"translate-use-suggestion": "Замяніць цяперашні пераклад на гэтую прапанову.",
"translate-edit-nopermission": "Для перакладу паведамленьняў неабходныя правы перакладніка.",
"translate-edit-askpermission": "Атрымаць дазвол",
+ "exporttranslations": "Экспарт перакладаў",
+ "translate-export-form-format": "Фармат",
"translate-magic-pagename": "Пашыраны пераклад MediaWiki",
"translate-magic-help": "Вы можаце перакладаць псэўданімы спэцыяльных старонак, магічныя словы і прасторы назваў.\n\nПсэўданімы спэцыяльных старонак і магічныя словы могуць мець некалькі перакладаў, якія разьдзяляюцца коскай (,).\nПрасторы назваў могуць мець толькі адзін пераклад.\n\nУ перакладах прастораў назваў радок <code>абмеркаваньне $1</code> мае спэцыяльнае значэньне. <code>$1</code> будзе замененае на назву сайта (напрыклад, <code>{{ns:project_talk}}</code>).\nКалі для Вашай мовы немагчыма стварыць адпаведны выраз бязь зьмены назвы сайта, калі ласка, [[Support|зьвяжыцеся з распрацоўшчыкамі]].\n\nВам неабходна ўваходзіць у групу перакладчыкаў, каб захаваць зьмены.\nЗьмены ня будуць захаваныя, пакуль Вы не націсьніце кнопку ўнізе.",
"translate-magic-module": "Модуль:",
@@ -81,7 +76,7 @@
"translate-magic-namespace": "Прасторы назваў",
"translate-magic-notsaved": "Ваша рэдагаваньне не было захавана!",
"translate-magic-errors": "Калі ласка, выпраўце {{PLURAL:$1|1=наступную памылку|наступныя памылкі}} ў перакладах:",
- "translate-magic-saved": "Вашыя зьмены былі пасьпяхова захаваны.",
+ "translate-magic-saved": "Вашыя зьмены былі захаваныя.",
"translate-checks-parameters": "{{PLURAL:$2|1=Наступны парамэтар не выкарыстоўваецца|Наступныя парамэтры не выкарыстоўваюцца}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|1=Невядомы парамэтар|Невядомыя парамэтры}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Няпарная колькасьць {{PLURAL:$2|дужкі|дужак|дужак}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -91,7 +86,7 @@
"translate-checks-plural": "Крынічны тэкст выкарыстоўвае <nowiki>{{PLURAL:}}</nowiki>, а пераклад — не.",
"translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> быў выкарыстаны {{PLURAL:$1|1=з адной формай|з $1 формамі}}, але {{PLURAL:$2|падтрымліваецца $2 форма|падтрымліваюцца $2 формы|падтрымліваюцца $2 формаў}} (за выняткам формаў 0= і 1=).",
"translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> мае аднолькавыя формы на канцы. <nowiki>{{PLURAL:$1|мэтро|мэтро}}</nowiki> мусіць быць замененае на <nowiki>{{PLURAL:$1|мэтро}}</nowiki>.",
- "translate-checks-pagename": "Прастора назваў зьменена ў крынічным тэксьце",
+ "translate-checks-pagename": "Прастора назваў зьмененая ў крынічным тэксьце",
"translate-checks-format": "Гэты пераклад няслушна перакладае крынічны тэкст альбо ўтрымлівае сынтаксычныя памылкі: $1",
"translate-checks-escape": "Наступнае выдзяленьне можа быць выпадковым: <strong>$1</strong>",
"translate-checks-parametersnotequal": "Колькасьць парамэтраў — {{PLURAL:$1|$1}}, а мусіць быць — $2.",
@@ -108,7 +103,11 @@
"right-translate-import": "імпартаваньне вонкавых перакладаў",
"action-translate-import": "імпартаваньне выкананых у оф-лайне перакладаў",
"right-translate-messagereview": "рэцэнзаваньне перакладаў",
+ "action-translate-messagereview": "рэцэнзаваньне перакладаў",
"right-translate-groupreview": "зьмена стану апрацоўкі групаў паведамленьняў",
+ "translate-rcfilters-translations": "Пераклады",
+ "translate-rcfilters-translations-only-label": "Пераклады",
+ "translate-rcfilters-translations-filter-label": "Не пераклады",
"translate-rc-translation-filter": "Фільтраваць пераклады:",
"translate-rc-translation-filter-no": "Не",
"translate-rc-translation-filter-only": "Паказваць толькі пераклады",
@@ -140,7 +139,6 @@
"translate-statsf-language": "Сьпіс кодаў моваў, падзеленых коскамі:",
"translate-statsf-group": "Сьпіс групаў кодаў, падзелены коскамі:",
"translate-statsf-submit": "Папярэдні прагляд",
- "translate-tag-category": "Старонкі на пераклад",
"translate-tag-page-desc": "Пераклад вікі-старонкі [[$2|$1]] з $3 ($4).",
"translate-sidebar-alltrans": "На іншых мовах",
"translations": "Усе пераклады",
@@ -181,7 +179,7 @@
"translate-mgs-noempty": "Не паказваць мовы, для якіх няма ніякіх перакладаў",
"translate-mgs-submit": "Паказаць статыстыку",
"translate-mgs-column-language": "Мова",
- "translate-mgs-totals": "Усе мовы разам",
+ "translate-mgs-totals": "Усе $1 {{PLURAL:$1|мова|мовы|моваў}} разам",
"translate-mgs-invalid-group": "Пазначаная група «$1» не існуе.",
"translate-mgs-nothing": "Па вашым запыце статыстыка адсутнічае.",
"supportedlanguages": "Мовы перакладу",
@@ -213,7 +211,6 @@
"translate-manage-toolong": "Перавышаны максымальны час апрацоўкі у $1 {{PLURAL:$1|сэкунду|сэкунды|сэкундаў}}.\nКалі ласка, адпраўце форму ізноў для працягу апрацоўкі.",
"translate-manage-import-summary": "Імпартаваньне новай вэрсіі з вонкавай крыніцы",
"translate-manage-conflict-summary": "Імпартаваньне новай вэрсіі з вонкавай крыніцы. Калі ласка, праверце яе.",
- "translate-manage-fuzzy-summary": "Азначэньне паведамленьня зьмененае",
"translate-manage-submit": "Выканаць",
"translate-manage-intro-other": "Ніжэй пададзены сьпіс зьменаў у перакладах для мовы $1.\nКалі ласка, праглядзіце зьмены і выберыце пажаданае дзеяньне для кожнага абнаўленьня.\nКалі вы праігнаруеце зьмены, гэта будзе мець толькі часовы эфэкт.",
"translate-manage-import-ok": "Імпартаваная: $1.",
@@ -222,7 +219,7 @@
"translate-import-from-local": "Загрузіць лякальны файл:",
"translate-import-load": "Загрузіць файл",
"translate-import-err-dl-failed": "Немагчыма загрузіць файл:\n$1",
- "translate-import-err-ul-failed": "Загрузка файла не атрымалася",
+ "translate-import-err-ul-failed": "Не атрымалася загрузіць файл",
"translate-import-err-invalid-title": "Пададзеная назва файла <nowiki>$1</nowiki> — няслушная.",
"translate-import-err-no-such-file": "Файл <nowiki>$1</nowiki> не існуе альбо не загружаны лякальна.",
"translate-import-err-stale-group": "Група паведамленьняў, да якой належыць гэты файл, не існуе.",
@@ -231,9 +228,7 @@
"translate-js-summary": "Апісаньне:",
"translate-js-save": "Захаваць",
"translate-js-next": "Захаваць і адкрыць наступнае",
- "translate-js-nonext": "Гэта было апошняе паведамленьне на гэтай старонцы.",
"translate-js-skip": "Адкрыць наступнае",
- "translate-js-save-failed": "Немагчыма захаваць. Калі ласка, паведаміце пра гэтую памылку.",
"translate-js-history": "Гісторыя перакладу",
"translate-js-support": "Задаць пытаньне",
"translate-js-support-title": "Можаце задаць пытаньне, калі Вам бракуе інфармацыі пра кантэкст паведамленьня.",
@@ -252,19 +247,6 @@
"translate-searchprofile-tooltip": "Шукаць па ўсіх перакладах",
"translate-search-languagefilter": "Мова паведамленьняў:",
"translate-search-nofilter": "любая",
- "translate-messagereview-submit": "Ухваліць",
- "translate-messagereview-progress": "Ухваляем...",
- "translate-messagereview-failure": "Немагчыма ўхваліць: $1",
- "translate-messagereview-done": "Ухваленае",
- "translate-messagereview-reviews": "Ухваленае $1 {{PLURAL:$1|удзельнікам|удзельнікамі}}",
- "translate-messagereview-reviewswithyou": "Ухваленае {{PLURAL:$1|$1 удзельнікам, разам з Вамі|$1 удзельнікамі, разам з Вамі|1=Вамі}}",
- "api-error-invalidrevision": "Пераклад ня знойдзены",
- "api-error-unknownmessage": "Паведамленьне ня знойдзена",
- "api-error-fuzzymessage": "Пераклад пазначаны як недакладны",
- "api-error-owntranslation": "Вы ня можаце ўхваліць уласныя пераклады",
- "translate-messagereview-no-fuzzy": "Няпэўныя пераклады (FUZZY) ня могуць быць ухваленыя.",
- "translate-messagereview-no-own": "Вы ня можаце ўхваліць уласныя пераклады.",
- "translate-messagereview-doit": "Ухваліць гэты пераклад.",
"log-name-translationreview": "Журнал рэцэнзіяў перакладаў",
"log-description-translationreview": "Журнал усіх рэцэнзіяў перакладаў і групаў паведамленьняў.",
"logentry-translationreview-message": "$1 {{GENDER:$2|ухваліў|ухваліла}} пераклад $3",
@@ -286,7 +268,6 @@
"translate-dynagroup-recent-desc": "Гэтая група паведамленьняў зьмяшчае ўсе апошнія пераклады на гэтую мову.\nКарысьней усяго для вычыткі.",
"translate-dynagroup-additions-label": "Апошнія дапаўненьні",
"translate-dynagroup-additions-desc": "Гэтая група зьмяшчае новыя і зьмененыя паведамленьні.",
- "translate-gethelp": "Дапамога",
"translate-msggroupselector-projects": "Група паведамленьняў",
"translate-msggroupselector-search-placeholder": "Шукаць групы",
"translate-msggroupselector-search-all": "Усе",
@@ -312,7 +293,7 @@
"tux-editor-skip-button-label": "Да наступнага",
"tux-editor-cancel-button-label": "Скасаваць",
"tux-editor-confirm-button-label": "Зацьвердзіць пераклад",
- "tux-editor-shortcut-info": "Націсьніце «$1», каб захаваць, «$2», каб прапусьціць і перайсьці да наступнага паведамленьня, ці «$3», каб пабачыць іншыя скароты.",
+ "tux-editor-shortcut-info": "Націсьніце «$1», каб пацьвердзіць і перайсьці да наступнага паведамленьня, «$2», каб прапусьціць, «$4», каб увесьці апісаньне ці ўтрымлівайце «$3», каб пабачыць іншыя скароты.",
"tux-editor-edit-desc": "Зьмяніць дакумэнтацыю",
"tux-editor-add-desc": "Дадаць дакумэнтацыю",
"tux-editor-suggestions-title": "Прапановы",
diff --git a/www/wiki/extensions/Translate/i18n/core/be.json b/www/wiki/extensions/Translate/i18n/core/be.json
index 6800c97d..2da05bf8 100644
--- a/www/wiki/extensions/Translate/i18n/core/be.json
+++ b/www/wiki/extensions/Translate/i18n/core/be.json
@@ -4,16 +4,13 @@
"Nemo bis",
"Чаховіч Уладзіслаў",
"Дзяніс Тутэйшы",
- "Mikalai Udodau"
+ "Mikalai Udodau",
+ "Irus",
+ "Artsiom91"
]
},
"translate": "Пераклад",
"translate-desc": "[[Special:Translate|Адмысловая старонка]] для перакладу MediaWiki і іншых праграм",
- "translate-taskui-view": "Паказаць усе паведамленні",
- "translate-taskui-untranslated": "Паказаць неперакладзеныя паведамленні",
- "translate-taskui-optional": "Паказаць дадатковыя паведамленні",
- "translate-taskui-acceptqueue": "Толькі паведамленні, якія патрабуюць майго ўхвалення",
- "translate-taskui-reviewall": "Праверыць усе пераклады",
"translate-taskui-export-to-file": "Экспарт у родным фармаце",
"translate-taskui-export-as-po": "Экспарт для афлайнавага перакладу",
"translate-taction-translate": "Пераклад",
@@ -42,7 +39,6 @@
"translate-page-description-hasoptional": "У гэтай групе ўтрымліваюцца дадатковыя паведамленні.\nДадатковыя паведамленні перакладаюцца толькі ў тых выпадках, калі ваша мова прад'яўляе нейкія дадатковыя патрабаванні, — напрыклад, калі дзесьці не павінны выкарыстоўвацца прабелы, ці пры транслітарацыі уласных імёнаў. $1",
"translate-page-description-hasoptional-open": "Паказваць дадатковыя паведамленні.",
"translate-page-edit": "правіць",
- "translate-ext-url": "<hr />Сайт: $1",
"translate-optional": "(неабавязковае)",
"translate-ignored": "(ігнаруемае)",
"translate-edit-title": "Правіць «$1»",
@@ -52,9 +48,7 @@
"translate-edit-no-information": "''Гэта паведамленне не мае апісанні. Калі вы ведаеце, дзе ці як гэта паведамленне выкарыстоўваецца, то можаце дапамагчы іншым перакладчыкам, дадаўшы да яго апісанне.''",
"translate-edit-information": "Інфармацыя пра паведамленне ($1)",
"translate-edit-in-other-languages": "Паведамленне на іншых мовах",
- "translate-edit-committed": "Бягучы пераклад у праграме",
"translate-edit-warnings": "Папярэджанні пра няпоўныя пераклады",
- "translate-edit-tmsugs": "Прапановы з памяці перакладаў",
"translate-edit-tmmatch-source": "Тэкст зыходнага паведамлення для перакладу: $1",
"translate-edit-tmmatch": "$1% адпаведнасць",
"translate-use-suggestion": "Замяніць бягучы тэкст перакладу на гэту падказку.",
@@ -74,7 +68,7 @@
"translate-magic-cm-savefailed": "Не атрымалася запісаць",
"translate-magic-special": "Псеўданімы адмысловых старонак",
"translate-magic-words": "Магічныя словы",
- "translate-magic-namespace": "Прасторы імёнаў",
+ "translate-magic-namespace": "Прасторы назваў",
"translate-magic-notsaved": "Ваша праўка не запісана!",
"translate-magic-errors": "Калі ласка, выправіце {{PLURAL:$1|наступную памылку|наступныя памылкі}} ў перакладзе:",
"translate-magic-saved": "Зробленыя праўкі паспяхова запісаны.",
@@ -87,7 +81,7 @@
"translate-checks-plural": "Арыгінал выкарыстоўвае <nowiki>{{PLURAL:}}</nowiki>, а пераклад — не.",
"translate-checks-plural-forms": "Выразу <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|была дадзена адна форма|былі дадзены $1 формы|былі дадзены $1 формаў}}, але {{PLURAL:$2|падтрымліваецца толькі адна форма|падтрымліваюцца $2 формы|падтрымліваюцца $2 формаў}} (акрамя формаў 0= і 1=).",
"translate-checks-plural-dupe": "У канцы выразу <nowiki>{{PLURAL:}}</nowiki> дзве аднолькавых формы. Замест <nowiki>{{PLURAL:$1|паліто|паліто}}</nowiki> лепш напісаць <nowiki>{{PLURAL:$1|паліто}}</nowiki>.",
- "translate-checks-pagename": "Змянілася вызначэнне прасторы імёнаў",
+ "translate-checks-pagename": "Змянілася вызначэнне прасторы назваў",
"translate-checks-format": "Гэты пераклад не адпавядае вызначэнню ці ўтрымлівае сінтаксічную памылку: $1",
"translate-checks-parametersnotequal": "Колькасць параметраў — $1, а {{PLURAL:$2|павінен|павінна}} быць — $2.",
"translate-checks-malformed": "<nowiki>$1</nowiki> некарэктны.",
@@ -104,6 +98,13 @@
"action-translate-import": "імпарт перакладаў, зробленых у афлайне",
"right-translate-messagereview": "дадгляд перакладаў",
"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": "Паказаць толькі пераклады",
@@ -132,6 +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-documentation-language": "Дакументацыя паведамлення"
+ "translate-js-support-title": "Звярніцеся за дапамогай, калі не хапае інфармацыі для правільнага перакладу гэтага паведамлення.",
+ "translate-documentation-language": "Дакументацыя паведамлення",
+ "translate-searchprofile": "Пераклады",
+ "translate-searchprofile-tooltip": "Шукаць ва ўсіх перакладах",
+ "tux-editor-in-other-languages": "На іншых мовах",
+ "tux-editor-close-tooltip": "Закрыць"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/bg.json b/www/wiki/extensions/Translate/i18n/core/bg.json
index fba16a31..a08b84ee 100644
--- a/www/wiki/extensions/Translate/i18n/core/bg.json
+++ b/www/wiki/extensions/Translate/i18n/core/bg.json
@@ -5,17 +5,21 @@
"පසිඳු කාවින්ද",
"StanProg",
"Vodnokon4e",
- "Spiritia"
+ "Spiritia",
+ "ShockD",
+ "Vlad5250"
]
},
"translate": "Превеждане",
- "translate-desc": "[[Special:Translate|Специална страница]] за превеждане на MediaWiki и др.",
- "translate-taskui-view": "Показване на всички съобщения",
- "translate-taskui-untranslated": "Показване на непреведените съобщения",
- "translate-taskui-optional": "Показване на допълнителните съобщения",
+ "translate-desc": "[[Special:Translate|Специална страница]] за превеждане на МедияУики и други съобщения",
+ "translate-fuzzybot-desc": "Това е служебна системна сметка, която се използва от разширението [https://www.mediawiki.org/wiki/Extension:Translate Превеждане] на МедияУики за поддържане на преводи.\nТази сметка е дял от основния програм и не е в собственост на ниедин потребител.",
+ "translate-taskui-export-to-file": "Експортиране в собствен формат",
+ "translate-taskui-export-as-po": "Експортиране за офлайн превод",
"translate-taction-translate": "Превеждане",
+ "translate-taction-proofread": "Проверка",
"translate-taction-lstats": "Езикови статистики",
- "translate-taction-export": "Изнасяне",
+ "translate-taction-mstats": "Статистики за групи съобщения",
+ "translate-taction-export": "Експортиране",
"translate-taction-disabled": "Това действие е изключено в това уики.",
"translate-page-no-such-language": "Избраният език е невалиден.",
"translate-page-no-such-group": "Избраната група е невалидна",
@@ -34,9 +38,9 @@
"translate-next": "Следваща страница",
"translate-prev": "Предишна страница",
"translate-page-description-legend": "Информация за групата",
+ "translate-page-description-hasoptional": "Тази група съдържа незадължителни съобщения.\nНезадължителните съобщения трябва да се превеждат само кога вашия език има специални нужди, както транслитерация на имена или неупотреба на празни места. $1",
"translate-page-description-hasoptional-open": "Показване на допълнителни съобщения.",
"translate-page-edit": "редактиране",
- "translate-ext-url": "<hr />Уебсайт: $1",
"translate-optional": "(незадължително)",
"translate-ignored": "(пренебрегнато)",
"translate-edit-title": "Редактиране на „$1“",
@@ -46,17 +50,22 @@
"translate-edit-no-information": "<em>За това съобщение няма документация.\nАко знаете къде и как се използва, можете да помогнете на останалите преводачи като добавите документация за това съобщение.</em>",
"translate-edit-information": "Информация за съобщението ($1)",
"translate-edit-in-other-languages": "Съобщението на други езици",
- "translate-edit-committed": "Текущ превод в софтуера",
- "translate-edit-warnings": "Забележки за непълни преводи",
+ "translate-edit-warnings": "Предупреждения за непълни преводи",
+ "translate-edit-tmmatch-source": "Изходен текст за превода: $1",
"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-module": "Модул:",
"translate-magic-submit": "Извличане",
- "translate-magic-cm-export": "Изнасяне",
- "translate-magic-nothing-to-export": "Няма нищо за изнасяне.",
+ "translate-magic-cm-export": "Експортиране",
+ "translate-magic-nothing-to-export": "Няма нищо за експортиране.",
"translate-magic-cm-to-be": "Желано",
"translate-magic-cm-current": "Текущо",
"translate-magic-cm-original": "Оригинално",
@@ -69,7 +78,7 @@
"translate-magic-namespace": "Имена на именни пространства",
"translate-magic-notsaved": "Редакцията не беше съхранена!",
"translate-magic-errors": "Необходимо е да {{PLURAL:$1|се отстрани следната грешка|се отстранят следните грешки}} в преводите:",
- "translate-magic-saved": "Промените бяха съхранени успешно.",
+ "translate-magic-saved": "Направени от вас промени са съхранени.",
"translate-checks-parameters": "{{PLURAL:$2|Следният параметър не се използва|Следните параметри не се използват}}: <strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Следният параметър е непознат|Следните параметри са непознати}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Съобщението съдържа необичаен брой {{PLURAL:$2|скоби|скоби}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -77,46 +86,72 @@
"translate-checks-links-missing": "{{PLURAL:$2|Липсва следата препратка|Липсват следнте $2 препратки}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Необходимо е заместване на {{PLURAL:$2|посочения етикет с правилен|посочените етикети с правилни}}: <strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "Оригиналното съобщение използва <nowiki>{{PLURAL:}}</nowiki>, а преводът — не.",
+ "translate-checks-pagename": "Изменено е определението на именното пространство",
+ "translate-checks-format": "Този превод не следи определението или има неправилен синтаксис: $1",
+ "translate-checks-fudforum-syntax": "Използвайте <nowiki>$1</nowiki> вместо <nowiki>$2</nowiki> в този проект.",
"translate-pref-nonewsletter": "Без получаване на бюлетин по е-поща",
+ "translate-pref-editassistlang": "Помощни езици:",
+ "prefs-translate": "Настройки на превеждането",
"right-translate": "Редактиране чрез интерфейса за превод",
+ "right-translate-manage": "Управление на групи съобщения",
+ "action-translate-manage": "управление на групи съобщения",
+ "right-translate-import": "Импортиране на офлайн превод",
+ "action-translate-import": "импортиране на офлайн превод",
+ "right-translate-messagereview": "Проверка на преводи",
+ "action-translate-messagereview": "проверка на преводи",
+ "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": "Само на преводите",
"translate-rc-translation-filter-filter": "Филтриране на преводите",
"translate-rc-translation-filter-site": "Промени само в съобщенията за сайта",
- "translationstats": "Статистики за преводите",
+ "translationstats": "Статистика за преводите",
"translate-stats-edits": "Редакции",
"translate-stats-users": "Преводачи",
"translate-stats-registrations": "Регистрации",
- "translate-statsf-intro": "Формулярът по-долу слуижи за създаване на статистика. Всички възможности имат минимални и максимални стойности.",
+ "translate-stats-reviews": "Оценки",
+ "translate-stats-reviewers": "Рецензенти",
+ "translate-statsf-intro": "С този формуляр можете да създадете прост статистичен преглед. Всички възможности имат минимални и максимални стойности.",
"translate-statsf-options": "Графични настройки",
"translate-statsf-width": "Ширина в пиксели:",
"translate-statsf-height": "Височина в пиксели:",
"translate-statsf-days": "Времеви период в дни:",
"translate-statsf-start": "Начална дата:",
+ "translate-statsf-scale": "Прецизност:",
"translate-statsf-scale-months": "Месеци",
"translate-statsf-scale-weeks": "Седмици",
"translate-statsf-scale-days": "Дни",
"translate-statsf-scale-hours": "Часове",
+ "translate-statsf-count": "Мярка:",
"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-submit": "Преглед",
"translate-tag-page-desc": "Превод на страницата [[$2|$1]] от $3 ($4).",
"translate-sidebar-alltrans": "На други езици",
"translations": "Всички преводи",
+ "translations-summary": "Въведете име на съобщение, за да видите наличните му преводи на всички езици.",
"translate-translations-no-message": "\"Съобщение \"$1\" не е достъпно за превод",
"translate-translations-none": "Не съществуват преводи за „$1“",
"translate-translations-count": "{{PLURAL:$1|Открит е $1 превод|Открити са $1 превода}}.",
"translate-translations-fieldset-title": "Съобщение",
"translate-translations-messagename": "Име:",
"translate-translations-project": "Проект:",
+ "translate-translations-including-no-param": "Посочете валидно ключово име на съобщението в параметъра на подстраницата",
"translate-translations-history-short": "и",
"languagestats": "Езикови статистики",
"languagestats-summary": "Тази страница показва статистиките за преводите на всички групи съобщения за езика.",
- "messagegroupstats-summary": "Тази страница показва статистиките за преводите на съобщенията по групи.",
+ "messagegroupstats-summary": "На страницата са показани статистики за групи съобщения.",
"languagestats-stats-for": "Статистики за преводите на $1 ($2).",
"languagestats-recenttranslations": "последни преводи",
"translate-langstats-incomplete": "Някои от статистиките на тази страница са непълни. Моля, презаредете страницата за получаване на по-подробни данни.",
@@ -133,63 +168,175 @@
"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-fieldset": "Визуални настройки",
"translate-mgs-group": "Група съобщения:",
- "translate-mgs-nocomplete": "Не показвай езици с напълно завършен превод",
- "translate-mgs-noempty": "Не показвай езици, които нямат започнат превод",
+ "translate-mgs-nocomplete": "Скриване на езици с напълно завършен превод",
+ "translate-mgs-noempty": "Скриване на езици без започнат превод",
"translate-mgs-submit": "Показване на статистики",
"translate-mgs-column-language": "Език",
- "translate-mgs-totals": "Всички езици заедно",
+ "translate-mgs-totals": "{{PLURAL:$1|Всеки език|Всички $1 езици заедно}}",
+ "translate-mgs-invalid-group": "Посочената група $1 не съществува.",
"supportedlanguages": "Поддържани езици",
+ "supportedlanguages-sqlite-error": "SQLite не е поддържан",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Преводач|Преводачка}}|Преводачи}}: $1",
"supportedlanguages-recenttranslations": "последни преводи",
"supportedlanguages-count": "$1 {{PLURAL:$1|език|езици}} общо.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|редакция|редакции}} - последната преди $3 {{PLURAL:$3|ден|дни}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Изходен текст на преводната единица",
"translate-save": "Съхраняване ($1)",
"translate-jssti-add": "Добавяне към списъка",
+ "managemessagegroups": "Управление на групи съобщения",
+ "translate-smg-notallowed": "Не ви е позволено да извършите това действие.",
+ "translate-smg-nochanges": "Няма промени за обработка.",
+ "translate-smg-submit": "Подаване на промени за обработка",
+ "translate-smg-left": "Съдържание на съобщението в уикито",
+ "translate-smg-right": "Предстоящи промени",
+ "translate-manage-import-diff": "Съобщение $1 | Действия: $2",
+ "translate-manage-import-new": "Ново съобщение $1",
+ "translate-manage-import-deleted": "Изтрито съобщение $1",
"translate-manage-action-import": "Внасяне",
"translate-manage-action-ignore": "Пренебрегване",
+ "translate-manage-nochanges": "Няма промени в дефинициите на съобщенията за тази група.",
+ "translate-manage-import-summary": "Внасяне на нова версия от външен източник",
+ "translate-manage-conflict-summary": "Внасяне на нова версия от външен източник.\nМоля, проверете.",
"translate-manage-submit": "Изпълняване",
+ "translate-manage-intro-other": "По-долу е даден списък на промените по превода на $1.\nМоля, прегледайте промените и изберете желаното действие за всяка промяна.\nАко изберете да игнорирате промените, то това ще бъде временно действие.",
+ "translate-manage-import-ok": "Внесено: $1",
"translate-manage-import-done": "Внасянето завърши!",
"importtranslations": "Внасяне на преводи",
+ "translate-import-from-local": "Локално качване на файл:",
"translate-import-load": "Зареждане на файла",
"translate-import-err-ul-failed": "Качването на файла не беше успешно",
+ "translate-import-err-invalid-title": "Посоченото име на файла <nowiki>$1</nowiki> е невалидно.",
"translate-import-err-no-such-file": "Файлът <nowiki>$1</nowiki> не съществува или не е бил качен локално.",
+ "translate-import-err-stale-group": "Файлът принадлежи на несъществуваща група съобщения.",
"translate-js-summary": "Резюме:",
"translate-js-save": "Съхраняване",
"translate-js-next": "Съхраняване и отваряне на следващото",
- "translate-js-nonext": "Това беше последното съобщение на тази страница.",
+ "translate-js-skip": "Направо към следващото",
+ "translate-js-history": "История на преводи",
"translate-js-support": "Задаване на въпрос",
"translate-js-support-unsaved-warning": "Имате несъхранени преводи.",
+ "translate-gs-pos": "Място",
"translate-gs-code": "Код",
+ "translate-gs-continent": "Континент",
+ "translate-gs-multiple": "Повече",
+ "translate-gs-count": "Брой",
"translate-gs-total": "Общо",
"translate-documentation-language": "Документация на съобщението",
"translate-searchprofile": "Преводи",
+ "translate-searchprofile-tooltip": "Търсене във всички преводи",
+ "translate-searchprofile-note": "Повече възможности за търсене ще намерите на [$1 търсенето на преводи].",
+ "translate-search-languagefilter": "Филтриране по език:",
+ "translate-search-nofilter": "Без филтриране",
+ "log-name-translationreview": "Дневник на проверките на преводи",
+ "log-description-translationreview": "Дневник на всички проверки на преводи и групи съобщения.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|провери}} превод $3",
"logentry-translationreview-group": "$1 {{GENDER:$2|промени}} състоянието на преводите на $3 на $4 език от „$6“ на „$7“",
+ "group-translate-sandboxed": "Неодобрени преводачи",
+ "group-translate-sandboxed-member": "{{GENDER:$1|неодобрен преводач}}",
+ "translate-workflow-state-": "(незададен)",
+ "translate-workflowstatus": "Статус: $1",
+ "translate-workflow-set-doing": "Задаване...",
+ "translate-workflow-autocreated-summary": "Автоматично създаване на страница за работното състояние $1",
"translate-stats-workflow": "Статут",
+ "translate-workflowgroup-label": "Работни състояния",
+ "translate-workflowgroup-desc": "Тази група съобщения показва работното състояние на преводите.\nСъстоянията се определят с променливата $wgTranslateWorkflowStates.",
"translate-dynagroup-recent-label": "Последни преводи",
- "translate-gethelp": "Помощ",
+ "translate-dynagroup-recent-desc": "Тази група съобщения показва всички скорошни преводи на избрания език.\nНай-често се използва при проверка на преводи.",
+ "translate-dynagroup-additions-label": "Последни допълнения",
+ "translate-dynagroup-additions-desc": "Тази група съобщения показва нови и изменени съобщения.",
+ "translate-msggroupselector-projects": "Група съобщения",
+ "translate-msggroupselector-search-placeholder": "Търсене на групи",
"translate-msggroupselector-search-all": "Всички",
+ "translate-msggroupselector-search-recent": "Последни",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|подгрупа|подгрупи}}",
"tux-languageselector": "Превеждане на",
"tux-tab-all": "Всички",
+ "tux-tab-untranslated": "Непреведени",
+ "tux-tab-outdated": "Неактуални",
+ "tux-tab-translated": "Преведени",
+ "tux-tab-unproofread": "Непроверени",
"tux-edit": "Редактиране",
"tux-status-optional": "Незадължително",
+ "tux-status-fuzzy": "Неактуален",
+ "tux-status-proofread": "Проверени",
"tux-status-translated": "Преведено",
"tux-status-saving": "Съхраняване...",
+ "tux-status-unsaved": "Несъхранено",
+ "tux-save-unknown-error": "Възникна неизвестна грешка.",
+ "tux-editor-placeholder": "Вашият превод",
+ "tux-editor-editsummary-placeholder": "Незадължително резюме",
+ "tux-editor-discard-changes-button-label": "Отхвърляне на промени",
"tux-editor-save-button-label": "Съхраняване на превода",
- "tux-editor-cancel-button-label": "Отказване",
+ "tux-editor-skip-button-label": "Направо към следващото",
+ "tux-editor-cancel-button-label": "Отказ",
+ "tux-editor-confirm-button-label": "Потвърждаване на превода",
+ "tux-editor-proofread-button-label": "Отбелязване като проверено",
+ "tux-editor-edit-desc": "Редактиране на документация",
+ "tux-editor-add-desc": "Добавяне на документация",
"tux-editor-suggestions-title": "Предложения",
"tux-editor-in-other-languages": "На други езици",
"tux-editor-need-more-help": "Нуждаете се от допълнителна помощ?",
+ "tux-editor-ask-help": "Поискайте още информация",
+ "tux-editor-tm-match": "$1% съвпадение",
+ "tux-warnings-more": "{{PLURAL:$1|$1 още}}",
"tux-warnings-hide": "скриване",
+ "tux-editor-n-uses": "използвано $1 {{PLURAL:$1|път|пъти}}",
+ "tux-editor-message-desc-more": "Виж още",
+ "tux-editor-message-desc-less": "Показване компактно",
+ "tux-editor-clear-translated": "Скриване на преведените",
+ "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-editor-doc-editor-cancel": "Отказване",
+ "tux-editor-page-mode": "Страница",
+ "tux-editor-outdated-warning-diff-link": "Показване на разликите",
+ "tux-editor-doc-editor-placeholder": "Документация на съобщението",
+ "tux-editor-doc-editor-save": "Съхраняване на документацията",
+ "tux-editor-doc-editor-cancel": "Отказ",
+ "tux-messagetable-more-messages": "Още $1 {{PLURAL:$1|съобщение|съобщения}}",
+ "tux-messagetable-loading-messages": "Зареждане на {{PLURAL:$1|съобщение|съобщения}}...",
+ "tux-message-filter-placeholder": "Филтриране на списъка",
"tux-message-filter-advanced-button": "Разширено търсене",
+ "tux-message-filter-optional-messages-label": "Незадължителни съобщения",
+ "tux-proofread-translated-by-self": "Преведено от Вас",
+ "tux-empty-list-all": "Тази група съобщения е празна",
+ "tux-empty-list-all-guide": "Изберете друга група съобщения за превеждане",
+ "tux-translate-page-no-such-group": "<strong>Посочената група съобщения не съществува.</strong> Изберете друга.",
+ "tux-empty-list-translated": "Няма преведени съобщения",
+ "tux-empty-list-translated-guide": "Можете да помогнете с превод",
"tux-empty-list-translated-action": "Превеждане",
+ "tux-empty-no-messages-to-display": "Няма съобщения за показване.",
+ "tux-empty-show-optional-messages": "Показване на допълнителните съобщения",
+ "tux-empty-no-outdated-messages": "Няма неактуални съобщения",
+ "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-list-other": "Няма нищо за превеждане",
+ "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-message-tools-show-editor": "Показване в уики редактор",
"tux-editor-message-tools-history": "История",
+ "tux-editor-message-tools-delete": "Изтриване",
"tux-editor-message-tools-translations": "Всички преводи",
- "tux-editor-loading": "Зареждане..."
+ "tux-editor-message-tools-linktothis": "Връзка към това съобщение",
+ "tux-editor-loading": "Зареждане...",
+ "translate-search-more-languages-info": "още $1 {{PLURAL:$1|език|езика}}",
+ "translate-statsbar-tooltip": "$1% преведени, $2% проверени",
+ "translate-search-more-groups-info": "още $1 {{PLURAL:$1|група|групи}}",
+ "translate-ulsdep-title": "Грешка в поставеността",
+ "tux-nojs": "Този инструмент не работи без JavaScript. JavaScript е деактивиран, не работи или не се поддържа от браузъра."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/bgn.json b/www/wiki/extensions/Translate/i18n/core/bgn.json
index 4c072c8c..2674ddfe 100644
--- a/www/wiki/extensions/Translate/i18n/core/bgn.json
+++ b/www/wiki/extensions/Translate/i18n/core/bgn.json
@@ -5,6 +5,9 @@
"Ibrahim khashrowdi"
]
},
+ "translate-edit-in-other-languages": "ای پیام به دیگه زباناني تا",
"translate-sidebar-alltrans": "بِه دیگه زباناني تا",
- "translate-documentation-language": "پیامی مستندان"
+ "translate-documentation-language": "پیامی مستندان",
+ "translate-msggroupselector-search-all": "موچین",
+ "tux-tab-all": "موچین"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/bho.json b/www/wiki/extensions/Translate/i18n/core/bho.json
index ff40d366..d29fde81 100644
--- a/www/wiki/extensions/Translate/i18n/core/bho.json
+++ b/www/wiki/extensions/Translate/i18n/core/bho.json
@@ -8,11 +8,6 @@
},
"translate": "अनुवादन करीं",
"translate-desc": "[[Special:Translate| विशेष पन्ना]] मीडीयाविकि के अनुवादन खातिर",
- "translate-taskui-view": "सभी सन्देश दिखाईं",
- "translate-taskui-untranslated": "अअनुवादित सन्देश दिखाईं",
- "translate-taskui-optional": "वैकल्पिक सन्देश दिखाईं",
- "translate-taskui-acceptqueue": "संदेश, जे केवल हम स्वीकार कर सकीं",
- "translate-taskui-reviewall": "सभी अनुवाद के समीक्षा करीं",
"translate-taskui-export-to-file": "मूल स्वरूप में निर्यात करीं",
"translate-taskui-export-as-po": "ऑफ़लाइन अनुवाद के खातिर निर्यात करीं",
"translate-taction-translate": "अनुवाद करीं",
diff --git a/www/wiki/extensions/Translate/i18n/core/bn.json b/www/wiki/extensions/Translate/i18n/core/bn.json
index 71cb09ab..7660ecd3 100644
--- a/www/wiki/extensions/Translate/i18n/core/bn.json
+++ b/www/wiki/extensions/Translate/i18n/core/bn.json
@@ -8,14 +8,13 @@
"Leemon2010",
"Zaheen",
"Tauhid16",
- "Aftabuzzaman"
+ "Aftabuzzaman",
+ "আজিজ",
+ "আফতাবুজ্জামান"
]
},
"translate": "অনুবাদ",
- "translate-taskui-view": "সব বার্তা দেখাও",
- "translate-taskui-untranslated": "অনুবাদ হয়নি এমন বার্তা দেখাও",
- "translate-taskui-optional": "ঐচ্ছিক বার্তা দেখাও",
- "translate-taskui-reviewall": "সমস্ত অনুবাদ পর্যালোচনা করুন",
+ "translate-extensionname": "অনুবাদ",
"translate-taskui-export-to-file": "স্থানীয় ফরম্যাটে আমদানী করুন।",
"translate-taskui-export-as-po": "অফলাইন অনুবাদের জন্য আমদানী করুন",
"translate-taction-translate": "অনুবাদ",
@@ -26,7 +25,7 @@
"translate-taction-disabled": "এই উইকিতে এই কাজ নিস্ক্রিয় রয়েছে।",
"translate-page-no-such-language": "নির্দিস্টকৃত ভাষাটি অবৈধ ছিল।",
"translate-page-no-such-group": "নির্দিস্টকৃত সংঘটি অবৈধ ছিল।",
- "translate-page-disabled-source": "এই পাতার উৎস ভাষা হল $1।",
+ "translate-page-disabled": "এই দলে এই ভাষাটির অনুবাদ অক্ষম করা হয়েছে।\nকারণ:\n\n<em>$1</em>",
"translate-language-disabled": "এই ভাষায় অনুবাদ নিষ্ক্রিয় করা হয়েছে।",
"translate-page-settings-legend": "সেটিং",
"translate-page-group": "দল",
@@ -35,30 +34,37 @@
"translate-page-limit-option": "পাতা প্রতি $1টি {{PLURAL:$1|বার্তা}}",
"translate-submit": "বের করো",
"translate-page-navigation-legend": "পরিভ্রমণ",
- "translate-page-showing": "$3 বার্তার মধ্যে $1 থেকে $2 বার্তা দেখাও",
+ "translate-page-showing": "$3 বার্তার মধ্যে $1 থেকে $2 বার্তা দেখান।",
"translate-page-showing-all": "$1টি {{PLURAL:$1|বার্তা}} দেখাচ্ছে।",
+ "translate-page-showing-none": "প্রদর্শনের জন্য কোন বার্তা নাই।",
"translate-next": "পরবর্তী পাতা",
"translate-prev": "পূর্ববর্তী পাতা",
"translate-page-description-legend": "দলের তথ্য",
- "translate-page-description-hasoptional-open": "ঐচ্ছিক বার্তা দেখাও।",
+ "translate-page-description-hasoptional-open": "ঐচ্ছিক বার্তাগুলি দেখান।",
"translate-page-edit": "সম্পাদনা",
- "translate-ext-url": "<hr />ওয়েবসাইট: $1",
"translate-optional": "(ঐচ্ছিক)",
"translate-ignored": "(উপেক্ষিত)",
"translate-edit-title": "\"$1\" সম্পাদনা করুন",
- "translate-edit-definition": "বার্তা সংজ্ঞা",
+ "translate-edit-definition": "বার্তার সংজ্ঞা",
"translate-edit-translation": "অনুবাদ",
"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": "{{formatnum:$1}}% মিল রয়েছে",
+ "translate-use-suggestion": "বর্তমান অনুবাদকে এই পরামর্শটি দ্বারা প্রতিস্থাপন করুন।",
+ "translate-edit-nopermission": "বার্তা অনুবাদ করতে আপনার অনুবাদ অধিকার প্রয়োজন।",
"translate-edit-askpermission": "অনুমতি পান",
+ "exporttranslations": "অনুবাদসমূহ আমদানি",
+ "translate-export-form-format": "বিন্যাস",
"translate-magic-pagename": "সম্প্রসারিত মিডিয়াউইকি অনুবাদ",
"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-original": "মূল",
"translate-magic-cm-comment": "মন্তব্য:",
@@ -72,8 +78,15 @@
"translate-magic-saved": "আপনার পরিবর্তনসমূহ সংরক্ষিত হয়েছে।",
"translate-checks-parameters": "নিম্নলিখিত {{PLURAL:$2|প্যারামিটারটি|প্যারামিটারসমূহ}} ব্যবহার করা হয়নি:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "নিম্নলিখিত {{PLURAL:$2|প্যারামিটারটি|প্যারামিটারসমূহ}} অজানা:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-balance": "সঠিক পরিমাণে {{PLURAL:$2|বন্ধনী}} দেয়া হয়নি:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "নিম্নলিখিত {{PLURAL:$2|সংযোগটি|$2টি সংযোগ}} সমস্যাসঙ্কুল:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "নিম্নলিখিত {{PLURAL:$2|সংযোগটি|$2টি সংযোগ}} অনুপস্থিত:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-xhtml": "দয়া করে নিম্নলিখিত {{PLURAL:$2|ট্যাগ|ট্যাগগুলি}} সঠিকটি দিয়ে প্রতিস্থাপন করুন:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "সংজ্ঞা <nowiki>{{PLURAL:}}</nowiki> ব্যবহার করেছে কিন্তু অনুবাদ তা করে নি।",
"translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki>-এর শেষে অনুরূপ ফরম রয়েছে। <nowiki>{{PLURAL:$1|ভেড়া|ভেড়া}}</nowiki> কে <nowiki>{{PLURAL:$1|ভেড়া}}</nowiki> হিসাবে লিখতে হবে।",
+ "translate-checks-parametersnotequal": "অনুবাদে ব্যবহৃত প্যারামিটার হচ্ছে {{PLURAL:$1|$1}}টি; হওয়া উচিত {{PLURAL:$2|$2}}টি।",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> সঠিক নয়।",
+ "translate-checks-fudforum-syntax": "এই প্রকল্পে <nowiki>$2</nowiki>-এর পরিবর্তে <nowiki>$1</nowiki> ব্যবহার করুন।",
"translate-pref-nonewsletter": "আমাকে ইমেইল নিউজলেটার প্রেরণ করবেন না",
"translate-pref-editassistlang": "সহযোগী ভাষা:",
"prefs-translate": "অনুবাদ অপশন",
@@ -83,10 +96,18 @@
"right-translate-import": "অফলাইন অনুবাদ আমদানি",
"action-translate-import": "অফলাইন অনুবাদসমূহ আমদানি করুন",
"right-translate-messagereview": "অনুবাদ পর্যালোচনা",
+ "action-translate-messagereview": "অনুবাদ পর্যালোচনা করার",
+ "translate-rcfilters-translations": "অনুবাদ",
+ "translate-rcfilters-translations-only-label": "অনুবাদসমূহ",
+ "translate-rcfilters-translations-filter-label": "অনুবাদ নয়",
+ "translate-rcfilters-translations-filter-desc": "সমস্ত পরিবর্তনগুলি যা অনুবাদ নয়।",
+ "translate-rcfilters-translations-site-label": "সাইটের বার্তাসমূহ",
"translate-rc-translation-filter": "অনুবাদ পরিশোধক:",
"translate-rc-translation-filter-no": "কিছু করা হবে না",
- "translate-rc-translation-filter-only": "শুধুমাত্র অনুবাদগুলো দেখাও",
- "translationstats": "অনুবাদ পরিসংখ্যান",
+ "translate-rc-translation-filter-only": "শুধুমাত্র অনুবাদ দেখান",
+ "translate-rc-translation-filter-filter": "অনুবাদ দেখাবেন না",
+ "translate-rc-translation-filter-site": "শুধুমাত্র সাইটের বার্তার পরিবর্তনগুলি",
+ "translationstats": "অনুবাদের পরিসংখ্যান",
"translate-stats-edits": "সম্পাদনাসমূহ",
"translate-stats-users": "অনুবাদক",
"translate-stats-registrations": "নিবন্ধন",
@@ -98,13 +119,14 @@
"translate-statsf-scale-weeks": "সপ্তাহ",
"translate-statsf-scale-days": "দিন",
"translate-statsf-scale-hours": "ঘণ্টা",
+ "translate-statsf-count": "মাপ:",
"translate-statsf-count-edits": "সম্পাদনা সংখ্যা",
"translate-statsf-count-users": "সক্রিয় অনুবাদক",
"translate-statsf-count-registrations": "নতুন ব্যবহারকারী",
"translate-statsf-count-reviews": "অনুবাদ নিরীক্ষকগণ",
"translate-statsf-count-reviewers": "নিরীক্ষকগণ",
"translate-statsf-submit": "প্রাকদর্শন",
- "translate-tag-page-desc": "$3 ($4) থেকে উইকি পাতা [[$2|$1]]-এর অনুবাদ।",
+ "translate-tag-page-desc": "$3 ($4) থেকে [[$2|$1]] উইকি পাতার অনুবাদ।",
"translate-sidebar-alltrans": "অন্যান্য ভাষায়",
"translations": "সমস্ত অনুবাদ",
"translate-translations-no-message": "\"$1\" অনুবাদযোগ্য বার্তা নয়",
@@ -115,7 +137,7 @@
"translate-translations-project": "প্রকল্প:",
"translate-translations-history-short": "ই",
"languagestats": "ভাষার পরিসংখ্যান",
- "languagestats-stats-for": "$1 অনুবাদ পরিসংখ্যান ($2)।",
+ "languagestats-stats-for": "$1 অনুবাদের পরিসংখ্যান ($2)।",
"languagestats-recenttranslations": "সাম্প্রতিক অনুবাদ",
"translate-langstats-expand": "প্রসারণ",
"translate-langstats-collapse": "সংকোচন",
@@ -128,20 +150,23 @@
"translate-untranslated": "অনুবাদ হয়নি",
"translate-percentage-complete": "সম্পন্ন",
"translate-percentage-fuzzy": "পুরাতন",
- "translate-ls-submit": "পরিসংখ্যান দেখাও",
+ "translate-percentage-proofread": "পর্যালোচিত",
+ "translate-ls-submit": "পরিসংখ্যান দেখান",
"translate-ls-column-group": "বার্তা দল",
"translate-mgs-pagename": "বার্তা দলের পরিসংখ্যান",
"translate-mgs-fieldset": "প্রদর্শন পছন্দসমূহ",
"translate-mgs-group": "বার্তা দল:",
- "translate-mgs-submit": "পরিসংখ্যান দেখাও",
+ "translate-mgs-submit": "পরিসংখ্যান দেখান",
"translate-mgs-column-language": "ভাষা",
- "translate-mgs-totals": "সকল ভাষায় একসাথে",
+ "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|ভাষায়}}।",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|টি সম্পাদনা}} - সর্বশেষ সম্পাদনা $3 {{PLURAL:$3|দিন}} আগে",
+ "abusefilter-edit-builder-vars-translate-source-text": "অনুবাদ ইউনিটের উৎস পাঠ্য",
"translate-save": "সংরক্ষণ ($1)",
"translate-jssti-add": "তালিকায় যোগ করো",
"managemessagegroups": "বার্তা দল ব্যবস্থাপনা",
@@ -151,6 +176,9 @@
"translate-manage-import-deleted": "অপসারিত বার্তা $1",
"translate-manage-action-import": "আমদানি",
"translate-manage-action-ignore": "উপেক্ষা",
+ "translate-manage-import-summary": "বাহ্যিক উৎস থেকে একটি নতুন সংস্করণ আমদানি করা হয়েছে",
+ "translate-manage-conflict-summary": "বাহ্যিক উৎস থেকে একটি নতুন সংস্করণ আমদানি করা হয়েছে।\nপরীক্ষা করুন।",
+ "translate-manage-import-ok": "আমদানিকৃত: $1",
"translate-manage-import-done": "আমদানি সম্পন্ন!",
"importtranslations": "অনুবাদসমূহ আমদানি করুন",
"translate-import-from-local": "স্থানীয় পাতা আপলোড:",
@@ -159,7 +187,6 @@
"translate-js-summary": "সারাংশ:",
"translate-js-save": "সংরক্ষণ",
"translate-js-next": "সংরক্ষণ এবং পরবর্তী",
- "translate-js-nonext": "এটি এই পাতার শেষ বার্তা ছিল।",
"translate-js-skip": "বাতিল ও পরবর্তী",
"translate-js-history": "অনুবাদ ইতিহাস",
"translate-js-support": "প্রশ্ন জিজ্ঞাসা করুন",
@@ -176,29 +203,25 @@
"translate-documentation-language": "বার্তার নথি",
"translate-searchprofile": "অনুবাদসমূহ",
"translate-searchprofile-tooltip": "সকল অনুবাদে অনুসন্ধান",
- "translate-search-languagefilter": "ভাষা অনুযায়ী ফিল্টার:",
- "translate-messagereview-submit": "পর্যালোচিত হিসেবে চিহ্নিত করুন",
- "translate-messagereview-progress": "পর্যালোচিত হিসেবে চিহ্নিত করা হচ্ছে...",
- "translate-messagereview-failure": "পর্যালোচিত হিসেবে চিহ্নিত করা ব্যর্থ হয়েছে: $1",
- "translate-messagereview-done": "পর্যালোচিত",
- "translate-messagereview-reviews": "{{PLURAL:$1|একজন|$1 জন}} ব্যবহারকারী কর্তৃক পর্যালোচিত",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|আপনার দ্বারা|আপনিসহ $1 জন ব্যবহারকারী কর্তৃক}} পর্যালোচিত",
- "api-error-invalidrevision": "অনুবাদ খুঁজে পাওয়া যায়নি",
- "api-error-unknownmessage": "বার্তা খুঁজে পাওয়া যায়নি",
- "translate-messagereview-no-own": "আপনি আপনার নিজের অনুবাদ পর্যালোচিত হিসাবে চিহ্নিত করতে পারবেন না।",
- "translate-messagereview-doit": "এই অনুবাদটি নিরীক্ষিত হিসবে টীকা দিন।",
+ "translate-searchprofile-note": "[$1 অনুবাদ অনুসন্ধানে] আরও অনুসন্ধান বিকল্প পাওয়া যাবে।",
+ "translate-search-languagefilter": "ভাষা অনুযায়ী ছাঁকনি:",
"log-name-translationreview": "অনুবাদ নিরীক্ষণ লগ",
"logentry-translationreview-message": "$1 $3 অনুবাদ {{GENDER:$2|পর্যালোচনা করেছেন}}",
+ "group-translate-sandboxed": "অননুমোদিত অনুবাদকগণ",
+ "group-translate-sandboxed-member": "{{GENDER:$1|অননুমোদিত অনুবাদক}}",
+ "translate-workflow-state-": "(অনির্ধারিত)",
+ "translate-workflowstatus": "অবস্থা: $1",
"translate-workflow-set-doing": "সেটিং...",
"translate-stats-workflow": "অবস্থা",
"translate-dynagroup-recent-label": "সাম্প্রতিক অনুবাদ",
"translate-dynagroup-additions-label": "সাম্প্রতিক সংযোজনসমূহ",
+ "translate-dynagroup-additions-desc": "এই বার্তার দল নতুন এবং পরিবর্তিত বার্তাগুলি দেখায়।",
"translate-msggroupselector-projects": "বার্তা দল",
"translate-msggroupselector-search-placeholder": "দল অনুসন্ধান",
"translate-msggroupselector-search-all": "সমস্ত",
"translate-msggroupselector-search-recent": "সাম্প্রতিক",
"translate-msggroupselector-view-subprojects": "$1টি {{PLURAL:$1|উপদল}}",
- "tux-languageselector": "যে ভাষায় অনুবাদ করা হচ্ছে:",
+ "tux-languageselector": "অনুবাদের ভাষা",
"tux-tab-all": "সকল",
"tux-tab-untranslated": "অনুবাদ হয়নি",
"tux-tab-outdated": "পুরাতন",
@@ -211,29 +234,31 @@
"tux-status-translated": "অনূদিত",
"tux-status-saving": "সংরক্ষণ করা হচ্ছে ...",
"tux-status-unsaved": "সংরক্ষণ করা হয়নি",
+ "tux-save-unknown-error": "অজানা ত্রুটি দেখা দিয়েছে।",
"tux-editor-placeholder": "আপনার অনুবাদ",
+ "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-confirm-button-label": "অনুবাদ নিশ্চিত করুন",
"tux-editor-proofread-button-label": "পর্যালোচিত হিসেবে চিহ্নিত করুন",
- "tux-editor-shortcut-info": "সংরক্ষণ করতে \"$1\" চাপুন বা পরবর্তী বার্তায় যেতে \"$2\" চাপুন বা অন্যান্য শর্টকাটের জন্য \"$3\" চাপুন",
+ "tux-editor-shortcut-info": "সংরক্ষণ করতে ও পরবর্তী বার্তায় যেতে \"$1\" চাপুন, এড়িয়ে যেতে \"$2\" চাপুন, সারাংশ প্রদান করতে \"$4\" চাপুন বা অন্যান্য শর্টকাট দেখতে \"$3\" চাপুন।",
"tux-editor-edit-desc": "নথি সম্পাদনা",
- "tux-editor-add-desc": "নথি যোগ",
+ "tux-editor-add-desc": "নথি যোগ করুন",
"tux-editor-suggestions-title": "পরামর্শসমূহ",
"tux-editor-in-other-languages": "অন্যান্য ভাষায়",
"tux-editor-need-more-help": "আরও সাহায্যের প্রয়োজন?",
"tux-editor-ask-help": "আরও তথ্যের জন্য জিজ্ঞাসা করুন",
"tux-editor-tm-match": "{{formatnum:$1}}% মিল রয়েছে",
- "tux-warnings-more": "{{PLURAL:$1|আরও $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-less": "কম দেখাও",
- "tux-editor-clear-translated": "অনূদিত আড়াল করো",
+ "tux-editor-message-desc-more": "আরও দেখান",
+ "tux-editor-message-desc-less": "কম দেখান",
+ "tux-editor-clear-translated": "অনূদিত আড়াল করুন",
"tux-editor-proofreading-mode": "পর্যালোচনা",
"tux-editor-translate-mode": "তালিকা",
"tux-editor-proofreading-hide-own-translations": "আপনার অনুবাদসমূহ আড়াল করুন",
@@ -242,14 +267,14 @@
"tux-proofread-edit-label": "সম্পাদনা",
"tux-editor-page-mode": "পাতা",
"tux-editor-outdated-warning": "এই অনুবাদটি হালনাগাদ করার প্রয়োজন হতে পারে।",
- "tux-editor-outdated-warning-diff-link": "পার্থক্য দেখাও",
+ "tux-editor-outdated-warning-diff-link": "পার্থক্য দেখান",
"tux-editor-doc-editor-placeholder": "বার্তার নথি",
"tux-editor-doc-editor-save": "নথি সংরক্ষণ",
"tux-editor-doc-editor-cancel": "বাতিল",
"tux-messagetable-more-messages": "আরও {{formatnum:$1}}টি {{PLURAL:$1|বার্তা}}",
"tux-messagetable-loading-messages": "{{PLURAL:$1|বার্তা}} লোড হচ্ছে...",
- "tux-message-filter-placeholder": "ফিল্টার তালিকা:",
- "tux-message-filter-result": "\"$2\" এর জন্য $1টি {{PLURAL:$1|ফলাফল}} পাওয়া গেছে",
+ "tux-message-filter-placeholder": "তালিকা ছাঁকুন:",
+ "tux-message-filter-result": "\"$2\"-এর জন্য $1টি {{PLURAL:$1|ফলাফল}} পাওয়া গেছে",
"tux-message-filter-advanced-button": "উন্নত অনুসন্ধান",
"tux-message-filter-optional-messages-label": "ঐচ্ছিক বার্তাগুলি",
"tux-proofread-translated-by-self": "আপনার দ্বারা অনূদিত",
@@ -259,24 +284,28 @@
"tux-empty-list-translated-guide": "আপনি অনুবাদে সাহায্য করতে পারেন",
"tux-empty-list-translated-action": "অনুবাদ",
"tux-empty-no-messages-to-display": "প্রদর্শন করার বার্তা নেই।",
- "tux-empty-show-optional-messages": "ঐচ্ছিক বার্তাগুলি দেখাও",
+ "tux-empty-show-optional-messages": "ঐচ্ছিক বার্তাগুলি দেখান",
"tux-empty-no-outdated-messages": "কোন পুরাতন বার্তা নেই",
"tux-empty-nothing-to-proofread": "পর্যালোচনা করার কিছু নেই",
"tux-empty-you-can-help-providing": "আপনি নতুন অনুবাদ প্রদান করে সাহায্য করতে পারেন",
- "tux-empty-nothing-new-to-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-link": "সব বার্তা দেখাও",
+ "tux-empty-list-other-link": "সব বার্তা দেখান",
"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": "অপসারণ",
"tux-editor-message-tools-translations": "সমস্ত অনুবাদসমূহ",
+ "tux-editor-message-tools-linktothis": "এই বার্তায় সংযোগ",
"tux-editor-loading": "লোডিং...",
"translate-search-more-languages-info": "আরও $1টি {{PLURAL:$1|ভাষা}}",
"translate-statsbar-tooltip": "{{formatnum:$1}}% অনূদিত, {{formatnum:$2}}% পর্যালোচিত",
"translate-statsbar-tooltip-with-fuzzy": "{{formatnum:$1}}% অনূদিত, {{formatnum:$2}}% পর্যালোচিত, {{formatnum:$3}}% মেয়াদোত্তীর্ণ",
- "translate-search-more-groups-info": "আরও $1টি {{PLURAL:$1|দল}}"
+ "translate-search-more-groups-info": "আরও $1টি {{PLURAL:$1|দল}}",
+ "tux-nojs": "এই সরঞ্জামটি জাভাস্ক্রিপ্ট ছাড়া কাজ করে না। জাভাস্ক্রিপ্ট অক্ষম আছে, তাই কাজ করতে ব্যর্থ হয়েছে, বা এই ব্রাউজারটি অসমর্থিত।"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/bo.json b/www/wiki/extensions/Translate/i18n/core/bo.json
index 070f5f58..40844045 100644
--- a/www/wiki/extensions/Translate/i18n/core/bo.json
+++ b/www/wiki/extensions/Translate/i18n/core/bo.json
@@ -6,9 +6,6 @@
]
},
"translate": "ཡིག་སྒྱུར།",
- "translate-taskui-view": "ཆ་འཕྲིན་ཧྲིལ་པོ་སྟོན།",
- "translate-taskui-untranslated": "ཡིག་བསྒྱུར་མ་བྱས་པའི་བརྡ་འཕྲིན་སྟོན།",
- "translate-taskui-optional": "འདམ་ཀའི་བརྡ་འཕྲིན་སྟོན།",
"translate-page-disabled": "སྡེ་ཁག་འདིའི་ནང་དུ་སྐད་རིགས་འདིའི་ཡིག་སྒྱུར་ནུས་མེད་ཆགས་འདུག \nརྒྱུ་མཚན་ནི། <em>$1</em>",
"translate-page-settings-legend": "སྒྲིག་བཀོད།",
"translate-page-group": "སྡེ་ཁག",
@@ -24,7 +21,6 @@
"translate-prev": "ཤོག་ངོས་གོང་མ།",
"translate-page-description-legend": "སྡེ་ཁག་ཆ་འཕྲིན།",
"translate-page-edit": "རྩོམ་སྒྲིག",
- "translate-ext-url": "<hr />དྲ་ཚིགས། $1",
"translate-optional": "(འདེམས་ཚན་ཅན།)",
"translate-ignored": "(སྣང་མེད་བྱས་པ།)",
"translate-edit-title": "\"$1\"ལ་རྩོམ་སྒྲིག་བྱེད་པ།",
diff --git a/www/wiki/extensions/Translate/i18n/core/bqi.json b/www/wiki/extensions/Translate/i18n/core/bqi.json
new file mode 100644
index 00000000..b72ca009
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/bqi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mogoeilor"
+ ]
+ },
+ "translate-documentation-language": "سٱنٱڌسازی سی پٱیغوم"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/br.json b/www/wiki/extensions/Translate/i18n/core/br.json
index 83134e46..ecb1a4cd 100644
--- a/www/wiki/extensions/Translate/i18n/core/br.json
+++ b/www/wiki/extensions/Translate/i18n/core/br.json
@@ -9,11 +9,6 @@
},
"translate": "Treiñ",
"translate-desc": "[[Special:Translate|Pajenn dibar]] evit treiñ MediaWiki ha pelloc'h",
- "translate-taskui-view": "Diskouez an holl gemennadennoù",
- "translate-taskui-untranslated": "Diskouez ar c'hemennadennoù da dreiñ",
- "translate-taskui-optional": "Diskouez ar c'hemennadennoù diret",
- "translate-taskui-acceptqueue": "Kemennadennoù a c'hallan degemer hepken",
- "translate-taskui-reviewall": "Adwelet an holl droidigezhioù",
"translate-taskui-export-to-file": "Ezporzhiañ er furmad orin",
"translate-taskui-export-as-po": "Ezporzhiañ evit treiñ ezlinenn",
"translate-taction-translate": "Treiñ",
@@ -39,10 +34,9 @@
"translate-next": "Pajenn da-heul",
"translate-prev": "Pajenn gent",
"translate-page-description-legend": "Titouroù diwar-benn ar strollad",
- "translate-page-description-hasoptional": "Kemennadennoù diret zo er strollad kemennadennoù-mañ.\nNe zle ar c'hemennadennoù diret bezañ troet nemet pa vez ezhommoù dibar gant ho yezh evel pa vez arabat ober gant esaouennoù pe evit treuzlizherennañ anvioù divoutin. $1",
+ "translate-page-description-hasoptional": "Kemennadennoù diret zo er strollad kemennadennoù-mañ.\nNe zlefe ar c'hemennadennoù diret bezañ troet nemet pa vez ezhommoù dibar gant ho yezh evel pa vez arabat ober gant esaouennoù pe evit treuzlizherennañ anvioù divoutin. $1",
"translate-page-description-hasoptional-open": "Diskouez ar c'hemennadennoù diret.",
"translate-page-edit": "kemmañ",
- "translate-ext-url": "<hr />Lec'hienn Web : $1",
"translate-optional": "(diret)",
"translate-ignored": "(laosket a-gostez)",
"translate-edit-title": "Kemmañ \"$1\"",
@@ -52,13 +46,11 @@
"translate-edit-no-information": "''N'eus tamm titour ebet diwar-benn ar gemennadenn-mañ. Ma ouzit pelec'h pe benaos emañ da vezañ implijet e c'hallit harpañ troourien all en ur ouzhpennañ titouroù diwar he fenn.''",
"translate-edit-information": "Titouroù diwar-benn ar gemennadenn ($1)",
"translate-edit-in-other-languages": "An hevelep kemennadenn e yezhoù all",
- "translate-edit-committed": "Troidigezh er meziant evit poent",
- "translate-edit-warnings": "Kemennoù diwall diwar-benn an troidigezhioù diglok",
- "translate-edit-tmsugs": "Kinnig a-berzh ar memor treiñ",
+ "translate-edit-warnings": "Kemennoù-diwall diwar-benn an troidigezhioù diglok",
"translate-edit-tmmatch-source": "Testenn orin da dreiñ : $1",
"translate-edit-tmmatch": "$1% kenglotañ",
"translate-use-suggestion": "Erlec'hiañ an droidigezh a-vremañ gant ar c'hinnig-mañ.",
- "translate-edit-nopermission": "Ret eo deoc'h bezañ aotreet a-raok gallout treiñ kemennadennoù.",
+ "translate-edit-nopermission": "Ret eo deoc'h kaout gwirioù treiñ a-raok gallout treiñ kemennadennoù.",
"translate-edit-askpermission": "Kaout an aotre",
"translate-magic-pagename": "Troidigezh MediaWiki astennet",
"translate-magic-help": "Gallout a rit treiñ aliasoù ar pajennoù dibar, ar gerioù burzhudus hag anvioù an esaouennoù anv.\n\nAliasoù ar pajennoù dibar hag ar gerioù burzhudus a c'hall kaout meur a droidigezh.\nDispartiet eo an troidigezhioù dre skejoù (,).\nN'hall anvioù an esaouennoù anv kaout nemet un droidigezh.\n\nTreiñ esaouennoù anv ar raktres <code>$1 talk</code> a c'hall bezañ luziet.\nErlec'hiet eo <code>$1</code> gant anv al lec'hienn (da skouer <code>{{ns:project_talk}}</code>).\nMa n'haller ket sevel lavarennoù reizh en ho yezh hep kemmañ anv al lec'hienn, kit e darempred gant un diorroer [[Support]].\n\nRet eo deoc'h bezañ ezel eus ar strollad troerien evit gallout enrollañ ar c'hemmoù.\nNe vo ket enrollet ar c'hemmoù e-keit ha ne vo ket bet pouezet war ar bouton enrollañ dindan.",
@@ -84,7 +76,7 @@
"translate-checks-balance": "Ampar eo an niver a {{PLURAL:$2|grommelloù|grommelloù}} : <strong>$1</strong>",
"translate-checks-links": "Kudennek eo al {{PLURAL:$2|liamm|liammoù}} da-heul : <strong>$1</strong>",
"translate-checks-links-missing": "Mankout a ra {{PLURAL:$2|al liamm|an $2 liamm}} da-heul :\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-xhtml": "Erlec'hiit ar {{PLURAL:$2|valizenn|balizennoù}} da-heul gant ar re a zegouezh mar plij : <strong>$1</strong>",
+ "translate-checks-xhtml": "Erlec'hiit an {{PLURAL:$2|dikedenn|tikedennoù}} da-heul gant ar re a zegouezh : <strong>$1</strong>",
"translate-checks-plural": "Ober a ra an termenadur gant <nowiki>{{PLURAL:}}</nowiki> padal an droidigezh ne ra ket.",
"translate-checks-pagename": "Anv esaouenn kemmet adalek an termenadur",
"translate-checks-format": "Ne glot ket an droidigezh-mañ gant an termenadur pe faziek eo an ereadurezh anezhi : $1",
@@ -135,7 +127,6 @@
"translate-statsf-language": "Roll kodoù yezh, dispartiet gant skejoù :",
"translate-statsf-group": "Roll kodoù strolladoù, dispartiet gant skejoù :",
"translate-statsf-submit": "Rakwelet",
- "translate-tag-category": "Pajennoù da dreiñ",
"translate-tag-page-desc": "Troidigezh ar bajenn wiki [[$2|$1]].",
"translate-sidebar-alltrans": "E yezhoù all",
"translations": "An holl droidigezhioù",
@@ -146,7 +137,7 @@
"translate-translations-fieldset-title": "Kemenn",
"translate-translations-messagename": "Anv :",
"translate-translations-project": "Raktres :",
- "translate-translations-including-no-param": "Merkit un alc'hwez kemenn reizh en arventenn ''ispajenn''",
+ "translate-translations-including-no-param": "Merkit un alc'hwez kemennadenn reizh en arventenn ispajenn",
"translate-translations-history-short": "h",
"languagestats": "Stadegoù yezh",
"languagestats-summary": "Diskouez a ra ar bajenn-mañ ar stadegoù treiñ evit an holl strolladoù kemennadennoù en ur yezh bennak.",
@@ -160,7 +151,7 @@
"translate-language-code": "Kod yezh",
"translate-language-code-field-name": "Kod yezh :",
"translate-suppress-complete": "Arabat diskouez ar strolladoù kemennadennoù zo bet troet penn-da-benn.",
- "translate-ls-noempty": "Diverkañ penn-da-benn ar strolladoù kemennadennoù n'int ket bet troet",
+ "translate-ls-noempty": "Arabat diskouez ar strolladoù kemennadennoù n'int ket bet troet",
"translate-language": "Yezh",
"translate-total": "Kemennadennoù",
"translate-untranslated": "Didro",
@@ -195,7 +186,7 @@
"translate-smg-submitted": "Hizivaet eo bet termenadurioù an troidigezhioù. Plediñ a reer gant ar c'hemmoù en drekleur.",
"translate-manage-import-diff": "Kemennadenn $1 | Oberoù : $2",
"translate-manage-import-new": "Kemennadenn nevez $1",
- "translate-manage-import-deleted": "Kemennadennoù diverket $1",
+ "translate-manage-import-deleted": "Kemennadenn diverket $1",
"translate-manage-action-import": "Enporzhiañ",
"translate-manage-action-conflict": "Enporzhiañ ha merkañ evel strafuilhet",
"translate-manage-action-ignore": "Lezel a-gostez",
@@ -206,7 +197,6 @@
"translate-manage-toolong": "Aet eur dreist d'an termen pellañ a $1 {{PLURAL:$1|eilenn|eilenn}}.\nAdkasit ar furmskrid evit kenderc'hel gant an tretiñ.",
"translate-manage-import-summary": "Enporzhiañ ur stumm nevez adalek ur vammenn ziavaez.",
"translate-manage-conflict-summary": "Enporzhiañ ur stumm nevez adalek ur vammenn ziavaez.\nGwiriit mar plij.",
- "translate-manage-fuzzy-summary": "Cheñchet eo termenadur ar gemennadenn",
"translate-manage-submit": "Erounit",
"translate-manage-intro-other": "A-is emañ roll ar c'hemmoù treiñ e $1.\nGwiriit anezho ha dibabit ar pezh a fell deoc'h ober evit pep troidigezh.\nMa tibabit chom hep kemer ar c'hemmoù e kont e vint riñset-lip kentañ tro ma vo un ezporzhiadenn nevez.",
"translate-manage-import-ok": "Enporzhiet ez eus bet ur stumm nevez eus ar bajenn $1",
@@ -224,9 +214,7 @@
"translate-js-summary": "Diverrañ :",
"translate-js-save": "Enrollañ",
"translate-js-next": "Enrollañ ha digeriñ an hini da-heul",
- "translate-js-nonext": "Ar gemenadenn ziwezhañ er bajenn-mañ e oa.",
"translate-js-skip": "Mont d'an hini da-heul",
- "translate-js-save-failed": "Ur gudenn zo bet gant an enrollañ. Sachit hon evezh war ar gudenn-mañ.",
"translate-js-history": "Istor an droidigezh",
"translate-js-support": "Sevel ur goulenn",
"translate-js-support-title": "Goulennit un tamm skoazell ma vank titouroù evit treiñ ar gemennadenn-mañ evel m'eo dleet.",
@@ -245,19 +233,6 @@
"translate-searchprofile-tooltip": "Klask en holl droidigezhioù",
"translate-search-languagefilter": "Sil dre yezh :",
"translate-search-nofilter": "Tamm sil ebet",
- "translate-messagereview-submit": "Merkañ evel adwelet",
- "translate-messagereview-progress": "O verkañ evel adwelet...",
- "translate-messagereview-failure": "Oc'h aprouiñ... c'hwitet: $1",
- "translate-messagereview-done": "Adwelet",
- "translate-messagereview-reviews": "Asantet gant {{PLURAL:$1|un implijer|$1 implijer}}",
- "translate-messagereview-reviewswithyou": "Asantet gant {{PLURAL:$1|un implijer|$1 implijer}} o kontañ ac'hanoc'h ivez",
- "api-error-invalidrevision": "N'eo ket bet kavet an droidigezh",
- "api-error-unknownmessage": "N'eo ket bet kavet ar gemennadenn",
- "api-error-fuzzymessage": "Merket eo ar gemennadenn evel strafuilhet",
- "api-error-owntranslation": "N'hallit ket asantiñ d'an troidigezhioù graet ganeoc'h.",
- "translate-messagereview-no-fuzzy": "N'haller ket asantiñ d'an troidigezhioù strafuilhet",
- "translate-messagereview-no-own": "N'hallit ket asantiñ d'ho troidigezhioù graet ganeoc'h.",
- "translate-messagereview-doit": "Degemer an droidigezh-mañ evel un droidigezh reizh.",
"log-name-translationreview": "Marilh adlenn an troidigezhioù",
"log-description-translationreview": "Marilh holl adlennadennoù an troidigezhioù hag ar strolladoù kemennadennoù.",
"logentry-translationreview-message": "$1 {{GENDER:$2|en|he}} deus adwelet troidigezh $3",
@@ -271,10 +246,9 @@
"translate-workflowgroup-label": "Stad an argerzh labour",
"translate-workflowgroup-desc": "Diskouez a ra ar strollad kemennadennoù-mañ stad lusk labour an troidigezhioù.\nTermenet eo ar stadoù en argemenn gefluniañ $wgTranslateWorkflowStates.",
"translate-dynagroup-recent-label": "Troidigezhioù diwezhañ",
- "translate-dynagroup-recent-desc": "Diskouez a ra ar strollad kemennadennoù-mañ an holl droidigezhioù diwezhañ evit ar yezh-se.\nTalvoudus evit adlenn ha reizhañ.",
+ "translate-dynagroup-recent-desc": "Diskouez a ra ar strollad kemennadennoù-mañ an holl droidigezhioù diwezhañ evit ar yezh-mañ.\nTalvoudus evit al labour reizhañ.",
"translate-dynagroup-additions-label": "Ouzhpennadennoù diwezhañ",
"translate-dynagroup-additions-desc": "Diskouez a ra ar strollad kemennadennoù-mañ ar c'hemennadennoù nevez pe ar re bet kemmet.",
- "translate-gethelp": "Skoazell",
"translate-msggroupselector-projects": "Strollad kemennadennoù",
"translate-msggroupselector-search-placeholder": "Klask strolladoù",
"translate-msggroupselector-search-all": "An holl",
@@ -336,7 +310,7 @@
"tux-proofread-translated-by-self": "Troet ganeoc'h",
"tux-empty-list-all": "Goullo eo ar strollad kemennadennoù-mañ",
"tux-empty-list-all-guide": "Dibab ur strollad kemennadennoù all da dreiñ",
- "tux-translate-page-no-such-group": "'''N'eus ket eus ar strollad merket.''' Dibab ur strollad kemennadennoù all.",
+ "tux-translate-page-no-such-group": "<strong>N'eus ket eus ar strollad merket.</strong> Dibab ur strollad kemennadennoù all.",
"tux-empty-list-translated": "Kemennadenn ebet bet troet",
"tux-empty-list-translated-guide": "Hor skoazellañ gant an treiñ a c'hallit ober",
"tux-empty-list-translated-action": "Treiñ",
diff --git a/www/wiki/extensions/Translate/i18n/core/bs.json b/www/wiki/extensions/Translate/i18n/core/bs.json
index 9f03091d..18a40cd4 100644
--- a/www/wiki/extensions/Translate/i18n/core/bs.json
+++ b/www/wiki/extensions/Translate/i18n/core/bs.json
@@ -12,48 +12,56 @@
},
"translate": "Prijevod",
"translate-desc": "[[Special:Translate|Posebna stranica]] za prevođenje MediaWiki i još mnogo više",
- "translate-taskui-view": "Pokaži sve poruke",
- "translate-taskui-untranslated": "Pokaži neprevedene poruke",
"translate-taskui-export-to-file": "Izvezi u izvornom formatu",
"translate-taskui-export-as-po": "Izvezi za vanmrežno prevođenje",
"translate-taction-translate": "Prijevod",
- "translate-taction-proofread": "Provjeri",
+ "translate-taction-proofread": "Pregledaj",
"translate-taction-lstats": "Statistike jezika",
"translate-taction-mstats": "Statistika grupe",
"translate-taction-export": "Izvoz",
+ "translate-taction-disabled": "Radnja je onemogućena na ovom wikiju.",
"translate-page-no-such-language": "Navedeni jezik ne postoji.",
"translate-page-no-such-group": "Navedena grupa ne postoji.",
"translate-page-disabled": "Prijevodi na ovaj jezik u ovoj grupi su onemogućeni. Razlog:\n\n<em>$1</em>",
+ "translate-language-disabled": "Prijevod na ovaj jezik je onemogućen.",
"translate-page-settings-legend": "Postavke",
"translate-page-group": "Grupa",
"translate-page-language": "Jezik",
"translate-page-limit": "Ograničenja",
"translate-page-limit-option": "$1 {{PLURAL:$1|poruka|poruke|poruka}} po stranici",
- "translate-submit": "Pronađi",
+ "translate-submit": "Dobavi",
"translate-page-navigation-legend": "Navigacija",
"translate-page-showing": "Prikazane su poruke od $1 do $2 iz $3.",
"translate-page-showing-all": "Prikaz $1 {{PLURAL:$1|poruke|poruke|poruka}}.",
+ "translate-page-showing-none": "Nema poruka za prikaz.",
"translate-next": "slijedeća stranica",
"translate-prev": "Prethodna stranica",
"translate-page-description-legend": "Informacije o ovoj grupi",
+ "translate-page-description-hasoptional": "Ova grupa sadrži neobavezne poruke.\nNeobavezne poruke treba prevoditi samo kad Vaš jezik ima posebne potrebe;\nnaprimjer, ako ne treba koristiti razmake ili ako treba preslovljavati imena. $1",
+ "translate-page-description-hasoptional-open": "Prikaži neobavezne poruke.",
"translate-page-edit": "uredi",
- "translate-ext-url": "<hr />Web stranica: $1",
"translate-optional": "(opcionalno)",
"translate-ignored": "(zanemareno)",
"translate-edit-title": "Uređivanje \"$1\"",
"translate-edit-definition": "Definicija poruke",
"translate-edit-translation": "Prijevod",
"translate-edit-contribute": "doprinesi",
- "translate-edit-no-information": "''Ova poruka nema pripadajuće dokumentacije. Ako znate gdje ili kako se ova poruka koristi, možete pomoći drugim prevodiocima tako što ćete dodati dokumentaciju za ovu poruku.''",
+ "translate-edit-no-information": "<em>Ova poruka nema pripadajuće dokumentacije.\nAko znate gdje ili kako se ova poruka koristi, možete pomoći drugim prevodiocima tako što ćete dodati dokumentaciju za ovu poruku.</em>",
"translate-edit-information": "Informacije o poruci ($1)",
"translate-edit-in-other-languages": "Poruka na ostalim jezicima",
"translate-edit-warnings": "Upozorenja o nepotpunim prijevodima",
+ "translate-edit-tmmatch-source": "Izvorni tekst: $1",
"translate-edit-tmmatch": "$1% slaganja",
"translate-use-suggestion": "Zamijenite trenutni prijevod ovim prijedlogom.",
- "translate-edit-nopermission": "Treba vam dozvola da prevodite poruke.",
+ "translate-edit-nopermission": "Trebaju Vam prevodilačka prava da biste prevodili poruke.",
"translate-edit-askpermission": "Zatraži dozvolu",
+ "exporttranslations": "Izvoz prijevoda",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Navedite ispravan format.",
+ "translate-export-not-supported": "Izvoz prijevoda nije podržan.",
+ "translate-export-format-notsupported": "Grupa poruka ne podržava navedeni izvozni format.",
"translate-magic-pagename": "Prošireni MediaWiki prijevod",
- "translate-magic-help": "Možete prevoditi skraćenice posebnih stranica, magične riječi i imena imenskih prostora.\n\nSkraćenice posebnih stranica i magične riječi mogu imati višestruke prijevode.\nPrijevodi su odvojeni zarezom (,).\nImenski prostori mogu imati samo jedan prijevod.\n\nU prijevodima imenskih prostora <code>$1 razgovor</code> je poseban. <code>$1</code> je zamijenjeno sa imenom sajta (naprimjer <code>{{ns:project_talk}}</code>).\nAko nije moguće na Vašem jeziku da se obrazuje valjan izraz bez promjene imena sajta, molimo da kontaktirate razvojnog programera.\n\nMorate pripadati grupi prevodioca da bi spremili promjene.\nPromjene nisu spremljene sve dok ne kliknete dugme spremi koje se nalazi ispod.",
+ "translate-magic-help": "Možete prevoditi pseudonime posebnih stranica, magične riječi i nazive imenskih prostora.\n\nPseudonimi posebnih stranica i magične riječi mogu imati višestruke prijevode.\nPrijevodi su odvojeni zarezom (,).\nImenski prostori mogu imati samo jedan prijevod.\n\nPrevođenje imenskog prostora za razgovor o projektu <code>Razgovor o $1</code> moglo bi biti složeno.\n<code>$1</code> se zamjenjuje s imenom sajta (naprimjer, <code>{{ns:project_talk}}</code>).\nAko na Vašem jeziku nije moguće oblikovati pravilan izraz bez promjene imena sajta, obavijestite nas na stranici [[Support]].\n\nMorate biti prevodilac da biste sačuvali izmjene.\nIzmjene se neće sačuvati sve dok ne kliknete na donje dugme \"Sačuvaj\".",
"translate-magic-module": "Modul:",
"translate-magic-submit": "Pronađi",
"translate-magic-cm-export": "Izvoz",
@@ -73,14 +81,18 @@
"translate-magic-saved": "Vaše izmjene su sačuvane.",
"translate-checks-parameters": "Sljedeći {{PLURAL:$2|parametar nije iskorišten|parametri nisu iskorišteni}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "Sljedeći {{PLURAL:$2|parametar je nepoznat|parametri su nepoznati}}:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-balance": "Postoji nejednak broj vrsta {{PLURAL:$2|zagrade|zagrada}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-balance": "Neparan broj {{PLURAL:$2|zagrada}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "{{PLURAL:$2|Sljedeći link je problematičan|Sljedeća $2 linka su problematični|Sljedećih $2 linkova je problematično}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "{{PLURAL:$2|Sljedeći link|Sljedeća $2 linka|Sljedeći $2 linkova}} nedostaje:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Molimo Vas da zamijenite {{PLURAL:$2|slijedeću oznaku|slijedeće oznake}} sa ispravnim:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "Definicija poruke koristi <nowiki>{{PLURAL:}}</nowiki> ali ga nema u prijevodu.",
+ "translate-checks-plural-forms": "U <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|je upisan jedan oblik|su upisana $1 oblika|je upisano $1 oblika}}, ali on {{PLURAL:$2|podržava samo jedan|podržava samo $2}} (izuzimajući oblike 0= i 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ima duplicirane oblike na kraju. <nowiki>{{PLURAL:$1|vrata|vrata}}</nowiki> trebalo bi pisati kao <nowiki>{{PLURAL:$1|vrata}}</nowiki>.",
"translate-checks-pagename": "Imenski prostor je promijenjen u odnosu na definiciju",
"translate-checks-format": "Ovaj prijevod nije usklađen sa definicijom ili nema validnu sintaksu: $1",
"translate-checks-escape": "Slijedeće escape-sekvence mogle bi biti slučajne: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Broj parametara iznosi {{PLURAL:$1|$1}}; trebao bi biti {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> je pogrešno upisano.",
"translate-checks-fudforum-syntax": "Koristite nowiki>$1</nowiki>umjesto <nowiki>$2</nowiki> u ovom projektu.",
"translate-pref-nonewsletter": "Ne šalji mi pismo s vijestima putem e-pošte",
"translate-pref-editassistlang": "Pomoćni jezici:",
@@ -89,7 +101,13 @@
"translate-pref-editassistlang-bad": "Nevaljan kod jezika u spisku:\n<nowiki>$1</nowiki>.",
"right-translate": "Uređivanje korištenjem prevodilačkog interfejsa",
"right-translate-manage": "Upravljanje grupama poruka",
+ "action-translate-manage": "upravljate grupama poruka",
"right-translate-import": "Uvoz vanmrežnih prijevoda",
+ "action-translate-import": "uvozite vanmrežne prijevode",
+ "right-translate-messagereview": "Pregled prijevoda",
+ "action-translate-messagereview": "pregledavate prijevode",
+ "right-translate-groupreview": "Mijenjanje stanja radnog toka za grupe poruka",
+ "action-translate-groupreview": "mijenjate stanje radnog toka za grupe poruka",
"translate-rc-translation-filter": "Izdvoji prevode:",
"translate-rc-translation-filter-no": "Ne čini ništa",
"translate-rc-translation-filter-only": "Prikaži samo prijevode",
@@ -99,6 +117,8 @@
"translate-stats-edits": "uređivanja",
"translate-stats-users": "Prevodioci",
"translate-stats-registrations": "Registracije",
+ "translate-stats-reviews": "Pregledi",
+ "translate-stats-reviewers": "Pregledavači",
"translate-statsf-intro": "Možete generisati jednostavnu statistiku uz pomoć ovog obrasca. Sve vrijednosti imaju gornja i donja ograničenja.",
"translate-statsf-options": "Postavke grafikona",
"translate-statsf-width": "Širina u pikselima:",
@@ -114,6 +134,8 @@
"translate-statsf-count-edits": "Broj izmjena",
"translate-statsf-count-users": "Aktivni prevodioci",
"translate-statsf-count-registrations": "Novi korisnici",
+ "translate-statsf-count-reviews": "Pregledi prijevoda",
+ "translate-statsf-count-reviewers": "Pregledavači",
"translate-statsf-language": "Spisak jezičnih kodova razdvojenih zarezom:",
"translate-statsf-group": "Spisak kodova grupa razdvojenih zarezima:",
"translate-statsf-submit": "Pregled",
@@ -147,8 +169,10 @@
"translate-total": "Poruke",
"translate-untranslated": "Neprevedeno",
"translate-percentage-complete": "Završeno",
- "translate-percentage-fuzzy": "Zastarijelo",
+ "translate-percentage-fuzzy": "Zastarjelo",
"translate-languagestats-overall": "Sve grupe poruka zajedno",
+ "translate-ls-submit": "Prikaži statistiku",
+ "translate-ls-column-group": "Grupa poruka",
"translate-mgs-pagename": "Statistika grupe",
"translate-mgs-fieldset": "Postavke prikaza",
"translate-mgs-group": "Grupa poruka:",
@@ -156,30 +180,43 @@
"translate-mgs-noempty": "Ne prikazuj jezike bez ikakvih prijevoda",
"translate-mgs-submit": "Prikaži statistiku",
"translate-mgs-column-language": "Jezik",
+ "translate-mgs-totals": "Svi jezici zajedno",
+ "translate-mgs-invalid-group": "Navedena grupa $1 ne postoji.",
+ "translate-mgs-nothing": "Nema se šta prikazati za zahtijevane statistike.",
"supportedlanguages": "Podržani jezici",
- "supportedlanguages-summary": "Ova stranica prikazuje spisak svih jezika podržanih na {{SITENAME}}, zajedno sa imenima prevodioca koji rade na tom jeziku.\nAko želite više podataka o pojedinom jeziku, možete kliknuti na link portala tog jezika.\nKlikom na ime prevodioca će vas odvesti na korisničku stranicu tog prevodioca.\n\nAko jezik nije naveden, možete potražiti kako možete početi lokalizacijski projekat za taj jezik putem stranice \"[[Translating:Process|Novi Jezik]]\".\n\nAko prevodite na određeni jezik, a vaše ime nije prikazano, molimo dodajte vaše ime na spisak prevodioca na [[:Category:Languages|portal]] za taj jezik.\nPogledajte traku menija za link na portal za jezik koji ste naveli u svojim postavkama.",
- "supportedlanguages-translators": "{{PLURAL:$2|Prevodioc|Prevodioci}}: $1",
+ "supportedlanguages-summary": "Ova stranica prikazuje sve jezike koji podržavaju {{SITENAME}},\nkao i imena prevodilaca koji rade na tim jezicima.\nVeličina korisničkih imena prevodilaca zavisi od toga koliko je ko poruka preveo.\nBoja linije kojom su podvučena imena naznačava koliko je prevodilac aktivan u posljednje vrijeme.",
+ "supportedlanguages-colorlegend": "Legenda za boju: Posljednji prijevod izvršen prije $1 dana.",
+ "supportedlanguages-portallink": "[$1] $2 – $3",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Prevodilac|Prevoditeljica}}|Prevodioci}}: $1",
"supportedlanguages-recenttranslations": "nedavni prijevodi",
"supportedlanguages-count": "$1 {{PLURAL:$1|jezik|jezika}} ukupno.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|izmjena|izmjene}} - posljednja izmjena prije $3 {{PLURAL:$3|dan|dana}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Izvorni tekst prevodilačke jedinice",
"translate-save": "Spremi ($1)",
"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 izmjena koje treba obraditi.",
+ "translate-smg-submit": "Proslijedi izmjene za obradu",
+ "translate-smg-submitted": "Definicije poruka su ažurirane. Izmjene se obrađuju u pozadini.",
+ "translate-smg-more": "Bit će još izmjena za obradu nakon što podnesete ove.",
+ "translate-smg-left": "Sadržaj poruke na wikiju",
+ "translate-smg-right": "Predstojeće izmjene",
"translate-manage-import-diff": "Poruka $1 | Akcije: $2",
"translate-manage-import-new": "Nova poruka $1",
"translate-manage-import-deleted": "Obrisana poruka $1",
"translate-manage-action-import": "Uvezi",
- "translate-manage-action-conflict": "Uvezi i označi za provjeru",
+ "translate-manage-action-conflict": "Uvezi i označi kao zastarjelo",
"translate-manage-action-ignore": "Zanemeri",
- "translate-manage-action-fuzzy": "Uvezi prijevode i označi ih za provjeru",
+ "translate-manage-action-fuzzy": "Uvezi prijevode i označi ih zastarjelim",
"translate-manage-nochanges": "Nema promjena u definicijama poruka u ovoj grupi.",
"translate-manage-nochanges-other": "Nema promjena za ovaj jezik.\nUpotrijebite link ispod za povratak na pregled detalja grupe.",
- "translate-manage-inconsistent": "Otkrivene nedoslijednosti u zahtjevu.\nMolimo provjerite promjene i pokušajte opet.\nDetalji: $1.",
+ "translate-manage-inconsistent": "Otkrivene nedosljednosti u zahtjevu.\nProvjerite izmjene i pokušajte ponovo.\nDetalji: $1.",
"translate-manage-toolong": "Isteklo je maksimalno vrijeme za obradu od $1 {{PLURAL:$1|sekunde|sekunde|sekundi}}.\nMolimo ponovo pošaljite obrazac za nastavak obrade.",
"translate-manage-import-summary": "Uvozim novu verziju iz vanjskog izvora",
"translate-manage-conflict-summary": "Uvozi se nova verzija iz vanjskog izvora. Molimo provjerite.",
"translate-manage-submit": "Izvrši",
- "translate-manage-intro-other": "Ispod je spisak izmjena na prevodima na $1 jeziku.\nMolimo provjerite izmjene i izaberite akciju koju želite da uradite za svaki prevod.\nAko odaberete da zanemarite izmjene, one će biti prepisane pri slijedećem izvozu.",
+ "translate-manage-intro-other": "Ispod je spisak izmjena prijevoda na $1 jezik.\nPregledajte izmjene i izaberite radnju koju želite poduzeti za svaki prijevod.\nAko izaberete zanemariti izmjene, ta će radnja biti samo privremena.",
"translate-manage-import-ok": "Uvezeno: $1.",
"translate-manage-import-done": "Uvoz završen!",
"importtranslations": "Uvoz prijevoda",
@@ -195,12 +232,11 @@
"translate-js-summary": "Sažetak:",
"translate-js-save": "Sačuvaj",
"translate-js-next": "Spremi i idi na slijedeću",
- "translate-js-nonext": "Ovo je bila posljednja poruka na ovoj stranici.",
- "translate-js-skip": "Prijeđi na sljedeću poruku",
- "translate-js-save-failed": "Spremanje nije uspjelo. Molimo prijavite ovu grešku.",
+ "translate-js-skip": "Pređi na sljedeću poruku",
"translate-js-history": "Historija prijevoda",
"translate-js-support": "Postavi pitanje",
"translate-js-support-title": "Traži pomoć ako nema dovoljno informacija za pravilan prevod ove poruke.",
+ "translate-js-support-unsaved-warning": "Imate nesačuvanih prijevoda.",
"translate-gs-pos": "Mj.",
"translate-gs-code": "Kôd",
"translate-gs-continent": "Kontinent",
@@ -213,15 +249,32 @@
"translate-documentation-language": "Dokumentacija poruke",
"translate-searchprofile": "Prijevodi",
"translate-searchprofile-tooltip": "Traženje iz svih prevoda",
+ "translate-searchprofile-note": "Dostupno je više opcija za pretragu na [$1 pretrazi prijevoda].",
"translate-search-languagefilter": "Filtriranje po jeziku:",
"translate-search-nofilter": "Bez filtriranja",
- "translate-messagereview-submit": "Označi provjereno",
- "translate-messagereview-done": "Provjereno",
- "log-name-translationreview": "Zapisnik provjere prijevoda",
+ "log-name-translationreview": "Zapisnik pregleda prijevoda",
+ "log-description-translationreview": "Zapisnik svih pregleda prijevoda i grupa poruka.",
"logentry-translationreview-message": "$1 {{GENDER:$2|potvrdio|potvrdila}} je prijevod $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|promijenio|promijenila}} je stanje $4 prijevoda $3 sa $6 na $7",
+ "group-translate-sandboxed": "Neodobreni prevodioci",
+ "group-translate-sandboxed-member": "{{GENDER:$1|neodobreni prevodilac|neodobrena prevoditeljica}}",
+ "right-translate-sandboxmanage": "Upravljanje korisnicima u pješčaniku",
+ "action-translate-sandboxmanage": "upravljate korisnicima u pješčaniku",
+ "right-translate-sandboxaction": "Vršenje radnji na bijeloj listi za korisnike u pješčaniku",
+ "action-translate-sandboxaction": "vršite radnje na bijeloj listi za korisnike u pješčaniku",
+ "translate-workflow-state-": "(nepostavljen)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Postavljam...",
+ "translate-workflow-autocreated-summary": "Automatsko stvaranje stranice za radno stanje $1",
"translate-stats-workflow": "Stanje",
+ "translate-workflowgroup-label": "Radna stanja",
+ "translate-workflowgroup-desc": "Ova grupa poruka prikazuje radno stanje prijevoda.\nStanja se određuju varijablom $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Nedavni prijevodi",
+ "translate-dynagroup-recent-desc": "Ova grupa poruka prikazuje sve nedavne prijevode na ovaj jezik.\nOvo je najkorisnije za pregled prijevoda.",
+ "translate-dynagroup-additions-label": "Nedavna dodavanja",
"translate-dynagroup-additions-desc": "Ova grupa poruka prikazuje nove i izmijenjene poruke.",
"translate-msggroupselector-projects": "Grupa poruka",
+ "translate-msggroupselector-search-placeholder": "Pretraži grupe",
"translate-msggroupselector-search-all": "Sve",
"translate-msggroupselector-search-recent": "Nedavne",
"translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|podgrupa|podgrupe}}",
@@ -232,44 +285,89 @@
"tux-tab-translated": "Prevedeno",
"tux-tab-unproofread": "Nepotvrđeno",
"tux-edit": "Uredi",
- "tux-status-optional": "Opcionalno",
+ "tux-status-optional": "Neobavezno",
"tux-status-fuzzy": "Zastarjelo",
- "tux-status-proofread": "Provjereno",
+ "tux-status-proofread": "Pregledano",
"tux-status-translated": "Prevedeno",
"tux-status-saving": "Čuvanje...",
"tux-status-unsaved": "Nesačuvano",
+ "tux-save-unknown-error": "Desila se nepoznata greška.",
"tux-editor-placeholder": "Vaš prijevod",
+ "tux-editor-editsummary-placeholder": "Neobavezan sažetak",
+ "tux-editor-paste-original-button-label": "Zalijepi izvorni tekst",
+ "tux-editor-discard-changes-button-label": "Odbaci izmjene",
"tux-editor-save-button-label": "Sačuvaj prijevod",
- "tux-editor-skip-button-label": "Prijeđi na sljedeću poruku",
- "tux-editor-cancel-button-label": "Odustani",
+ "tux-editor-skip-button-label": "Pređi na sljedeću poruku",
+ "tux-editor-cancel-button-label": "Otkaži",
"tux-editor-confirm-button-label": "Potvrdi prijevod",
- "tux-editor-shortcut-info": "Pritisnite \"$1\" kako biste sačuvali ili \"$2\" da pređete na sljedeću poruku ili \"$3\" za druge prečice.",
+ "tux-editor-proofread-button-label": "Označi pregledanim",
+ "tux-editor-shortcut-info": "Pritisnite \"$1\" da sačuvate, \"$2\" da pređete na sljedeću poruku, \"$4\" da upišete sažetak ili \"$3\" za druge prečice.",
"tux-editor-edit-desc": "Uredi dokumentaciju",
"tux-editor-add-desc": "Dodaj dokumentaciju",
"tux-editor-suggestions-title": "Prijedlozi",
"tux-editor-in-other-languages": "Na drugim jezicima",
+ "tux-editor-need-more-help": "Trebate pomoć?",
+ "tux-editor-ask-help": "Zatražite više informacija",
"tux-editor-tm-match": "$1% slaganja",
+ "tux-warnings-more": "{{PLURAL:$1|još $1}}",
"tux-warnings-hide": "sakrij",
+ "tux-editor-save-failed": "Čuvanje prijevoda nije uspjelo: $1",
"tux-editor-n-uses": "korišteno $1 {{PLURAL:$1|put|puta}}",
- "tux-editor-message-desc-more": "Prikaži još",
+ "tux-editor-message-desc-more": "Prikaži više",
"tux-editor-message-desc-less": "Prikaži manje",
- "tux-editor-proofreading-mode": "Provjeri",
+ "tux-editor-clear-translated": "Sakrij prevedeno",
+ "tux-editor-proofreading-mode": "Pregledaj",
"tux-editor-translate-mode": "Spisak",
- "tux-proofread-action-tooltip": "Označi kao provjereno",
+ "tux-editor-proofreading-hide-own-translations": "Sakrij moje prijevode",
+ "tux-editor-proofreading-show-own-translations": "Prikaži moje prijevode",
+ "tux-proofread-action-tooltip": "Označi pregledanim",
"tux-proofread-edit-label": "Uredi",
"tux-editor-page-mode": "Stranica",
- "tux-editor-outdated-warning-diff-link": "Pokaži razlike",
+ "tux-editor-outdated-warning": "Možda bi trebalo ažurirati ovaj prijevod.",
+ "tux-editor-outdated-warning-diff-link": "Prikaži razlike",
"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|poruke|poruka}}",
+ "tux-messagetable-loading-messages": "Učitavam {{PLURAL:$1|poruku|poruke}}...",
+ "tux-message-filter-placeholder": "Filtriraj 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-empty-nothing-new-to-proofread": "Ništa novo za provjeru",
+ "tux-message-filter-optional-messages-label": "Neobavezne poruke",
+ "tux-proofread-translated-by-self": "Vaš prijevod",
+ "tux-empty-list-all": "Ova grupa poruka je prazna",
+ "tux-empty-list-all-guide": "Izaberite drugu grupu poruka za prevođenje",
+ "tux-translate-page-no-such-group": "<strong>Naznačena grupa ne postoji.</strong> Izaberite drugu.",
+ "tux-empty-list-translated": "Nema prevedenih poruka",
+ "tux-empty-list-translated-guide": "Možete pomoći u prevođenju",
+ "tux-empty-list-translated-action": "Prevedi",
+ "tux-empty-no-messages-to-display": "Nema poruka za prikazivanje.",
+ "tux-empty-there-are-optional": "Ima neobaveznih poruka koje nisu prikazane na spisku",
+ "tux-empty-show-optional-messages": "Prikaži neobavezne poruke",
+ "tux-empty-no-outdated-messages": "Nema zastarjelih poruka",
+ "tux-empty-nothing-to-proofread": "Nema ništa za pregled",
+ "tux-empty-you-can-help-providing": "Možete pomoći pružanjem novih prijevoda",
+ "tux-empty-nothing-new-to-proofread": "Ništa novo za pregled",
+ "tux-empty-you-can-review-already-proofread": "Možete pregledati prijevode koje su drugi već pregledali.",
+ "tux-empty-list-other": "Nema ništa za prevođenje",
+ "tux-empty-list-other-guide": "Možete pomoći pregledom postojećih prijevoda",
+ "tux-empty-list-other-action": "Pregledaj prijevode",
+ "tux-empty-list-other-link": "Prikaži sve poruke",
"tux-editor-close-tooltip": "Zatvori",
"tux-editor-expand-tooltip": "Proširi",
"tux-editor-collapse-tooltip": "Sklopi",
+ "tux-editor-message-tools-show-editor": "Prikaži u wiki uređivaču",
"tux-editor-message-tools-history": "Historija",
+ "tux-editor-message-tools-delete": "Obriši",
"tux-editor-message-tools-translations": "Svi prijevodi",
- "tux-editor-loading": "Učitavanje...",
+ "tux-editor-message-tools-linktothis": "Link ka poruci",
+ "tux-editor-loading": "Učitavam...",
+ "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% zastareno"
+ "translate-statsbar-tooltip-with-fuzzy": "‎$1% prevedeno, $2% pregledano, $3% zastareno",
+ "translate-search-more-groups-info": "još $1 {{PLURAL:$1|grupa|grupe|grupa}}",
+ "translate-ulsdep-title": "Greška u konfiguraciji",
+ "translate-ulsdep-body": "Proširenje Translate ovisi o [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector Univerzalnom jezičkom selektoru].",
+ "tux-session-expired": "Više niste prijavljeni. Prijavite se u drugoj 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."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/btm.json b/www/wiki/extensions/Translate/i18n/core/btm.json
new file mode 100644
index 00000000..1a1a6bde
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/btm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Simartampua"
+ ]
+ },
+ "translate-documentation-language": "Dokumentasi tona"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/ca.json b/www/wiki/extensions/Translate/i18n/core/ca.json
index cd3d7b7c..d3598803 100644
--- a/www/wiki/extensions/Translate/i18n/core/ca.json
+++ b/www/wiki/extensions/Translate/i18n/core/ca.json
@@ -15,16 +15,13 @@
"XVEC",
"පසිඳු කාවින්ද",
"Jmarchn",
- "Macofe"
+ "Macofe",
+ "Cedric31"
]
},
"translate": "Tradueix",
+ "translate-extensionname": "Tradueix",
"translate-desc": "[[Special:Translate|Pàgina especial]] per a traduir el MediaWiki i altres coses",
- "translate-taskui-view": "Mostra tots els missatges",
- "translate-taskui-untranslated": "Mostra missatges per traduir",
- "translate-taskui-optional": "Mostra missatges opcionals",
- "translate-taskui-acceptqueue": "Només els missatges que pugui marcar com a revisats",
- "translate-taskui-reviewall": "Revisa totes les traduccions",
"translate-taskui-export-to-file": "Exporta a format natiu",
"translate-taskui-export-as-po": "Exporta-ho per traduir-ho fora de línia",
"translate-taction-translate": "Tradueix",
@@ -53,7 +50,6 @@
"translate-page-description-hasoptional": "Aquest grup de missatges conté missatges adicionals.\nEls missatges opcionals només s'han de traduir quan el vostre idioma tingui requeriments especials\ncom ara no fer servir espais o transliterant noms propis. $1",
"translate-page-description-hasoptional-open": "Mostra els missatges opcionals.",
"translate-page-edit": "modifica",
- "translate-ext-url": "<hr />Lloc web: $1",
"translate-optional": "(opcional)",
"translate-ignored": "(ignorat)",
"translate-edit-title": "Edita «$1»",
@@ -63,14 +59,15 @@
"translate-edit-no-information": "<em>Aquest missatge no té documentació.\nSi sabeu on o com és usat aquest missatge podeu ajudar la resta de traductors afegint-hi la documentació.</em>",
"translate-edit-information": "Informació sobre el missatge ($1)",
"translate-edit-in-other-languages": "El missatge en altres idiomes",
- "translate-edit-committed": "Traducció utilitzada actualment pel programa",
"translate-edit-warnings": "Avisos de traducció incompleta",
- "translate-edit-tmsugs": "Suggeriments de la memòria de traducció",
"translate-edit-tmmatch-source": "Text original de la traducció: $1",
"translate-edit-tmmatch": "coincidència del $1%",
"translate-use-suggestion": "Substitueixi la traducció actual amb aquest suggeriment.",
"translate-edit-nopermission": "Necessiteu permisos de traducció per a traduir missatges.",
"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:",
@@ -89,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>",
@@ -98,6 +95,7 @@
"translate-checks-xhtml": "{{PLURAL:$2|Reemplaceu l'etiqueta següent per la correcta|Reemplaceu les etiquetes següents per les correctes}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "La definició utilitza <nowiki>{{PLURAL:}}</nowiki> i en canvi la traducció no.",
"translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> es va donar {{PLURAL:$1|una forma|$1 formes}} però {{PLURAL:$2|només una forma és|$2 formes són}} compatible/s (excloent les formes 0= i 1=)",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> conté una forma duplicada al final. <nowiki>{{PLURAL:$1|atles|atles}}</nowiki> s'hauria d'escriure <nowiki>{{PLURAL:$1|atles}}</nowiki>.",
"translate-checks-pagename": "S’ha canviat l’espai de noms de la definició",
"translate-checks-format": "Aquesta traducció no segueix la definició o té una sintaxi invàlida: $1",
"translate-checks-escape": "Les següents seqüències d'escapament poden ser accidentals: <strong>$1</strong>",
@@ -115,7 +113,16 @@
"right-translate-import": "Importar traduccions fora de línia",
"action-translate-import": "importa les traduccions fetes fora de línia",
"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",
+ "action-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-only-desc": "Canvis a pàgines traduïdes.",
+ "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-rcfilters-translations-site-desc": "Personalitzacions dels missatges del lloc a l'espai de noms MediaWiki.",
"translate-rc-translation-filter": "Filtra traduccions:",
"translate-rc-translation-filter-no": "No facis res",
"translate-rc-translation-filter-only": "Mostra només traduccions",
@@ -147,7 +154,6 @@
"translate-statsf-language": "Codis d'idiomes separats per comes:",
"translate-statsf-group": "Codis de grups separats per comes:",
"translate-statsf-submit": "Previsualització",
- "translate-tag-category": "Pàgines traduïbles",
"translate-tag-page-desc": "Traducció de la pàgina wiki [[$2|$1]] des de $3 ($4).",
"translate-sidebar-alltrans": "En altres idiomes",
"translations": "Totes les traduccions",
@@ -179,6 +185,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",
@@ -189,23 +196,25 @@
"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": "Idiomes compatibles",
+ "supportedlanguages": "Llengües admeses",
"supportedlanguages-summary": "Aquesta pàgina mostra una llista de tots els idiomes que es poden utilitzar a {{SITENAME}} juntament amb els noms dels traductors que treballen en cadascun d'ells.\nEl nom del traductor apareix més gran com més traduccions hagi contribuït a fer.\nEl color del subratllat indica si el traductor ha estat actiu recentment.",
"supportedlanguages-colorlegend": "Llegenda per al color: La darrera traducció va ser fa $1 dies.",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traductor}}|Traductors}}: $1",
"supportedlanguages-recenttranslations": "traduccions recents",
"supportedlanguages-count": "$1 {{PLURAL:$1|idioma|idiomes}} en total.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|modificació|modificacions}}, la darrera va ser fa $3 {{PLURAL:$3|dia|dies}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Text font de la unitat de traducció",
"translate-save": "Desa ($1)",
"translate-jssti-add": "Afegeix a la llista",
"managemessagegroups": "Gestió del grup de missatges",
"translate-smg-notallowed": "No teniu permís per dur a terme aquesta acció.",
- "translate-smg-nochanges": "No hi han canvis a processar.",
+ "translate-smg-nochanges": "No hi ha canvis per processar.",
"translate-smg-submit": "Penja els canvis per al seu processament",
"translate-smg-submitted": "Les definicions dels missatges s'han actualitzat. Els canvis estàn sent processats al rerefons.",
+ "translate-smg-more": "Hi haurà més canvis per processar després d'enviar aquests canvis.",
"translate-smg-left": "Contingut del missatge al wiki",
"translate-smg-right": "Canvis entrants",
"translate-manage-import-diff": "Missatge $1 | Accions: $2",
@@ -221,7 +230,6 @@
"translate-manage-toolong": "El temps màxim de processament de $1 s'ha excedit {{PLURAL:$1|segon|segons}} \nSiusplau reintroduiu el formulari per continuar el processament.",
"translate-manage-import-summary": "Important una nova versió des d'una font externa",
"translate-manage-conflict-summary": "Important una nova versió des d'una font externa.\nSiusplau, comproveu-ho.",
- "translate-manage-fuzzy-summary": "La definició del missatge ha canviat",
"translate-manage-submit": "Executa",
"translate-manage-import-ok": "Importat: $1",
"translate-manage-import-done": "S'ha completat la importació!",
@@ -229,18 +237,16 @@
"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.",
- "translate-import-err-no-headers": "El fitxer no és un arxiu Gettext ben formatejat en el format de l'extensió de traducció:\n\nImpossible determinar el grup de missatges i l'idioma des dels encapçalaments.",
+ "translate-import-err-no-headers": "Aquest no és un fitxer Gettext ben formatat en el format d’extensió del Translate:\n\nNo s’ha pogut determinar el grup de missatges i l’idioma des dels encapçalaments.",
"translate-import-err-warnings": "El fitxer no està correctament formatejat.\nAssegureu-vos que el vostre editor no elimini els camps msgctxt.\nDetalls: $1",
"translate-js-summary": "Resum:",
"translate-js-save": "Desa",
"translate-js-next": "Desa i passa al següent",
- "translate-js-nonext": "Aquest era el darrer missatge d'aquesta pàgina.",
"translate-js-skip": "Salta al següent",
- "translate-js-save-failed": "S’ha produït un error en desar. Informeu d’aquest error.",
"translate-js-history": "Historial de traducció",
"translate-js-support": "Feu una pregunta",
"translate-js-support-title": "Demaneu ajuda si trobeu que no hi ha prou informació per a traduir correctament aquest missatge.",
@@ -257,21 +263,9 @@
"translate-documentation-language": "Documentació del missatge",
"translate-searchprofile": "Traduccions",
"translate-searchprofile-tooltip": "Cerca a totes les traduccions",
+ "translate-searchprofile-note": "Hi ha més opcions de cerca disponibles a la [$1 cerca de traduccions].",
"translate-search-languagefilter": "Filtra per idioma:",
"translate-search-nofilter": "Sense filtrat",
- "translate-messagereview-submit": "Marca-ho com a revisat",
- "translate-messagereview-progress": "Marcant-ho com a revisat...",
- "translate-messagereview-failure": "Error en marcar-ho com a revisat: $1",
- "translate-messagereview-done": "Revisat",
- "translate-messagereview-reviews": "Revisat per {{PLURAL:$1|un usuari|$1 usuaris}}",
- "translate-messagereview-reviewswithyou": "Revisat per {{PLURAL:$1|tu|$1 usuaris, tu inclòs}}",
- "api-error-invalidrevision": "No s'ha trobat la traducció",
- "api-error-unknownmessage": "No s'ha trobat el missatge",
- "api-error-fuzzymessage": "La traducció està marcada com a imprecisa",
- "api-error-owntranslation": "No podeu marcar com a revisades les vostres pròpies traduccions",
- "translate-messagereview-no-fuzzy": "Les traduccions imprecises no es poden marcar com a revisades.",
- "translate-messagereview-no-own": "No podeu marcar com a revisades les vostres pròpies traduccions.",
- "translate-messagereview-doit": "Marca aquesta traducció com a revisada.",
"log-name-translationreview": "Historial de revisió de la traducció",
"log-description-translationreview": "Historial de totes les revisions a les traduccions i als grups de missatges.",
"logentry-translationreview-message": "$1 {{GENDER:$2|ha acceptat}} la traducció $3",
@@ -292,7 +286,6 @@
"translate-dynagroup-recent-desc": "Aquest grup de missatges mostra totes les traduccions recents a aquest idioma.\nEl més útil per a les tasques de revisió.",
"translate-dynagroup-additions-label": "Adicions recents",
"translate-dynagroup-additions-desc": "Aquest grup de missatges mostra els missatges nous i els que han estat canviats",
- "translate-gethelp": "Ajuda",
"translate-msggroupselector-projects": "Grup de missatges",
"translate-msggroupselector-search-placeholder": "Cerca als grups",
"translate-msggroupselector-search-all": "Tots",
@@ -311,14 +304,17 @@
"tux-status-translated": "Traduït",
"tux-status-saving": "S’està desant…",
"tux-status-unsaved": "No desat",
+ "tux-save-unknown-error": "S'ha produït un error desconegut.",
"tux-editor-placeholder": "La vostra traducció",
+ "tux-editor-editsummary-placeholder": "Resum opcional",
"tux-editor-paste-original-button-label": "Enganxa el text original",
"tux-editor-discard-changes-button-label": "Descarta els canvis",
"tux-editor-save-button-label": "Desa la traducció",
"tux-editor-skip-button-label": "Vés al següent",
"tux-editor-cancel-button-label": "Cancel·la",
"tux-editor-confirm-button-label": "Confirma la traducció",
- "tux-editor-shortcut-info": "Premeu «$1» per desar, «$2» per anar al següent missatge o bé «$3» per més dreceres.",
+ "tux-editor-proofread-button-label": "Marca com a revisada",
+ "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",
@@ -373,14 +369,16 @@
"tux-editor-close-tooltip": "Tanca",
"tux-editor-expand-tooltip": "Amplia",
"tux-editor-collapse-tooltip": "Tanca",
+ "tux-editor-message-tools-show-editor": "Mostra en l'editor wiki",
"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/www/wiki/extensions/Translate/i18n/core/cak.json b/www/wiki/extensions/Translate/i18n/core/cak.json
new file mode 100644
index 00000000..b78954d4
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/cak.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chocoj"
+ ]
+ },
+ "translate-documentation-language": "Ruwujil ri taqom"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/cdo.json b/www/wiki/extensions/Translate/i18n/core/cdo.json
index 68553864..95e42165 100644
--- a/www/wiki/extensions/Translate/i18n/core/cdo.json
+++ b/www/wiki/extensions/Translate/i18n/core/cdo.json
@@ -1,8 +1,10 @@
{
"@metadata": {
"authors": [
- "唐吉訶德的侍從"
+ "唐吉訶德的侍從",
+ "Davidzdh"
]
},
- "translate-pref-editassistlang-help": "使逗號來分隔語言代碼。敆汝翻譯其辰候,會同時顯示茲幾隻語言其訊息。 預設會使汝其語言。"
+ "translate-pref-editassistlang-help": "使逗號來分隔語言代碼。敆汝翻譯其辰候,會同時顯示茲幾隻語言其訊息。 預設會使汝其語言。",
+ "translate-documentation-language": "Séng-sék suók-mìng-cṳ̄"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ce.json b/www/wiki/extensions/Translate/i18n/core/ce.json
index 1bf8d456..bd792dd7 100644
--- a/www/wiki/extensions/Translate/i18n/core/ce.json
+++ b/www/wiki/extensions/Translate/i18n/core/ce.json
@@ -8,11 +8,6 @@
},
"translate": "Гоч",
"translate-desc": "[[Special:Translate|Белхан агӀо]] MediaWiki гочян а, кхин программийн а",
- "translate-taskui-view": "Гайта берриге хаамаш",
- "translate-taskui-untranslated": "Гочбанза хаамаш гайта",
- "translate-taskui-optional": "Кхин тӀе хаамаш гайта",
- "translate-taskui-acceptqueue": "Со хьажаре хьоьжуш болу хаамаш бен",
- "translate-taskui-reviewall": "Массо гочдиначарга хьажар",
"translate-taskui-export-to-file": "Шин форматехь экспорт",
"translate-taskui-export-as-po": "Оффлайн гочдаран экспорт",
"translate-taction-translate": "Гоч",
@@ -34,12 +29,12 @@
"translate-page-navigation-legend": "Навигаци",
"translate-page-showing": "Гайтина хаамаш $1 тӀера $2 кхаччалц ($3 чура).",
"translate-page-showing-all": "Ара баьккхина $1 {{PLURAL:$1|хаам}}.",
+ "translate-page-showing-none": "Гайта хаамаш бац.",
"translate-next": "тӀаьхьа йогӀу агӀо",
"translate-prev": "хьалха йоьду агӀо",
"translate-page-description-legend": "Тобанах хаам",
"translate-page-description-hasoptional-open": "Кхин тӀе хаамаш гайта.",
"translate-page-edit": "Нисъе",
- "translate-ext-url": "<hr />Сайт: $1",
"translate-optional": "(тӀехь дац)",
"translate-ignored": "(игнорирян)",
"translate-edit-title": "Хийца «$1»",
@@ -66,7 +61,7 @@
"translate-magic-special": "Белхан агӀонийн псевдонимаш",
"translate-magic-words": "Бозбуунчаллин дешнаш",
"translate-magic-namespace": "ЦӀерийн меттигаш",
- "translate-magic-notsaved": "Хьан нисдар дӏайазъдина дац!",
+ "translate-magic-notsaved": "Хьан нисдар дӀаяздина дац!",
"translate-magic-errors": "Дехар до, {{PLURAL:$1|1=хӀара гӀалат|хӀара гӀалаташ}} нисдар гочдар чохь:",
"translate-magic-saved": "Хийцамаш кхиамца Ӏалашбина.",
"translate-checks-parameters": "{{PLURAL:$2|1=Параметр лелош яц|Параметраш лелош яц}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -79,6 +74,8 @@
"translate-pref-editassistlang": "ГӀоьнан меттанаш:",
"prefs-translate": "Гочдаран нисдар",
"action-translate-manage": "хаамийн тобанийн урхалладар",
+ "translate-rcfilters-translations": "Гочдарш",
+ "translate-rcfilters-translations-only-label": "Гочдарш",
"translate-rc-translation-filter": "Литта гочдарш:",
"translate-rc-translation-filter-no": "Доза доцуш",
"translate-rc-translation-filter-only": "Гочдарш бен ма гайта",
@@ -117,7 +114,7 @@
"translate-translations-messagename": "ЦӀе:",
"translate-translations-project": "Проект:",
"languagestats": "Меттан статистика",
- "languagestats-summary": "ХӀокху агӀонехь ю гочдаран статистика хӀокху меттан массо групашан чура хаамашан.",
+ "languagestats-summary": "ХӀокху агӀонехь ю гочдаран статистика, хӀокху меттан массо тобанийн чура хаамашна.",
"messagegroupstats-summary": "ХӀокху агӀонгахь гойту хаамийн тобанийн статистика.",
"languagestats-stats-for": "Нохчийн меттан гочдаран статистика ($2).",
"languagestats-recenttranslations": "дукха хан йоццуш гоч динарш",
@@ -128,13 +125,13 @@
"translate-langstats-collapseall": "къайлаяха массо",
"translate-language-code": "Метта код",
"translate-language-code-field-name": "Метта код:",
- "translate-suppress-complete": "Ма гайта юьззина гочдина йолу хаамашан группанаш",
- "translate-ls-noempty": "Ма гайта юьззина гоч дийна доцу хаамашан группанаш",
+ "translate-suppress-complete": "Ма гайта юьззина гочйина хаамийн тобанаш",
+ "translate-ls-noempty": "Ма гайта юьззина гочянза хаамийн тобанаш",
"translate-language": "Мотт",
"translate-total": "Хаам",
- "translate-untranslated": "Гоч янцарш",
+ "translate-untranslated": "Гочянзарш",
"translate-percentage-complete": "Кхочушдина",
- "translate-percentage-fuzzy": "Шира елла",
+ "translate-percentage-fuzzy": "Ширъелла",
"translate-languagestats-overall": "Массо тобанийн чура хаамаш",
"translate-ls-submit": "Гайта статистика",
"translate-ls-column-group": "Хаамийн тоба",
@@ -151,7 +148,7 @@
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Гочдархо}}|Гочдархой}}: $1",
"supportedlanguages-recenttranslations": "дукха хан йоццуш гоч динарш",
"supportedlanguages-count": "Бериг $1 {{PLURAL:$1|мотт}}",
- "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|1=нисдар}} — тӀаьххьарлера нисдар $3 {{PLURAL:$3|де}} хьалха",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|нисдар}} — тӀаьххьара нисдар $3 {{PLURAL:$3|де}} хьалха",
"translate-save": "Ӏалашдан ($1)",
"translate-jssti-add": "ТӀетоха могӀан чу",
"managemessagegroups": "Хаамийн тобанийн урхалладар",
@@ -191,13 +188,6 @@
"translate-searchprofile-tooltip": "Массо гочдарш чохь лахар",
"translate-search-languagefilter": "Меттаца луьттург:",
"translate-search-nofilter": "Литтар доцуш",
- "translate-messagereview-submit": "Теллина сана билгалъе",
- "translate-messagereview-progress": "Талланза сана билгалъе",
- "translate-messagereview-done": "Теллина",
- "translate-messagereview-reviews": "Теллина {{PLURAL:$1|$1 декъашхочо|$1 декъашхоша|1=кхечу декъашхочо}}",
- "translate-messagereview-reviewswithyou": "Теллина {{PLURAL:$1|$1 декъашхочо, ахьа цхьан|$1 декъашхоша, ахьа цхьан}}",
- "api-error-invalidrevision": "Гочйинарг карлаяьккхина яц",
- "api-error-unknownmessage": "Хаам цакарий",
"logentry-translationreview-group": "$1 {{GENDER:$2|хийцина}} «$3» агӀона гочдаран хьал $4 мотт «$6» → «$7»",
"group-translate-sandboxed": "ЧӀагӀбина гочдархой",
"translate-workflow-set-doing": "ДӀахӀоттош ю...",
@@ -206,7 +196,6 @@
"translate-dynagroup-recent-desc": "ХӀокху тобан чохь гучу йолу дукха хан йоцуш гоч йина хӀокху меттан хаамаш.\n\nХӀара дӀахӀоттам пайдане бу хьажа.",
"translate-dynagroup-additions-label": "Дукху хан йоцуш тӀетоьхнарш",
"translate-dynagroup-additions-desc": "ХӀокху тобано гойту керла а, хийцам бина а хаамаш.",
- "translate-gethelp": "ГӀо",
"translate-msggroupselector-projects": "Хаамийн тоба",
"translate-msggroupselector-search-placeholder": "Тобанаш лахар",
"translate-msggroupselector-search-all": "Массо",
@@ -214,18 +203,19 @@
"translate-msggroupselector-view-subprojects": "{{PLURAL:$1|1=Цхьаъ бухара тоба|$1 бухара тобанаш}}",
"tux-languageselector": "Гочдар тӀе",
"tux-tab-all": "Массо",
- "tux-tab-untranslated": "Гоч янцарш",
- "tux-tab-outdated": "Шира елларш",
- "tux-tab-translated": "Гоч йинарш",
- "tux-tab-unproofread": "Хьажанза ерш",
+ "tux-tab-untranslated": "Гочянзарш",
+ "tux-tab-outdated": "Ширъелларш",
+ "tux-tab-translated": "Гочйинарш",
+ "tux-tab-unproofread": "Талламбанзарш",
"tux-edit": "Нисдар",
"tux-status-optional": "ТӀехь дац",
- "tux-status-fuzzy": "Шира елла",
+ "tux-status-fuzzy": "Ширъелла",
"tux-status-proofread": "Таллар",
"tux-status-translated": "Гоч йина",
"tux-status-saving": "Ӏалашъеш ю...",
"tux-status-unsaved": "Ӏалаш цайина",
"tux-editor-placeholder": "Хьан гочдар",
+ "tux-editor-editsummary-placeholder": "ТӀехь йоцу коммент",
"tux-editor-paste-original-button-label": "Дилла дӀадолалун йоза",
"tux-editor-discard-changes-button-label": "Цаоьшу хийцамаш",
"tux-editor-save-button-label": "Ӏалаш де гоч динарг",
@@ -236,7 +226,7 @@
"tux-editor-edit-desc": "Хийца документаци",
"tux-editor-add-desc": "ТӀетоха документаци",
"tux-editor-suggestions-title": "ДӀаалар",
- "tux-editor-in-other-languages": "Кхечу маттахь дерш",
+ "tux-editor-in-other-languages": "Кхечу меттанашкахь",
"tux-editor-need-more-help": "ГӀо оьшу?",
"tux-editor-ask-help": "Деха кхин тӀедиллинарг",
"tux-editor-tm-match": "$1% цхьаьнадогӀуш",
@@ -246,7 +236,7 @@
"tux-editor-n-uses": "{{PLURAL:$1|лелина}} $1",
"tux-editor-message-desc-more": "Гайта мадарра",
"tux-editor-message-desc-less": "Гайта компактни",
- "tux-editor-clear-translated": "Къайлаяха гоч йинарш",
+ "tux-editor-clear-translated": "Къайлаяха гочйинарш",
"tux-editor-proofreading-mode": "Таллар",
"tux-editor-translate-mode": "МогӀа",
"tux-editor-proofreading-hide-own-translations": "Шен гочдарш къайладаха",
@@ -255,7 +245,7 @@
"tux-proofread-edit-label": "Хийцам бе",
"tux-editor-page-mode": "АгӀо",
"tux-editor-outdated-warning": "ХӀара гочдар карладаккха дезаш хила мега.",
- "tux-editor-outdated-warning-diff-link": "Схьагайта башхалла",
+ "tux-editor-outdated-warning-diff-link": "Схьагайта башхаллонаш",
"tux-editor-doc-editor-placeholder": "хаамийн документаци",
"tux-editor-doc-editor-save": "Ӏалашъе документаци",
"tux-editor-doc-editor-cancel": "Цаоьшу",
@@ -279,7 +269,7 @@
"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-you-can-review-already-proofread": "Хьан йиш ю цхьам гочйинарш юху хьажа",
"tux-empty-list-other": "ХӀума дац гочдан",
"tux-empty-list-other-guide": "Хьан йиш ю долуш долу гочдаршка хьажа",
"tux-empty-list-other-action": "Гочдиначарга хьажар",
diff --git a/www/wiki/extensions/Translate/i18n/core/ceb.json b/www/wiki/extensions/Translate/i18n/core/ceb.json
new file mode 100644
index 00000000..89577066
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/ceb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bentong Isles"
+ ]
+ },
+ "translate-documentation-language": "Tabang sa paghubad"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/ckb.json b/www/wiki/extensions/Translate/i18n/core/ckb.json
index 409c6f38..9b63f270 100644
--- a/www/wiki/extensions/Translate/i18n/core/ckb.json
+++ b/www/wiki/extensions/Translate/i18n/core/ckb.json
@@ -5,14 +5,14 @@
"Calak",
"Marmzok",
"Muhammed taha",
- "رزگار"
+ "رزگار",
+ "Sarchia",
+ "Lost Whispers",
+ "Épine"
]
},
"translate": "وەرگێڕان",
"translate-desc": "[[Special:Translate|پەڕەی تایبەت]] بۆ وەرگێڕانی میدیاویکی و ئەولاتر",
- "translate-taskui-view": "گشت پەیامەکان نیشان بدە",
- "translate-taskui-untranslated": "پەیامە وەرنەگێردراوەکان نیشانبدە",
- "translate-taskui-optional": "پەیامە دڵخوازانەکان نیشان بدە",
"translate-taction-translate": "وەری بگێڕەوە",
"translate-taction-proofread": "پێداچوونەوە",
"translate-taction-lstats": "ئامارەکانی زمان",
@@ -27,12 +27,12 @@
"translate-page-navigation-legend": "ڕێدۆزی",
"translate-page-showing": "نیشاندانی پەیامەکانی $1 تا $2 لە کۆی $3.",
"translate-page-showing-all": "نیشاندانی $1 {{PLURAL:$1|پەیام|پەیام}}.",
+ "translate-page-showing-none": "ھیچ پەیامێک بۆ نیشاندان نییە",
"translate-next": "پەڕەی دواتر",
"translate-prev": "پەڕەی پێشوو",
"translate-page-description-legend": "زانیاری سەبارەت بە گرووپەکە",
"translate-page-description-hasoptional-open": "پەیامە دڵخوازانەکان نیشان بدە.",
"translate-page-edit": "دەستکاریی بکە",
- "translate-ext-url": "<hr />ماڵپەڕ: $1",
"translate-optional": "(دڵخوازانه‌)",
"translate-edit-title": "«$1» دەستکاری بکە",
"translate-edit-definition": "پێناسەی پەیام",
@@ -60,6 +60,8 @@
"translate-pref-nonewsletter": "ئی‌مێڵی هەواڵ‌نامە بۆ من مەنێرە",
"prefs-translate": "هەڵبژاردەکانی وەرگێڕان",
"right-translate": "دەستکاری کردن بە کەڵک وەرگرتن لە ڕووکاری وەرگێڕانەوە",
+ "translate-rcfilters-translations": "وەرگێڕانەکان",
+ "translate-rcfilters-translations-only-label": "وەرگێڕانەکان",
"translate-rc-translation-filter": "پاڵاوتنی وەرگێڕاوەکان:",
"translate-rc-translation-filter-no": "ھیچ مەکە",
"translate-rc-translation-filter-only": "ھەر وەرگێڕاوەکان نیشان بدە",
@@ -69,6 +71,7 @@
"translate-stats-registrations": "ناونووسکردنەکان",
"translate-stats-reviews": "پیاچوونەوەکان",
"translate-stats-reviewers": "پیاچوونەوەکارەکان",
+ "translate-statsf-options": "بژاردەکانی ھێڵکاری",
"translate-statsf-start": "ڕێکەوتی دەستپێکردن:",
"translate-statsf-scale-months": "مانگ",
"translate-statsf-scale-weeks": "ھەفتە",
@@ -124,36 +127,40 @@
"translate-gs-code": "کۆد",
"translate-gs-speakers": "قسەکەرەکان",
"translate-gs-total": "سەرجەم",
+ "translate-documentation-language": "پەیامی بەڵگەنامە",
"translate-searchprofile": "وەرگێڕانەکان",
"translate-workflowstatus": "ڕەوش: $1",
"translate-workflow-set-doing": "ڕێکخستن...",
"translate-stats-workflow": "ڕەوش",
- "translate-gethelp": "یارمەتی",
"translate-msggroupselector-projects": "پەیامی گرووپ",
"translate-msggroupselector-search-all": "ھەموو",
"translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|ژێرگرووپ|ژێرگرووپەکان}}",
+ "tux-languageselector": "وەرگێڕان بۆ",
"tux-tab-all": "ھەموو",
"tux-tab-untranslated": "وەرنەگێڕراو",
- "tux-tab-translated": "وەرگێڕراو",
+ "tux-tab-translated": "وەرگێڕدراو",
"tux-edit": "دەستکاری",
- "tux-status-translated": "وەرگێڕراو",
+ "tux-status-translated": "وەرگێڕدراو",
"tux-status-saving": "دەپارێزرێت...",
+ "tux-editor-placeholder": "وەرگێڕانەکانت",
"tux-editor-paste-original-button-label": "دەقی بنەڕەتی دابنێ",
- "tux-editor-save-button-label": "وەرگێڕان بپارێزە",
+ "tux-editor-save-button-label": "پاشەکەوتکردنی وەرگێڕانەکە",
"tux-editor-skip-button-label": "باز ببە بۆ دواتر",
- "tux-editor-cancel-button-label": "ھەڵیوەشێنەوە",
+ "tux-editor-cancel-button-label": "ھەڵوەشاندنەوە",
"tux-editor-suggestions-title": "پێشنیارەکان",
"tux-editor-in-other-languages": "بە زمانەکانی تر",
"tux-warnings-more": "{{PLURAL:$1|$1 زیاتر}}",
"tux-warnings-hide": "بیشارەوە",
+ "tux-editor-n-uses": "$1 جار بەکارھاتووە",
"tux-editor-message-desc-more": "زیاتر ببینە",
"tux-editor-message-desc-less": "کەمتر ببینە",
+ "tux-editor-clear-translated": "شاردنەوەی وەرگێڕدراوەکان",
"tux-editor-proofreading-mode": "پێداچوونەوە",
"tux-editor-translate-mode": "پێرست",
"tux-proofread-edit-label": "دەستکاری",
"tux-editor-page-mode": "پەڕە",
"tux-editor-outdated-warning-diff-link": "جیاوازییەکان نیشان بدە",
- "tux-editor-doc-editor-cancel": "ھەڵیوەشێنەوە",
+ "tux-editor-doc-editor-cancel": "ھەڵوەشاندنەوە",
"tux-messagetable-loading-messages": "بارکردنی {{PLURAL:$1|پەیام|پەیامەکان}}...",
"tux-message-filter-result": "$1 {{PLURAL:$1|ئاکام}} دۆزرایەوە بۆ «$2»",
"tux-message-filter-advanced-button": "گەڕانی پێشکەوتوو",
@@ -163,6 +170,7 @@
"tux-editor-expand-tooltip": "بڵاویبکەوە",
"tux-editor-collapse-tooltip": "کۆیبکەوە",
"tux-editor-message-tools-history": "مێژوو",
+ "tux-editor-message-tools-delete": "سڕینەوە",
"tux-editor-message-tools-translations": "هەموو وەرگێرانەکان",
"tux-editor-loading": "باركردن‌ ...",
"translate-statsbar-tooltip": "$1% وەرگێڕدراوە, $2% پێداجوونەوەی بۆ کراوە"
diff --git a/www/wiki/extensions/Translate/i18n/core/cs.json b/www/wiki/extensions/Translate/i18n/core/cs.json
index b7eeb9ce..0109045d 100644
--- a/www/wiki/extensions/Translate/i18n/core/cs.json
+++ b/www/wiki/extensions/Translate/i18n/core/cs.json
@@ -10,16 +10,15 @@
"Vks",
"Matěj Suchánek",
"Utar",
- "Clon"
+ "Clon",
+ "Marek Pavlica",
+ "Dvorapa",
+ "Ilimanaq29"
]
},
"translate": "Překládání",
"translate-desc": "[[Special:Translate|Speciální stránka]] zjednodušující překládání systémových hlášení MediaWiki",
- "translate-taskui-view": "Zobrazit všechny zprávy",
- "translate-taskui-untranslated": "Zobrazit nepřeložené zprávy",
- "translate-taskui-optional": "Zobrazit volitelné zprávy",
- "translate-taskui-acceptqueue": "Jen zprávy, které mohu označit za zkontrolované",
- "translate-taskui-reviewall": "Hodnotit všechny překlady",
+ "translate-fuzzybot-desc": "Toto je speciální systémový účet používaný [https://www.mediawiki.org/wiki/Extension:Translate rozšířením MediaWiki pro překlady], používaný pro údržbu překladů.\nTento účet je součástí softwaru MediaWiki a nepatří žádnému uživateli.",
"translate-taskui-export-to-file": "Exportovat v nativním formátu",
"translate-taskui-export-as-po": "Exportovat pro off-line překlad",
"translate-taction-translate": "Překlad",
@@ -31,7 +30,6 @@
"translate-page-no-such-language": "Zadaný jazyk není platný.",
"translate-page-no-such-group": "Zadaná skupina byla neplatná.",
"translate-page-disabled": "Překlady do tohoto jazyka byly v této skupině zakázány. Zdůvodnění:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 je zdrojový jazyk této stránky.",
"translate-language-disabled": "Překlad do tohoto jazyka je zakázán.",
"translate-page-settings-legend": "Nastavení",
"translate-page-group": "skupina",
@@ -42,13 +40,13 @@
"translate-page-navigation-legend": "Navigace",
"translate-page-showing": "Zobrazeny zprávy $1 až $2 z $3.",
"translate-page-showing-all": "{{PLURAL:$1|Zobrazena $1 zpráva|Zobrazeny $1 zprávy|Zobrazeno $1 zpráv}}.",
+ "translate-page-showing-none": "Požadavku neodpovídají žádné zprávy.",
"translate-next": "Další stránka",
"translate-prev": "Předchozí stránka",
"translate-page-description-legend": "Informace o skupině",
"translate-page-description-hasoptional": "Tato skupina zpráv obsahuje volitelné zprávy.\nVolitelné zprávy se mají překládat, pouze pokud má váš jazyk zvláštní potřeby\njako nepoužívání mezer nebo transkripce vlastních jmen. $1",
"translate-page-description-hasoptional-open": "Zobrazit volitelné zprávy.",
"translate-page-edit": "editovat",
- "translate-ext-url": "<hr />Webová stránka: $1",
"translate-optional": "(volitelné)",
"translate-ignored": "(ignorované)",
"translate-edit-title": "Editovat „$1“",
@@ -110,6 +108,13 @@
"action-translate-import": "importovat offline překlady",
"right-translate-messagereview": "Hodnocení překladů",
"right-translate-groupreview": "Změna stavu zpracování skupin zpráv",
+ "translate-rcfilters-translations": "Překlady",
+ "translate-rcfilters-translations-only-label": "Překlady",
+ "translate-rcfilters-translations-only-desc": "Změny překládaných stránek.",
+ "translate-rcfilters-translations-filter-label": "Bez překladů",
+ "translate-rcfilters-translations-filter-desc": "Všechny změny, které nejsou překlady.",
+ "translate-rcfilters-translations-site-label": "Systémová hlášení",
+ "translate-rcfilters-translations-site-desc": "Úpravy systémových hlášení ve jmenném prostoru MediaWiki.",
"translate-rc-translation-filter": "Filtr překladů:",
"translate-rc-translation-filter-no": "Nijak nefiltrovat",
"translate-rc-translation-filter-only": "Zobrazit jen překlady",
@@ -182,7 +187,7 @@
"translate-mgs-noempty": "Nezobrazovat jazyky neobsahující žádný překlad",
"translate-mgs-submit": "Zobrazit statistiky",
"translate-mgs-column-language": "Jazyk",
- "translate-mgs-totals": "Všechny jazyky dohromady",
+ "translate-mgs-totals": "{{PLURAL:$1|Celkem jediný jazyk|Všechny $1 jazyky dohromady|Všech $1 jazyků dohromady|2=Oba dva jazyky dohromady}}",
"translate-mgs-invalid-group": "Zadaná skupina $1 neexistuje.",
"translate-mgs-nothing": "U požadovaných statistik není co zobrazit.",
"supportedlanguages": "Podporované jazyky",
@@ -193,6 +198,7 @@
"supportedlanguages-recenttranslations": "nedávné překlady",
"supportedlanguages-count": "Celkem $1 {{PLURAL:$1|jazyk|jazyky|jazyků}}.",
"supportedlanguages-activity": "$1: $2 editace – poslední editace před $3 {{PLURAL:$3|dnem|dny}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Zdrojový text překladové jednotky",
"translate-save": "Uložit ($1)",
"translate-jssti-add": "Přidat do seznamu",
"managemessagegroups": "Správa skupin zpráv",
@@ -233,9 +239,7 @@
"translate-js-summary": "Shrnutí:",
"translate-js-save": "Uložit",
"translate-js-next": "Uložit a otevřít další",
- "translate-js-nonext": "Toto byla poslední zpráva na této stránce.",
"translate-js-skip": "Přeskočit na další",
- "translate-js-save-failed": "Uložení se nezdařilo. Nahlaste prosím tuto chybu.",
"translate-js-history": "Historie překladů",
"translate-js-support": "Položit dotaz",
"translate-js-support-title": "Požádat o pomoc, pokud není k dispozici dostatek informací pro správný překlad této zprávy.",
@@ -252,21 +256,9 @@
"translate-documentation-language": "dokumentace k hlášením",
"translate-searchprofile": "Překlady",
"translate-searchprofile-tooltip": "Hledat ve všech překladech",
+ "translate-searchprofile-note": "Více možností vyhledávání je dostupné na [$1 hledání překladů].",
"translate-search-languagefilter": "Filtr podle jazyka:",
"translate-search-nofilter": "Nefiltrovat",
- "translate-messagereview-submit": "Označit za zkontrolované",
- "translate-messagereview-progress": "Označuje se za zkontrolované…",
- "translate-messagereview-failure": "Nepodařilo se označit za zkontrolované: $1",
- "translate-messagereview-done": "Zkontrolováno",
- "translate-messagereview-reviews": "Zkontrolováno {{PLURAL:$1|1 uživatelem|$1 uživateli}}",
- "translate-messagereview-reviewswithyou": "Zkontrolováno {{PLURAL:$1|vámi|$1 uživateli včetně vás}}",
- "api-error-invalidrevision": "Překlad nebyl nalezen",
- "api-error-unknownmessage": "Hlášení nebylo nalezeno",
- "api-error-fuzzymessage": "Překlad je označen jako „fuzzy“",
- "api-error-owntranslation": "Vlastní překlady nemůžete označovat za zkontrolované.",
- "translate-messagereview-no-fuzzy": "„Fuzzy“ překlady nelze označit za zkontrolované.",
- "translate-messagereview-no-own": "Vlastní překlady nemůžete označovat za zkontrolované.",
- "translate-messagereview-doit": "Označit tento překlad jako zkontrolovaný.",
"log-name-translationreview": "Kniha hodnocení překladů",
"log-description-translationreview": "Protokol všech hodnocení překladů a skupin zpráv.",
"logentry-translationreview-message": "$1 {{GENDER:$2|zkontroloval|zkontrolovala}} překlad $3",
@@ -301,7 +293,9 @@
"tux-status-translated": "Přeložená",
"tux-status-saving": "Ukládá se…",
"tux-status-unsaved": "Neuloženo",
+ "tux-save-unknown-error": "Došlo k neznámé chybě.",
"tux-editor-placeholder": "Váš překlad",
+ "tux-editor-editsummary-placeholder": "Nepovinné shrnutí",
"tux-editor-paste-original-button-label": "Vložit zdrojový text",
"tux-editor-discard-changes-button-label": "Zahodit změny",
"tux-editor-save-button-label": "Uložit překlad",
@@ -309,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 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",
@@ -364,9 +358,11 @@
"tux-editor-close-tooltip": "Zavřít",
"tux-editor-expand-tooltip": "Roztáhnout",
"tux-editor-collapse-tooltip": "Sbalit",
+ "tux-editor-message-tools-show-editor": "Zobrazit v editoru wiki",
"tux-editor-message-tools-history": "Historie",
"tux-editor-message-tools-delete": "Smazat",
"tux-editor-message-tools-translations": "Všechny překlady",
+ "tux-editor-message-tools-linktothis": "Odkaz na tuto zprávu",
"tux-editor-loading": "Načítá se…",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|další jazyk|další jazyky|dalších jazyků}}",
"translate-statsbar-tooltip": "$1 % přeloženo, $2 % zkontrolováno",
@@ -375,5 +371,5 @@
"translate-ulsdep-title": "Chyba konfigurace",
"translate-ulsdep-body": "Rozšíření Translate závisí na [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector rozšíření Universal Language Selector].",
"tux-session-expired": "Již nejste přihlášen(a). Přihlaste se prosím v jiné záložce. Anebo si okopírujte neuložené překlady, přihlaste se, vraťte se na tuto stránku a zadejte je znovu.",
- "tux-nojs": "Tato stránka vyžaduje JavaScript."
+ "tux-nojs": "Tento nástroj nefunguje bez JavaScriptu. JavaScript je buď vypnut, nebo zkolaboval anebo není podporován tento prohlížeč."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/csb.json b/www/wiki/extensions/Translate/i18n/core/csb.json
index 74a32c48..ac4929cc 100644
--- a/www/wiki/extensions/Translate/i18n/core/csb.json
+++ b/www/wiki/extensions/Translate/i18n/core/csb.json
@@ -5,6 +5,7 @@
]
},
"translate": "Dolmôczë",
- "translate-edit-in-other-languages": "Wiadło \"$1\" w jinych jãzëkach",
- "translate-sidebar-alltrans": "W jinych jãzëkach"
+ "translate-edit-in-other-languages": "Wiadło w jinych jãzëkach",
+ "translate-sidebar-alltrans": "W jinych jãzëkach",
+ "translate-documentation-language": "òpisënk wiadła"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/cv.json b/www/wiki/extensions/Translate/i18n/core/cv.json
index 97518aa3..03643149 100644
--- a/www/wiki/extensions/Translate/i18n/core/cv.json
+++ b/www/wiki/extensions/Translate/i18n/core/cv.json
@@ -1,19 +1,30 @@
{
"@metadata": {
"authors": [
- "Chuvash2014"
+ "Chuvash2014",
+ "Chuvash"
]
},
"translate": "Куçарни",
"translate-taction-translate": "Куçарни",
"translate-next": "Урăх страницă",
"translate-prev": "Унчченхи страницă",
+ "translationstats": "Куçарнисен статистики",
+ "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-untranslated": "Куçарманнисем",
+ "translate-percentage-complete": "Куçарнă",
"translate-percentage-fuzzy": "Кивелнĕ",
- "translate-gethelp": "Ыйтмалли",
+ "translate-ls-submit": "Статистикине кăтарт",
+ "translate-mgs-submit": "Статистикине кăтарт",
+ "supportedlanguages-recenttranslations": "нумай пулмасть куçарнисем",
+ "translate-dynagroup-recent-label": "Нумай пулмасть куçарнисем",
"tux-languageselector": "Куçармалла",
"tux-tab-all": "Пурте",
"tux-tab-untranslated": "Куçарманнисем",
diff --git a/www/wiki/extensions/Translate/i18n/core/cy.json b/www/wiki/extensions/Translate/i18n/core/cy.json
index 2002ca04..3d5028a7 100644
--- a/www/wiki/extensions/Translate/i18n/core/cy.json
+++ b/www/wiki/extensions/Translate/i18n/core/cy.json
@@ -8,11 +8,6 @@
},
"translate": "Cyfieithu",
"translate-desc": "[[Special:Translate|Tudalen arbennig]] at ddiben cyfieithu MediaWiki a mwy",
- "translate-taskui-view": "Dangos pob neges",
- "translate-taskui-untranslated": "Dangos negeseuon sydd heb eu cyfieithu eto",
- "translate-taskui-optional": "Dangos negeseuon opsiynol",
- "translate-taskui-acceptqueue": "Dim ond y negeseuon y gallaf nodi iddynt gael eu hadolygu",
- "translate-taskui-reviewall": "Adolygu pob cyfieithiad",
"translate-taskui-export-to-file": "Allforio yn ei fformat cynhenid",
"translate-taskui-export-as-po": "Allforio i'w cyfieithu all-lein",
"translate-taction-translate": "Cyfieithu",
@@ -41,7 +36,6 @@
"translate-page-description-hasoptional": "Mae'r grŵp hwn yn cynnwys negeseuon opsiynol.\nDoes dim ond angen eu cyfieithu pan fod orgraff eich iaith yn gofyn am eu cyfieithu, e.e. os oes rhaid osgoi defnyddio bylchau neu wrth drawslythrennu enwau priod. $1",
"translate-page-description-hasoptional-open": "Dangos negeseuon opsiynol.",
"translate-page-edit": "golygu",
- "translate-ext-url": "<hr />Gwefan: $1",
"translate-optional": "(dewisol)",
"translate-ignored": "(anwybyddwyd)",
"translate-edit-title": "Golygu \"$1\"",
@@ -51,9 +45,7 @@
"translate-edit-no-information": "<em>Nid oes unrhyw wybodaeth wedi ei chofnodi am y neges hon eto.\nOs ydych yn gwybod ymhle neu ym mha fodd y defnyddir y neges hon, gallwch hwyluso gwaith y cyfieithwyr drwy gofnodi eglurhad arni.</em>",
"translate-edit-information": "Gwybodaeth am y neges ($1)",
"translate-edit-in-other-languages": "Y neges mewn ieithoedd eraill",
- "translate-edit-committed": "Y cyfieithiad cyfredol yn y meddalwedd",
"translate-edit-warnings": "Rhybudd am gyfieithiad anghyflawn",
- "translate-edit-tmsugs": "Cynigion gan gronfeydd cof cyfieithu a thrwy chyfieithu awtomatig",
"translate-edit-tmmatch-source": "Y testun gwreiddiol i'w gyfieithu: $1",
"translate-edit-tmmatch": "yn cyd-fynd $1%",
"translate-use-suggestion": "Bydd y cynnig hwn yn disodli'r cyfieithiad cyfredol.",
@@ -129,7 +121,6 @@
"translate-statsf-language": "Rhestr coma-wahanedig o godau iaith:",
"translate-statsf-group": "Rhestr coma-wahanedig o godau grŵp:",
"translate-statsf-submit": "Rhagolwg",
- "translate-tag-category": "Tudalennau y gellir eu cyfieithu",
"translate-tag-page-desc": "Cyfieithiad o dudalen wici [[$2|$1]] o $3 ($4).",
"translate-sidebar-alltrans": "Ieithoedd eraill",
"translations": "Yr holl gyfieithiadau",
@@ -188,7 +179,6 @@
"translate-js-summary": "Crynodeb:",
"translate-js-save": "Cadw",
"translate-js-next": "Cadwer ac agorer y nesaf",
- "translate-js-nonext": "Dyma'r neges olaf ar y dudalen hon.",
"translate-js-skip": "Neidio i'r nesaf",
"translate-js-history": "Hynt y cyfieithu",
"translate-js-support": "Ceisio cymorth",
@@ -197,7 +187,7 @@
"translate-gs-code": "Cod",
"translate-gs-continent": "Cyfandir",
"translate-gs-speakers": "Siaradwyr",
- "translate-gs-score": "Sgôr",
+ "translate-gs-score": "Sgor",
"translate-gs-multiple": "Mwy nag un",
"translate-gs-count": "Nifer",
"translate-gs-total": "Cyfanswm",
@@ -207,13 +197,6 @@
"translate-searchprofile-tooltip": "Chwilio ymhlith yr holl gyfieithiadau",
"translate-search-languagefilter": "Hidlo yn ôl iaith:",
"translate-search-nofilter": "Dim hidlo",
- "translate-messagereview-submit": "Nodi iddi gael ei hadolygu",
- "translate-messagereview-progress": "Wrthi'n nodi...",
- "translate-messagereview-done": "Adolygwyd",
- "translate-messagereview-reviews": "Adolygwyd gan {{PLURAL:$1|neb|$1 defnyddiwr|$1 ddefnyddiwr|$1 defnyddiwr}}",
- "api-error-invalidrevision": "Ni chafwyd hyd i'r cyfieithiad",
- "api-error-unknownmessage": "Ni chafwyd hyd i'r neges",
- "api-error-fuzzymessage": "Dynodwyd y cyfieithiad gyda fuzzy",
"log-name-translationreview": "Lòg adolygu cyfieithiadau",
"translate-workflow-state-": "(heb ei osod)",
"translate-workflowstatus": "Cyflwr: $1",
@@ -221,7 +204,6 @@
"translate-stats-workflow": "Cyflwr",
"translate-workflowgroup-label": "Cyflyrau'r llif gwaith",
"translate-dynagroup-recent-label": "Cyfieithiadau diweddar",
- "translate-gethelp": "Cymorth",
"translate-msggroupselector-search-all": "Oll",
"translate-msggroupselector-search-recent": "Diweddar",
"tux-tab-all": "Oll",
@@ -246,5 +228,6 @@
"tux-editor-edit-desc": "Golygu'r nodiadau",
"tux-editor-suggestions-title": "Awgrymiadau",
"tux-editor-in-other-languages": "Mewn ieithoedd eraill",
- "tux-editor-need-more-help": "Oes angen mwy o gymorth?"
+ "tux-editor-need-more-help": "Oes angen mwy o gymorth?",
+ "tux-warnings-hide": "cuddio"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/da.json b/www/wiki/extensions/Translate/i18n/core/da.json
index bf63c62d..27355296 100644
--- a/www/wiki/extensions/Translate/i18n/core/da.json
+++ b/www/wiki/extensions/Translate/i18n/core/da.json
@@ -10,16 +10,13 @@
"MGA73",
"Nghtwlkr",
"Peter Alberti",
- "Sarrus"
+ "Sarrus",
+ "Saederup92"
]
},
"translate": "Oversæt",
+ "translate-extensionname": "Oversæt",
"translate-desc": "[[Special:Translate|Specialside]] til oversættelse af MediaWiki og andet",
- "translate-taskui-view": "Vis alle beskeder",
- "translate-taskui-untranslated": "Vis uoversatte beskeder",
- "translate-taskui-optional": "Vis valgfrie beskeder",
- "translate-taskui-acceptqueue": "Kun beskeder som jeg kan korrekturlæse",
- "translate-taskui-reviewall": "Lav korrekturlæsning af alle oversættelser",
"translate-taskui-export-to-file": "Eksportér i oprindeligt format",
"translate-taskui-export-as-po": "Eksportér til offline oversættelse",
"translate-taction-translate": "Oversæt",
@@ -48,7 +45,6 @@
"translate-page-description-hasoptional": "Denne beskedgruppe indeholder valgfrie beskeder.\nValgfrie beskeder bør kun oversættes, hvis dit sprog har særlige krav som for eksempel ikke at bruge mellemrum eller at transskribere egennavne. $1",
"translate-page-description-hasoptional-open": "Vis valgfrie beskeder.",
"translate-page-edit": "redigér",
- "translate-ext-url": "<hr />Webside: $1",
"translate-optional": "(valgfri)",
"translate-ignored": "(ignoreres)",
"translate-edit-title": "Rediger \"$1\"",
@@ -58,14 +54,15 @@
"translate-edit-no-information": "<em>Denne besked har ingen dokumentation.\nHvis du ved hvor eller hvordan denne besked bruges, kan du hjælpe andre oversættere ved at tilføje dokumentation til beskeden.</em>",
"translate-edit-information": "Information om beskeden ($1)",
"translate-edit-in-other-languages": "Beskeden på andre sprog",
- "translate-edit-committed": "Nuværende oversættelse i programmet",
"translate-edit-warnings": "Advarsler om ufuldstændige oversættelser",
- "translate-edit-tmsugs": "Forslag fra oversættelseshukommelsen",
"translate-edit-tmmatch-source": "Kildetekst til oversættelse: $1",
"translate-edit-tmmatch": "$1 % overensstemmelse",
"translate-use-suggestion": "Erstat den nuværende oversættelse med dette forslag.",
"translate-edit-nopermission": "Du skal have oversættelsesrettigheder for at kunne oversætte besekeder.",
"translate-edit-askpermission": "Få tilladelse",
+ "exporttranslations": "Eksporter oversættelser",
+ "translate-export-form-format": "Format",
+ "translate-export-not-supported": "Eksportering af oversættelser understøttes ikke.",
"translate-magic-pagename": "Udvidet MediaWiki-oversættelse",
"translate-magic-help": "Du kan oversætte specialsiders aliaser, magiske ord og navnerumsnavne.\n\nSpecialsiders aliaser og magiske ord kan have flere oversættelser.\nOversættelserne adskilles med komma (,).\nNavnerum kan kun have én oversættelse.\n\nOversættelse af projektdiskussionsnavnerummet <code>$1 talk</code> kan være kompliceret.\n<code>$1</code> erstattes af projektets webstedsnavn (eksempelvis <code>{{ns:project_talk}}</code>).\nHvis det ikke er muligt på dit sprog, at danne en meningsgivende sætning uden at ændre webstedsnavnet, så giv os besked på [[Support]].\n\nDu skal være oversætter for at kunne gemme ændringer.\nÆndringerne gemmes ikke før du klikker på gem-knappen herunder.",
"translate-magic-module": "Modul:",
@@ -84,7 +81,7 @@
"translate-magic-namespace": "Navnerumsnavne",
"translate-magic-notsaved": "Din redigering er ikke gemt!",
"translate-magic-errors": "Ret venligst følgende {{PLURAL:$1|fejl|fejl}} i oversættelserne:",
- "translate-magic-saved": "Dine ændringer er gemt.",
+ "translate-magic-saved": "Dine ændringer er blevet gemt.",
"translate-checks-parameters": "Følgende {{PLURAL:$2|parameter|parametre}} bruges ikke:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "Følgende {{PLURAL:$2|parameter er ukendt|parametre er ukendte}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Der er et ulige antal {{PLURAL:$2|parenteser|parenteser}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -111,7 +108,14 @@
"right-translate-import": "Importere offline oversættelser",
"action-translate-import": "importere offline oversættelser",
"right-translate-messagereview": "Læs korrektur",
+ "action-translate-messagereview": "læs korrektur",
"right-translate-groupreview": "Ændring af workflowstatus på meddelelsesgrupper",
+ "action-translate-groupreview": "ændre arbejdsflow statussen for beskedgrupper",
+ "translate-rcfilters-translations": "Oversættelser",
+ "translate-rcfilters-translations-only-label": "Oversættelser",
+ "translate-rcfilters-translations-only-desc": "Ændringer til oversatte sider.",
+ "translate-rcfilters-translations-filter-label": "Ikke oversættelser",
+ "translate-rcfilters-translations-filter-desc": "Alle ændringer som ikke er oversættelser.",
"translate-rc-translation-filter": "Filtrér oversættelser:",
"translate-rc-translation-filter-no": "Gør ingenting",
"translate-rc-translation-filter-only": "Vis kun oversættelser",
@@ -143,8 +147,7 @@
"translate-statsf-language": "Kommasepareret liste med sprogkoder:",
"translate-statsf-group": "Kommasepareret liste med gruppekoder:",
"translate-statsf-submit": "Forhåndsvisning",
- "translate-tag-category": "Sider som kan oversættes",
- "translate-tag-page-desc": "Oversættelse af wikisiden [[$2|$1]].",
+ "translate-tag-page-desc": "Oversættelse af wikisiden [[$2|$1]] fra $3 ($4).",
"translate-sidebar-alltrans": "På andre sprog",
"translations": "Alle oversættelser",
"translations-summary": "Skriv navnet på en besked nedenfor for at vise alle tilgængelige oversættelser.",
@@ -174,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",
@@ -184,12 +188,13 @@
"translate-mgs-noempty": "Vis ikke sprog, som ikke har nogen oversættelser",
"translate-mgs-submit": "Vis statistik",
"translate-mgs-column-language": "Sprog",
- "translate-mgs-totals": "Alle sprog sammenlagt",
+ "translate-mgs-totals": "Alle {{PLURAL:$1|sprog}} sammenlagt",
"translate-mgs-invalid-group": "Den angivne gruppe, $1, findes ikke.",
"translate-mgs-nothing": "Der er intet at vise for den ønskede statistik.",
"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.",
@@ -217,7 +222,6 @@
"translate-manage-toolong": "Den maksimale udførelsestid på $1 {{PLURAL:$1|sekund|sekunder}} er overskredet.\nSend venligst formularen igen for at fortsætte behandlingen.",
"translate-manage-import-summary": "Importerer en ny version fra ekstern kilde",
"translate-manage-conflict-summary": "Importerer en ny version fra en ekstern kilde.\nTjek venligst.",
- "translate-manage-fuzzy-summary": "Definitionen af beskeden er blevet ændret",
"translate-manage-submit": "Udfør",
"translate-manage-intro-other": "Nedenfor er listen over ændringer af oversættelser for sproget $1.\nGennemgå venligst ændringerne og vælg en handling du ønsker at foretage for hver ændring.\nHvis du vælger at ignorere ændringer, er denne handling kun midlertidig.",
"translate-manage-import-ok": "Importeret: $1",
@@ -226,7 +230,7 @@
"translate-import-from-local": "Upload af lokal fil:",
"translate-import-load": "Indlæs fil",
"translate-import-err-dl-failed": "Kunne ikke hente filen:\n$1",
- "translate-import-err-ul-failed": "Fil upload lykkedes ikke",
+ "translate-import-err-ul-failed": "Fil kunne ikke uploades",
"translate-import-err-invalid-title": "Det angivne filnavn <nowiki>$1</nowiki> var ugyldig.",
"translate-import-err-no-such-file": "Fil <nowiki>$1</nowiki> eksisterer ikke eller er ikke blevet uploadet lokalt.",
"translate-import-err-stale-group": "Beskedgruppen, som denne fil tilhører, findes ikke.",
@@ -235,9 +239,7 @@
"translate-js-summary": "Beskrivelse:",
"translate-js-save": "Gem",
"translate-js-next": "Gem og åben næste",
- "translate-js-nonext": "Dette var den sidste besked på denne side.",
"translate-js-skip": "Gå til næste",
- "translate-js-save-failed": "Lagring mislykkedes. Rapporter venligst denne fejl.",
"translate-js-history": "Oversættelseshistorik",
"translate-js-support": "Stil spørgsmål",
"translate-js-support-title": "Spørg om hjælp, hvis der ikke er nok information til at oversætte denne besked korrekt.",
@@ -256,19 +258,6 @@
"translate-searchprofile-tooltip": "Søg i alle oversættelser",
"translate-search-languagefilter": "Filtrer efter sprog:",
"translate-search-nofilter": "Ingen filtrering",
- "translate-messagereview-submit": "Markér som korrekturlæst",
- "translate-messagereview-progress": "Markerer som korrekturlæst ...",
- "translate-messagereview-failure": "Markering som korrekturlæst mislykkedes: $1",
- "translate-messagereview-done": "Korrekturlæst",
- "translate-messagereview-reviews": "Korrekturlæst af {{PLURAL:$1|én bruger|$1 brugere}}",
- "translate-messagereview-reviewswithyou": "Korrekturlæst af {{PLURAL:$1|dig|$1 brugere inklusive dig}}",
- "api-error-invalidrevision": "Oversættelsen blev ikke fundet",
- "api-error-unknownmessage": "Beskeden blev ikke fundet",
- "api-error-fuzzymessage": "Oversættelse er markeret som forældet",
- "api-error-owntranslation": "Du kan ikke korrekturlæse dine egne oversættelser",
- "translate-messagereview-no-fuzzy": "Forældede meddelelser kan ikke markeres som korrekturlæste.",
- "translate-messagereview-no-own": "Du kan ikke korrekturlæse dine egne oversættelser.",
- "translate-messagereview-doit": "Markér denne oversættelse som korrekturlæst.",
"log-name-translationreview": "Log for oversættelseskorrektur",
"log-description-translationreview": "Log over alle korrekturlæsninger af oversættelser og meddelelsesgrupper.",
"logentry-translationreview-message": "$1 {{GENDER:$2|korrekturlæste}} oversættelsen $3",
@@ -290,7 +279,6 @@
"translate-dynagroup-recent-desc": "Denne meddelelsesgruppe viser alle nylige oversættelser til dette sprog.\nDet er mest nyttigt til korrekturlæsningsopgaver.",
"translate-dynagroup-additions-label": "De seneste tilføjelser",
"translate-dynagroup-additions-desc": "Denne meddelelsesgruppe viser nye og ændrede meddelelser.",
- "translate-gethelp": "Hjælp",
"translate-msggroupselector-projects": "Beskedgruppe",
"translate-msggroupselector-search-placeholder": "Søg efter grupper",
"translate-msggroupselector-search-all": "Alle",
@@ -309,6 +297,7 @@
"tux-status-translated": "Oversat",
"tux-status-saving": "Gemmer ...",
"tux-status-unsaved": "Ikke gemt",
+ "tux-save-unknown-error": "Der opstod en ukendt fejl.",
"tux-editor-placeholder": "Din oversættelse",
"tux-editor-paste-original-button-label": "Indsæt kildeteksten",
"tux-editor-discard-changes-button-label": "Fjern alle ændringer",
@@ -316,6 +305,7 @@
"tux-editor-skip-button-label": "Spring til næste",
"tux-editor-cancel-button-label": "Annullér",
"tux-editor-confirm-button-label": "Bekræft oversættelse",
+ "tux-editor-proofread-button-label": "Markér som korrekturlæst",
"tux-editor-shortcut-info": "Tryk på \"$1\" for at gemme, eller \"$2\" for at springe til næste meddelelse",
"tux-editor-edit-desc": "Redigér dokumentation",
"tux-editor-add-desc": "Tilføj dokumentation",
@@ -371,11 +361,15 @@
"tux-editor-close-tooltip": "Luk",
"tux-editor-expand-tooltip": "Fold ud",
"tux-editor-collapse-tooltip": "Slå sammen",
+ "tux-editor-message-tools-show-editor": "Vis i wikieditoren",
"tux-editor-message-tools-history": "Historik",
+ "tux-editor-message-tools-delete": "Slet",
"tux-editor-message-tools-translations": "Alle oversættelser",
+ "tux-editor-message-tools-linktothis": "Link til denne besked",
"tux-editor-loading": "Indlæser ...",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|mere sprog|flere sprog}}",
"translate-statsbar-tooltip": "$1% oversatte, $2% korrekturlæste",
"translate-statsbar-tooltip-with-fuzzy": "$1% oversatte, $2% korrekturlæste, $3% forældede",
- "translate-search-more-groups-info": "$1 {{PLURAL:$1|mere gruppe|flere grupper}}"
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|mere gruppe|flere grupper}}",
+ "translate-ulsdep-body": "Oversættelseudvidelsen er afhængig af [https://www.mediawiki.stjæle/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector udvidelsen Universal Language Selector]."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/de-ch.json b/www/wiki/extensions/Translate/i18n/core/de-ch.json
index f0fd53c3..db6330de 100644
--- a/www/wiki/extensions/Translate/i18n/core/de-ch.json
+++ b/www/wiki/extensions/Translate/i18n/core/de-ch.json
@@ -8,6 +8,5 @@
]
},
"translate-page-description-hasoptional": "Diese Nachrichtengruppe enthält optionale Nachrichten.\nOptionale Nachrichten sollten nur dann übersetzt werden, sofern es in deiner Sprache Bedarf für sie gibt,\nwie beispielsweise die Nichtverwendung von Leerschlägen oder die Transkription von Eigennamen. $1",
- "translate-edit-no-information": "<em>Zu dieser Nachricht ist keine Dokumentation vorhanden.\nSofern du weisst, wo und in welchem Zusammenhang sie genutzt wird, kannst du anderen Übersetzern bei ihrer Arbeit helfen, indem du eine Dokumentation hinzufügst.</em>",
- "translate-messagereview-reviewswithyou": "Überprüft von {{PLURAL:$1|dir selbst|$1 Benutzern, einschliesslich dir selbst}}"
+ "translate-edit-no-information": "<em>Zu dieser Nachricht ist keine Dokumentation vorhanden.\nSofern du weisst, wo und in welchem Zusammenhang sie genutzt wird, kannst du anderen Übersetzern bei ihrer Arbeit helfen, indem du eine Dokumentation hinzufügst.</em>"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/de-formal.json b/www/wiki/extensions/Translate/i18n/core/de-formal.json
index f99292dc..717ee2b5 100644
--- a/www/wiki/extensions/Translate/i18n/core/de-formal.json
+++ b/www/wiki/extensions/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>",
@@ -24,8 +25,5 @@
"translate-manage-inconsistent": "Es wurden Inkonsistenzen in der Anfrage festgestellt.\nBitte überprüfen Sie Ihre Änderungen und versuchen Sie es erneut.\nDetails: $1",
"translate-manage-toolong": "Die maximale Verarbeitungszeit von $1 {{PLURAL:$1|Sekunde|Sekunden}} ist abgelaufen.\nBitte schicken Sie das Formular noch einmal ab, um die Verarbeitung fortzusetzen.",
"translate-manage-intro-other": "Hier ist eine Liste von Übersetzungsänderungen der Sprache $1.\nBitte kontrollieren Sie die Änderungen und wählen Sie je eine Aktion, die Sie auf die Übersetzungen anwenden möchten.\nWenn Sie sich entscheiden, Änderungen zu ignorieren, werden sie mit dem nächsten Export überschrieben.",
- "translate-import-err-warnings": "Die Datei entspricht nicht dem erwarteten Format.\nStellen Sie sicher, dass der Editor keine <code>msgctxt</code>-Felder entfernt.\nDetails: $1",
- "translate-messagereview-reviewswithyou": "Akzeptiert von {{PLURAL:$1|Ihnen selbst|$1 Benutzern, einschließlich Ihnen selbst}}",
- "api-error-owntranslation": "Sie können Ihre eigenen Übersetzungen nicht akzeptieren.",
- "translate-messagereview-no-own": "Sie können Ihre eigenen Übersetzungen nicht akzeptieren."
+ "translate-import-err-warnings": "Die Datei entspricht nicht dem erwarteten Format.\nStellen Sie sicher, dass der Editor keine <code>msgctxt</code>-Felder entfernt.\nDetails: $1"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/de.json b/www/wiki/extensions/Translate/i18n/core/de.json
index 18b3f434..364eaaeb 100644
--- a/www/wiki/extensions/Translate/i18n/core/de.json
+++ b/www/wiki/extensions/Translate/i18n/core/de.json
@@ -26,23 +26,18 @@
"translate": "Übersetzen",
"translate-extensionname": "Translate",
"translate-desc": "Erweitert das Wiki um eine [[Special:Translate|Spezialseite]] zum Übersetzen von MediaWiki und weiterem",
- "translate-taskui-view": "Alle Nachrichten anzeigen",
- "translate-taskui-untranslated": "Alle nicht übersetzten Nachrichten anzeigen",
- "translate-taskui-optional": "Alle optionalen Nachrichten anzeigen",
- "translate-taskui-acceptqueue": "Nur Nachrichten anzeigen, die ich als überprüft markieren kann.",
- "translate-taskui-reviewall": "Alle Übersetzungen überprüfen",
+ "translate-fuzzybot-desc": "Dies ist ein spezielles System-Benutzerkonto, das von der MediaWiki-Softwareerweiterung [https://www.mediawiki.org/wiki/Extension:Translate „Translate“] verwendet wird, um Übersetzungen zu warten.\nDieses Benutzerkonto ist Teil der MediaWiki-Software und gehört keinem Benutzer.",
"translate-taskui-export-to-file": "Im systemeigenen Format exportieren",
"translate-taskui-export-as-po": "Für die Offline-Übersetzung exportieren",
"translate-taction-translate": "Übersetzen",
"translate-taction-proofread": "Überprüfen",
- "translate-taction-lstats": "Statistiken zur Sprache",
- "translate-taction-mstats": "Statistiken zur Nachrichtengruppe",
+ "translate-taction-lstats": "Statistiken zu Sprachen",
+ "translate-taction-mstats": "Statistiken zu Nachrichtengruppen",
"translate-taction-export": "Exportieren",
"translate-taction-disabled": "Diese Aktion ist in diesem Wiki deaktiviert.",
"translate-page-no-such-language": "Die angegebene Sprache ist ungültig.",
"translate-page-no-such-group": "Die angegebene Gruppe ist ungültig.",
"translate-page-disabled": "Übersetzungen in diese Sprache wurden für diese Gruppe deaktiviert.\nGrund:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 ist die Quellsprache dieser Seite.",
"translate-language-disabled": "Übersetzungen in diese Sprachen sind nicht möglich.",
"translate-page-settings-legend": "Einstellungen",
"translate-page-group": "Gruppe",
@@ -53,13 +48,13 @@
"translate-page-navigation-legend": "Navigation",
"translate-page-showing": "Systemnachrichten $1 bis $2 von insgesamt $3",
"translate-page-showing-all": "{{PLURAL:$1|Eine Systemnachricht|$1 Systemnachrichten}}",
+ "translate-page-showing-none": "Es sind keine Nachrichten zur Anzeige vorhanden.",
"translate-next": "nächste Seite",
"translate-prev": "vorherige Seite",
"translate-page-description-legend": "Informationen über diese Gruppe",
"translate-page-description-hasoptional": "Diese Nachrichtengruppe enthält optionale Nachrichten.\nOptionale Nachrichten sollten nur dann übersetzt werden, sofern es in deiner Sprache Bedarf für sie gibt,\nwie beispielsweise die Nichtverwendung von Leerzeichen oder die Transkription von Eigennamen. $1",
"translate-page-description-hasoptional-open": "Optionale Nachrichten anzeigen.",
"translate-page-edit": "bearbeiten",
- "translate-ext-url": "<hr />Website: $1",
"translate-optional": "(optional)",
"translate-ignored": "(ignoriert)",
"translate-edit-title": "„$1“ bearbeiten",
@@ -75,6 +70,11 @@
"translate-use-suggestion": "Ersetze die aktuelle Übersetzung mit diesem Vorschlag.",
"translate-edit-nopermission": "Du benötigst Übersetzerrechte, um Nachrichten übersetzen zu können.",
"translate-edit-askpermission": "Berechtigung erhalten",
+ "exporttranslations": "Übersetzungen exportieren",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Bitte ein gültiges Format angeben.",
+ "translate-export-not-supported": "Das Exportieren von Übersetzungen wird nicht unterstützt.",
+ "translate-export-format-notsupported": "Das angegebene Exportformat wird von der Nachrichtengruppe nicht unterstützt.",
"translate-magic-pagename": "Übersetzen (extra)",
"translate-magic-help": "Du kannst hier Aliase für Spezialseiten, magische Wörter und Namensraumnamen übersetzen.\n\nSpezialseiten und magische Wörter können mehrere Übersetzungen haben,\nsie werden jeweils durch ein Komma (,) getrennt.\nNamensräume dürfen nur je eine Übersetzung haben.\n\nDas Übersetzen des Projektdiskussionsseitennamensraums <code>$1 talk</code> kann kompliziert werden.\n<code>$1</code> wird durch den Projektnamen ersetzt (zum Beispiel <code>{{ns:project_talk}}</code>).\nSofern es in deiner Sprache nicht möglich ist eine grammatikalisch korrekte Form zu bilden, ohne den Projektnamen zu verändern, lasse es uns bitte auf [[Support]] wissen.\n\nDu musst Übersetzer sein, um Änderungen speichern zu können.\nÄnderungen werden erst beim Klick auf den Button „Speichern“ gespeichert.",
"translate-magic-module": "Modul:",
@@ -115,18 +115,28 @@
"translate-pref-editassistlang-help": "Mit Kommas getrennte Liste von Sprachcodes.\nDie Übersetzungen der Nachrichten in den gewählten Sprachen werden beim Übersetzen angezeigt.\nDie Standardliste ist abhängig von der Sprache der Benutzeroberfläche.",
"translate-pref-editassistlang-bad": "In der Liste ist ein ungültiger Sprachcode enthalten:\n<nowiki>$1</nowiki>.",
"right-translate": "Bearbeitungen mithilfe der Übersetzungsoberfläche tätigen",
+ "action-translate": "Bearbeitungen mithilfe der Übersetzungsoberfläche zu tätigen",
"right-translate-manage": "Nachrichtengruppen verwalten",
"action-translate-manage": "Nachrichtengruppen zu verwalten",
"right-translate-import": "Offlineübersetzungen importieren",
"action-translate-import": "Offlineübersetzungen zu importieren",
"right-translate-messagereview": "Übersetzungen überprüfen",
+ "action-translate-messagereview": "Übersetzungen zu überprüfen",
"right-translate-groupreview": "Arbeitsablaufstatus von Nachrichtengruppen ändern",
+ "action-translate-groupreview": "den Workflow-Status von Nachrichtengruppen zu ändern",
+ "translate-rcfilters-translations": "Übersetzungen",
+ "translate-rcfilters-translations-only-label": "Übersetzungen",
+ "translate-rcfilters-translations-only-desc": "Änderungen an übersetzten Seiten.",
+ "translate-rcfilters-translations-filter-label": "Keine Übersetzungen",
+ "translate-rcfilters-translations-filter-desc": "Alle Änderungen, die keine Übersetzungen sind.",
+ "translate-rcfilters-translations-site-label": "Systemnachrichten der Website",
+ "translate-rcfilters-translations-site-desc": "Anpassungen an Systemnachrichten der Website im MediaWiki-Namensraum.",
"translate-rc-translation-filter": "Übersetzungen filtern:",
"translate-rc-translation-filter-no": "nichts",
"translate-rc-translation-filter-only": "Zeige nur Übersetzungen",
"translate-rc-translation-filter-filter": "Übersetzungen filtern",
"translate-rc-translation-filter-site": "Nur Änderungen an den Nachrichten des Wikis",
- "translationstats": "Übersetzungsstatistik",
+ "translationstats": "Statistiken zu Übersetzungen",
"translate-stats-edits": "Bearbeitungen",
"translate-stats-users": "Übersetzer",
"translate-stats-registrations": "Registrierungen",
@@ -164,7 +174,7 @@
"translate-translations-project": "Projekt:",
"translate-translations-including-no-param": "Bitte gib einen gültigen Nachrichtennamen als Unterseitenparameter an",
"translate-translations-history-short": "V",
- "languagestats": "Statistiken zur Sprache",
+ "languagestats": "Statistiken zu Sprachen",
"languagestats-summary": "Diese Seite zeigt Statistiken zu Übersetzungen für alle Nachrichtengruppen einer Sprache.",
"messagegroupstats-summary": "Diese Seite zeigt Statistiken zu Nachrichtengruppen.",
"languagestats-stats-for": "Übersetzungsstatistik für die Sprache $1 ($2).",
@@ -183,26 +193,29 @@
"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",
- "translate-mgs-pagename": "Statistiken zur Nachrichtengruppe",
+ "translate-mgs-pagename": "Statistiken zu Nachrichtengruppen",
"translate-mgs-fieldset": "Einstellungen anzeigen",
"translate-mgs-group": "Gruppe:",
"translate-mgs-nocomplete": "Nicht die Sprachen anzeigen, zu denen die Übersetzungen fertiggestellt wurden",
"translate-mgs-noempty": "Nicht die Sprachen anzeigen, zu denen noch keine Übersetzungen fertiggestellt wurden",
"translate-mgs-submit": "Statistiken anzeigen",
"translate-mgs-column-language": "Sprache",
- "translate-mgs-totals": "Alle Sprachen zusammen",
+ "translate-mgs-totals": "{{PLURAL:$1|Die gesamte Sprache|Alle $1 Sprachen zusammen}}",
"translate-mgs-invalid-group": "Die angegebene Nachrichtengruppe $1 ist nicht vorhanden.",
"translate-mgs-nothing": "Zu den angeforderten Statistiken gibt es keine anzuzeigenden Daten.",
"supportedlanguages": "Unterstützte Sprachen",
"supportedlanguages-summary": "Diese Seite zeigt eine Liste aller auf {{SITENAME}} unterstützen Sprachen, zusammen mit den Namen der Übersetzer, die an der jeweiligen Sprache mitgearbeitet haben.\nJe intensiver ein Übersetzer mitgearbeitet hat, desto größer wird sein Benutzername angezeigt.\nDie zur Unterstreichung des Benutzernamens genutzte Farbe zeigt an, wann der Übersetzer zuletzt aktiv mitgearbeitet hat.",
"supportedlanguages-colorlegend": "Legende zu den Farben: Letzte Übersetzung vor $1 Tagen.",
+ "supportedlanguages-sqlite-error": "SQLite wird nicht unterstützt",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Übersetzer|Übersetzerin}}|Übersetzer}}: $1",
"supportedlanguages-recenttranslations": "Aktuelle Übersetzungen",
"supportedlanguages-count": "Insgesamt $1 {{PLURAL:$1|Sprache|Sprachen}}.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|Bearbeitung|Bearbeitungen}} - letzte Bearbeitung vor $3 {{PLURAL:$3|Tag|Tagen}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Quelltext der Übersetzungseinheit",
"translate-save": "Speichern ($1)",
"translate-jssti-add": "Zur Liste hinzufügen",
"managemessagegroups": "Nachrichtengruppenverwaltung",
@@ -243,9 +256,7 @@
"translate-js-summary": "Zusammenfassung:",
"translate-js-save": "Speichern",
"translate-js-next": "Speichern und nächste öffnen",
- "translate-js-nonext": "Dies war die letzte Nachricht auf dieser Seite.",
"translate-js-skip": "Weiter zur nächsten",
- "translate-js-save-failed": "Speichern ist fehlgeschlagen. Bitte melde diesen Fehler.",
"translate-js-history": "Übersetzungsgeschichte",
"translate-js-support": "Frage stellen",
"translate-js-support-title": "Frage nach Hilfe, sofern nicht ausreichend Informationen vorhanden sind, diese Nachricht richtig zu übersetzen.",
@@ -262,21 +273,9 @@
"translate-documentation-language": "Nachrichtendokumentation",
"translate-searchprofile": "Übersetzungen",
"translate-searchprofile-tooltip": "Suche in allen Übersetzungen",
+ "translate-searchprofile-note": "Weitere Suchoptionen sind verfügbar mit der [$1 Übersetzungssuche].",
"translate-search-languagefilter": "Nach Sprache filtern:",
"translate-search-nofilter": "Alle Sprachen",
- "translate-messagereview-submit": "Als überprüft markieren",
- "translate-messagereview-progress": "Markiere als überprüft …",
- "translate-messagereview-failure": "Als überprüft markieren gescheitert: $1",
- "translate-messagereview-done": "Überprüft",
- "translate-messagereview-reviews": "Überprüft von {{PLURAL:$1|einem Benutzer|$1 Benutzern}}",
- "translate-messagereview-reviewswithyou": "Überprüft von {{PLURAL:$1|dir selbst|$1 Benutzern, einschließlich dir selbst}}",
- "api-error-invalidrevision": "Die Übersetzung wurde nicht gefunden",
- "api-error-unknownmessage": "Die Nachricht wurde nicht gefunden.",
- "api-error-fuzzymessage": "Die Übersetzung ist als veraltet markiert",
- "api-error-owntranslation": "Du kannst deine eigenen Übersetzungen nicht als überprüft markieren.",
- "translate-messagereview-no-fuzzy": "Veraltete Übersetzungen können nicht als überprüft markiert werden.",
- "translate-messagereview-no-own": "Du kannst deine eigenen Übersetzungen nicht als überprüft markieren.",
- "translate-messagereview-doit": "Diese Übersetzung als überprüft markieren.",
"log-name-translationreview": "Übersetzungsprüfungs-Logbuch",
"log-description-translationreview": "Logbuch aller Übersetzungsprüfungen an Übersetzungen und Nachrichtengruppen.",
"logentry-translationreview-message": "$1 {{GENDER:$2|überprüfte}} die Übersetzung $3",
@@ -316,7 +315,9 @@
"tux-status-translated": "Übersetzt",
"tux-status-saving": "Speichere …",
"tux-status-unsaved": "Nicht gespeichert",
+ "tux-save-unknown-error": "Es ist ein unbekannter Fehler aufgetreten.",
"tux-editor-placeholder": "Deine Übersetzung",
+ "tux-editor-editsummary-placeholder": "Optionale Zusammenfassung",
"tux-editor-paste-original-button-label": "Quelltext einfügen",
"tux-editor-discard-changes-button-label": "Änderungen verwerfen",
"tux-editor-save-button-label": "Übersetzung speichern",
@@ -324,13 +325,13 @@
"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 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",
"tux-editor-in-other-languages": "In anderen Sprachen",
"tux-editor-need-more-help": "Wird weitere Hilfe benötigt?",
- "tux-editor-ask-help": "Nach zusätzlichen Informationen fragen ...",
+ "tux-editor-ask-help": "Nach zusätzlichen Informationen fragen",
"tux-editor-tm-match": "$1 % Übereinstimmung",
"tux-warnings-more": "{{PLURAL:$1|Eine weitere|$1 weitere}}",
"tux-warnings-hide": "verstecken",
@@ -379,16 +380,18 @@
"tux-editor-close-tooltip": "Schließen",
"tux-editor-expand-tooltip": "Ausklappen",
"tux-editor-collapse-tooltip": "Einklappen",
+ "tux-editor-message-tools-show-editor": "Im Wiki-Editor anzeigen",
"tux-editor-message-tools-history": "Versionsgeschichte",
"tux-editor-message-tools-delete": "Löschen",
"tux-editor-message-tools-translations": "Alle Übersetzungen",
+ "tux-editor-message-tools-linktothis": "Auf diese Systemnachricht verlinken",
"tux-editor-loading": "Lade …",
"translate-search-more-languages-info": "{{PLURAL:$1|Eine weitere Sprache|$1 weitere Sprachen}}",
- "translate-statsbar-tooltip": "$1% übersetzt, $2% überprüft",
- "translate-statsbar-tooltip-with-fuzzy": "$1% übersetzt, $2% überprüft, $3% veraltet",
+ "translate-statsbar-tooltip": "$1 % übersetzt, $2 % überprüft",
+ "translate-statsbar-tooltip-with-fuzzy": "$1 % übersetzt, $2 % überprüft, $3 % veraltet",
"translate-search-more-groups-info": "{{PLURAL:$1|Eine weitere Gruppe|$1 weitere Gruppen}}",
"translate-ulsdep-title": "Konfigurationsfehler",
"translate-ulsdep-body": "Die Übersetzungserweiterung hängt von der [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector Erweiterung für die universelle Sprachauswahl] ab.",
"tux-session-expired": "Du bist nicht mehr angemeldet. Bitte melde dich auf einer getrennten Registerkarte an. Alternativ kannst du eine Kopie deiner ungespeicherten Übersetzungen machen, dich anmelden, zu dieser Seite zurückkehren und deine Übersetzungen erneut eingeben.",
- "tux-nojs": "Diese Seite erfordert JavaScript."
+ "tux-nojs": "Dieses Werkzeug funktioniert ohne JavaScript nicht. Es ist deaktiviert, funktioniert nicht oder dieser Browser wird nicht unterstützt."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/din.json b/www/wiki/extensions/Translate/i18n/core/din.json
index 0499b5b2..e41aec86 100644
--- a/www/wiki/extensions/Translate/i18n/core/din.json
+++ b/www/wiki/extensions/Translate/i18n/core/din.json
@@ -1,8 +1,10 @@
{
"@metadata": {
"authors": [
- "Dinkawiki"
+ "Dinkawiki",
+ "Kumkumuk"
]
},
+ "translate-page-edit": "cokic",
"translate-documentation-language": "Wɛ̈tcïgɔ̈t ë weltuɔc"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/diq.json b/www/wiki/extensions/Translate/i18n/core/diq.json
index 08c7bc31..77c77231 100644
--- a/www/wiki/extensions/Translate/i18n/core/diq.json
+++ b/www/wiki/extensions/Translate/i18n/core/diq.json
@@ -4,22 +4,32 @@
"Erdemaslancan",
"Gorizon",
"Marmase",
- "Mirzali"
+ "Mirzali",
+ "Kumkumuk",
+ "Asmen",
+ "Gırd",
+ "1917 Ekim Devrimi",
+ "Gambollar",
+ "Dılmıc",
+ "Archaeodontosaurus",
+ "Orbot707"
]
},
"translate": "Açarnayış",
"translate-desc": "MediaWiki u vêşi açarnayışan rê [[Special:Translate|Pela xısusi]]",
- "translate-taskui-view": "Mesacan pêro bımocne",
- "translate-taskui-untranslated": "Mesacanê nêaçarniyayeyan bımocne",
- "translate-taskui-optional": "Mesacanê waşteyan bımocne",
- "translate-taskui-acceptqueue": "Tenya mesacê ke ez şenan qebul kerê",
- "translate-taskui-reviewall": "Açarnayışan pêro çım ra raviyarne",
+ "translate-taskui-export-to-file": "Lokal format dı ateberd",
+ "translate-taskui-export-as-po": "Çerxteber açarnayışi ateberd",
"translate-taction-translate": "Açarnayış",
- "translate-taction-proofread": "Çımraraviyarnayış",
+ "translate-taction-proofread": "Çım berze cı",
"translate-taction-lstats": "İstatistikê zıwani",
"translate-taction-mstats": "İstatistikê gruba mesacan",
- "translate-taction-export": "Teber de",
- "translate-page-settings-legend": "Sazi",
+ "translate-taction-export": "Teberdayış",
+ "translate-taction-disabled": "Ena fiil ena wiki dı dewre ra vet a.",
+ "translate-page-no-such-language": "Sılaste zıwan ravërde niyo.",
+ "translate-page-no-such-group": "Sılaste grub ravërde niya.",
+ "translate-page-disabled": "Ena grub dı çerx kerdena zıwani dewre ra vıciyabya. \n\n\nÇıkı:\n<em>$1</em>",
+ "translate-language-disabled": "Açarnayış no zıwan de dewre ra veto.",
+ "translate-page-settings-legend": "Eyari",
"translate-page-group": "Grube",
"translate-page-language": "Zıwan",
"translate-page-limit": "Limit",
@@ -28,28 +38,33 @@
"translate-page-navigation-legend": "Pusula",
"translate-page-showing": "$3 mesacan ra [$1 ra $2] mocniyenê",
"translate-page-showing-all": "$1 {{PLURAL:$1|mesac|mesaci}} asenê.",
+ "translate-page-showing-none": "Mesaco ke bımocneyo çınyo.",
"translate-page-paging-links": "[ $1 ] [ $2 ]",
- "translate-next": "Pela peyêne",
- "translate-prev": "Pela verêne",
+ "translate-next": "Pela bahdoyêne",
+ "translate-prev": "Pela veri",
"translate-page-description-legend": "Heqa grube de melumat",
"translate-page-description-hasoptional-open": "Mesacanê waşteyan bımocne.",
"translate-page-edit": "bıvurne",
- "translate-ext-url": "<hr />Web sitay cı: $1",
"translate-optional": "(opsiyonel)",
"translate-ignored": "(Nê hesıbneyine)",
"translate-edit-title": "\"$1\"i bıvurne",
- "translate-edit-definition": "Şınasiya mesaci",
- "translate-edit-translation": "Çarnayışi",
- "translate-edit-contribute": "iştıraq ke",
- "translate-edit-no-information": "<em>''Wesiqaya nê mesaci çıniya.\nŞıma ke zanê koti ya zi çıtewri no mesac gureniyeno, şıma şenê açarnoğanê binan rê qandê ilawekerdışê wesiqa be nê mesaci ra peşti cı dê.</em>",
+ "translate-edit-definition": "Şınasnayışê mesaci",
+ "translate-edit-translation": "Açarnayışi",
+ "translate-edit-contribute": "iştırak ke",
+ "translate-edit-no-information": "<em>''Wesiqay nê mesaci çıniya.\nŞıma ke zanê kamca ya zi senên no mesac gırweniyeno, şıma şenê tadaoğanê (açarnoğanê) binan rê qandê cıkerdışê wesiqa be nê mesaci ra peşti cı dê.</em>",
"translate-edit-information": "Heqa mesacê ($1) de melumat",
- "translate-edit-in-other-languages": "Zıwananê binan de mesaci",
+ "translate-edit-in-other-languages": "Tayna zıwanan dı mesaci",
+ "translate-edit-tmmatch-source": "Metınê çımey açarnayışi: $1",
"translate-edit-tmmatch": "Zey $1%",
- "translate-edit-askpermission": "İcazet bıgi",
- "translate-magic-pagename": "Açarnayışê MedyaWikiyo hera",
+ "translate-use-suggestion": "Mewcud açarnayışi tewsiye ya bıvurnê",
+ "translate-edit-nopermission": "Açarnayışê mesacan rê heqa icazetê açarnayışi icab kena.",
+ "translate-edit-askpermission": "İcazet bıgê",
+ "exporttranslations": "Açarnayışi ateber dı",
+ "translate-export-form-format": "Format",
+ "translate-magic-pagename": "Açarnayışê MediaWiki yo hera",
"translate-magic-module": "Modul:",
"translate-magic-submit": "Biya",
- "translate-magic-cm-export": "Teber de",
+ "translate-magic-cm-export": "Teberdayış",
"translate-magic-nothing-to-export": "A teber deyaye qırşê çıniyo.",
"translate-magic-cm-to-be": "Bıke",
"translate-magic-cm-current": "Newe resnayış",
@@ -61,41 +76,68 @@
"translate-magic-special": "Leqebê pela xısusiye",
"translate-magic-words": "Çekuyê nuşteyıni",
"translate-magic-namespace": "Nameyê heruna nameyan",
- "translate-magic-notsaved": "Vurnayışa şıma qeyd nêbi !",
+ "translate-magic-notsaved": "Vurnayışê şıma qeyd nêbi!",
"translate-magic-errors": "Reca kem wexteyo ke açarnayış ken ê se {{PLURAL:$1|xetaya|xeteyabê}} cêri bıvurne:",
- "translate-magic-saved": "Qeyd bıyayışa vurnayış da şıma şaniya.",
- "translate-checks-parameters": "{{PLURAL:$2|Parametreya|Parametreyê}} cêri nêkarênê: <strong><nowiki>$1</nowiki></strong>",
+ "translate-magic-saved": "Vırnayışê şıma qeyd bi.",
+ "translate-checks-parameters": "{{PLURAL:$2|Parametreyê cêrêni nêgureniyayê|Parametreyo cêrên nêgureniyayo}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Gıra|$2 Gırey}} ceri berbata: <strong><nowiki>$1</nowiki></strong>",
+ "translate-pref-nonewsletter": "Mı rê bultena xeberanê eposta merışê",
"translate-pref-editassistlang": "Zıwanê peşti:",
- "prefs-translate": "Weçenegê açarnayışi",
+ "prefs-translate": "Opsiyonê çarnayışi",
+ "translate-pref-editassistlang-help": "Virgula abıryaye lista qodanê zıwanan. Nê zıwanan de açarnayışê yew zıwani, şıma wexteyo ke açarnayış kenê aseno. Hesabyaye lista zıwani aitê zıwanê şımaya.",
+ "right-translate-manage": "İdareyê grubanê mesacan",
+ "action-translate-manage": "idareyê grubanê mesacan",
+ "right-translate-import": "Şıma tadayışanê (çarnayışanê) teberê çerxi bıgêrê zerre (import kerê)",
+ "action-translate-import": "Şıma tadayışanê (çarnayışanê) teberê çerxi bıkırışê teber (ixrac kerê)",
+ "right-translate-messagereview": "Açarnayışan bıvinê",
+ "translate-rcfilters-translations": "Açarnayışi",
+ "translate-rcfilters-translations-only-label": "Açarnayışi",
"translate-rc-translation-filter": "Açarnayışê parzûni:",
"translate-rc-translation-filter-no": "Qırşê mekı",
+ "translate-rc-translation-filter-only": "Teyna tadayışan bıasne",
+ "translate-rc-translation-filter-filter": "Açarnayışan parzûn ro ke",
+ "translate-rc-translation-filter-site": "Teyna vurriyayışanê mesacê sita",
"translationstats": "Açarnayışe İstatıstıkan",
"translate-stats-edits": "Vurnayışi",
"translate-stats-users": "Açarnayoği",
- "translate-statsf-start": "Demê destpêkerdışi:",
+ "translate-stats-registrations": "Qeydbiyayışi",
+ "translate-stats-reviews": "Çımraraviyarnayışi",
+ "translate-stats-reviewers": "Vênayoği",
+ "translate-statsf-intro": "Ena form ra şıma şenê basit istatistiki vırazê. Ser u bın limitê herg erci est o.",
+ "translate-statsf-options": "Weçinegê grafiki",
+ "translate-statsf-width": "Hetê pikseli ra herayiye:",
+ "translate-statsf-height": "Hetê pikseli ra dergiye:",
+ "translate-statsf-days": "Hetê roce ra zeman:",
+ "translate-statsf-start": "Tarixê destpêkerdışi:",
+ "translate-statsf-scale": "Melumat:",
"translate-statsf-scale-months": "Aşmi",
- "translate-statsf-scale-weeks": "Heftey",
+ "translate-statsf-scale-weeks": "Hefteyi",
"translate-statsf-scale-days": "Roci",
- "translate-statsf-scale-hours": "Seati",
+ "translate-statsf-scale-hours": "Saeti",
+ "translate-statsf-count": "Senciye:",
+ "translate-statsf-count-edits": "Amarê vurnayışan:",
+ "translate-statsf-count-users": "Açarnayoğê aktifi",
"translate-statsf-count-registrations": "Kerbero newe",
"translate-statsf-count-reviews": "Açarnayışi ercınayış",
+ "translate-statsf-count-reviewers": "Vênayoği",
"translate-statsf-submit": "Verasayış",
- "translate-tag-page-desc": "Açarnayışê pela da [[$2|$1]] wiki",
- "translate-sidebar-alltrans": "Zıwanê bini",
+ "translate-tag-page-desc": "Açarnayışê pela $3 ($4) ra [[$2|$1]] wiki",
+ "translate-sidebar-alltrans": "Zıwananê binan de",
"translations": "Açarnayışi pêro",
"translate-translations-fieldset-title": "Mesac",
"translate-translations-messagename": "Name:",
"translate-translations-project": "Proce:",
"translate-translations-history-short": "s",
"languagestats": "İstatistikê zıwani",
- "languagestats-summary": "Na pele qandê grubanê mesacan rê istatiskanê açarnayışê zıwani mocnena.",
- "languagestats-stats-for": "Qan dê $1 istatistikê açarnayışi ($2).",
- "languagestats-recenttranslations": "Çarnayışe bahdoni",
+ "languagestats-summary": "Ena perre qandê grubanê mesacan rê istatiskanê açarnayışê yew zıwani motnena.",
+ "messagegroupstats-summary": "Ena per istatistikanê grubanê mesacan mocnena",
+ "languagestats-stats-for": "Seba $1 istatistikê açarnayışi ($2).",
+ "languagestats-recenttranslations": "Tadayışê peyêni",
"translate-langstats-incomplete": "Tay istatistiki ena pela dı nêratneyay. İstatistikan mocnayışi rê pela newe kerê.",
- "translate-langstats-expand": "Hera ke",
+ "translate-langstats-expand": "hera kerê",
"translate-langstats-collapse": "teng ke",
- "translate-langstats-expandall": "pêrıne hera ke",
- "translate-langstats-collapseall": "Pêron Kılm ke",
+ "translate-langstats-expandall": "pêrıne hera kerê",
+ "translate-langstats-collapseall": "pêrıne teng kerê",
"translate-language-code": "Kodê zıwani",
"translate-language-code-field-name": "Kodê zıwani:",
"translate-suppress-complete": "Grubanê mesacanê ke pêro açarniyayê bınımne",
@@ -103,7 +145,7 @@
"translate-language": "Zıwan",
"translate-total": "Mesaci",
"translate-untranslated": "Nêaçarniyaye",
- "translate-percentage-complete": "Temambiyayış",
+ "translate-percentage-complete": "Qediyayış",
"translate-percentage-fuzzy": "Vêrde",
"translate-languagestats-overall": "Grubanê mesacan ra pêro piya",
"translate-ls-submit": "İstatistikan bımocne",
@@ -113,84 +155,155 @@
"translate-mgs-group": "Gruba mesacan",
"translate-mgs-submit": "İstatistikan bımocne",
"translate-mgs-column-language": "Zıwan",
- "supportedlanguages": "Zıwanê ke qebulyayê",
- "supportedlanguages-summary": "Na pela de {{SITENAME}} ra listanê zonan de qebul biyeba aseneno,\nhem zi tewr veşi iştiraq kerdaye karbera goreya zoni rezkeno. \nAçarnayoğe ke namey cı gırdo ina zaf iştiraq kerdo. \nNara ke ek namey cı bın de reng asena aktivi yana racbayeyi.",
+ "translate-mgs-totals": "Zıwani heme piya",
+ "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",
- "supportedlanguages-recenttranslations": "Çarnayışe bahdoni",
+ "supportedlanguages-recenttranslations": "Tadayışê peyêni",
"supportedlanguages-count": "Pêro piya $1 {{PLURAL:$1|zon|zoni}}",
"supportedlanguages-activity": "$1: pêro piya $2 {{PLURAL:$2|vurnayış|vurnayışi}} - vurnayışo peyên $3 {{PLURAL:$3|roce|roci}} aver keriya",
"translate-save": "($1) qeyd ke",
"translate-jssti-add": "Listiy miyan fi",
- "managemessagegroups": "İdareyê gruba mesacan",
+ "managemessagegroups": "Hetenayışê gruba mesacan",
"translate-smg-notallowed": "Semeda ena herketi rê icazeta sima cina.",
- "translate-smg-nochanges": "Theba yo ke bivuriyo cino.",
- "translate-smg-submit": "Semeda vurnayisa çımra ravyarnışi rê bırıs",
+ "translate-smg-nochanges": "Theba yo kı bıvuriyo çıni yo.",
+ "translate-smg-submit": "Averşiyaene rê vırnayışan bırışe",
"translate-manage-import-diff": "Mesace $1 | hereket: $2",
"translate-manage-import-new": "$1 ra yew mesaco newe",
"translate-manage-import-deleted": "Mesaco besternaye: $1",
"translate-manage-action-import": "Azare de",
"translate-manage-action-conflict": "A zereke u FUZZY nışan bıke",
- "translate-manage-action-ignore": "Pey gos bıqe",
+ "translate-manage-action-ignore": "Mehesıbne",
"translate-manage-submit": "Kay fi",
"translate-manage-import-ok": "Dekerdaye:$1",
"translate-manage-import-done": "Dekerdayış biyo temem",
- "importtranslations": "Açarnayışa a zereke",
+ "importtranslations": "Şıma tadayışan (çarnayışan) bıkırışê teber",
"translate-import-from-local": "Lokal dosya bar ke:",
- "translate-import-load": "Dosya barkerê",
+ "translate-import-load": "Dosya bar kı",
"translate-import-err-dl-failed": "Dosya niamiye :\n$1",
- "translate-import-err-ul-failed": "Dosya ber kerdış xırab gurweyi",
+ "translate-import-err-ul-failed": "Barkerdışê dosya nêbi",
"translate-js-summary": "Xulasa:",
"translate-js-save": "Qeyd ke",
- "translate-js-support": "Çiyê pers bıke",
+ "translate-js-skip": "Ravêr peyêni",
+ "translate-js-history": "Verorê çarnayışi",
+ "translate-js-support": "Bıperse",
"translate-gs-pos": "Ca",
"translate-gs-code": "Kod",
+ "translate-gs-continent": "Qıta",
"translate-gs-speakers": "Qısekari",
"translate-gs-score": "Skor",
"translate-gs-multiple": "Zafının",
- "translate-gs-count": "Tene",
+ "translate-gs-count": "Amar",
"translate-gs-total": "Pêro piya",
+ "translate-gs-avgscore": "Ort. skor",
"translate-documentation-language": "Pelgekerdışê mesacan",
+ "translate-searchprofile": "Açarnayışi",
+ "translate-searchprofile-tooltip": "Heme açarnayışan de cıgeyre",
+ "translate-search-languagefilter": "Gorey zıwani filtre ke:",
"translate-search-nofilter": "Bê filtre",
- "translate-messagereview-submit": "Qebul bıkê",
- "translate-messagereview-progress": "Oyo qebul beno",
- "translate-messagereview-done": "Qebuliya",
+ "log-name-translationreview": "Qeydê çımraviyarnayışê çarnayışan",
+ "group-translate-sandboxed": "Açarnayoğê tesdiqnêbiyayey",
+ "group-translate-sandboxed-member": "{{GENDER:$1|açarnayoğê tesdiqnêbiyayey}}",
+ "right-translate-sandboxmanage": "İdareya qumdora karberi",
+ "action-translate-sandboxmanage": "idareyê qumdora karberi",
+ "translate-workflow-state-": "(eyar ke)",
"translate-workflowstatus": "Weziyet: $1",
"translate-workflow-set-doing": "Sazêno...",
"translate-stats-workflow": "Weziyet",
- "translate-dynagroup-recent-label": "Çarnayışe bahdoni",
- "translate-dynagroup-recent-desc": "Na gomeya mesaci, na zıwan de açarnayışa hemın asneno. Wezifa çımraravyarnayışi rê zaf weş o.",
+ "translate-workflowgroup-label": "Derışê weziyetê kari",
+ "translate-dynagroup-recent-label": "Tadayışê peyêni",
+ "translate-dynagroup-recent-desc": "Na koma mesacan nê zıwani de heme açarnayışanê neweyan mocnena. Wezifaya çımraravyarnayışi rê zaf hewla.",
+ "translate-dynagroup-additions-label": "Cıbiyayışê peyêni",
+ "translate-msggroupselector-projects": "Gruba mesacan",
+ "translate-msggroupselector-search-placeholder": "Grube bıvêne",
"translate-msggroupselector-search-all": "Pêro",
+ "translate-msggroupselector-search-recent": "Peyên",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|bıngrube|bıngrubi}}",
+ "tux-languageselector": "Bıçarne era",
"tux-tab-all": "Pêro",
- "tux-tab-untranslated": "Nêaçerneyaye",
- "tux-tab-translated": "Açariyayo",
- "tux-status-translated": "Açariyayo",
+ "tux-tab-untranslated": "Nêaçarniyaye",
+ "tux-tab-outdated": "Vêrde",
+ "tux-tab-translated": "Açarniyaye",
+ "tux-tab-unproofread": "Nêvêniyayo",
+ "tux-edit": "Bıvurne",
+ "tux-status-optional": "Keyfi",
+ "tux-status-fuzzy": "Vêrde",
+ "tux-status-proofread": "Vêniya",
+ "tux-status-translated": "Açarniyaye",
+ "tux-status-saving": "Qeyd beno...",
+ "tux-status-unsaved": "Qeyd nêbiyo",
+ "tux-save-unknown-error": "Yew xetay ke nêşınasiyena biye.",
+ "tux-editor-placeholder": "Açarnayışê şıma",
+ "tux-editor-editsummary-placeholder": "Xulasaya hesabiyayiye",
+ "tux-editor-paste-original-button-label": "Çıme meyini pronı",
+ "tux-editor-discard-changes-button-label": "Vurriyayışan vece",
+ "tux-editor-save-button-label": "Açarnayışi qeyd ke",
+ "tux-editor-skip-button-label": "Ravêr peyêni",
+ "tux-editor-cancel-button-label": "Bıtexelne",
+ "tux-editor-confirm-button-label": "Açarnayışi tesdiq ke",
+ "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 cı kerê",
+ "tux-editor-suggestions-title": "Teklifi",
+ "tux-editor-in-other-languages": "Zıwananê binan de",
+ "tux-editor-need-more-help": "Hewna peşti lazıma?",
+ "tux-editor-ask-help": "Tayêna vêşi melumat bıperse",
+ "tux-editor-tm-match": "Zey $1%",
+ "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": "Mevêne",
+ "tux-editor-message-desc-less": "Şenık bıvêne",
"tux-editor-clear-translated": "Açarnayeyan bınımne",
- "tux-editor-proofreading-mode": "Çımraraviyarnayış",
+ "tux-editor-proofreading-mode": "Çım berze cı",
"tux-editor-translate-mode": "Liste",
"tux-editor-proofreading-hide-own-translations": "Çarnayışanê xo nişan bınımne",
"tux-editor-proofreading-show-own-translations": "Çarnayışanê xo nişan bıde",
- "tux-proofread-action-tooltip": "Çımra ravyarde nışan ke",
+ "tux-proofread-action-tooltip": "Çım ra raviyarnaey nışan ke",
"tux-proofread-edit-label": "Bıvurne",
"tux-editor-page-mode": "Pele",
- "tux-editor-outdated-warning": "Na açarnayış rë rocane icab keno.",
+ "tux-editor-outdated-warning": "Rocanebiyayışê nê açarnayışi beno ke lazım bo.",
"tux-editor-outdated-warning-diff-link": "Ferqi bıvin",
"tux-editor-doc-editor-placeholder": "Mesaca dokumani",
"tux-editor-doc-editor-save": "Dokumani qeyd ke",
"tux-editor-doc-editor-cancel": "Bıtexelne",
- "tux-empty-list-other-link": "Mesaca hemın bıvin",
- "tux-editor-close-tooltip": "Racnê",
- "tux-editor-expand-tooltip": "Hera ke",
+ "tux-messagetable-more-messages": "$1 tayêna {{PLURAL:$1|mesac|mesaci}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Mesac bar beno|Mesaci bar benê}}...",
+ "tux-message-filter-placeholder": "Lista parzûni",
+ "tux-message-filter-result": "$1 de Qandë \"$2\" {{PLURAL:$1|netice |neticey}} vineya yê",
+ "tux-message-filter-advanced-button": "Cıgeyrayışo hera",
+ "tux-message-filter-optional-messages-label": "Mesacê keyfi",
+ "tux-proofread-translated-by-self": "Çarnayışê şıma",
+ "tux-empty-list-all": "Ena gruba mesacan venga",
+ "tux-empty-list-all-guide": "Qandê açarnayışi yewna gruba mesaci weçine",
+ "tux-empty-list-translated": "Mesacê çarnaey çıniyê",
+ "tux-empty-list-translated-guide": "Şıma şenê çarnayış de yardım kerê",
+ "tux-empty-list-translated-action": "Açarnayış",
+ "tux-empty-no-messages-to-display": "Asayışê mesacan çıniyo.",
+ "tux-empty-show-optional-messages": "Mesacanê weçıniyayan bımotne",
+ "tux-empty-no-outdated-messages": "Mesacê kehani çıniyê",
+ "tux-empty-nothing-to-proofread": "Çım ra viyarnayışi rê theba çıniyo.",
+ "tux-empty-you-can-help-providing": "Açarnayışa şıma şenê desteg bıdê marê.",
+ "tux-empty-nothing-new-to-proofread": "Qandé barıyayışi theba çıni yo",
+ "tux-empty-you-can-review-already-proofread": "Tereftê tayna karbera ra açarnayışa şıma şenê kontrol kerê",
+ "tux-empty-list-other": "Açarniyaye theba çıni yo",
+ "tux-empty-list-other-guide": "Şıma şenê çım berzê açarnayışanê mewcudan pheşti bıdê",
+ "tux-empty-list-other-action": "Vênayışê açarnayışan",
+ "tux-empty-list-other-link": "Heme mesacan bımocne",
+ "tux-editor-close-tooltip": "Kip ke",
+ "tux-editor-expand-tooltip": "Hera kerê",
"tux-editor-collapse-tooltip": "Teng ke",
+ "tux-editor-message-tools-show-editor": "Wiki-Editor de bımocne",
"tux-editor-message-tools-history": "Tarix",
"tux-editor-message-tools-delete": "Bestere",
"tux-editor-message-tools-translations": "Heme açarnayışi",
"tux-editor-loading": "Bar beno...",
"translate-search-more-languages-info": "$1 deha {{PLURAL:$1|zon|zoni}}",
"translate-statsbar-tooltip": "%$1 açarneya, %$2 weyneya",
- "translate-statsbar-tooltip-with-fuzzy": "$1% açarneya, $2% weyneya, $3% kehano"
+ "translate-statsbar-tooltip-with-fuzzy": "$1% açarneya, $2% weyneya, $3% kehano",
+ "translate-search-more-groups-info": "$1 tayêna {{PLURAL:$1|grube|grubi}}",
+ "translate-ulsdep-title": "Vıraziyen nêbı"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/dsb.json b/www/wiki/extensions/Translate/i18n/core/dsb.json
index a38468ae..30b502f6 100644
--- a/www/wiki/extensions/Translate/i18n/core/dsb.json
+++ b/www/wiki/extensions/Translate/i18n/core/dsb.json
@@ -9,11 +9,6 @@
},
"translate": "Pśełožyś",
"translate-desc": "[[Special:Translate|Specialny bok]] za pśełožowanje MediaWiki a druge",
- "translate-taskui-view": "Wšykne powěźeńki pokazaś",
- "translate-taskui-untranslated": "Njepśełožone powěźeńki pokazaś",
- "translate-taskui-optional": "Opcionalne powěźeńki pokazaś",
- "translate-taskui-acceptqueue": "Jano powěźeńki, kótarež mógu ako pśeglědane markěrowaś",
- "translate-taskui-reviewall": "Wšykne pśełožki pśeglědaś",
"translate-taskui-export-to-file": "Do systemowego formata eksportěrowaś",
"translate-taskui-export-as-po": "Za pśełožowanje offline eksportěrowaś",
"translate-taction-translate": "Pśełožyś",
@@ -42,7 +37,6 @@
"translate-page-description-hasoptional": "Toś ta zdźěleńska kupka wopśimujo opcionalne powěźeńki.\nOpcionalne powěźeńki by měli se jano pśełožowaś, jolic twója rěc ma wósebnu pótrjebu za nje,\nkaž na pśikład njewužywanje proznych znamuškow abo transliteraciju swójskich mjenjow. $1",
"translate-page-description-hasoptional-open": "Opcionalne powěźeńki pokazaś.",
"translate-page-edit": "wobźěłaś",
- "translate-ext-url": "<hr />Websedło: $1",
"translate-optional": "(opcionalny)",
"translate-ignored": "(ignorěrowany)",
"translate-edit-title": "„$1“ wobźěłaś",
@@ -52,9 +46,7 @@
"translate-edit-no-information": "<em>Toś ta powěsć njama dokumentaciju. Jolic wěš, źož abo kak toś ta powěsć se wužywa, móžoš drugim pśełožowarjam pomagaś, z tym až dokumentaciju k toś tej powěsći pśidawaš.</em>",
"translate-edit-information": "Informacije wó powěsći ($1)",
"translate-edit-in-other-languages": "Powěsć w drugich rěcach",
- "translate-edit-committed": "Aktualny pśełožk w software",
"translate-edit-warnings": "Warnowanja wó njedopołnych pśełožkach",
- "translate-edit-tmsugs": "Naraźenja z pśełožowańskego spomnjeśa",
"translate-edit-tmmatch-source": "Žrědłowy tekst pśełožka: $1",
"translate-edit-tmmatch": "$1 % makanja",
"translate-use-suggestion": "Aktualny pśełožk pśez toś to naraźenje wuměniś",
@@ -137,7 +129,6 @@
"translate-statsf-language": "Lisćina rěcnych kodow wótźělonych pśez komu:",
"translate-statsf-group": "Lisćina kupkowych kodow wótźělonych pśez komu:",
"translate-statsf-submit": "Pśeglěd",
- "translate-tag-category": "Pśełožujobne boki",
"translate-tag-page-desc": "Pśełožk wikijowego boka [[$2|$1]].",
"translate-sidebar-alltrans": "W drugich rěcach",
"translations": "Wšykne pśełožki",
@@ -211,7 +202,6 @@
"translate-manage-toolong": "Maksimalny pśeźěłowański cas $1 {{PLURAL:$1|sekundy|sekundowu|sekundow|sekundow}} jo pśebyty.\nPšosym wótpósćel formular znowego, aby z pśeźěłanim pókšacował.",
"translate-manage-import-summary": "Nowa wersija importěrujo se z eksternego žrědła",
"translate-manage-conflict-summary": "Nowa wersija importěrujo se z eksternego žrědła.\nPšosym pśeglědaś.",
- "translate-manage-fuzzy-summary": "Definicija powěźeńki jo se změniła",
"translate-manage-submit": "Wuwjasć",
"translate-manage-intro-other": "Dołojce jo lisćina pśełožkowych změnow w rěcy $1.\nPšosym pśeglědaj změny a wubjeŕ akciju, kótaruž coš za kuždy pśełožk cyniś.\nJolic ignorěrujoš změny, jo toś ta akcija jano nachylna.",
"translate-manage-import-ok": "Importěrowany: $1",
@@ -229,9 +219,7 @@
"translate-js-summary": "Zespominanje:",
"translate-js-save": "Składowaś",
"translate-js-next": "Pśiducu powěźeńku składowaś a wocyniś",
- "translate-js-nonext": "To jo było slědna powěźeńka na tos tom boku.",
"translate-js-skip": "K pśiducej powěźeńce skócyś",
- "translate-js-save-failed": "Składowanje njejo se raźiło. Pšosym daj toś tu zmólku k wěsći.",
"translate-js-history": "Pśełožowańska historija",
"translate-js-support": "Pšašaś se",
"translate-js-support-title": "Pšos wó pomoc, jolic njejo dosć informacijow, aby se toś ta powěźeńka pšawje pśełožyła.",
@@ -250,19 +238,6 @@
"translate-searchprofile-tooltip": "We wšych pśełožkach pytaś",
"translate-search-languagefilter": "Pó rěcy filtrowaś:",
"translate-search-nofilter": "Žedne filtrowanje",
- "translate-messagereview-submit": "Ako pśeglědany markěrowaś",
- "translate-messagereview-progress": "Markěrujo se ako pśeglědany...",
- "translate-messagereview-failure": "Markěrowanje ako pśeglědany njejo se raźiło: $1",
- "translate-messagereview-done": "Pśeglědany",
- "translate-messagereview-reviews": "Wót {{PLURAL:$1|jadnogo wužywarja|$1 wužywarjowu|$1 wužywarjow}} pśeglědany",
- "translate-messagereview-reviewswithyou": "Wót {{PLURAL:$1|tebje|$1 wužywarjowu inkluziwnje tebje|$1 wužywarjow inkluziwnje tebje}} pśeglědany",
- "api-error-invalidrevision": "Pśełožk njejo se namakał",
- "api-error-unknownmessage": "Powěźeńka njejo se namakała",
- "api-error-fuzzymessage": "Pśełožk jo ako zestarjony markěrowany",
- "api-error-owntranslation": "Njamóžoš swójske pśełožki ako pśeglědane markěrowaś",
- "translate-messagereview-no-fuzzy": "Zestarjone pśełožki njedaju se ako pśeglědane markěrowaś.",
- "translate-messagereview-no-own": "Njamóžoš swójske pśełožki ako pśeglědane markěrowaś.",
- "translate-messagereview-doit": "Toś ten pśełožk ako pśeglědany markěrowaś",
"log-name-translationreview": "Protokol pśełožkowych kontrolow",
"log-description-translationreview": "Protokol wšych kontrolow k pśełožkam a zdźěleńskim kupkam.",
"logentry-translationreview-message": "$1 jo pśełožk $3 ako pśeglědany {{GENDER:$2|markěrował|markěrowała}}",
@@ -284,7 +259,6 @@
"translate-dynagroup-recent-desc": "Toś ta zdźěleńska kupka pokazujo wšykne aktualne pśełožki do toś teje rěcy.\nJo nejwužytnjej za pśeglědowańske nadawki.",
"translate-dynagroup-additions-label": "Aktualne dodanki",
"translate-dynagroup-additions-desc": "Toś ta powěsćowa kupka pokazujo nowe a změnjone pówěźeńki.",
- "translate-gethelp": "Pomoc",
"translate-msggroupselector-projects": "Zdźěleńska kupka",
"translate-msggroupselector-search-placeholder": "Kupki pśepytaś",
"translate-msggroupselector-search-all": "Wšykne",
diff --git a/www/wiki/extensions/Translate/i18n/core/dty.json b/www/wiki/extensions/Translate/i18n/core/dty.json
index 95dbc3bb..f2e1c7b0 100644
--- a/www/wiki/extensions/Translate/i18n/core/dty.json
+++ b/www/wiki/extensions/Translate/i18n/core/dty.json
@@ -2,13 +2,13 @@
"@metadata": {
"authors": [
"रमेश सिंह बोहरा",
- "राम प्रसाद जोशी"
+ "राम प्रसाद जोशी",
+ "Nirajan pant"
]
},
- "translate-edit-no-information": "''यै रैबारको दस्तावेजीकरण (documentation) छैन''\n''यदि तम यो सन्देश कहाँ अथवा कसरी प्रयोग गरिन्छ भन्ने कुरडी जाणन्छौ भन्या तमीले यैको दस्तावेजीकरण थप गरी अरु अनुवादकहरूलाई सहयोग दिन सक्द्याछौ ।''",
+ "translate-edit-no-information": "<em>यै रैबारको दस्तावेजीकरण नाइथिन।\nयदि तम यो सन्देश काँ और कस्याँ प्रयोग अरीन्छ भण्णेइ कुरडी जाणन्छौ भँण्या तम येइ सन्देश को दस्तावेजीकरण थपीबर और अनुवादकअन लाई मद्दत अरी सकन्छौ।</em>",
"translate-edit-information": "($1) रैबारका बारेमी जानकारी",
"translate-edit-in-other-languages": "रैबार अन्य भाषाहरूमी",
- "translate-edit-tmsugs": "अनुवाद स्मृतिबठे सुझावहरू",
"translate-stats-edits": "सम्पादनहरू",
"translate-stats-users": "अनुवादकहरू",
"translate-statsf-count-users": "सक्रिय अनुवादकहरू",
diff --git a/www/wiki/extensions/Translate/i18n/core/ee.json b/www/wiki/extensions/Translate/i18n/core/ee.json
index 442b56a3..0a0c7a4e 100644
--- a/www/wiki/extensions/Translate/i18n/core/ee.json
+++ b/www/wiki/extensions/Translate/i18n/core/ee.json
@@ -45,7 +45,6 @@
"supportedlanguages-recenttranslations": "gɔmeɖeɖe yeyewo",
"translate-save": "Dzra ($1) ɖo",
"translate-manage-import-new": "Du yeye $1",
- "translate-manage-fuzzy-summary": "Gɔmeɖeɖea trɔ",
"translate-manage-submit": "Wɔe",
"translate-manage-import-done": "Wo wɔ wokatã vɔ!"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/el.json b/www/wiki/extensions/Translate/i18n/core/el.json
index a6cdcce2..6528eba9 100644
--- a/www/wiki/extensions/Translate/i18n/core/el.json
+++ b/www/wiki/extensions/Translate/i18n/core/el.json
@@ -13,16 +13,14 @@
"Omnipaedista",
"Protnet",
"ZaDiak",
- "Περίεργος"
+ "Περίεργος",
+ "KATRINE1992",
+ "Nikosgranturismogt",
+ "KATRINE1993"
]
},
"translate": "Μεταφράστε",
"translate-desc": "[[Special:Translate|Ειδική σελίδα]] για τη μετάφραση του MediaWiki και άλλων",
- "translate-taskui-view": "Προβολή όλων των μηνυμάτων",
- "translate-taskui-untranslated": "Εμφάνιση αμετάφραστων μηνυμάτων",
- "translate-taskui-optional": "Εμφάνιση προαιρετικών μηνυμάτων",
- "translate-taskui-acceptqueue": "Μόνο μηνύματα που μπορώ να μαρκάρω ως θεωρημένα",
- "translate-taskui-reviewall": "Θεώρηση όλων των μεταφράσεων",
"translate-taskui-export-to-file": "Εξαγωγή στην εγγενή μορφή",
"translate-taskui-export-as-po": "Εξαγωγή για μετάφραση εκτός σύνδεσης",
"translate-taction-translate": "Μετάφραση",
@@ -52,7 +50,6 @@
"translate-page-description-hasoptional": "Αυτή η ομάδα μηνυμάτων περιέχει προαιρετικά μηνύματα.\nΤα προαιρετικά μηνύματα θα πρέπει να μεταφράζονται μόνο όταν η γλώσσα σας έχει ειδικές απαιτήσεις όπως τη μη χρήση κενών ή τη μεταγλώττιση κύριων ονομάτων. $1",
"translate-page-description-hasoptional-open": "Εμφάνιση προαιρετικών μηνυμάτων.",
"translate-page-edit": "επεξεργασία",
- "translate-ext-url": "<hr />Ιστοχώρος: $1",
"translate-optional": "(προαιρετικά)",
"translate-ignored": "(αγνοημένα)",
"translate-edit-title": "Επεξεργασία «$1»",
@@ -62,14 +59,17 @@
"translate-edit-no-information": "<em>Αυτό το μήνυμα δεν έχει τεκμηρίωση. \nΑν γνωρίζετε πού ή πώς χρησιμοποιείται αυτό το μήνυμα, μπορείτε να βοηθήσετε άλλους μεταφραστές προσθέτοντας τεκμηρίωση σε αυτό.</em>",
"translate-edit-information": "Πληροφορίες σχετικά με το μήνυμα ($1)",
"translate-edit-in-other-languages": "Μήνυμα σε άλλες γλώσσες",
- "translate-edit-committed": "Τρέχουσα μετάφραση στο λογισμικό",
"translate-edit-warnings": "Προειδοποιήσεις για ημιτελείς μεταφράσεις",
- "translate-edit-tmsugs": "Προτάσεις από μνήμες μετάφρασης και μηχανική μετάφραση",
"translate-edit-tmmatch-source": "Πηγαίο κείμενο μετάφρασης: $1",
"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": "Μετάφραση εκτεταμένου MediaWiki",
"translate-magic-help": "Μπορείτε να μεταφράσετε ψευδώνυμα ειδικών σελίδων, μαγικές λέξεις και ονοματοχώρους.\n\nΤα ψευδώνυμα ειδικών σελίδων και οι μαγικές λέξεις μπορούν να έχουν πολλαπλές μεταφράσεις.\nΟι μεταφράσεις χωρίζονται με κόμμα (,).\nΟι ονοματοχώροι μπορούν να έχουν μόνο μία μετάφραση.\n\nΟι μεταφράσεις σελίδων συζήτησης του ονοματοχώρου του εγχειρήματος <code>$1 talk</code> μπορεί να είναι περίπλοκες. Η μεταβλητή <code>$1</code> αντικαθίσταται με το όνομα του ιστοτόπου (για παράδειγμα <code>{{ns:project_talk}}</code>).\n\nΑν δεν είναι δυνατόν στη γλώσσα σας να σχηματίσετε έγκυρη έκφραση χωρίς να αλλάξετε το όνομα του ιστοτόπου, παρακαλούμε επικοινωνήστε μαζί μας στην [[Support|Υποστήριξη]].\n\nΠρέπει να είστε στην ομάδα των μεταφραστών για να αποθηκεύσετε τις αλλαγές.\nΟι αλλαγές δεν αποθηκεύονται μέχρι να κάνετε κλικ στο κουμπί αποθήκευσης παρακάτω.",
"translate-magic-module": "Λειτουργική μονάδα:",
@@ -88,7 +88,7 @@
"translate-magic-namespace": "Ονομασίες ονοματοχώρων",
"translate-magic-notsaved": "Η αλλαγή σας δεν αποθηκεύθηκε!",
"translate-magic-errors": "Παρακαλώ διορθώστε {{PLURAL:$1|το ακόλουθο σφάλμα|τα ακόλουθα σφάλματα}} στις μεταφράσεις:",
- "translate-magic-saved": "Οι αλλαγές σας αποθηκεύτηκαν επιτυχώς.",
+ "translate-magic-saved": "Οι αλλαγές σας αποθηκεύτηκαν.",
"translate-checks-parameters": "{{PLURAL:$2|Η ακόλουθη παράμετρος δεν χρησιμοποιείται|Οι ακόλουθες παράμετροι δεν χρησιμοποιούνται}}: <strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Η ακόλουθη παράμετρος|Οι ακόλουθες παράμετροι}} είναι {{PLURAL:$2|άγνωστη|άγνωστες}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Υπάρχει ακανόνιστη ποσότητα {{PLURAL:$2|παρενθέσεων|παρενθέσεων}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -115,7 +115,16 @@
"right-translate-import": "Εισαγωγή μεταφράσεων που έγιναν εκτός σύνδεσης",
"action-translate-import": "εισαγωγή μεταφράσεων που έγιναν εκτός σύνδεσης",
"right-translate-messagereview": "Θεώρηση μεταφράσεων",
+ "action-translate-messagereview": "θεωρήσετε μεταφράσεις",
"right-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": "Προσωποποιημένα μηνύματα στο MediaWiki",
"translate-rc-translation-filter": "Φιλτράρισμα μεταφράσεων:",
"translate-rc-translation-filter-no": "Να μη γίνει τίποτα",
"translate-rc-translation-filter-only": "Εμφάνιση μόνο των μεταφράσεων",
@@ -147,7 +156,6 @@
"translate-statsf-language": "Λίστα κωδικών γλωσσών χωρισμένη με κόμματα:",
"translate-statsf-group": "Λίστα κωδικών ομάδων χωρισμένη με κόμματα:",
"translate-statsf-submit": "Προεπισκόπηση",
- "translate-tag-category": "Σελίδες προς μετάφραση",
"translate-tag-page-desc": "Μετάφραση της σελίδας wiki [[$2|$1]] από $3 ($4).",
"translate-sidebar-alltrans": "Σε άλλες γλώσσες",
"translations": "Όλες οι μεταφράσεις",
@@ -179,6 +187,7 @@
"translate-untranslated": "Αμετάφραστα",
"translate-percentage-complete": "Ολοκλήρωση",
"translate-percentage-fuzzy": "Παρωχημένα",
+ "translate-percentage-proofread": "Ελέγχθηκε",
"translate-languagestats-overall": "Όλες οι ομάδες μηνυμάτων μαζί",
"translate-ls-submit": "Εμφάνιση στατιστικών",
"translate-ls-column-group": "Ομάδα μηνυμάτων",
@@ -189,16 +198,18 @@
"translate-mgs-noempty": "Να μην εμφανιστούν οι γλώσσες για τις οποίες δεν έχει γίνει καμιά μετάφραση",
"translate-mgs-submit": "Εμφάνιση στατιστικών",
"translate-mgs-column-language": "Γλώσσα",
- "translate-mgs-totals": "Όλες οι γλώσσες μαζί",
+ "translate-mgs-totals": "{{PLURAL:$1|Όλη η $1 γλώσσα|Όλες οι $1 γλώσσες}} μαζί",
"translate-mgs-invalid-group": "Η καθορισμένη ομάδα $1 δεν υπάρχει.",
"translate-mgs-nothing": "Τίποτε προς εμφάνιση για τις στατιστικές που ζητήθηκαν.",
"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|γλώσσα|γλώσσες}} συνολικά.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|επεξεργασία|επεξεργασίες}} - τελευταία επεξεργασία $3 {{PLURAL:$3|day|days}} πριν",
+ "abusefilter-edit-builder-vars-translate-source-text": "Αρχικό κείμενο μεταφραστικής ενότητας",
"translate-save": "Αποθήκευση ($1)",
"translate-jssti-add": "Προσθήκη στην λίστα",
"managemessagegroups": "Διαχείριση ομάδας μηνυμάτων",
@@ -222,7 +233,6 @@
"translate-manage-toolong": "Έγινε υπέρβαση του μέγιστου χρόνου διεργασίας που είναι $1 {{PLURAL:$1|δευτερόλεπτο|δευτερόλεπτα}}.\nΠαρακαλούμε υποβάλετε ξανά την φόρμα για να συνεχιστεί η διεργασία.",
"translate-manage-import-summary": "Γίνεται εισαγωγή νέας έκδοσης από εξωτερική πηγή.",
"translate-manage-conflict-summary": "Γίνεται εισαγωγή νέας έκδοσης από εξωτερική πηγή. Παρακαλούμε να ελεγχθεί.",
- "translate-manage-fuzzy-summary": "Ο ορισμός του μηνύματος έχει αλλάξει",
"translate-manage-submit": "Εκτέλεση",
"translate-manage-intro-other": "Παρακάτω βρίσκεται η λίστα με τις αλλαγές στη μετάφραση στη γλώσσα $1.\nΠαρακαλούμε θεωρήστε τις αλλαγές και επιλέξτε ποια ενέργεια θέλετε να γίνει για κάθε ενημέρωση.\nΕάν επιλέξετε αγνόηση των αλλαγών, η συγκεκριμένη ενέργεια είναι απλώς προσωρινή.",
"translate-manage-import-ok": "Εισήχθει: $1",
@@ -231,7 +241,7 @@
"translate-import-from-local": "Ανέβασμα τοπικού αρχείου:",
"translate-import-load": "Ανέβασμα αρχείου",
"translate-import-err-dl-failed": "Αδυναμία λήψης του αρχείου: $1",
- "translate-import-err-ul-failed": "Το ανέβασμα του αρχείου δεν ήταν επιτυχές",
+ "translate-import-err-ul-failed": "Το ανέβασμα του αρχείου απέτυχε",
"translate-import-err-invalid-title": "Το όνομα του αρχείου <nowiki>$1</nowiki> δεν ήταν έγκυρο.",
"translate-import-err-no-such-file": "Το αρχείο <nowiki>$1</nowiki> δεν υπάρχει ή δεν έχει φορτωθεί τοπικά.",
"translate-import-err-stale-group": "Η ομάδα μηνυμάτων στην οποία ανήκει αυτό το αρχείο δεν υπάρχει.",
@@ -240,9 +250,7 @@
"translate-js-summary": "Σύνοψη:",
"translate-js-save": "Αποθήκευση",
"translate-js-next": "Αποθήκευση και άνοιγμα του επόμενου",
- "translate-js-nonext": "Αυτό ήταν το τελευταίο μήνυμα σε αυτήν τη σελίδα.",
"translate-js-skip": "Μετάβαση στο επόμενο",
- "translate-js-save-failed": "Η αποθήκευση απέτυχε. Παρακαλούμε αναφέρετε αυτό το σφάλμα.",
"translate-js-history": "Ιστορικό μετάφρασης",
"translate-js-support": "Κάντε ερώτηση",
"translate-js-support-title": "Ζητήστε βοήθεια εάν δεν υπάρχουν αρκετές πληροφορίες για να μεταφράστει σωστά αυτό το μήνυμα.",
@@ -259,21 +267,9 @@
"translate-documentation-language": "Τεκμηρίωση μηνύματος",
"translate-searchprofile": "Μεταφράσεις",
"translate-searchprofile-tooltip": "Αναζήτηση από όλες τις μεταφράσεις",
+ "translate-searchprofile-note": "Περισσότερες επιλογές αναζήτησης είναι διαθέσιμες στην [$1 αναζήτηση μετάφρασης].",
"translate-search-languagefilter": "Φιλτράρισμα με βάση τη γλώσσα:",
"translate-search-nofilter": "Χωρίς φιλτράρισμα",
- "translate-messagereview-submit": "Σήμανση ως θεωρημένο",
- "translate-messagereview-progress": "Γίνεται σήμανση ως θεωρημένο...",
- "translate-messagereview-failure": "Η σήμανση ως θεωρημένο απέτυχε: $1",
- "translate-messagereview-done": "Θεωρημένο",
- "translate-messagereview-reviews": "Θεωρήθηκε από {{PLURAL:$1|ένα χρήστη|$1 χρήστες}}",
- "translate-messagereview-reviewswithyou": "Θεωρήθηκε από {{PLURAL:$1|σας|$1 χρήστες συμπεριλαμβανομένων κι σας}}",
- "api-error-invalidrevision": "Δεν βρέθηκε η μετάφραση",
- "api-error-unknownmessage": "Δεν βρέθηκε το μήνυμα",
- "api-error-fuzzymessage": "Η μετάφραση σημάνθηκε ως ασαφής",
- "api-error-owntranslation": "Δεν είναι δυνατό να θεωρήσετε τις δικές σας μεταφράσεις",
- "translate-messagereview-no-fuzzy": "Ασαφείς μεταφράσεις δεν μπορούν να θεωρηθούν.",
- "translate-messagereview-no-own": "Δεν μπορείτε να θεωρήσετε τις δικές σας μεταφράσεις.",
- "translate-messagereview-doit": "Σήμανση αυτής της μετάφρασης ως θεωρημένης.",
"log-name-translationreview": "Αρχείο καταγραφής θεωρήσεων μεταφράσεων",
"log-description-translationreview": "Αρχείο καταγραφής όλων των θεωρήσεων σε μεταφράσεις και ομάδες μηνυμάτων.",
"logentry-translationreview-message": "{{GENDER:$2|Ο|Η}} $1 θεώρησε τη μετάφραση $3",
@@ -295,7 +291,6 @@
"translate-dynagroup-recent-desc": "Αυτή η ομάδα μηνυμάτων δείχνει όλες τις πρόσφατες μεταφράσεις σε αυτήν τη γλώσσα.\nΠάρα πολύ χρήσιμο για εργασίες θεώρησης.",
"translate-dynagroup-additions-label": "Πρόσφατες προσθήκες",
"translate-dynagroup-additions-desc": "Αυτή η ομάδα μηνυμάτων εμφανίζει νέα και αλλαγμένα μηνύματα.",
- "translate-gethelp": "Βοήθεια",
"translate-msggroupselector-projects": "Ομάδα μηνυμάτων",
"translate-msggroupselector-search-placeholder": "Αναζήτηση ομάδων",
"translate-msggroupselector-search-all": "Όλα",
@@ -309,19 +304,22 @@
"tux-tab-unproofread": "Αθεώρητα",
"tux-edit": "Επεξεργασία",
"tux-status-optional": "Προαιρετικά",
- "tux-status-fuzzy": "Παρωχημένα",
+ "tux-status-fuzzy": "Παρωχημένο",
"tux-status-proofread": "Θεωρημένο",
"tux-status-translated": "Μεταφρασμένο",
"tux-status-saving": "Αποθήκευση...",
"tux-status-unsaved": "Μη αποθηκευμένα",
+ "tux-save-unknown-error": "Προέκυψε άγνωστο σφάλμα.",
"tux-editor-placeholder": "Η μετάφρασή σας",
+ "tux-editor-editsummary-placeholder": "Προαιρετική σύνοψη",
"tux-editor-paste-original-button-label": "Επικόλληση πηγαίου κειμένου",
"tux-editor-discard-changes-button-label": "Απόρριψη των αλλαγών",
"tux-editor-save-button-label": "Αποθήκευση μετάφρασης",
"tux-editor-skip-button-label": "Προχωρήστε στο επόμενο",
"tux-editor-cancel-button-label": "Ακύρωση",
"tux-editor-confirm-button-label": "Επιβεβαίωση μετάφρασης",
- "tux-editor-shortcut-info": "Πατήστε «$1» για αποθήκευση ή «$2» για μετάβαση στο επόμενο μήνυμα ή \"$3\" για άλλες συντομεύσεις.",
+ "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": "Προτάσεις",
@@ -376,16 +374,18 @@
"tux-editor-close-tooltip": "Κλείσιμο",
"tux-editor-expand-tooltip": "Ανάπτυξη",
"tux-editor-collapse-tooltip": "Σύμπτυξη",
+ "tux-editor-message-tools-show-editor": "Εμφάνιση στον επεξεργαστή wiki",
"tux-editor-message-tools-history": "Ιστορικό",
"tux-editor-message-tools-delete": "Διαγραφή",
"tux-editor-message-tools-translations": "Όλες οι μεταφράσεις",
+ "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-statsbar-tooltip-with-fuzzy": "$1% μεταφρασμένα, $2% θεωρημένα, $3% παρωχημένα",
"translate-search-more-groups-info": "$1 ακόμα {{PLURAL:$1|ομάδα|ομάδες}}",
"translate-ulsdep-title": "Σφάλμα ρύθμισης",
"translate-ulsdep-body": "Η επέκταση Μετάφραση εξαρτάται από την [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector επέκταση Καθολικός Επιλογέας Γλώσσας].",
"tux-session-expired": "Δεν είστε πια σε σύνδεση. Παρακαλούμε συνδεθείτε σε ξεχωριστή καρτέλα. Εναλλακτικά, δημιουργήστε ένα αντίγραφο των μη αποθηκευμένων μεταφράσεων, συνδεθείτε, επιστρέψετε σε αυτή τη σελίδα και εισαγάγετε τις μεταφράσεις σας ξανά.",
- "tux-nojs": "Αυτή η σελίδα απαιτεί JavaScript."
+ "tux-nojs": "Αυτό το εργαλείο δεν λειτουργεί χωρίς JavaScript. Ή το JavaScript είναι απενεργοποιημένο, ή απέτυχε να δουλέψει ή αυτό το πρόγραμμα περιήγησης δεν υποστηρίζεται."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/en-gb.json b/www/wiki/extensions/Translate/i18n/core/en-gb.json
index 67cb1d5e..217c618f 100644
--- a/www/wiki/extensions/Translate/i18n/core/en-gb.json
+++ b/www/wiki/extensions/Translate/i18n/core/en-gb.json
@@ -3,10 +3,12 @@
"authors": [
"Lloffiwr",
"Shirayuki",
- "Thehelpfulone"
+ "Thehelpfulone",
+ "Chase me ladies, I'm the Cavalry"
]
},
"supportedlanguages-summary": "This page shows a list of all languages supported by {{SITENAME}},\ntogether with the names of the translators working on that language.\nA translator's name appears larger, the more edits the translator has contributed.\nThe colour of an underline indicates how recently a translator has been active here.",
"supportedlanguages-colorlegend": "Legend for the colour: Last translation $1 days ago.",
+ "translate-documentation-language": "Message documentation",
"tux-empty-list-translated": "No translated messages"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/en.json b/www/wiki/extensions/Translate/i18n/core/en.json
index e8a53bbf..ec0d22c0 100644
--- a/www/wiki/extensions/Translate/i18n/core/en.json
+++ b/www/wiki/extensions/Translate/i18n/core/en.json
@@ -4,17 +4,14 @@
"Nike",
"Siebrand",
"Amire80",
- "Santhosh.thottingal"
+ "Santhosh.thottingal",
+ "MarcoAurelio"
]
},
"translate": "Translate",
"translate-extensionname": "Translate",
"translate-desc": "[[Special:Translate|Special page]] for translating MediaWiki and beyond",
- "translate-taskui-view": "Show all messages",
- "translate-taskui-untranslated": "Show untranslated messages",
- "translate-taskui-optional": "Show optional messages",
- "translate-taskui-acceptqueue": "Only messages I can mark as reviewed",
- "translate-taskui-reviewall": "Review all translations",
+ "translate-fuzzybot-desc": "This is a special system account used by the MediaWiki [https://www.mediawiki.org/wiki/Extension:Translate Translate extension] used to maintain translations.\nThis account is part of the MediaWiki software and it is not owned by any user.",
"translate-taskui-export-to-file": "Export in native format",
"translate-taskui-export-as-po": "Export for off-line translation",
"translate-taction-translate": "Translate",
@@ -26,7 +23,6 @@
"translate-page-no-such-language": "Specified language was invalid.",
"translate-page-no-such-group": "Specified group was invalid.",
"translate-page-disabled": "Translations to this language in this group have been disabled.\nReason:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 is the source language of this page.",
"translate-language-disabled": "Translation to this language is disabled.",
"translate-page-settings-legend": "Settings",
"translate-page-group": "Group",
@@ -37,6 +33,7 @@
"translate-page-navigation-legend": "Navigation",
"translate-page-showing": "Showing messages from $1 to $2 of $3.",
"translate-page-showing-all": "Showing $1 {{PLURAL:$1|message|messages}}.",
+ "translate-page-showing-none": "No messages to show.",
"translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "Next page",
"translate-prev": "Previous page",
@@ -44,7 +41,6 @@
"translate-page-description-hasoptional": "This message group contains optional messages.\nOptional messages should only be translated when your language has special requirements\nlike not using spaces or transliterating proper names. $1",
"translate-page-description-hasoptional-open": "Show optional messages.",
"translate-page-edit": "edit",
- "translate-ext-url": "<hr />Website: $1",
"translate-optional": "(optional)",
"translate-ignored": "(ignored)",
"translate-edit-title": "Edit \"$1\"",
@@ -60,7 +56,11 @@
"translate-use-suggestion": "Replace current translation with this suggestion.",
"translate-edit-nopermission": "You need translation rights to translate messages.",
"translate-edit-askpermission": "Get permission",
- "translate-edit-tag-warning": "",
+ "exporttranslations": "Export translations",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Please specify a valid format.",
+ "translate-export-not-supported": "Translation export is not supported.",
+ "translate-export-format-notsupported": "The specified export format is not supported by the message group.",
"translate-magic-pagename": "Extended MediaWiki translation",
"translate-magic-help": "You can translate special pages aliases, magic words and namespace names.\n\nSpecial page aliases and magic words can have multiple translations.\nTranslations are separated by a comma (,).\nNamespaces can have only one translation.\n\nTranslating the project talk namespace <code>$1 talk</code> may be complicated.\n<code>$1</code> is replaced with the project sitename (for example <code>{{ns:project_talk}}</code>).\nIf it is not possible in your language to form a valid expression without changing the sitename, please let us know on [[Support]].\n\nYou need to be a translator to save changes.\nChanges are not saved until you click the save button below.",
"translate-magic-module": "Module:",
@@ -101,12 +101,22 @@
"translate-pref-editassistlang-help": "Comma separated list of language codes.\nTranslation of a message in these languages are shown when you are translating.\nThe default list of languages depends on your language.",
"translate-pref-editassistlang-bad": "Invalid language code in the list:\n<nowiki>$1</nowiki>.",
"right-translate": "Edit using the translate interface",
+ "action-translate": "edit using the translate interface",
"right-translate-manage": "Manage message groups",
"action-translate-manage": "manage message groups",
"right-translate-import": "Import offline translations",
"action-translate-import": "import offline translations",
"right-translate-messagereview": "Review translations",
+ "action-translate-messagereview": "review translations",
"right-translate-groupreview": "Change workflow state of message groups",
+ "action-translate-groupreview": "change workflow state of message groups",
+ "translate-rcfilters-translations": "Translations",
+ "translate-rcfilters-translations-only-label": "Translations",
+ "translate-rcfilters-translations-only-desc": "Changes to translated pages.",
+ "translate-rcfilters-translations-filter-label": "Not translations",
+ "translate-rcfilters-translations-filter-desc": "All changes that are not translations.",
+ "translate-rcfilters-translations-site-label": "Site messages",
+ "translate-rcfilters-translations-site-desc": "Customizations of site messages in MediaWiki namespace.",
"translate-rc-translation-filter": "Filter translations:",
"translate-rc-translation-filter-no": "Do nothing",
"translate-rc-translation-filter-only": "Show translations only",
@@ -169,6 +179,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",
@@ -179,7 +190,7 @@
"translate-mgs-noempty": "Do not display languages which do not have any translations",
"translate-mgs-submit": "Show statistics",
"translate-mgs-column-language": "Language",
- "translate-mgs-totals": "All languages together",
+ "translate-mgs-totals": "All $1 {{PLURAL:$1|language|languages}} together",
"translate-mgs-invalid-group": "The specified group $1 does not exist.",
"translate-mgs-nothing": "Nothing to show for requested statistics.",
"supportedlanguages": "Supported languages",
@@ -188,10 +199,12 @@
"supportedlanguages-localsummary": "",
"supportedlanguages-portallink": "[$1] $2 - $3",
"supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite is not supported",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Translator}}|Translators}}: $1",
"supportedlanguages-recenttranslations": "recent translations",
"supportedlanguages-count": "$1 {{PLURAL:$1|language|languages}} in total.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edit|edits}} - last edit $3 {{PLURAL:$3|day|days}} ago",
+ "abusefilter-edit-builder-vars-translate-source-text": "Source text of translation unit",
"translate-save": "Save ($1)",
"translate-jssti-add": "Add to list",
"managemessagegroups": "Message group management",
@@ -232,9 +245,7 @@
"translate-js-summary": "Summary:",
"translate-js-save": "Save",
"translate-js-next": "Save and open next",
- "translate-js-nonext": "This was the last message on this page.",
"translate-js-skip": "Skip to next",
- "translate-js-save-failed": "Saving failed. Please report this error.",
"translate-js-history": "Translation history",
"translate-js-support": "Ask question",
"translate-js-support-title": "Ask for help if there is not enough information to translate this message correctly.",
@@ -251,21 +262,9 @@
"translate-documentation-language": "Message documentation",
"translate-searchprofile": "Translations",
"translate-searchprofile-tooltip": "Search from all translations",
+ "translate-searchprofile-note": "More search options are available with [$1 translation search].",
"translate-search-languagefilter": "Filter by language:",
"translate-search-nofilter": "No filtering",
- "translate-messagereview-submit": "Mark reviewed",
- "translate-messagereview-progress": "Marking as reviewed...",
- "translate-messagereview-failure": "Marking as reviewed failed: $1",
- "translate-messagereview-done": "Reviewed",
- "translate-messagereview-reviews": "Reviewed by {{PLURAL:$1|one user|$1 users}}",
- "translate-messagereview-reviewswithyou": "Reviewed by {{PLURAL:$1|you|$1 users including you}}",
- "api-error-invalidrevision": "Translation was not found",
- "api-error-unknownmessage": "Message was not found",
- "api-error-fuzzymessage": "Translation is marked as fuzzy",
- "api-error-owntranslation": "You cannot mark your own translations as reviewed",
- "translate-messagereview-no-fuzzy": "Fuzzy translations cannot be marked as reviewed.",
- "translate-messagereview-no-own": "You cannot mark your own translations as reviewed.",
- "translate-messagereview-doit": "Mark this translation as reviewed.",
"log-name-translationreview": "Translation review log",
"log-description-translationreview": "Log of all reviews to translations and message groups.",
"logentry-translationreview-message": "$1 {{GENDER:$2|reviewed}} translation $3",
@@ -305,7 +304,9 @@
"tux-status-translated": "Translated",
"tux-status-saving": "Saving...",
"tux-status-unsaved": "Unsaved",
+ "tux-save-unknown-error": "Unknown error occurred.",
"tux-editor-placeholder": "Your translation",
+ "tux-editor-editsummary-placeholder": "Optional summary",
"tux-editor-paste-original-button-label": "Paste source text",
"tux-editor-discard-changes-button-label": "Discard changes",
"tux-editor-save-button-label": "Save translation",
@@ -313,7 +314,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 \"$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",
@@ -368,9 +369,11 @@
"tux-editor-close-tooltip": "Close",
"tux-editor-expand-tooltip": "Expand",
"tux-editor-collapse-tooltip": "Collapse",
+ "tux-editor-message-tools-show-editor": "Show in wiki editor",
"tux-editor-message-tools-history": "History",
"tux-editor-message-tools-delete": "Delete",
"tux-editor-message-tools-translations": "All translations",
+ "tux-editor-message-tools-linktothis": "Link to this message",
"tux-editor-loading": "Loading...",
"translate-search-more-languages-info": "$1 more {{PLURAL:$1|language|languages}}",
"translate-statsbar-tooltip": "$1% translated, $2% reviewed",
@@ -379,5 +382,5 @@
"translate-ulsdep-title": "Configuration error",
"translate-ulsdep-body": "The Translate extension depends on the [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector Universal Language Selector extension].",
"tux-session-expired": "You are no longer logged in. Please log in in a separate tab. Alternatively, make a copy of unsaved translations, log in, return to this page and enter your translations again.",
- "tux-nojs": "This page requires JavaScript."
+ "tux-nojs": "This tool does not work without JavaScript. JavaScript is disabled, failed to work, or this browser is unsupported."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/eo.json b/www/wiki/extensions/Translate/i18n/core/eo.json
index ddcc320d..7dfe082a 100644
--- a/www/wiki/extensions/Translate/i18n/core/eo.json
+++ b/www/wiki/extensions/Translate/i18n/core/eo.json
@@ -13,23 +13,21 @@
"Yekrats",
"Remux",
"KuboF",
- "Robin van der Vliet"
+ "Robin van der Vliet",
+ "Psychoslave",
+ "Joao Xavier",
+ "YvesNevelsteen"
]
},
"translate": "Tradukado",
"translate-desc": "[[Special:Translate|Speciala paĝo]] por traduki MediaWiki kaj alia",
- "translate-taskui-view": "Montru ĉiujn mesaĝojn",
- "translate-taskui-untranslated": "Montru netradukitajn mesaĝojn",
- "translate-taskui-optional": "Montru opciajn mesaĝojn",
- "translate-taskui-acceptqueue": "Nur mesaĝojn kiujn mi povas aprobi",
- "translate-taskui-reviewall": "Revizii ĉiujn tradukojn",
- "translate-taskui-export-to-file": "Eksportu en fonta formato",
+ "translate-taskui-export-to-file": "Elportu en fonta formato",
"translate-taskui-export-as-po": "Eksportu por eksterkonekta traduko",
"translate-taction-translate": "Traduki",
- "translate-taction-proofread": "Provlego",
+ "translate-taction-proofread": "Revizii",
"translate-taction-lstats": "Lingvaj statistikoj",
"translate-taction-mstats": "Statistikoj por mesaĝgrupo",
- "translate-taction-export": "Eksporti",
+ "translate-taction-export": "Elporti",
"translate-taction-disabled": "Ĉi tiu ago estas malaktivigita sur ĉi tiu vikio.",
"translate-page-no-such-language": "Specifita lingvo estas malvalida.",
"translate-page-no-such-group": "Specifita grupo estas malvalida.",
@@ -44,34 +42,36 @@
"translate-page-navigation-legend": "Navigado",
"translate-page-showing": "Estas montrataj mesaĝoj $1 ĝis $2 el $3.",
"translate-page-showing-all": "Estas montrataj $1 {{PLURAL:$1|mesaĝo|mesaĝoj}}.",
+ "translate-page-showing-none": "Ne estas mesaĝoj por montri.",
"translate-next": "Sekva paĝo",
"translate-prev": "Antaŭa paĝo",
"translate-page-description-legend": "Informoj pri la grupo",
"translate-page-description-hasoptional": "Ĉi tiu mesaĝgrupo entenas opciajn mesaĝojn.\nOpciaj mesaĝoj estu tradukitaj al via lingvo se via lingvo postulas ĝin\nkiel ne uzi spacojn aŭ transliterado de personaj nomoj. $1",
"translate-page-description-hasoptional-open": "Montru opciajn mesaĝojn.",
"translate-page-edit": "redakti",
- "translate-ext-url": "<hr />Retejo: $1",
"translate-optional": "(nedeviga)",
"translate-ignored": "(ignorata)",
"translate-edit-title": "Redakti \"$1\"",
"translate-edit-definition": "Mesaĝa difino",
"translate-edit-translation": "Tradukado",
"translate-edit-contribute": "kontribui",
- "translate-edit-no-information": "''Ĉi tiu mesago ne havas dokumentaron. Se vi scias, kie aŭ kiel ĉi tiu mesaĝo estas uzata, vi povas helpi al aliaj tradukantoj aldonante la dokumentaron al ĉi tiu mesaĝo.''",
+ "translate-edit-no-information": "<em>Ĉi tiu mesaĝo ne havas dokumentadon. Se vi scias, kie aŭ kiel ĉi tiu mesaĝo estas uzata, vi povas helpi al aliaj tradukantoj aldonante dokumentadon al ĉi tiu mesaĝo.</em>",
"translate-edit-information": "Informo pri la mesaĝo ($1)",
"translate-edit-in-other-languages": "Mesaĝo en aliaj lingvoj",
"translate-edit-warnings": "Avertoj pri nekompletaj tradukoj",
"translate-edit-tmmatch-source": "Tradukfontateksto: $1",
"translate-edit-tmmatch": "$1% kongrueco",
"translate-use-suggestion": "Anstataŭigi nunan tradukon per ĉi tiu sugesto.",
- "translate-edit-nopermission": "Vi devas havi permeson por traduki mesaĝojn.",
- "translate-edit-askpermission": "Peti permeson",
+ "translate-edit-nopermission": "Vi bezonas havi traduk-rajtojn por traduki mesaĝojn.",
+ "translate-edit-askpermission": "Ricevi permeson",
+ "exporttranslations": "Elporti tradukojn",
+ "translate-export-form-format": "Formato",
"translate-magic-pagename": "Etendita traduko de MediaWiki",
"translate-magic-help": "Vi povas traduki specialajn kromnomojn de paĝoj, magiajn vortojn, kaj nomojn de nomspacoj.\n\nSpecialaj kromnomoj de paĝoj kaj magiaj vortoj povas havi plurajn tradukojn.\nTradukoj estas apartigitaj de komo (,).\nNomoj de nomspacoj nur povas havi unu tradukon.\n\nTradukado de la reteja diskuta nomspaco <code>diskuto pri $1</code> povas esti malfacila.\n<code>$1</code> estas anstataŭigita per la nomo de la retejo (ekz. <code>{{ns:project_talk}})</code>).\nSe ne eblas per via lingvo formi validan esprimon sen ŝanĝi la nomon de la retejo, bonvolu kontakti nian [[Support|programiston]].\n\nVi devas esti en la grupo de tradukantoj por konservi ŝanĝojn.\nŜanĝoj ne estos konservataj ĝis vi alklakis la suban konservobutonon.",
- "translate-magic-module": "Modjulo:",
+ "translate-magic-module": "Modulo:",
"translate-magic-submit": "Montri",
- "translate-magic-cm-export": "Eksporti",
- "translate-magic-nothing-to-export": "Estas nenio por eksporti.",
+ "translate-magic-cm-export": "Elporti",
+ "translate-magic-nothing-to-export": "Estas nenio por elporti.",
"translate-magic-cm-to-be": "Esti",
"translate-magic-cm-current": "Nuntempe",
"translate-magic-cm-original": "Originalo",
@@ -84,7 +84,7 @@
"translate-magic-namespace": "Nomoj de nomspacoj",
"translate-magic-notsaved": "Via redakto ne estis konservita!",
"translate-magic-errors": "Bonvolu ripari {{PLURAL:$1|jenan eraron|jenajn erarojn}} en tradukoj:",
- "translate-magic-saved": "Viaj ŝanĝoj estis sukcese konservita.",
+ "translate-magic-saved": "Viaj ŝanĝoj estas konservitaj.",
"translate-checks-parameters": "{{PLURAL:$2|Jenaj parametroj ne estas uzataj|Jena parametro ne estas uzata}}: <strong>$1</strong>",
"translate-checks-parameters-unknown": "Jenaj {{PLURAL:$2|parametro|parametroj}} estas nekonataj:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Estas nepara nombro de {{PLURAL:$2|krampo|krampoj}}: <strong>$1</strong>",
@@ -205,7 +205,7 @@
"translate-manage-import-diff": "Mesaĝo $1 | Agoj: $2",
"translate-manage-import-new": "Nova mesaĝo $1",
"translate-manage-import-deleted": "Forigita mesaĝo $1",
- "translate-manage-action-import": "Importi",
+ "translate-manage-action-import": "Enporti",
"translate-manage-action-conflict": "Importi kaj marki kiel malpreciza",
"translate-manage-action-ignore": "Ignori",
"translate-manage-action-fuzzy": "Importi tradukojn kaj marki kiel neprecizajn",
@@ -217,13 +217,13 @@
"translate-manage-conflict-summary": "Importado de nova versio el ekstera fonto\nBonvolu kontroli.",
"translate-manage-submit": "Ekfunkcii",
"translate-manage-intro-other": "Sube estas listo de mesaĝŝanĝoj en la lingvo $1.\nBonvolu revizii la ŝanĝojn kaj elektu kion vi volas fari kun ĉiu traduko.\nSe vi decidas ignori ŝanĝojn, ili estos anstataŭigitaj je venonta eksporto.",
- "translate-manage-import-ok": "Importita nova versio de paĝo $1.",
- "translate-manage-import-done": "Finite!",
+ "translate-manage-import-ok": "Importita: $1.",
+ "translate-manage-import-done": "Importo kompleta!",
"importtranslations": "Importi tradukojn",
"translate-import-from-local": "Loka dosiero alŝuti:",
"translate-import-load": "Ŝarĝi dosieron",
"translate-import-err-dl-failed": "Ne eblas akiri la dosieron:\n$1",
- "translate-import-err-ul-failed": "Dosiero alŝuto ne estis sukcesa",
+ "translate-import-err-ul-failed": "Alŝuto de dosiero malsukcesis",
"translate-import-err-invalid-title": "La provizita dosiernomo <nowiki>$1</nowiki> estas malvalida",
"translate-import-err-no-such-file": "La dosiero <nowiki>$1</nowiki> ne ekzistas aŭ ne estis ŝargita ĉi-loke.",
"translate-import-err-stale-group": "La mesaĝgrupo al kiu apartenas ĉi tiu dosiero ne ekzistas.",
@@ -232,9 +232,7 @@
"translate-js-summary": "Resumo:",
"translate-js-save": "Konservi",
"translate-js-next": "Konservi kaj malfermi la sekvan",
- "translate-js-nonext": "Tio estis la lasta mesaĝo en ĉi tiu paĝo.",
"translate-js-skip": "Salti al la sekva",
- "translate-js-save-failed": "Konservado malsukcesis. Bonvolu raporti pri ĉi tiu eraro.",
"translate-js-history": "Traduka historio",
"translate-js-support": "Fari demandon",
"translate-js-support-title": "Petu helpon se ne estas sufiĉe da informoj por ĝuste traduki ĉi tiun mesaĝon.",
@@ -253,31 +251,18 @@
"translate-searchprofile-tooltip": "Serĉi el ĉiuj tradukoj",
"translate-search-languagefilter": "Filtrilo laŭ lingvoj:",
"translate-search-nofilter": "Neniu filtrado",
- "translate-messagereview-submit": "Akcepti",
- "translate-messagereview-progress": "Akceptado...",
- "translate-messagereview-failure": "Akceptado... malsukcesis: $1",
- "translate-messagereview-done": "Akceptita",
- "translate-messagereview-reviews": "Akceptita de {{PLURAL:$1|unu uzanto|$1 uzantoj}}",
- "translate-messagereview-reviewswithyou": "Akceptita de {{PLURAL:$1|vi|$1 uzantoj inkluzive de vi}}",
- "api-error-invalidrevision": "La traduko ne estis trovita",
- "api-error-unknownmessage": "La traduko ne estis trovita",
- "api-error-fuzzymessage": "La traduko estis markita kiel malneta",
- "api-error-owntranslation": "Vi ne povas akcepti vian proprajn tradukojn.",
- "translate-messagereview-no-fuzzy": "Malnetaj tradukoj ne povas esti akceptitaj.",
- "translate-messagereview-no-own": "Vi ne povas aprobi vian proprajn tradukojn.",
- "translate-messagereview-doit": "Akcepti ĉi tiun tradukon kiel ĝusta.",
"log-name-translationreview": "Protokolo de tradukprovlego",
"log-description-translationreview": "Protokolo de ĉiuj tradukprovlegoj kaj de mesaĝgrupoj.",
- "logentry-translationreview-message": "$1 {{GENDER:$2|akceptis}} tradukon $3",
+ "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",
- "translate-dynagroup-recent-desc": "Ĉi tiu mesaĝgrupo montras ĉiuj novajn tradukojn en ĉi tiun lingvon.\nPlej utila por provlegaj taskoj.",
+ "translate-dynagroup-recent-desc": "Ĉi tiu mesaĝgrupo montras ĉiuj novajn tradukojn en ĉi tiun lingvon.\nĜi plej utilas por reviziaj taskoj.",
"translate-dynagroup-additions-label": "Lastaj aldonoj",
"translate-dynagroup-additions-desc": "Tiu ĉi mesaĝgrupo montras novajn kaj ŝanĝitajn mesaĝojn.",
"translate-msggroupselector-projects": "Mesaĝgrupo",
@@ -290,18 +275,27 @@
"tux-tab-untranslated": "Netradukitaj",
"tux-tab-outdated": "Malfreŝaj",
"tux-tab-translated": "Tradukitaj",
+ "tux-tab-unproofread": "Nereviziitaj",
"tux-edit": "Redakti",
"tux-status-optional": "Nedeviga",
"tux-status-fuzzy": "Malfreŝaj",
- "tux-status-proofread": "Provlegita",
+ "tux-status-proofread": "Reviziita",
"tux-status-translated": "Tradukita",
+ "tux-status-saving": "Konservado...",
"tux-status-unsaved": "Nekonservita",
+ "tux-save-unknown-error": "Okazis nekonata eraro.",
"tux-editor-placeholder": "Via traduko",
+ "tux-editor-editsummary-placeholder": "Nedeviga resumo",
+ "tux-editor-paste-original-button-label": "Glui la originalan tekston",
+ "tux-editor-discard-changes-button-label": "Ignori ŝanĝojn",
"tux-editor-save-button-label": "Konservi tradukon",
"tux-editor-skip-button-label": "Salti al la sekva",
"tux-editor-cancel-button-label": "Nuligi",
+ "tux-editor-confirm-button-label": "Konfirmi tradukon",
+ "tux-editor-proofread-button-label": "Marki reviziita",
"tux-editor-shortcut-info": "Premu \"$1\" por konservi aŭ \"$2\" por salti al la sekva mesaĝo",
- "tux-editor-edit-desc": "Redakti priskribon",
+ "tux-editor-edit-desc": "Redakti dokumentadon",
+ "tux-editor-add-desc": "Aldoni dokumentadon",
"tux-editor-suggestions-title": "Sugestoj",
"tux-editor-in-other-languages": "En aliaj lingvoj",
"tux-editor-need-more-help": "Ĉu vi bezonas plian helpon?",
@@ -310,6 +304,34 @@
"tux-warnings-more": "{{PLURAL:$1|$1 pli}}",
"tux-warnings-hide": "kaŝi",
"tux-editor-save-failed": "Ne sukcesis konservi la tradukon: $1",
+ "tux-editor-n-uses": "uzita $1 {{PLURAL:$1|fojon|fojojn}}",
+ "tux-editor-message-desc-more": "Montri pli",
+ "tux-editor-message-desc-less": "Montri malpli",
+ "tux-editor-clear-translated": "Kaŝi tradukitajn",
+ "tux-editor-proofreading-mode": "Revizii",
+ "tux-editor-translate-mode": "Listo",
+ "tux-editor-proofreading-hide-own-translations": "Kaŝi viajn tradukojn",
+ "tux-editor-proofreading-show-own-translations": "Montri viajn tradukojn",
+ "tux-proofread-edit-label": "Redakti",
+ "tux-editor-page-mode": "Paĝo",
+ "tux-editor-outdated-warning": "Ĉi tiu traduko eble bezonas esti ĝisdatigita.",
+ "tux-editor-outdated-warning-diff-link": "Montri diferencojn",
+ "tux-editor-doc-editor-placeholder": "Mesaĝa dokumentado",
+ "tux-editor-doc-editor-save": "Konservi dokumentadon",
"tux-editor-doc-editor-cancel": "Nuligi",
- "tux-empty-list-translated-action": "Traduki"
+ "tux-empty-list-translated-action": "Traduki",
+ "tux-empty-nothing-to-proofread": "Nenio por revizii",
+ "tux-empty-you-can-help-providing": "Vi povas helpi per novaj tradukoj",
+ "tux-empty-nothing-new-to-proofread": "Nenio nova por revizii",
+ "tux-empty-you-can-review-already-proofread": "Vi povas revizii tradukojn jam reviziitajn de aliuloj.",
+ "tux-empty-list-other": "Nenio por traduki",
+ "tux-empty-list-other-action": "Revizii tradukojn",
+ "tux-empty-list-other-link": "Montru ĉiujn mesaĝojn",
+ "tux-editor-close-tooltip": "Fermi",
+ "tux-editor-expand-tooltip": "Etendi",
+ "tux-editor-collapse-tooltip": "Maletendi",
+ "tux-editor-message-tools-show-editor": "Montri en vikia redaktilo",
+ "tux-editor-message-tools-history": "Historio",
+ "tux-editor-message-tools-delete": "Forigi",
+ "tux-editor-message-tools-translations": "Ĉiuj tradukoj"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/es.json b/www/wiki/extensions/Translate/i18n/core/es.json
index d508d4f0..79e3afc2 100644
--- a/www/wiki/extensions/Translate/i18n/core/es.json
+++ b/www/wiki/extensions/Translate/i18n/core/es.json
@@ -23,18 +23,19 @@
"Vivaelcelta",
"Ciencia Al Poder",
"Wifidel",
- "Macofe"
+ "Macofe",
+ "Indiralena",
+ "Dgstranz",
+ "KATRINE1992",
+ "Laura Ospina",
+ "Tiberius1701"
]
},
"translate": "Traducir",
"translate-desc": "[[Special:Translate|Página especial]] para traducir el software MediaWiki y otras extensiones",
- "translate-taskui-view": "Mostrar todos los mensajes",
- "translate-taskui-untranslated": "Mostrar mensajes sin traducir",
- "translate-taskui-optional": "Mostrar mensajes opcionales",
- "translate-taskui-acceptqueue": "Sólo los mensajes que pueda marcar como revisados",
- "translate-taskui-reviewall": "Revisar todas las traducciones",
+ "translate-fuzzybot-desc": "Esta es una cuenta especial del sistema usada por la [https://www.mediawiki.org/wiki/Extension:Translate extensión de traducción] para realizar tareas de mantenimiento en las traducciones.\nEsta cuenta es parte del software de MediaWiki y no pertenece a ningún usuario.",
"translate-taskui-export-to-file": "Exportar en formato nativo",
- "translate-taskui-export-as-po": "Exportar para traducción sin conexión",
+ "translate-taskui-export-as-po": "Exportar para traducir sin conexión",
"translate-taction-translate": "Traducir",
"translate-taction-proofread": "Revisar",
"translate-taction-lstats": "Estadísticas del idioma",
@@ -44,7 +45,6 @@
"translate-page-no-such-language": "No se especificó un idioma válido.",
"translate-page-no-such-group": "El grupo especificado no es válido.",
"translate-page-disabled": "Se han desactivado las traducciones a este idioma en este grupo.\nMotivo:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 es el idioma origen de esta página.",
"translate-language-disabled": "Se desactivó la traducción a este idioma.",
"translate-page-settings-legend": "Preferencias",
"translate-page-group": "Grupo",
@@ -55,17 +55,17 @@
"translate-page-navigation-legend": "Navegación",
"translate-page-showing": "Mostrando mensajes del $1 al $2 de $3.",
"translate-page-showing-all": "Mostrando $1 {{PLURAL:$1|mensaje|mensajes}}.",
+ "translate-page-showing-none": "No hay mensajes para mostrar.",
"translate-next": "Página siguiente",
"translate-prev": "Página anterior",
"translate-page-description-legend": "Información acerca del grupo",
"translate-page-description-hasoptional": "Este grupo de mensajes contiene mensajes opcionales.\nLos mensajes opcionales deberían traducirse solo si tu idioma tiene características especiales como no usar espacios o transliterar nombres propios. $1",
"translate-page-description-hasoptional-open": "Mostrar mensajes opcionales.",
"translate-page-edit": "editar",
- "translate-ext-url": "<hr />Sitio web: $1",
"translate-optional": "(opcional)",
"translate-ignored": "(ignorado)",
"translate-edit-title": "Editar «$1»",
- "translate-edit-definition": "Mensaje original",
+ "translate-edit-definition": "Definición del mensaje",
"translate-edit-translation": "Traducción",
"translate-edit-contribute": "contribuir",
"translate-edit-no-information": "<em>Este mensaje no tiene documentación.\nSi sabes dónde o cómo se usa este mensaje, puedes ayudar a los otros traductores añadiendo documentación a este mensaje.</em>",
@@ -77,6 +77,11 @@
"translate-use-suggestion": "Reemplazar la traducción actual con esta sugerencia.",
"translate-edit-nopermission": "Necesitas permisos de traducción para traducir mensajes.",
"translate-edit-askpermission": "Obtener permiso",
+ "exporttranslations": "Exportar traducciones",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Especifica un formato válido.",
+ "translate-export-not-supported": "No se admite la exportación de traducción.",
+ "translate-export-format-notsupported": "El formato de exportación especificado no se admite por el grupo de mensajes.",
"translate-magic-pagename": "Traducción extendida de MediaWiki",
"translate-magic-help": "Puedes traducir los nombres de las páginas especiales, de las palabras mágicas y de los espacios de nombres.\n\nLos nombres de las páginas especiales y las palabras mágicas pueden tener varias traducciones.\nLas traducciones se separan por comas (,).\nLos espacios de nombres solo pueden tener una traducción.\n\nTraducir el espacio de nombres de discusión de proyecto <code>$1 talk</code> puede ser complicado.\n<code>$1</code> se reemplaza por el nombre del sitio del proyecto (por ejemplo <code>{{ns:project_talk}}</code>).\nSi en tu idioma no es posible formar una expresión válida sin cambiar el nombre del sitio, contáctanos en la [[Support|página de ayuda]].\n\nPara guardar los cambios debes pertenecer al grupo de traductores.\nLos cambios no se graban hasta que no pulses el botón Guardar que aparece abajo.",
"translate-magic-module": "Módulo:",
@@ -96,14 +101,14 @@
"translate-magic-notsaved": "No se guardó tu edición.",
"translate-magic-errors": "Corrige {{PLURAL:$1|el siguiente error|los siguientes errores}} en la traducción:",
"translate-magic-saved": "Se guardaron los cambios.",
- "translate-checks-parameters": "{{PLURAL:$2|El siguiente parámetro no se está|Los siguientes parámetros no se están}} usando:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-parameters": "{{PLURAL:$2|Falta el parámetro siguiente|Faltan los parámetros siguientes}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|El siguiente parámetro es desconocido|Los siguientes parámetros son desconocidos}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Hay algún signo de agrupación de {{PLURAL:$2|la siguiente clase|las siguientes clases}} sin emparejar:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "{{PLURAL:$2|El siguiente enlace es problemático|Los siguientes $2 enlaces son problemáticos}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "{{PLURAL:$2|Falta el siguiente enlace|Faltan los siguientes $2 enlaces}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Sustituye {{PLURAL:$2|la siguiente etiqueta|las siguientes etiquetas}} por las correctas:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "El mensaje original usa <nowiki>{{PLURAL:}}</nowiki> pero no así la traducción.",
- "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki>recibió {{PLURAL:$1|una forma|$1 formas}} pero únicamente {{PLURAL:$2|está soportada una forma|están soportadas $2 formas}} (excluyendo las formas 0= y 1=).",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> recibió {{PLURAL:$1|una forma|$1 formas}} pero únicamente {{PLURAL:$2|se admite una forma|se admiten $2 formas}} (excluyendo las formas 0= y 1=).",
"translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> tiene formas duplicadas al final. <nowiki>{{PLURAL:$1|lunes|lunes}}</nowiki> debería escribirse así: <nowiki>{{PLURAL:$1|lunes}}</nowiki>.",
"translate-checks-pagename": "El espacio de nombres difiere del original",
"translate-checks-format": "Esta traducción no sigue al original o tiene sintaxis inválida: $1",
@@ -114,7 +119,7 @@
"translate-pref-nonewsletter": "No quiero recibir correos de noticias",
"translate-pref-editassistlang": "Idiomas auxiliares:",
"prefs-translate": "Opciones de traducción",
- "translate-pref-editassistlang-help": "Lista separada por comas de códigos de idioma.\nLa traducción de un mensaje en estos idiomas se muestra cuando tu traduces.\nLa lista de idiomas predeterminada depende de tu idioma.",
+ "translate-pref-editassistlang-help": "Lista de códigos de idiomas separados por comas.\nSe mostrarán las traducciones de los mensajes en esos idiomas mientras traduces.\nLa lista de idiomas predeterminada depende de tu idioma.",
"translate-pref-editassistlang-bad": "Código de idioma inválido en la lista:\n<nowiki>$1</nowiki>.",
"right-translate": "Editar con la interfaz de traducción",
"right-translate-manage": "Administrar grupos de mensajes",
@@ -122,7 +127,15 @@
"right-translate-import": "Importar traducciones sin conexión",
"action-translate-import": "importar traducciones sin conexión",
"right-translate-messagereview": "Revisar traducciones",
+ "action-translate-messagereview": "revisar traducciones",
"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 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",
+ "translate-rcfilters-translations-site-desc": "Personalizaciones a los mensajes del sitio en el espacio de nombres MediaWiki.",
"translate-rc-translation-filter": "Filtrar traducciones:",
"translate-rc-translation-filter-no": "No hacer nada",
"translate-rc-translation-filter-only": "Mostrar solo traducciones",
@@ -148,7 +161,7 @@
"translate-statsf-count": "Medida:",
"translate-statsf-count-edits": "Número de ediciones",
"translate-statsf-count-users": "Traductores activos",
- "translate-statsf-count-registrations": "Nuevos usuarios",
+ "translate-statsf-count-registrations": "Usuarios nuevos",
"translate-statsf-count-reviews": "Revisiones de traducción",
"translate-statsf-count-reviewers": "Revisores",
"translate-statsf-language": "Lista de códigos de idioma separados por comas:",
@@ -167,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",
@@ -185,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",
@@ -195,7 +209,7 @@
"translate-mgs-noempty": "No mostrar los idiomas que no tienen ninguna traducción",
"translate-mgs-submit": "Mostrar estadísticas",
"translate-mgs-column-language": "Idioma",
- "translate-mgs-totals": "Todos los idiomas juntos",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|idioma|idiomas}} en total",
"translate-mgs-invalid-group": "El grupo especificado $1 no existe.",
"translate-mgs-nothing": "No hay nada que mostrar de las estadísticas solicitadas.",
"supportedlanguages": "Idiomas admitidos",
@@ -205,6 +219,7 @@
"supportedlanguages-recenttranslations": "traducciones recientes",
"supportedlanguages-count": "$1 {{PLURAL:$1|idioma|idiomas}} en total.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edición|ediciones}}, última edición hace $3 {{PLURAL:$3|día|días}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texto de origen de la unidad de traducción",
"translate-save": "Guardar ($1)",
"translate-jssti-add": "Añadir a la lista",
"managemessagegroups": "Gestión de grupos de mensajes",
@@ -223,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",
@@ -240,14 +255,12 @@
"translate-import-err-invalid-title": "El nombre de archivo <nowiki>$1</nowiki> no es válido.",
"translate-import-err-no-such-file": "El archivo <nowiki>$1</nowiki> no existe o no ha sido subido localmente.",
"translate-import-err-stale-group": "El grupo de mensajes al que pertenece este archivo no existe.",
- "translate-import-err-no-headers": "El archivo no es un archivo Gettext bien formado en formato de extensión Translate:\nNo se puede determinar el grupo y el idioma a partir de los encabezados de archivo.",
+ "translate-import-err-no-headers": "Este no es un archivo Gettext bien formado en el formato de extensión Translate:\nNo se puede determinar el grupo y el idioma a partir de las cabeceras del archivo.",
"translate-import-err-warnings": "El archivo no está bien constituído.\nAsegúrese de que su editor no quita los campos msgctxt.\nDetalles: $1",
"translate-js-summary": "Resumen:",
"translate-js-save": "Guardar",
"translate-js-next": "Guardar y abrir el siguiente",
- "translate-js-nonext": "Este fue el último mensaje en esta página.",
"translate-js-skip": "Ir al siguiente",
- "translate-js-save-failed": "No se pudo guardar. Informa de este error.",
"translate-js-history": "Historial de traducción",
"translate-js-support": "Pregunta",
"translate-js-support-title": "Pide ayuda si no hay suficiente información para traducir este mensaje correctamente.",
@@ -264,21 +277,9 @@
"translate-documentation-language": "Documentación de mensaje",
"translate-searchprofile": "Traducciones",
"translate-searchprofile-tooltip": "Buscar en todas las traducciones",
+ "translate-searchprofile-note": "Hay más opciones de búsqueda disponibles en la [$1 búsqueda de traducciones].",
"translate-search-languagefilter": "Filtrar por idioma:",
"translate-search-nofilter": "Sin filtro",
- "translate-messagereview-submit": "Marcar como revisado",
- "translate-messagereview-progress": "Marcando como revisado...",
- "translate-messagereview-failure": "Error al marcar como revisado: $1",
- "translate-messagereview-done": "Revisado",
- "translate-messagereview-reviews": "Revisado por {{PLURAL:$1|un usuario|$1 usuarios}}",
- "translate-messagereview-reviewswithyou": "Revisado por {{PLURAL:$1|ti|$1 usuarios incluyéndote a ti}}",
- "api-error-invalidrevision": "No se encontró la traducción",
- "api-error-unknownmessage": "No se encontró el mensaje",
- "api-error-fuzzymessage": "La traducción está marcada como desactualizada",
- "api-error-owntranslation": "No puedes marcar tus propias traducciones como revisadas",
- "translate-messagereview-no-fuzzy": "No se pueden marcar como revisadas las traducciones desactualizadas",
- "translate-messagereview-no-own": "No puedes marcar tus propias traducciones como revisadas.",
- "translate-messagereview-doit": "Marcar esta traducción como revisada.",
"log-name-translationreview": "Registro de revisión de las traducciones",
"log-description-translationreview": "Registro de todas las revisiones de las traducciones y de los grupos de mensajes.",
"logentry-translationreview-message": "$1 {{GENDER:$2|revisó}} la traducción $3",
@@ -297,10 +298,9 @@
"translate-workflowgroup-label": "Estados del flujo de trabajo",
"translate-workflowgroup-desc": "Este grupo de mensajes muestra los estados del flujo de trabajo de traducción.\nLos estados están definidos en la variable de configuración $wgTranslateWorkflowStates.",
"translate-dynagroup-recent-label": "Traducciones recientes",
- "translate-dynagroup-recent-desc": "Este grupo de mensajes muestra todas las traducciones recientes en este idioma.\nEs especialmente útil para tareas de revisión.",
+ "translate-dynagroup-recent-desc": "Este grupo de mensajes muestra todas las traducciones recientes en este idioma.\nResulta muy útil para tareas de revisión.",
"translate-dynagroup-additions-label": "Adiciones recientes",
"translate-dynagroup-additions-desc": "Este grupo de mensajes muestra mensajes nuevos y cambiados.",
- "translate-gethelp": "Ayuda",
"translate-msggroupselector-projects": "Grupo de mensajes",
"translate-msggroupselector-search-placeholder": "Buscar grupos",
"translate-msggroupselector-search-all": "Todos",
@@ -319,7 +319,9 @@
"tux-status-translated": "Traducido",
"tux-status-saving": "Guardando...",
"tux-status-unsaved": "Sin guardar",
+ "tux-save-unknown-error": "Ocurrió un error desconocido.",
"tux-editor-placeholder": "Tu traducción",
+ "tux-editor-editsummary-placeholder": "Resumen opcional",
"tux-editor-paste-original-button-label": "Pegar texto de origen",
"tux-editor-discard-changes-button-label": "Descartar los cambios",
"tux-editor-save-button-label": "Guardar la traducción",
@@ -327,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 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",
@@ -357,7 +359,7 @@
"tux-messagetable-more-messages": "$1 {{PLURAL:$1|mensaje|mensajes}} más",
"tux-messagetable-loading-messages": "Cargando {{PLURAL:$1|el mensaje|los mensajes}}…",
"tux-message-filter-placeholder": "Filtrar lista",
- "tux-message-filter-result": "Se encontraron $1 {{PLURAL:$1|resultado|resultados}} para \"$2\"",
+ "tux-message-filter-result": "Se {{PLURAL:$1|encontró $1 resultado|encontraron $1 resultados}} para «$2»",
"tux-message-filter-advanced-button": "Búsqueda avanzada",
"tux-message-filter-optional-messages-label": "Mensajes opcionales",
"tux-proofread-translated-by-self": "Traducido por ti",
@@ -382,9 +384,11 @@
"tux-editor-close-tooltip": "Cerrar",
"tux-editor-expand-tooltip": "Expandir",
"tux-editor-collapse-tooltip": "Contraer",
+ "tux-editor-message-tools-show-editor": "Mostrar en el editor de wiki",
"tux-editor-message-tools-history": "Historial",
"tux-editor-message-tools-delete": "Eliminar",
"tux-editor-message-tools-translations": "Todas las traducciones",
+ "tux-editor-message-tools-linktothis": "Enlace hacia este mensaje",
"tux-editor-loading": "Cargando...",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|idioma|idiomas}} más",
"translate-statsbar-tooltip": "$1 % traducido, $2 % revisado",
@@ -393,5 +397,5 @@
"translate-ulsdep-title": "Error de configuración",
"translate-ulsdep-body": "La extensión Translate depende de la [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector extensión Universal Language Selector].",
"tux-session-expired": "Tu sesión se ha cerrado. Inicia sesión en una pestaña aparte. Alternativamente, haz una copia de las traducciones sin guardar, inicia sesión, regresa a esta página y vuelve a escribir tus traducciones.",
- "tux-nojs": "Esta página requiere JavaScript."
+ "tux-nojs": "Esta página necesita JavaScript. JavaScript está desactivado, no funciona o no admitimos este navegador."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/et.json b/www/wiki/extensions/Translate/i18n/core/et.json
index 0cbd7bb8..1e36f78a 100644
--- a/www/wiki/extensions/Translate/i18n/core/et.json
+++ b/www/wiki/extensions/Translate/i18n/core/et.json
@@ -9,11 +9,8 @@
},
"translate": "Tõlkimine",
"translate-desc": "[[Special:Translate|Vahend]] MediaWiki ja muude sõnumite tõlkimiseks",
- "translate-taskui-view": "Näita kõiki sõnumeid",
- "translate-taskui-untranslated": "Näita tõlkimata sõnumeid",
- "translate-taskui-optional": "Näita valikulisi sõnumeid",
- "translate-taskui-acceptqueue": "Ainult sõnumid, mida saan märkida ülevaadatuks",
- "translate-taskui-reviewall": "Kõigi sõnumite ülevaatus",
+ "translate-taskui-export-to-file": "Ekspordi omavormingus",
+ "translate-taskui-export-as-po": "Ekspordi võrguühenduseta tõlkimiseks",
"translate-taction-translate": "Tõlkimine",
"translate-taction-proofread": "Ülevaatus",
"translate-taction-lstats": "Keele arvandmed",
@@ -40,7 +37,6 @@
"translate-page-description-hasoptional": "See sõnumirühm sisaldab valikulisi sõnumeid.\nValikulisi sõnumeid tuleks tõlkida vaid juhul, kui sinu keeles on erinõudeid\nnagu tühikute mittekasutamine või pärisnimede translitereerimine. $1",
"translate-page-description-hasoptional-open": "Näita valikulisi sõnumeid.",
"translate-page-edit": "muuda",
- "translate-ext-url": "<hr />Võrgukoht: $1",
"translate-optional": "(valikuline)",
"translate-ignored": "(eiratud)",
"translate-edit-title": "Redigeeri sõnumit \"$1\"",
@@ -50,14 +46,14 @@
"translate-edit-no-information": "<em>Sellel sõnumil pole dokumentatsiooni.\nKui tead, kus seda sõnumit kasutatakse, saad dokumentatsiooni lisamisega teisi tõlkijaid aidata.</em>",
"translate-edit-information": "Selle sõnumi teave ($1)",
"translate-edit-in-other-languages": "Sõnum teistes keeltes",
- "translate-edit-committed": "Kehtiv tõlge tarkvaras",
"translate-edit-warnings": "Hoiatused puuduliku tõlke kohta",
- "translate-edit-tmsugs": "Pakkumused tõlgete andmebaasist",
"translate-edit-tmmatch-source": "Tõlke alliktekst: $1",
"translate-edit-tmmatch": "Vastavus: $1%",
"translate-use-suggestion": "Asenda praegune tõlge selle pakkumusega.",
"translate-edit-nopermission": "Sõnumite tõlkimiseks on vaja tõlkeõigust.",
"translate-edit-askpermission": "Hangi luba",
+ "exporttranslations": "Tõlgete eksport",
+ "translate-export-form-format": "Vorming",
"translate-magic-pagename": "Laiendatud MediaWiki tõlkimine",
"translate-magic-module": "Moodul:",
"translate-magic-submit": "Hangi",
@@ -75,7 +71,7 @@
"translate-magic-namespace": "Nimeruuminimed",
"translate-magic-notsaved": "Sinu muudatust ei salvestatud!",
"translate-magic-errors": "Palun eemalda tõlgetest {{PLURAL:$1|järgmine tõrge|järgmised tõrked}}:",
- "translate-magic-saved": "Muudatused on edukalt salvestatud.",
+ "translate-magic-saved": "Muudatused on salvestatud.",
"translate-checks-parameters": "{{PLURAL:$2|Järgmine parameeter|Järgmised parameetrid}} on kasutamata:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Järgmine parameeter on tundmatu|Järgmised parameetrid on tundmatud}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "{{PLURAL:$2|Sulge}} on paaritu arv:\n<strong><nowiki>$1</nowiki></strong>",
@@ -98,7 +94,15 @@
"right-translate-import": "Importida ühenduseta tehtud tõlkeid",
"action-translate-import": "importida ühenduseta tehtud tõlkeid",
"right-translate-messagereview": "Tõlkeid üle vaadata",
+ "action-translate-messagereview": "tõlkeid üle vaadata",
"right-translate-groupreview": "Muuta sõnumirühmade tõlketöö seisundit",
+ "translate-rcfilters-translations": "Tõlked",
+ "translate-rcfilters-translations-only-label": "Tõlked",
+ "translate-rcfilters-translations-only-desc": "Tõlgitud lehekülgedel tehtud muudatused.",
+ "translate-rcfilters-translations-filter-label": "Pole tõlked",
+ "translate-rcfilters-translations-filter-desc": "Kõik muudatused, mis pole tõlked.",
+ "translate-rcfilters-translations-site-label": "Süsteemisõnumid",
+ "translate-rcfilters-translations-site-desc": "Süsteemisõnumite kohandamine nimeruumis MediaWiki.",
"translate-rc-translation-filter": "Filtreeri tõlkeid:",
"translate-rc-translation-filter-no": "Ära filtri",
"translate-rc-translation-filter-only": "Näita ainult tõlkeid",
@@ -130,7 +134,6 @@
"translate-statsf-language": "Komaga eraldatud keelekoodide loend:",
"translate-statsf-group": "Komaga eraldatud rühmakoodide loend:",
"translate-statsf-submit": "Eelvaade",
- "translate-tag-category": "Tõlgitavad leheküljed",
"translate-tag-page-desc": "Vikilehekülje [[$2|$1]] tõlkimine $3 keelest ($4).",
"translate-sidebar-alltrans": "Tõlge teistes keeltes",
"translations": "Kõik tõlked",
@@ -162,6 +165,7 @@
"translate-untranslated": "Tõlkimata",
"translate-percentage-complete": "Tõlgitud",
"translate-percentage-fuzzy": "Iganenud",
+ "translate-percentage-proofread": "Üle vaadatud",
"translate-languagestats-overall": "Kõik sõnumirühmad kokku",
"translate-ls-submit": "Näita arvandmeid",
"translate-ls-column-group": "Sõnumirühm",
@@ -172,7 +176,7 @@
"translate-mgs-noempty": "Ära näita keeli, millel pole ühtegi tõlget",
"translate-mgs-submit": "Näita arvandmeid",
"translate-mgs-column-language": "Keel",
- "translate-mgs-totals": "Kõik keeled kokku",
+ "translate-mgs-totals": "{{PLURAL:$1|Ühes keeles|Kõigis $1 keeles}} kokku",
"translate-mgs-invalid-group": "Määratud rühma $1 pole.",
"translate-mgs-nothing": "Soovitud näitajate kohta pole midagi näidata.",
"supportedlanguages": "Toetatud keeled",
@@ -204,7 +208,6 @@
"translate-manage-toolong": "Töötlusaja ülempiir $1 {{PLURAL:$1|sekund|sekundit}} on ületatud.\nPalun esita vorm uuesti, et töötlemist jätkata.",
"translate-manage-import-summary": "Uue versiooni importimine välisallikast.",
"translate-manage-conflict-summary": "Uue versiooni importimine välisallikast.\nPalun kontrolli.",
- "translate-manage-fuzzy-summary": "Sõnumi määratlus on muutunud.",
"translate-manage-submit": "Täida",
"translate-manage-intro-other": "Allpool on $1 keele tõlkemuudatuste loetelu.\nPalun vaata muudatused üle ja vali iga sõnumi jaoks sobiv toiming.\nKui eirad muudatusi, on see toiming vaid ajutine.",
"translate-manage-import-ok": "Imporditud: $1",
@@ -219,9 +222,7 @@
"translate-js-summary": "Resümee:",
"translate-js-save": "Salvesta",
"translate-js-next": "Salvesta ja ava järgmine",
- "translate-js-nonext": "See oli selle lehekülje viimane sõnum.",
"translate-js-skip": "Jäta vahele",
- "translate-js-save-failed": "Salvestamine ebaõnnestus. Palun teata sellest tõrkest.",
"translate-js-history": "Tõlkimisajalugu",
"translate-js-support": "Esita küsimus",
"translate-js-support-title": "Esita küsimus, kui teave selle sõnumi kohta on õigesti tõlkimiseks puudulik.",
@@ -238,21 +239,9 @@
"translate-documentation-language": "Sõnumi dokumentatsioon",
"translate-searchprofile": "Tõlked",
"translate-searchprofile-tooltip": "Otsi kõigist tõlgetest",
+ "translate-searchprofile-note": "Rohkem otsivalikuid on saadaval [$1 tõlkeotsingus].",
"translate-search-languagefilter": "Keelefilter:",
"translate-search-nofilter": "Filtrita",
- "translate-messagereview-submit": "Märgi ülevaadatuks",
- "translate-messagereview-progress": "Ülevaadatuks märkmine...",
- "translate-messagereview-failure": "Ülevaadatuks märkimine ebaõnnestus: $1",
- "translate-messagereview-done": "Ülevaadatud",
- "translate-messagereview-reviews": "Üle vaadanud {{PLURAL:$1|üks kasutaja|$1 kasutajat}}",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|Sinu|$1 kasutaja ja sealhulgas sinu}} üle vaadatud",
- "api-error-invalidrevision": "Tõlget ei leitud",
- "api-error-unknownmessage": "Sõnumit ei leitud",
- "api-error-fuzzymessage": "Tõlge on märgitud ülevaatuseks",
- "api-error-owntranslation": "Enda tõlkeid ei saa ülevaadatuks märkida.",
- "translate-messagereview-no-fuzzy": "Iganenud tõlkeid ei saa ülevaadatuks märkida.",
- "translate-messagereview-no-own": "Enda tõlkeid ei saa märkida ülevaadatuks.",
- "translate-messagereview-doit": "Märgi see tõlge ülevaadatuks",
"log-name-translationreview": "Tõlgete ülevaatuslogi",
"log-description-translationreview": "Kõigi tõlgete ja sõnumirühmade ülevaatuslogi.",
"logentry-translationreview-message": "$1 {{GENDER:$2|märkis ülevaadatuks}} tõlke $3",
@@ -265,7 +254,6 @@
"translate-dynagroup-recent-desc": "Selles rühmas on kõik viimati sellesse keelde tõlgitud sõnumid.\nSobib ennekõike tõlgete ülevaatuseks.",
"translate-dynagroup-additions-label": "Viimased lisandused",
"translate-dynagroup-additions-desc": "Selles sõnumirühmas on uued ja muudetud sõnumid.",
- "translate-gethelp": "Abi",
"translate-msggroupselector-projects": "Sõnumirühm",
"translate-msggroupselector-search-placeholder": "Otsi rühmi",
"translate-msggroupselector-search-all": "Kõik",
@@ -285,13 +273,15 @@
"tux-status-saving": "Salvestamine...",
"tux-status-unsaved": "Salvestamata",
"tux-editor-placeholder": "Sinu tõlge",
+ "tux-editor-editsummary-placeholder": "Valikuline resümee",
"tux-editor-paste-original-button-label": "Kleebi lähtetekst",
"tux-editor-discard-changes-button-label": "Hülga muudatused",
"tux-editor-save-button-label": "Salvesta tõlge",
"tux-editor-skip-button-label": "Jäta vahele ja mine järgmise juurde",
"tux-editor-cancel-button-label": "Loobu",
"tux-editor-confirm-button-label": "Kinnita tõlge",
- "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 \"$3\" teiste kiirklahvide jaoks.",
+ "tux-editor-proofread-button-label": "Märgi ülevaadatuks",
+ "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",
@@ -345,13 +335,15 @@
"tux-editor-close-tooltip": "Sule",
"tux-editor-expand-tooltip": "Laiem vaade",
"tux-editor-collapse-tooltip": "Kitsam vaade",
+ "tux-editor-message-tools-show-editor": "Näita vikitoimetis",
"tux-editor-message-tools-history": "Ajalugu",
"tux-editor-message-tools-delete": "Kustuta",
"tux-editor-message-tools-translations": "Kõik tõlked",
+ "tux-editor-message-tools-linktothis": "Link sellele sõnumile",
"tux-editor-loading": "Laadimine...",
"translate-search-more-languages-info": "Veel $1 {{PLURAL:$1|keel|keelt}}",
"translate-statsbar-tooltip": "$1% tõlgitud, $2% ülevaadatud",
"translate-statsbar-tooltip-with-fuzzy": "$1% tõlgitud, $2% ülevaadatud, $3% iganenud",
"translate-search-more-groups-info": "Veel $1 {{PLURAL:$1|rühm|rühma}}",
- "tux-nojs": "Selle lehekülje jaoks on vaja JavaScripti."
+ "tux-nojs": "See tööriist ei tööta ilma JavaScriptita. JavaScript on keelatud, see ei toiminud või selle brauseri tugi puudub."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/eu.json b/www/wiki/extensions/Translate/i18n/core/eu.json
index d3464749..36443457 100644
--- a/www/wiki/extensions/Translate/i18n/core/eu.json
+++ b/www/wiki/extensions/Translate/i18n/core/eu.json
@@ -6,16 +6,12 @@
"Theklan",
"Xabier Armendaritz",
"Subi",
- "Sator"
+ "Sator",
+ "Mikel Ibaiba"
]
},
"translate": "Itzuli",
"translate-desc": "[[Special:Translate|Orrialde berezia]] MediaWiki eta bestelakoak itzultzeko",
- "translate-taskui-view": "Mezu guztiak erakutsi",
- "translate-taskui-untranslated": "Itzuli gabeko mezuak erakutsi",
- "translate-taskui-optional": "Hautazko mezuak erakutsi",
- "translate-taskui-acceptqueue": "Berrikusi bezala marka ditzakedan mezuak bakarrik",
- "translate-taskui-reviewall": "Itzulpen guztiak berrikusi",
"translate-taction-translate": "Itzuli",
"translate-taction-proofread": "Zuzenketak",
"translate-taction-lstats": "Hizkuntza estatistikak",
@@ -40,7 +36,6 @@
"translate-page-description-hasoptional": "Mezu-talde honek hautazko mezuak ditu.\nHautazko mezuak zure hizkuntzaren berezitasunak direla-eta, espazioak ez daudenean edo izen berezien itzulpenerako bakarrik itzuli. $1",
"translate-page-description-hasoptional-open": "Erakutsi hautazko mezuak.",
"translate-page-edit": "aldatu",
- "translate-ext-url": "<hr />Webgunea: $1",
"translate-optional": "(hautazkoa)",
"translate-ignored": "(ignoratua)",
"translate-edit-title": "\"$1\" aldatu",
@@ -53,6 +48,8 @@
"translate-edit-warnings": "Bukatu gabeko itzulpenei buruzko oharrak",
"translate-edit-tmmatch": "$1% bilaketa",
"translate-edit-askpermission": "Baimena lortu",
+ "exporttranslations": "Itzulpenak esportatu",
+ "translate-export-form-format": "Formatua",
"translate-magic-pagename": "MediaWiki itzulpen zabaldua",
"translate-magic-module": "Modulu:",
"translate-magic-submit": "Bilatu",
@@ -69,7 +66,7 @@
"translate-magic-namespace": "Izen-tarteen izenak",
"translate-magic-notsaved": "Zure edizioa ez da gorde!",
"translate-magic-errors": "Mesedez zuzendu ondorengo {{PLURAL:$1|akatsa|akatsak}} itzulpenetan:",
- "translate-magic-saved": "Zure aldaketak ongi gorde dira.",
+ "translate-magic-saved": "Zure aldaketak gorde dira.",
"translate-checks-fudforum-syntax": "Proiektu honetan erabili <nowiki>$1</nowiki>, <nowiki>$2</nowiki>-ren ordez.",
"translate-pref-nonewsletter": "Ez iezadazu posta elektronikoaren bidezko berripaperik bidal",
"translate-pref-editassistlang": "Hizkuntza laguntzaileak:",
@@ -103,12 +100,12 @@
"translate-statsf-count-registrations": "Lankide berriak",
"translate-statsf-count-reviewers": "Berrikusleak",
"translate-statsf-submit": "Aurreikuspena",
- "translate-tag-category": "Orri itzulgarriak",
"translate-tag-page-desc": "[[$2|$1]] wiki orrialdearen itzulpena $3(e)tik ($4).",
"translate-sidebar-alltrans": "Erdaretan",
"translations": "Itzulpen guztiak",
"translate-translations-no-message": "\"$1\" itzulezina den mezua da. (ezin da euskaratu)",
"translate-translations-none": "\"$1\"-ek ez du itzulpenik",
+ "translate-translations-count": "{{PLURAL:$1|Itzulpen bat aurkitu da|$1 itzulpen aurkitu dira}}.",
"translate-translations-fieldset-title": "Mezua",
"translate-translations-messagename": "Izena:",
"translate-translations-project": "Proiektua:",
@@ -140,8 +137,9 @@
"translate-mgs-column-language": "Hizkuntza",
"translate-mgs-totals": "Hizkuntza guztiak batera",
"supportedlanguages": "Laguntza duten hizkuntzak",
- "supportedlanguages-translators": "{{PLURAL:$2|Itzultzailea|Itzultzaileak}}: $1",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Translator}}|Itzultzaileak}}: $1",
"supportedlanguages-recenttranslations": "azken itzulpenak",
+ "supportedlanguages-count": "{{PLURAL:$1|Hizkutza bat|$1 hizkuntza}} guztira.",
"translate-save": "Gorde ($1)",
"translate-jssti-add": "Zerrendara gehitu",
"translate-manage-import-diff": "Mezua $1 | Ekintzak: $2",
@@ -158,9 +156,7 @@
"translate-js-summary": "Laburpena:",
"translate-js-save": "Gorde",
"translate-js-next": "Gorde eta hurrengoa ireki",
- "translate-js-nonext": "Mezu hau orrialde honetako azkena da.",
"translate-js-skip": "Hurrengora salto egin",
- "translate-js-save-failed": "Gordetzeak huts egin du. Mesedez errorea jakinarazi.",
"translate-js-history": "Itzulpenen historia",
"translate-js-support": "Galdera egin",
"translate-gs-pos": "Pos.",
@@ -176,18 +172,15 @@
"translate-searchprofile": "Itzulpenak",
"translate-searchprofile-tooltip": "Itzulpen guztietan bilatu",
"translate-search-languagefilter": "Iragazi hizkuntzaren arabera:",
- "translate-messagereview-submit": "Berrikusi bezala markatu",
- "translate-messagereview-progress": "Berrikusi bezala markatzen...",
- "translate-messagereview-done": "Berrikusita",
- "api-error-invalidrevision": "Itzulpena ez da aurkitu",
- "api-error-unknownmessage": "Mezua ez da aurkitu",
"translate-workflowstatus": "Egoera: $1",
"translate-stats-workflow": "Egoera",
"translate-dynagroup-recent-label": "Azken itzulpenak",
- "translate-gethelp": "Laguntza",
+ "translate-msggroupselector-projects": "Mezu-taldea",
+ "translate-msggroupselector-search-placeholder": "Bilatu taldeak",
"translate-msggroupselector-search-all": "Denak",
"translate-msggroupselector-search-recent": "Berriak",
"translate-msggroupselector-view-subprojects": "{{PLURAL:$1|azpitalde $1|$1 azpitalde}}",
+ "tux-languageselector": "Itzuli hizkuntza honetara",
"tux-tab-all": "Guztiak",
"tux-tab-untranslated": "Itzuli gabe",
"tux-tab-outdated": "Zaharkituta",
@@ -200,13 +193,16 @@
"tux-status-translated": "Itzulita",
"tux-status-saving": "Gordetzen...",
"tux-status-unsaved": "Ez da gorde",
+ "tux-save-unknown-error": "Errore ezezaguna gertatu da.",
"tux-editor-placeholder": "Zure itzulpena",
+ "tux-editor-editsummary-placeholder": "Hautazko laburpena",
"tux-editor-paste-original-button-label": "Kopiatu jatorrizko testua",
"tux-editor-discard-changes-button-label": "Baztertu aldaketak",
"tux-editor-save-button-label": "Itzulpena gorde",
"tux-editor-skip-button-label": "Hurrengora saltatu",
"tux-editor-cancel-button-label": "Utzi",
"tux-editor-confirm-button-label": "Berretsi itzulpena",
+ "tux-editor-proofread-button-label": "Markatu berrikusita bezala",
"tux-editor-edit-desc": "Aldatu dokumentazioa",
"tux-editor-add-desc": "Gehitu dokumentazioa",
"tux-editor-suggestions-title": "Iradokizunak",
@@ -235,6 +231,7 @@
"tux-messagetable-more-messages": "{{PLURAL:$1|mezu bat|$1 mezu}} gehiago",
"tux-messagetable-loading-messages": "{{PLURAL:$1|Mezua|Mezuak}} kargatzen...",
"tux-message-filter-placeholder": "Iragazi zerrenda",
+ "tux-message-filter-result": "{{PLURAL:$1|Emaitza bat aurkitu da|$1 emaitza aurkitu dira}} \"$2\" bilaketarako",
"tux-message-filter-advanced-button": "Bilaketa aurreratua",
"tux-message-filter-optional-messages-label": "Aukerako mezuak",
"tux-proofread-translated-by-self": "Zuk itzulitakoak",
@@ -250,6 +247,7 @@
"tux-empty-list-other-link": "Mezu guztiak erakutsi",
"tux-editor-close-tooltip": "Itxi",
"tux-editor-expand-tooltip": "Zabaldu",
+ "tux-editor-message-tools-show-editor": "Erakutsi wiki editorean",
"tux-editor-message-tools-history": "Historia",
"tux-editor-message-tools-delete": "Ezabatu",
"tux-editor-message-tools-translations": "Itzulpen guztiak",
diff --git a/www/wiki/extensions/Translate/i18n/core/fa.json b/www/wiki/extensions/Translate/i18n/core/fa.json
index d43ec0db..2dc50b92 100644
--- a/www/wiki/extensions/Translate/i18n/core/fa.json
+++ b/www/wiki/extensions/Translate/i18n/core/fa.json
@@ -17,27 +17,25 @@
"Armin1392",
"Alirezaaa",
"Hosseinblue",
- "Calak"
+ "Calak",
+ "Ommmmid",
+ "Ladsgroup"
]
},
"translate": "ترجمه",
+ "translate-extensionname": "ترجمه",
"translate-desc": "[[Special:Translate|صفحهٔ ویژه‌ای]] برای ترجمهٔ مدیاویکی و فراتر از آن",
- "translate-taskui-view": "نمایش تمام پیغام‌ها",
- "translate-taskui-untranslated": "نمایش پیغام‌های ترجمه‌نشده",
- "translate-taskui-optional": "نمایش پیغام‌های اختیاری",
- "translate-taskui-acceptqueue": "تنها پیغام‌هایی که می‌توانم به عنوان بازبینی‌شده نشانه‌گذاری کنم",
- "translate-taskui-reviewall": "بررسی تمام ترجمه‌ها",
"translate-taskui-export-to-file": "برون‌بری در قالب بومی",
"translate-taskui-export-as-po": "برون‌بری برای ترجمهٔ برون‌خط",
"translate-taction-translate": "ترجمه",
- "translate-taction-proofread": "بازبینی ترجمه‌ها",
+ "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-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": "گروه",
@@ -48,28 +46,33 @@
"translate-page-navigation-legend": "گشتن",
"translate-page-showing": "نمایش پیغام‌های $1 تا $2 از $3.",
"translate-page-showing-all": "نمایش $1 {{PLURAL:$1|پیغام|پیغام}}.",
+ "translate-page-showing-none": "پیغامی برای نمایش وجود ندارد.",
"translate-next": "صفحهٔ بعدی",
"translate-prev": "صفحهٔ قبلی",
"translate-page-description-legend": "اطلاعات در مورد گروه",
"translate-page-description-hasoptional": "این گروه پیغام‌ها شامل پیغام‌های اختیاری است.\nپیغام‌های اختیاری باید تنها زمانی ترجمه شوند که زبان شما شرایط ویژه‌ای نظیر استفاده نکردن از فاصله یا نویسه‌گردانی اسامی خاص داشته باشد. $1",
"translate-page-description-hasoptional-open": "نمایش پیغام‌های اختیاری.",
"translate-page-edit": "ویرایش",
- "translate-ext-url": "<hr />وبگاه: $1",
"translate-optional": "(اختیاری)",
"translate-ignored": "(نادیده گرفته شده)",
"translate-edit-title": "ویرایش «$1»",
"translate-edit-definition": "تعریف پیغام",
"translate-edit-translation": "ترجمه",
"translate-edit-contribute": "مشارکت",
- "translate-edit-no-information": "<em>این پیغام دارای توضیحات نیست.\n''اگر می‌دانید که این پیغام چگونه یا در کجا استفاده می‌شود، می‌توانید با اضافه کردن توضیحات به دیگر ترجمه‌کنندگان کمک کنید.</em>",
+ "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-askpermission": "گرفتن دسترسی",
+ "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-help": "شما می‌توانید نام مستعار صفحه‌های ویژه، واژه‌های جادویی، و نام فضاهای نام را ترجمه کنید.\n\nنام مستعار صفحه‌های ویژه می‌تواند بیش از یک ترجمه داشته باشد.\nترجمه‌ها را با استفاده از کامای انگلیسی (,) از هم جدا کنید.\nفضاهای نام تنها می‌توانند یک ترجمه داشته باشند.\n\nترجمهٔ نام فضاهای نام <code>$1 talk</code> می‌تواند پیچیده باشد. <code>$1</code> با نام وبگاه جایگزین می‌شود (مانند <code>{{ns:project_talk}}</code>). اگر در زبان شما امکان ایجاد چنین عبارتی بدون تغییر دادن نام وبگاه وجود ندارد، لطفاً از طریق [[Support]] به ما اطلاع دهید.\n\nبرای ذخیره کردن تغییرها باید عضو گروه ترجمه‌کنندگان باشید.\nتغییرات زمانی ذخیره می‌شوند که دکمهٔ ذخیره را در پایین صفحه فشار دهید.",
"translate-magic-module": "پودمان:",
@@ -88,10 +91,10 @@
"translate-magic-namespace": "اسم فضاهای نام",
"translate-magic-notsaved": "ویرایش‌تان ذخیره نشد!",
"translate-magic-errors": "لطفاً {{PLURAL:$1|خطای|خطاهای}} زیر را در ترجمهٔ خود اصلاح کنید:",
- "translate-magic-saved": "تغییرات شما با موفقیت ذخیره شد.",
+ "translate-magic-saved": "تغییرات شما ذخیره شد.",
"translate-checks-parameters": "این {{PLURAL:$2|پارامتر استفاده نشده‌است|پارامترها استفاده نشده‌اند}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|پارامتر|پارامترهای}} زیر {{PLURAL:$2|ناشناخته است|ناشناخته‌اند}}:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-balance": "تعداد {{PLURAL:$2|پرانتزها|پرانتزها}} زوج نیست:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-balance": "تعداد {{PLURAL:$2|پرانتزها|پرانتزها}} جفت نیست:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "{{PLURAL:$2|پیوندهایی که در ادامه می‌آیند مشکل‌ساز هستند|پیوندی که در ادامه می‌آید مشکل ساز است}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "{{PLURAL:$2|پیوند|پیوندهای}} زیر پیدا {{PLURAL:$2|نشد|نشدند}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "لطفاً این {{PLURAL:$2|برچسب|برچسب‌ها}} را با موارد درست جایگزین کنید:\n<strong><nowiki>$1</nowiki></strong>",
@@ -115,7 +118,15 @@
"right-translate-import": "درون‌ریزی ترجمه‌های برون‌خط",
"action-translate-import": "درون‌ریزی ترجمه‌های برون‌خط",
"right-translate-messagereview": "بازبینی ترجمه‌ها",
+ "action-translate-messagereview": "بازبینی ترجمه‌ها",
"right-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-rc-translation-filter": "پالایش ترجمه‌ها:",
"translate-rc-translation-filter-no": "کاری نکن",
"translate-rc-translation-filter-only": "تنها ترجمه‌ها را نمایش بده",
@@ -188,16 +199,18 @@
"translate-mgs-noempty": "زبان‌هایی که هیچ ترجمه‌ای ندارند نمایش نده",
"translate-mgs-submit": "نمایش آمار",
"translate-mgs-column-language": "زبان",
- "translate-mgs-totals": "همهٔ زبان‌ها با هم",
+ "translate-mgs-totals": "همهٔ {{PLURAL:$1|زبان|زبان‌ها}} با هم",
"translate-mgs-invalid-group": "گروه مشخص‌شدهٔ $1 وجود ندارد.",
"translate-mgs-nothing": "دربارهٔ آمار درخواست‌شده چیزی برای نمایش وجود ندارد.",
"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|زبان|زبان}}.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|ویرایش|ویرایش}} - آخرین ویرایش $3 {{PLURAL:$3|روز|روز}} قبل",
+ "abusefilter-edit-builder-vars-translate-source-text": "متن مبدأ واحد ترجمه",
"translate-save": "ذخیره ($1)",
"translate-jssti-add": "افزودن به فهرست",
"managemessagegroups": "مدیریت گروه‌های پیغام",
@@ -205,7 +218,7 @@
"translate-smg-nochanges": "هیچ تغییری برای پردازش وجود ندارد.",
"translate-smg-submit": "ارسال تغییرات برای پردازش",
"translate-smg-submitted": "تعریف پیغام به روز شده است. تغییرات در پشت صحنه در حال پردازش هستند.",
- "translate-smg-more": "تغییراتی یبشتر در فرآیند پس از ارسال این تغییرات خواهد بود.",
+ "translate-smg-more": "پس از ارسال این تغییرات تغییرات بیشتری برای پروسه وجود خواهند داشت.",
"translate-smg-left": "محتوای پیغام در ویکی",
"translate-smg-right": "تغییرات ورودی",
"translate-manage-import-diff": "پیغام $1 | اقدام: $2",
@@ -222,14 +235,14 @@
"translate-manage-import-summary": "درون‌ریزی یک نسخهٔ جدید از منبع خارجی",
"translate-manage-conflict-summary": "درون‌ریزی یک نسخهٔ جدید از منبع خارجی.\nلطفاً بررسی کنید.",
"translate-manage-submit": "اجرا",
- "translate-manage-intro-other": "پایین فهرستی تغییرات ترجمه در زبان $1 است.\nلطفاً این تغییرات را بازبینی کرده و عملی که می‌خواهد برای هر به‌روزرسانی انجام دهید را انتخاب کنید.\nاگر شما می‌خواهید تغییرات را نادیده بگیرید، این عمل موقت خواهد بود.",
- "translate-manage-import-ok": "واردشده: $1",
- "translate-manage-import-done": "وارد کردن تکمیل شد!",
+ "translate-manage-intro-other": "فهرستی تغییرات ترجمه در زبان $1 در پایین قرار دارد.\nلطفاً این تغییرات را بازبینی کرده و عملی که می‌خواهید برای هر به‌روزرسانی انجام دهید را انتخاب کنید.\nاگر انتخاب کنید که تغییرات را نادیده بگیرید، این عمل موقت خواهد بود.",
+ "translate-manage-import-ok": "درون‌ریزی‌شده: $1",
+ "translate-manage-import-done": "درون‌ریزی تکمیل شد!",
"importtranslations": "درون‌ریزی ترجمه‌ها",
"translate-import-from-local": "بارگذاری پرونده محلی:",
- "translate-import-load": "دریافت پرونده",
+ "translate-import-load": "بارگیری پرونده",
"translate-import-err-dl-failed": "ناتوان از دریافت پرونده:\n$1",
- "translate-import-err-ul-failed": "بارگذاری پرونده موفق نبود.",
+ "translate-import-err-ul-failed": "بارگذاری پرونده شکست خورد",
"translate-import-err-invalid-title": "نام پروندهٔ داده شده <nowiki>$1</nowiki> نامعتبر است.",
"translate-import-err-no-such-file": "پرونده <nowiki>$1</nowiki> وجود ندارد یا به طور محلی بارگذاری نشده است.",
"translate-import-err-stale-group": "گروه پیغامی که این پرونده به آن تعلق دارد وجود ندارد.",
@@ -238,9 +251,7 @@
"translate-js-summary": "خلاصه:",
"translate-js-save": "ذخیره",
"translate-js-next": "ذخیره و بازکردن بعدی",
- "translate-js-nonext": "این آخرین پیغام این صفحه بود.",
"translate-js-skip": "پرش به بعدی",
- "translate-js-save-failed": "ذخیره نشد. لطفاً این خطا گزارش کنید.",
"translate-js-history": "تاریخچهٔ ترجمه",
"translate-js-support": "پرسش سؤال",
"translate-js-support-title": "اگر اطلاعات کافی برای ترجمهٔ درست این پیغام موجود نیست، سوال بپرسید.",
@@ -257,21 +268,9 @@
"translate-documentation-language": "مستندات پیام",
"translate-searchprofile": "ترجمه‌ها",
"translate-searchprofile-tooltip": "جستجو از تمامی ترجمه‌ها",
+ "translate-searchprofile-note": "گزینه‌های بیشتر جستجو از طریق [$1 جستجوی ترجمه] قابل دسترسی هستند.",
"translate-search-languagefilter": "پالایش بر اساس زبان:",
"translate-search-nofilter": "بدون پالایش",
- "translate-messagereview-submit": "نشانه‌گذاری به عنوان بازبینی‌شده",
- "translate-messagereview-progress": "در حال نشانه‌گذاری به عنوان بازبینی‌شده...",
- "translate-messagereview-failure": "نشانه‌گذاری به عنوان بازبینی‌شده نافرجام ماند: $1",
- "translate-messagereview-done": "بازبینی‌شده",
- "translate-messagereview-reviews": "بازبینی‌شده بدست {{PLURAL:$1|یک کاربر|$1 کاربر}}",
- "translate-messagereview-reviewswithyou": "بازبینی به دست {{PLURAL:$1|یک کاربر|$1 کاربر از جمله شما}}",
- "api-error-invalidrevision": "ترجمه یافت نشد",
- "api-error-unknownmessage": "پیغام یافت نشد",
- "api-error-fuzzymessage": "ترجمه برچسب ابهام دارد",
- "api-error-owntranslation": "شما نمی‌توانید ترجمه‌های خودتان را به عنوان بازبینی‌شده نشانه‌گذاری کنید",
- "translate-messagereview-no-fuzzy": "ترجمه‌های فازی را نمی‌توان به عنوان بازبینی‌شده نشانه‌گذاری کرد.",
- "translate-messagereview-no-own": "شما نمی‌توانید ترجمه‌های خودتان را به عنوان بازبینی‌شده نشانه‌گذاری کنید.",
- "translate-messagereview-doit": "این ترجمه را به عنوان بازبینی‌شده نشانه‌گذاری کنید.",
"log-name-translationreview": "سیاهه بازبینی ترجمه",
"log-description-translationreview": "سیاههٔ تمام بازبینی‌های ترجمه و گروه‌های پیغام",
"logentry-translationreview-message": "$1 ترجمهٔ $3 را {{GENDER:$2|بازبینی کرد}}",
@@ -280,8 +279,8 @@
"group-translate-sandboxed-member": "{{GENDER:$1|مترجم تأییدنشده}}",
"right-translate-sandboxmanage": "مدیریت صفحهٔ تمرین کاربران",
"action-translate-sandboxmanage": "مدیریت صفحهٔ تمرین کاربران",
- "right-translate-sandboxaction": "اجرای اعمال فهرست سفید شده برای کاربران آزمایشی",
- "action-translate-sandboxaction": "اجرای اعمال فهرست سفید شده برای کاربران آزمایشی",
+ "right-translate-sandboxaction": "اجرای اعمالی که برای کاربران آزمایشی در فهرست سفید هستند",
+ "action-translate-sandboxaction": "اجرای اعمالی که برای کاربران آزمایشی در فهرست سفید هستند",
"translate-workflow-state-": "(تنظیم‌نشده)",
"translate-workflowstatus": "وضعیت: $1",
"translate-workflow-set-doing": "در حال تنظیم کردن ...",
@@ -293,8 +292,7 @@
"translate-dynagroup-recent-desc": "این گروه از پیام‌ها تمام ترجمه‌های اخیر در این زبان را نمایش می‌دهد.\nاین فهرست به‌ویژه برای کارهای بازبینی کاربرد دارد.",
"translate-dynagroup-additions-label": "اخیراً اضافه‌شده",
"translate-dynagroup-additions-desc": "این گروه پیامی، پیام‌های تازه و تغییریافته را نمایش می‌دهد.",
- "translate-gethelp": "راهنما",
- "translate-msggroupselector-projects": "گروه پیام",
+ "translate-msggroupselector-projects": "گروه پیغام",
"translate-msggroupselector-search-placeholder": "گروه‌های جستجو",
"translate-msggroupselector-search-all": "همه",
"translate-msggroupselector-search-recent": "اخیر",
@@ -312,32 +310,35 @@
"tux-status-translated": "ترجمه‌شده",
"tux-status-saving": "در حال ذخیره‌سازی...",
"tux-status-unsaved": "ذخیره‌نشده",
+ "tux-save-unknown-error": "خطای ناشناخته رخ داد.",
"tux-editor-placeholder": "ترجمهٔ شما",
+ "tux-editor-editsummary-placeholder": "خلاصهٔ اختیاری",
"tux-editor-paste-original-button-label": "چسباندن متن مبدأ",
"tux-editor-discard-changes-button-label": "دور ریختن تغییرات",
"tux-editor-save-button-label": "ذخیره‌سازی ترجمه",
"tux-editor-skip-button-label": "پرش به بعدی",
"tux-editor-cancel-button-label": "لغو",
"tux-editor-confirm-button-label": "تأیید ترجمه",
- "tux-editor-shortcut-info": "برای ذخیره‌ «$1» یا برای پرش به پیام بعدی «$2» یا برای دیگر میانبرها «$3» را فشار دهید.",
+ "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-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 بار استفاده شده",
"tux-editor-message-desc-more": "مشاهدهٔ بیشتر",
"tux-editor-message-desc-less": "مشاهدهٔ کمتر",
- "tux-editor-clear-translated": "نهفتن ترجمه‌شده‌ها",
+ "tux-editor-clear-translated": "پنهان کردن ترجمه‌شده‌ها",
"tux-editor-proofreading-mode": "بازبینی",
"tux-editor-translate-mode": "فهرست",
- "tux-editor-proofreading-hide-own-translations": "عدم نمایش ترجمه شما",
- "tux-editor-proofreading-show-own-translations": "نمایش ترجمه شما",
+ "tux-editor-proofreading-hide-own-translations": "پنهان کردن ترجمه‌های شما",
+ "tux-editor-proofreading-show-own-translations": "نمایش ترجمه‌های شما",
"tux-proofread-action-tooltip": "نشانه‌گذاری به عنوان ترجمه‌شده",
"tux-proofread-edit-label": "ویرایش",
"tux-editor-page-mode": "صفحه",
@@ -351,18 +352,18 @@
"tux-message-filter-placeholder": "پالایش فهرست",
"tux-message-filter-result": "$1 {{PLURAL:$1|نتیجه|نتیجه}} برای «$2» یافته شد.",
"tux-message-filter-advanced-button": "جستجوی پیشرفته",
- "tux-message-filter-optional-messages-label": "پیام‌های اختیاری",
+ "tux-message-filter-optional-messages-label": "پیغام‌های اختیاری",
"tux-proofread-translated-by-self": "ترجمه‌شده توسط شما",
- "tux-empty-list-all": "این گروه پیام خالی است",
- "tux-empty-list-all-guide": "یک گروه پیام متفاوت برای ترجمه انتخاب کنید",
- "tux-translate-page-no-such-group": "<strong>گروه نشان داده‌شده وجود ندارد.</strong> گروه پیامی دیگری را انتخاب کنید.",
- "tux-empty-list-translated": "بدون پیام ترجمه‌شده",
+ "tux-empty-list-all": "این گروه پیغام خالی است",
+ "tux-empty-list-all-guide": "یک گروه پیغام متفاوت برای ترجمه انتخاب کنید",
+ "tux-translate-page-no-such-group": "<strong>گروه مشخص‌شده وجود ندارد.</strong> گروه پیغام دیگری را انتخاب کنید.",
+ "tux-empty-list-translated": "بدون پیغام ترجمه‌شده",
"tux-empty-list-translated-guide": "شما می‌توانید در ترجمه کمک کنید",
"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-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-you-can-help-providing": "شما می‌توانید با ارائهٔ ترجمه‌های تازه کمک کنید",
"tux-empty-nothing-new-to-proofread": "چیز تازه‌ای برای بازبینی وجود ندارد",
@@ -374,16 +375,18 @@
"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": "حذف",
"tux-editor-message-tools-translations": "همهٔ ترجمه‌ها",
+ "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-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-title": "خطای تنظیمات",
"translate-ulsdep-body": "افزونهٔ ترجمه به [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector افزونهٔ انتخاب زبان جهانی] وابستگی دارد.",
"tux-session-expired": "شما دیگر داخل سامانه نیستید. لطفاً در یک زبانهٔ دیگر به سامانه وارد شوید. یا این که یک نسخه از ترجمه‌های ذخیره‌نشده تهیه کنید، به سامانه وارد شوید، به این صفحه بازگردید و ترجمه‌های خود را دوباره وارد کنید.",
- "tux-nojs": "این صفحه به جاوااسکریپت نیاز دارد."
+ "tux-nojs": "این ابزار بدون جاوااسکریپت کار نمی‌کند. جاوااسکریپت غیرفعال است، از کار افتاده است، یا توسط این مرورگر پشتیبانی نمی‌شود."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/fi.json b/www/wiki/extensions/Translate/i18n/core/fi.json
index e5f15952..e9e9fd0a 100644
--- a/www/wiki/extensions/Translate/i18n/core/fi.json
+++ b/www/wiki/extensions/Translate/i18n/core/fi.json
@@ -16,16 +16,14 @@
"VezonThunder",
"Vililikku",
"ZeiP",
- "Pxos"
+ "Pxos",
+ "Pyscowicz"
]
},
"translate": "Käännä",
- "translate-desc": "[[Special:Translate|Toimintosivu]], jolla voi kääntää MediaWikiä ja muutakin.",
- "translate-taskui-view": "Näytä kaikki viestit",
- "translate-taskui-untranslated": "Näytä kääntämättömät viestit",
- "translate-taskui-optional": "Näytä valinnaiset viestit",
- "translate-taskui-acceptqueue": "Vain viestit, jotka voin merkitä tarkastetuksi",
- "translate-taskui-reviewall": "Kaikkien käännösten tarkistus",
+ "translate-extensionname": "Käännä",
+ "translate-desc": "[[Special:Translate|Toimintosivu]] MediaWikin kääntämiseen ja muutakin.",
+ "translate-fuzzybot-desc": "Tämä on erityinen järjestelmätili jota MediaWikin [https://www.mediawiki.org/wiki/Extension:Translate Translate-laajennus] käyttää käännösten ylläpitoon.\nTämä tili on osa MediaWiki-ohjelmistoa ja sitä ei omista mikään käyttäjä.",
"translate-taskui-export-to-file": "Vie perusmuodossa",
"translate-taskui-export-as-po": "Vie off-line kääntämiseen soveltuvassa muodossa",
"translate-taction-translate": "Käännä",
@@ -37,7 +35,6 @@
"translate-page-no-such-language": "Tuntematon kieli.",
"translate-page-no-such-group": "Tuntematon ryhmä.",
"translate-page-disabled": "Käännökset tälle kielelle tässä ryhmässä on estetty.\nSyy:\n\n<em>$1</em>",
- "translate-page-disabled-source": "Tämän sivun lähdekieli on $1.",
"translate-language-disabled": "Kääntäminen tälle kielelle ei ole mahdollista.",
"translate-page-settings-legend": "Asetukset",
"translate-page-group": "Ryhmä",
@@ -48,13 +45,13 @@
"translate-page-navigation-legend": "Selaus",
"translate-page-showing": "Viestit $1–$2; yhteensä $3.",
"translate-page-showing-all": "Näytetään $1 {{PLURAL:$1|viesti|viestiä}}.",
+ "translate-page-showing-none": "Ei näytettäviä viestejä.",
"translate-next": "Seuraava sivu",
"translate-prev": "Edellinen sivu",
"translate-page-description-legend": "Tietoja ryhmästä",
"translate-page-description-hasoptional": "Tässä viestiryhmässä on valinnaisia viestejä.\nValinnaiset viestit on käännettävä vain kielille, joilla on erikoisvaatimuksia kuten välilyöntien puuttuminen tai erisnimien translitterointi. $1",
"translate-page-description-hasoptional-open": "Näytä valinnaiset viestit.",
"translate-page-edit": "muokkaa",
- "translate-ext-url": "<hr />Verkkosivu: $1",
"translate-optional": "(valinnainen)",
"translate-ignored": "(ei-käännettävä)",
"translate-edit-title": "Muokkaa sivua $1",
@@ -70,6 +67,11 @@
"translate-use-suggestion": "Korvaa nykyinen käännös tällä ehdotuksella.",
"translate-edit-nopermission": "Viestien kääntämiseen tarvitaan käännösoikeudet.",
"translate-edit-askpermission": "Hanki lupa",
+ "exporttranslations": "Vie käännöksiä",
+ "translate-export-form-format": "Muoto",
+ "translate-export-invalid-format": "Määritä kelvollinen muoto.",
+ "translate-export-not-supported": "Käännösten vientiä ei tueta.",
+ "translate-export-format-notsupported": "Määritelty vientimuoto ei tue viestiryhmää.",
"translate-magic-pagename": "Laajennettu MediaWikin kääntäminen",
"translate-magic-help": "Voit kääntää toimintosivujen vaihtoehtoisia nimiä, taikasanoja ja nimiavaruuksien nimiä.\n\nToimintosivujen vaihtoehtoisilla nimillä ja taikasanoilla voi olla useita käännöksiä.\nKäännökset erotetaan pilkulla (,).\nNimiavaruuksilla voi olla vain yksi käännös.\n\nNimiavaruuksien käännöksissä <code>$1 talk</code> on erikoistapaus. <code>$1</code> korvataan sivuston nimellä (esimerkiksi <code>{{ns:project_talk}}</code>).\nJos kielessäsi on mahdotonta muotoilla oikeaa käännöstä ilman sivuston nimen taivuttamista, kerro siitä sivulla [[Support]].\n\nSinun tulee olla kääntäjä, jotta voit tallentaa muutokset.\nMuutoksia ei tallenneta, ennen kuin painat Tallenna-painiketta.",
"translate-magic-module": "Moduuli:",
@@ -86,9 +88,9 @@
"translate-magic-special": "Toimintosivujen nimet",
"translate-magic-words": "Taikasanat",
"translate-magic-namespace": "Nimiavaruuksien nimet",
- "translate-magic-notsaved": "Muokkaustasi ei tallennettu.",
+ "translate-magic-notsaved": "Muokkaustasi ei tallennettu!",
"translate-magic-errors": "Korjaa {{PLURAL:$1|seuraava virhe|seuraavat virheet}} käännöksissä:",
- "translate-magic-saved": "Muutoksesi tallennettiin onnistuneesti.",
+ "translate-magic-saved": "Muutoksesi on tallennettu.",
"translate-checks-parameters": "{{PLURAL:$2|Seuraavaa parametria|Seuraavia parametreja}} ei käytetä:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Seuraava parametri on tuntematon|Seuraavat parametrit ovat tuntemattomia}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Pariton määrä {{PLURAL:$2|sulkeita}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -110,12 +112,22 @@
"translate-pref-editassistlang-help": "Pilkuin eroteltu lista kielikoodeista.\nViestin käännökset näillä kielillä näkyvät kääntäessäsi.\nAsetuksen oletusarvoiset kielet riippuvat kielestä, jolle olet kääntämässä.",
"translate-pref-editassistlang-bad": "Listassa on kelpaamaton kielikoodi:\n<nowiki>$1</nowiki>.",
"right-translate": "Kääntää käännöstyökalulla",
+ "action-translate": "kääntää käännöstyökalulla",
"right-translate-manage": "Hallinnoida viestiryhmiä",
"action-translate-manage": "hallita viestiryhmiä",
"right-translate-import": "Tuoda muilla työkaluilla tehtyjä käännöksiä",
"action-translate-import": "tuoda offline-käännöksiä",
"right-translate-messagereview": "Hyväksyä käännöksiä",
+ "action-translate-messagereview": "tarkastella käännöksiä",
"right-translate-groupreview": "Muuttaa viestiryhmien tilaa",
+ "action-translate-groupreview": "muuttaa viestiryhmien tilaa",
+ "translate-rcfilters-translations": "Käännökset",
+ "translate-rcfilters-translations-only-label": "Käännökset",
+ "translate-rcfilters-translations-only-desc": "Muutokset käännettyihin sivuihin.",
+ "translate-rcfilters-translations-filter-label": "Ei käännöksiä",
+ "translate-rcfilters-translations-filter-desc": "Kaikki muutokset jotka eivät ole käännöksiä.",
+ "translate-rcfilters-translations-site-label": "Sivuston viestit",
+ "translate-rcfilters-translations-site-desc": "Muokkaukset sivuston viesteihin MediaWiki-nimiavaruudessa.",
"translate-rc-translation-filter": "Käännösten suodatus",
"translate-rc-translation-filter-no": "älä suodata",
"translate-rc-translation-filter-only": "näytä vain käännökset",
@@ -178,6 +190,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ä",
@@ -188,16 +201,18 @@
"translate-mgs-noempty": "Älä näytä kieliä, joiden käännöstä ei ole aloitettu",
"translate-mgs-submit": "Näytä tilastot",
"translate-mgs-column-language": "Kieli",
- "translate-mgs-totals": "Kaikki kielet yhdessä",
+ "translate-mgs-totals": "Kaikki $1 {{PLURAL:$1|kieltä}} yhdessä",
"translate-mgs-invalid-group": "Määritettyä ryhmää $1 ei ole.",
"translate-mgs-nothing": "Pyydetyille tilastoille ei löydy tuloksia.",
"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ä.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|muokkaus|muokkausta}} - viimeinen muokkaus $3 {{PLURAL:$3|päivä|päivää}} sitten",
+ "abusefilter-edit-builder-vars-translate-source-text": "Käännösyksikön lähdeteksti",
"translate-save": "Tallenna ($1)",
"translate-jssti-add": "Lisää listaan",
"managemessagegroups": "Viestiryhmien hallinta",
@@ -238,9 +253,7 @@
"translate-js-summary": "Yhteenveto:",
"translate-js-save": "Tallenna",
"translate-js-next": "Tallenna ja avaa seuraava",
- "translate-js-nonext": "Tämä oli tämän sivun viimeinen viesti.",
"translate-js-skip": "Hyppää seuraavaan",
- "translate-js-save-failed": "Tallentaminen epäonnistui. Ilmoita tästä virheestä.",
"translate-js-history": "Käännöshistoria",
"translate-js-support": "Kysy kysymys",
"translate-js-support-title": "Pyydä apua, jos olemassa olevien tietojen avulla viestiä ei voi kääntää oikein.",
@@ -257,21 +270,9 @@
"translate-documentation-language": "käännösohjeet",
"translate-searchprofile": "Käännökset",
"translate-searchprofile-tooltip": "Hae kaikista käännöksistä",
+ "translate-searchprofile-note": "Lisää hakuvaihtoehtoja on saatavilla sivulla [$1 translation search].",
"translate-search-languagefilter": "Vain kielellä",
"translate-search-nofilter": "Ei suodatusta",
- "translate-messagereview-submit": "Merkitse tarkastetuksi",
- "translate-messagereview-progress": "Merkitään tarkastetuksi…",
- "translate-messagereview-failure": "Tarkastetuksi merkitseminen epäonnistui: $1",
- "translate-messagereview-done": "Tarkastettu",
- "translate-messagereview-reviews": "{{PLURAL:$1|Yhden|$1}} käyttäjän tarkastama",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|Sinun tarkastama|$1 käyttäjän tarkastama sinut mukaan lukien}}",
- "api-error-invalidrevision": "Käännöstä ei löytynyt",
- "api-error-unknownmessage": "Viestiä ei löytynyt",
- "api-error-fuzzymessage": "Käännös on merkitty sumeaksi",
- "api-error-owntranslation": "Et voi hyväksyä omia käännöksiäsi",
- "translate-messagereview-no-fuzzy": "Sumeita käännöksiä ei voi hyväksyä.",
- "translate-messagereview-no-own": "Et voi merkitä omia käännöksiäsi tarkastetuksi.",
- "translate-messagereview-doit": "Merkitse tämä käännös tarkastetuksi.",
"log-name-translationreview": "Arvioitujen käännösten loki",
"log-description-translationreview": "Kaikkien käännösten ja viestiryhmien arviointiloki.",
"logentry-translationreview-message": "$1 {{GENDER:$2|tarkasti}} käännöksen $3",
@@ -307,11 +308,13 @@
"tux-edit": "Muokkaa",
"tux-status-optional": "Valinnainen",
"tux-status-fuzzy": "Vanhentunut",
- "tux-status-proofread": "Tarkastettu",
+ "tux-status-proofread": "Oikoluettu",
"tux-status-translated": "Käännetty",
"tux-status-saving": "Tallennetaan...",
"tux-status-unsaved": "Tallentamaton",
+ "tux-save-unknown-error": "Tapahtui tuntematon virhe.",
"tux-editor-placeholder": "Käännös",
+ "tux-editor-editsummary-placeholder": "Valinnainen yhteenveto",
"tux-editor-paste-original-button-label": "Liitä lähdeteksti",
"tux-editor-discard-changes-button-label": "Hylkää muutokset",
"tux-editor-save-button-label": "Tallenna käännös",
@@ -319,7 +322,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 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",
@@ -334,7 +337,7 @@
"tux-editor-message-desc-more": "Näytä lisää",
"tux-editor-message-desc-less": "Näytä vähemmän",
"tux-editor-clear-translated": "Piilota käännetyt",
- "tux-editor-proofreading-mode": "Tarkastus",
+ "tux-editor-proofreading-mode": "Oikoluku",
"tux-editor-translate-mode": "Luettelo",
"tux-editor-proofreading-hide-own-translations": "Piilota omat käännökset",
"tux-editor-proofreading-show-own-translations": "Näytä omat käännökset",
@@ -374,9 +377,11 @@
"tux-editor-close-tooltip": "Sulje",
"tux-editor-expand-tooltip": "Suurenna",
"tux-editor-collapse-tooltip": "Pienennä",
+ "tux-editor-message-tools-show-editor": "Näytä wikimuokkaimessa",
"tux-editor-message-tools-history": "Historia",
"tux-editor-message-tools-delete": "Poista",
"tux-editor-message-tools-translations": "Kaikki käännökset",
+ "tux-editor-message-tools-linktothis": "Linkki tähän viestiin",
"tux-editor-loading": "Ladataan...",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|kieli|kieltä}} lisää",
"translate-statsbar-tooltip": "$1 % käännetty, $2 % tarkastettu",
@@ -384,5 +389,6 @@
"translate-search-more-groups-info": "$1 {{PLURAL:$1|muu ryhmä|muuta ryhmää}}",
"translate-ulsdep-title": "Asennusvirhe",
"translate-ulsdep-body": "Translate-laajennos vaati [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector Universal Language Selector -laajennoksen].",
- "tux-session-expired": "Et ole enää kirjautunut sisään. Kirjaudu sisään toisessä välilehdessä. Vaihtoehtoisesti voit kopioida tallentamattomat käännökset, kirjautua sisään ja palata tälle sivulle."
+ "tux-session-expired": "Et ole enää kirjautunut sisään. Kirjaudu sisään toisessä välilehdessä. Vaihtoehtoisesti voit kopioida tallentamattomat käännökset, kirjautua sisään ja palata tälle sivulle tallentamaan käännökset uudestaan.",
+ "tux-nojs": "Tämä työkalu ei toimi ilman JavaScriptiä. JavaScript on poistettu käytöstä, se ei toimi, tai tätä selainta ei tueta."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/fo.json b/www/wiki/extensions/Translate/i18n/core/fo.json
index 46260ae1..1dd0d83a 100644
--- a/www/wiki/extensions/Translate/i18n/core/fo.json
+++ b/www/wiki/extensions/Translate/i18n/core/fo.json
@@ -6,11 +6,6 @@
},
"translate": "Týð",
"translate-desc": "[[Special:Translate|Serstøk síða]] til týðing av MediaWiki og øðrum",
- "translate-taskui-view": "Vís øll boð",
- "translate-taskui-untranslated": "Vís ótýdd boð",
- "translate-taskui-optional": "Vís valfrí boð",
- "translate-taskui-acceptqueue": "Bert boð ið eg kann rættlesa",
- "translate-taskui-reviewall": "Rættles allar týðingar",
"translate-taskui-export-as-po": "Útflyt til offline týðing",
"translate-taction-translate": "Týð",
"translate-taction-proofread": "Les rættlestur",
@@ -38,7 +33,6 @@
"translate-page-description-hasoptional": "Hesin biðbólkur inniheldur valfrí boð.\nValfrí boð eiga bert at verða týdd, um títt mál setur serlig krøv sum til dømis ikki at brúka millumrúm ella um sernøvn vera umskrivaði. $1",
"translate-page-description-hasoptional-open": "Vís valfrí boð.",
"translate-page-edit": "rætta",
- "translate-ext-url": "<hr />Heimasíða: $1",
"translate-optional": "(valfrítt)",
"translate-ignored": "(síggj burtur frá)",
"translate-edit-title": "Rætta \"$1\"",
@@ -47,9 +41,7 @@
"translate-edit-no-information": "''Hesi boðini hava onga dokumentasjón.''\n''Um tú veitst hvar ella hvussu hesi boðini verða nýtt, so kanst tú hjálpa øðrum týðarum við at viðleggja dokumentasjón til hesi boðini.''",
"translate-edit-information": "Kunning um boð ($1)",
"translate-edit-in-other-languages": "Boðini á øðrum málum",
- "translate-edit-committed": "Verandi týðing í ritbúnaðinum",
"translate-edit-warnings": "Ávaring um ófullfíggjaðar týðingar",
- "translate-edit-tmsugs": "Uppskot frá týðingarminninum og sjálvvirkandi týðingum (maskintýðingum)",
"translate-edit-tmmatch-source": "Keldutekstur til týðingar: $1",
"translate-edit-tmmatch": "$1% samsvar",
"translate-use-suggestion": "Skift út verandi týðing við hetta uppskotið.",
@@ -125,7 +117,6 @@
"translate-statsf-language": "Komma-atskildur listi yvir málsligar kotur:",
"translate-statsf-group": "Komma-sundurskildur listi yvir bólkakotur:",
"translate-statsf-submit": "Forskoðan",
- "translate-tag-category": "Síður ið kunnu týðast",
"translate-tag-page-desc": "Týðing av wiki síðuni [[$2|$1]].",
"translate-sidebar-alltrans": "Á øðrum málum",
"translations": "Allar týðingar",
@@ -199,9 +190,7 @@
"translate-js-summary": "Samandráttur:",
"translate-js-save": "Goym",
"translate-js-next": "Goym og lat upp næsta",
- "translate-js-nonext": "Hetta var seinasta boðið á hesi síðu.",
"translate-js-skip": "Loyp um og far til næsta",
- "translate-js-save-failed": "Tað miseydnaðist at goyma. Vinarliga melda henda feilin.",
"translate-js-history": "Týðingarsøgan",
"translate-js-support": "Spyr ein spurning",
"translate-js-support-title": "Bið um hjálp um tað ikki er nokk av kunning til at týða hesi boðini rætt.",
@@ -219,19 +208,6 @@
"translate-searchprofile-tooltip": "Leita í øllum týðingum",
"translate-search-languagefilter": "Filtrera eftir máli:",
"translate-search-nofilter": "Ongin filtrering",
- "translate-messagereview-submit": "Merk sum rættlisið",
- "translate-messagereview-progress": "Markerar sum rættlisið...",
- "translate-messagereview-failure": "Tað miseydnaðist at merkja sum rættlisið: $1",
- "translate-messagereview-done": "Rættlisið",
- "translate-messagereview-reviews": "Rættlisið av {{PLURAL:$1|einum brúkara|$1 brúkarum}}",
- "translate-messagereview-reviewswithyou": "Rættlisið av {{PLURAL:$1|tær|$1 brúkarum harímillum tú}}",
- "api-error-invalidrevision": "Týðing varð ikki funnin",
- "api-error-unknownmessage": "Boðið varð ikki funnið",
- "api-error-fuzzymessage": "Týðing er merkt sum avoldað",
- "api-error-owntranslation": "Tú kanst ikki merkja tínar egnu týðingar sum rættlisnar",
- "translate-messagereview-no-fuzzy": "Avoldaðar týðingar kunnu ikki merkjast sum rættlisnar.",
- "translate-messagereview-no-own": "Tú kanst ikki merkja tínar egnu týðingar sum rættlisnar.",
- "translate-messagereview-doit": "Merk hesa týðing sum rættlisnað.",
"log-name-translationreview": "Loggur fyri týðingarrættlestur",
"logentry-translationreview-message": "$1 {{GENDER:$2|rættlæs}} týðingina $3",
"logentry-translationreview-group": "$1 {{GENDER:$2|broytti}} status fyri $4 týðingar hjá $3 frá $6 til $7",
@@ -240,7 +216,6 @@
"translate-dynagroup-recent-label": "Seinastu týðingar",
"translate-dynagroup-recent-desc": "Hesin boðbólkur vísir allar tær seinastu týðingarnar til hetta málið. Mest týðandi hjá teimum sum arbeiða við rættlestri.",
"translate-dynagroup-additions-desc": "Hesin boðbólkur vísir nýggj og broytt boð.",
- "translate-gethelp": "Hjálp",
"translate-msggroupselector-projects": "Boðbólkur",
"translate-msggroupselector-search-placeholder": "Leita eftir bólkum",
"translate-msggroupselector-search-all": "Alt",
diff --git a/www/wiki/extensions/Translate/i18n/core/fon.json b/www/wiki/extensions/Translate/i18n/core/fon.json
new file mode 100644
index 00000000..59429ebf
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/fon.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mahuton"
+ ]
+ },
+ "translate-documentation-language": "Sɛ́n é ná xwedó bo ná do nɔ́ bló tinmɛ lɛ é"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/fr.json b/www/wiki/extensions/Translate/i18n/core/fr.json
index 77499326..8915b79f 100644
--- a/www/wiki/extensions/Translate/i18n/core/fr.json
+++ b/www/wiki/extensions/Translate/i18n/core/fr.json
@@ -35,17 +35,17 @@
"Linedwell",
"Orikrin1998",
"Dr Brains",
- "Wladek92"
+ "Wladek92",
+ "Yasten",
+ "Thibaut120094",
+ "Epok",
+ "Pols12"
]
},
"translate": "Traduire",
"translate-extensionname": "Traduire",
"translate-desc": "[[Special:Translate|Page spéciale]] pour traduire MediaWiki et au-delà",
- "translate-taskui-view": "Afficher tous les messages",
- "translate-taskui-untranslated": "Afficher les messages non traduits",
- "translate-taskui-optional": "Afficher les messages facultatifs",
- "translate-taskui-acceptqueue": "Uniquement les messages que je peux marquer comme relus",
- "translate-taskui-reviewall": "Revoir toutes les traductions",
+ "translate-fuzzybot-desc": "C’est un compte système spécial utilisée par l’[https://www.mediawiki.org/wiki/Extension:Translate extension Translate] de MédiaWiki utilisé pour maintenir les traductions.\nCe compte fait partie du logiciel MédiaWiki et n’appartient à aucun utilisateur.",
"translate-taskui-export-to-file": "Exporter au format natif",
"translate-taskui-export-as-po": "Exporter pour une traduction hors-ligne",
"translate-taction-translate": "Traduire",
@@ -57,7 +57,6 @@
"translate-page-no-such-language": "Le code langue indiqué est incorrect.",
"translate-page-no-such-group": "Le groupe spécifié est incorrect.",
"translate-page-disabled": "Les traductions dans cette langue ont été désactivées pour ce groupe.\nMotif :\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 est la langue source de cette page.",
"translate-language-disabled": "La traduction dans cette langue est désactivée.",
"translate-page-settings-legend": "Configuration",
"translate-page-group": "Groupe",
@@ -68,31 +67,36 @@
"translate-page-navigation-legend": "Navigation",
"translate-page-showing": "Visualisation des messages de $1 à $2 sur $3.",
"translate-page-showing-all": "Visualisation de $1 message{{PLURAL:$1||s}}",
+ "translate-page-showing-none": "Aucun message à visualiser.",
"translate-page-paging-links": "<nowiki>[</nowiki>$1<nowiki>]</nowiki> <nowiki>[</nowiki>$2<nowiki>]</nowiki>",
"translate-next": "Page suivante",
"translate-prev": "Page précédente",
"translate-page-description-legend": "Informations à propos du groupe",
- "translate-page-description-hasoptional": "Ce groupe de messages contient les messages facultatifs.\nLes messages facultatifs ne devraient être traduits que quand votre langue a des exigences particulières comme ne pas utiliser d’espaces ou transformer des noms propres. $1",
+ "translate-page-description-hasoptional": "Ce groupe de messages contient des messages facultatifs.\nLes messages facultatifs ne devraient être traduits que quand votre langue a des exigences particulières comme ne pas utiliser d’espaces ou transformer des noms propres. $1",
"translate-page-description-hasoptional-open": "Afficher les messages facultatifs.",
"translate-page-edit": "modifier",
- "translate-ext-url": "<hr />Site web : $1",
"translate-optional": "(facultatif)",
"translate-ignored": "(ignoré)",
"translate-edit-title": "Modifier « $1 »",
"translate-edit-definition": "Définition du message",
"translate-edit-translation": "Traduction",
"translate-edit-contribute": "contribuer",
- "translate-edit-no-information": "<em>Ce message n’est pas documenté.\nSi vous savez où ou comment il est utilisé, vous pouvez aider les autres traducteurs en créant la documentation de ce message.</em>",
+ "translate-edit-no-information": "<em>Ce message n’est pas documenté.\nSi vous savez où ou comment il est utilisé, vous pouvez aider les autres traducteurs en créant sa documentation.</em>",
"translate-edit-information": "Informations concernant le message ($1)",
"translate-edit-in-other-languages": "Message dans d’autres langues",
"translate-edit-warnings": "Avertissements sur les traductions incomplètes",
- "translate-edit-tmmatch-source": "Texte source de la traduction : $1",
+ "translate-edit-tmmatch-source": "Texte source de la traduction : $1",
"translate-edit-tmmatch": "$1 % de correspondance",
"translate-use-suggestion": "Remplacer la traduction actuelle par cette suggestion.",
"translate-edit-nopermission": "Vous devez obtenir les droits de traduction pour traduire des messages.",
"translate-edit-askpermission": "Obtenir la permission",
+ "exporttranslations": "Exporter des traductions",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Veuillez fournir un format valide.",
+ "translate-export-not-supported": "L’exportation de traductions n’est pas prise en charge.",
+ "translate-export-format-notsupported": "Le format d’exportation spécifié n’est pas pris en charge par le groupe de messages.",
"translate-magic-pagename": "Traduction étendue de MediaWiki",
- "translate-magic-help": "Vous pouvez traduire les alias de pages spéciales, les mots magiques et les noms des espaces de noms.\n\nLes alias de pages spéciales et les mots magiques peuvent avoir plusieurs traductions.\nLes traductions sont séparées par une virgule (,).\nLes espaces de noms ne peuvent avoir qu’une seule traduction.\n\nTraduire l’espace de noms de discussion du projet <code>$1 talk</code> peut être compliqué.\n<code>$1</code> est remplacé par le nom du site (par exemple <code>{{ns:project_talk}}</code>).\nS’il n’est pas possible d’obtenir une expression valide dans votre langue sans changer le nom du site, veuillez nous contacter sur [[Support]].\n\nVous devez appartenir au groupe des traducteurs pour enregistrer toute modification.\nLes modifications ne sont pas enregistrées tant que vous n’avez pas cliqué sur le bouton « sauvegarder » en bas.",
+ "translate-magic-help": "Vous pouvez traduire les alias de pages spéciales, les mots magiques et les noms des espaces de noms.\n\nLes alias de pages spéciales et les mots magiques peuvent avoir plusieurs traductions.\nLes traductions sont séparées par une virgule (,).\nLes espaces de noms ne peuvent avoir qu’une seule traduction.\n\nTraduire l’espace de noms de discussion du projet <code>$1 talk</code> peut être compliqué.\n<code>$1</code> est remplacé par le nom du site (par exemple <code>{{ns:project_talk}}</code>).\nS’il n’est pas possible d’obtenir une expression valide dans votre langue sans changer le nom du site, veuillez nous contacter sur [[Support|Soutien]].\n\nVous devez appartenir au groupe des traducteurs pour enregistrer toute modification.\nLes modifications ne sont pas enregistrées tant que vous n’avez pas cliqué sur le bouton « sauvegarder » en bas.",
"translate-magic-module": "Module :",
"translate-magic-submit": "Lister",
"translate-magic-cm-export": "Exporter",
@@ -107,17 +111,17 @@
"translate-magic-special": "Alias des pages spéciales",
"translate-magic-words": "Mots magiques",
"translate-magic-namespace": "Noms des espaces de noms",
- "translate-magic-notsaved": "Votre modification n’a pas été sauvegardée !",
- "translate-magic-errors": "Corrigez {{PLURAL:$1|l’erreur suivante|les erreurs suivantes}} dans les traductions :",
+ "translate-magic-notsaved": "Votre modification n’a pas été sauvegardée !",
+ "translate-magic-errors": "Corrigez {{PLURAL:$1|l’erreur suivante|les erreurs suivantes}} dans les traductions :",
"translate-magic-saved": "Vos modifications ont été enregistrées.",
- "translate-checks-parameters": "{{PLURAL:$2|Le paramètre suivant n’est pas utilisé|Les paramètres suivants ne sont pas utilisés}} :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-parameters": "{{PLURAL:$2|Le paramètre suivant n’est pas utilisé|Les paramètres suivants ne sont pas utilisés}} :\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Le paramètre suivant est inconnu|Les paramètres suivants sont inconnus}} :\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Il y a un nombre impair de parenthèse{{PLURAL:$2||s}} :\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "{{PLURAL:$2|Le lien suivant pose|Les $2 liens suivants posent}} problème :\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "{{PLURAL:$2|Le lien suivant est manquant|Les $2 liens suivants sont manquants}} :\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Veuillez corriger {{PLURAL:$2|la balise suivante|les balises suivantes}} :\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "La définition utilise <nowiki>{{PLURAL:}}</nowiki> mais pas sa traduction.",
- "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> a reçu {{PLURAL:$1|une forme|$1 formes}} mais {{PLURAL:$2|une seule est supportée|seules $2 sont supportées}} (hors les formes 0= et 1=).",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> a reçu {{PLURAL:$1|une forme|$1 formes}} mais {{PLURAL:$2|une seule est prise|seules $2 sont prises}} en charge (hors les formes 0= et 1=).",
"translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> a des formes dupliquées au final. <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> devrait être écrit ainsi: <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
"translate-checks-pagename": "Espace de noms modifié depuis la définition",
"translate-checks-format": "Cette traduction ne suit pas la définition ou a une syntaxe incorrecte : $1",
@@ -131,12 +135,22 @@
"translate-pref-editassistlang-help": "Liste de codes de langues séparés par une virgule.\nLa traduction d’un message dans ces langues est affiché quand vous êtes en train de le traduire.\nLa liste par défaut des langues varie en fonction de votre langue.",
"translate-pref-editassistlang-bad": "Code langue invalide dans la liste :\n<nowiki>$1</nowiki>.",
"right-translate": "Modifier avec l’interface de traduction",
+ "action-translate": "modifier en utilisant l’interface de traduction",
"right-translate-manage": "Gérer les groupes de message",
"action-translate-manage": "gérer les groupes de messages",
"right-translate-import": "Importer les traductions hors ligne",
"action-translate-import": "importer les traductions hors-ligne",
- "right-translate-messagereview": "Examiner les traductions",
+ "right-translate-messagereview": "Marquer comme relues les traductions",
+ "action-translate-messagereview": "relire les traductions",
"right-translate-groupreview": "Modifier l'état de flux de travail des groupes de message",
+ "action-translate-groupreview": "modifier l'état du flux de travail pour les groupes de messages",
+ "translate-rcfilters-translations": "Traductions",
+ "translate-rcfilters-translations-only-label": "Traductions",
+ "translate-rcfilters-translations-only-desc": "Modifications apportées aux pages traduites.",
+ "translate-rcfilters-translations-filter-label": "Non traduits",
+ "translate-rcfilters-translations-filter-desc": "Toutes les modifications qui ne sont pas des traductions.",
+ "translate-rcfilters-translations-site-label": "Messages système",
+ "translate-rcfilters-translations-site-desc": "Adaptation des messages système dans l'espace de noms MediaWiki.",
"translate-rc-translation-filter": "Filtrer les traductions :",
"translate-rc-translation-filter-no": "Ne rien faire",
"translate-rc-translation-filter-only": "Afficher uniquement les traductions",
@@ -148,39 +162,39 @@
"translate-stats-registrations": "Inscriptions",
"translate-stats-reviews": "Relectures",
"translate-stats-reviewers": "Relecteurs",
- "translate-statsf-intro": "Vous pouvez générer des statistiques simples via ce formulaire.\nToutes les valeurs ont des limites supérieure et inférieure.",
+ "translate-statsf-intro": "Vous pouvez générer des statistiques simples <i>via</i> ce formulaire.\nToutes les valeurs ont des limites supérieures et inférieures.",
"translate-statsf-options": "Options du graphique",
"translate-statsf-width": "Largeur en pixels :",
- "translate-statsf-height": "Hauteur en pixels",
- "translate-statsf-days": "Date de début:",
- "translate-statsf-start": "Date de début:",
- "translate-statsf-scale": "Granularité :",
+ "translate-statsf-height": "Hauteur en pixels :",
+ "translate-statsf-days": "Durée de la période, en jours :",
+ "translate-statsf-start": "Date de début :",
+ "translate-statsf-scale": "Granularité :",
"translate-statsf-scale-months": "Mois",
"translate-statsf-scale-weeks": "Semaines",
"translate-statsf-scale-days": "Jours",
"translate-statsf-scale-hours": "Heures",
- "translate-statsf-count": "Mesure :",
+ "translate-statsf-count": "Mesure :",
"translate-statsf-count-edits": "Nombre de modifications",
"translate-statsf-count-users": "Traducteurs actifs",
"translate-statsf-count-registrations": "Nouveaux utilisateurs",
"translate-statsf-count-reviews": "Relectures de traduction",
"translate-statsf-count-reviewers": "Relecteurs",
- "translate-statsf-language": "Liste de codes de langues séparés par des virgules :",
- "translate-statsf-group": "Liste de codes de groupes séparés par des virgules :",
+ "translate-statsf-language": "Liste de codes de langues séparés par des virgules :",
+ "translate-statsf-group": "Liste de codes de groupes séparés par des virgules :",
"translate-statsf-submit": "Prévisualiser",
"translate-tag-page-desc": "Traduction de la page wiki [[$2|$1]] depuis $3 ($4).",
"translate-sidebar-alltrans": "Dans les autres langues",
"translations": "Toutes les traductions",
"translations-summary": "Entrez un nom de message ci-dessous pour visualiser toutes les traductions disponibles.",
- "translate-translations-no-message": "« $1 » n’est pas un message traduisible",
- "translate-translations-none": "Il n’y a pas de traduction pour « $1 »",
+ "translate-translations-no-message": "« $1 » n’est pas un message traduisible.",
+ "translate-translations-none": "Il n’y a pas de traduction pour « $1 ».",
"translate-translations-count": "Il existe {{PLURAL:$1|une traduction|$1 traductions}}.",
"translate-translations-fieldset-title": "Message",
- "translate-translations-messagename": "Nom :",
- "translate-translations-project": "Projet :",
+ "translate-translations-messagename": "Nom :",
+ "translate-translations-project": "Projet :",
"translate-translations-including-no-param": "Veuillez spécifier une clé de message correcte dans le paramètre ''subpage''",
"translate-translations-history-short": "h",
- "languagestats": "Statistiques des langues",
+ "languagestats": "Statistiques de langue",
"languagestats-summary": "Cette page affiche les statistiques de traduction de tous les groupes de messages dans une langue donnée.",
"messagegroupstats-summary": "Cette page affiche les statistiques de groupe de messages.",
"languagestats-stats-for": "Statistiques de traduction pour $1 ($2).",
@@ -192,13 +206,14 @@
"translate-langstats-collapseall": "Tout replier",
"translate-language-code": "Code de langue",
"translate-language-code-field-name": "Code de langue :",
- "translate-suppress-complete": "Ne pas afficher les groupes de messages entièrement traduits",
- "translate-ls-noempty": "Supprimer complètement les groupes de message non traduits",
+ "translate-suppress-complete": "Masquer les groupes de messages entièrement traduits",
+ "translate-ls-noempty": "Masquer les groupes de messages sans aucune traduction",
"translate-language": "Langue",
"translate-total": "Messages",
"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",
@@ -209,7 +224,7 @@
"translate-mgs-noempty": "Ne pas afficher les langues qui n’ont aucune traduction",
"translate-mgs-submit": "Afficher les statistiques",
"translate-mgs-column-language": "Langue",
- "translate-mgs-totals": "Toutes les langues ensemble",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|langue|langues}} au total",
"translate-mgs-invalid-group": "Le groupe spécifié $1 n’existe pas.",
"translate-mgs-nothing": "Rien à afficher pour les statistiques demandées.",
"supportedlanguages": "Langues prises en charge",
@@ -217,10 +232,12 @@
"supportedlanguages-colorlegend": "Légende pour la couleur: Dernière traduction il y a $1 jours.",
"supportedlanguages-portallink": "[$1] $2 — $3",
"supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite n'est pas supporté",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traducteur|Traductrice}}|Traducteurs}} : $1",
"supportedlanguages-recenttranslations": "traductions récentes",
"supportedlanguages-count": "$1 {{PLURAL:$1|langue|langues}} au total.",
"supportedlanguages-activity": "$1 : $2 modification{{PLURAL:$2||s}} - Dernière modification il y a $3 jour{{PLURAL:$3||s}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texte source de l'unité de traduction",
"translate-save": "Publier ($1)",
"translate-jssti-add": "Ajouter à la liste",
"managemessagegroups": "Gestion du groupe des messages",
@@ -252,7 +269,7 @@
"translate-import-from-local": "Importer un fichier local :",
"translate-import-load": "Charger le fichier",
"translate-import-err-dl-failed": "Impossible d’accéder au fichier :\n$1",
- "translate-import-err-ul-failed": "Le téléchargement du fichier a échoué",
+ "translate-import-err-ul-failed": "Le téléversement du fichier a échoué",
"translate-import-err-invalid-title": "Le nom du fichier fourni <nowiki>$1</nowiki> est invalide.",
"translate-import-err-no-such-file": "Le fichier <nowiki>$1</nowiki> n’existe pas ou n’a pas été importé localement.",
"translate-import-err-stale-group": "Le groupe de messages auquel ce fichier appartient n’existe pas.",
@@ -261,9 +278,7 @@
"translate-js-summary": "Résumé :",
"translate-js-save": "Enregistrer",
"translate-js-next": "Enregistrer et ouvrir le suivant",
- "translate-js-nonext": "C’était le dernier message de cette page.",
"translate-js-skip": "Aller au suivant",
- "translate-js-save-failed": "L’enregistrement a échoué. Veuillez signaler cette erreur.",
"translate-js-history": "Historique de traduction",
"translate-js-support": "Poser une question",
"translate-js-support-title": "Demandez de l’aide s’il n’y a pas suffisamment d’informations pour traduire ce message correctement.",
@@ -280,21 +295,9 @@
"translate-documentation-language": "Documentation du message",
"translate-searchprofile": "Traductions",
"translate-searchprofile-tooltip": "Rechercher dans toutes les traductions",
+ "translate-searchprofile-note": "Plus d'options de recherche sont disponibles avec [$1 recherche de traductions].",
"translate-search-languagefilter": "Filtrer par langue :",
"translate-search-nofilter": "Aucun filtrage",
- "translate-messagereview-submit": "Marquer comme relu",
- "translate-messagereview-progress": "En cours de marquage comme relu…",
- "translate-messagereview-failure": "Échec du marquage comme relu : $1",
- "translate-messagereview-done": "Relu",
- "translate-messagereview-reviews": "Relu par {{PLURAL:$1| un utilisateur| $1 utilisateurs}}",
- "translate-messagereview-reviewswithyou": "Relu par {{PLURAL:$1|vous|$1 utilisateurs, vous y compris}}",
- "api-error-invalidrevision": "La traduction n'a pas été trouvée",
- "api-error-unknownmessage": "Le message n'a pas été trouvé",
- "api-error-fuzzymessage": "La traduction est marquée comme « floue »",
- "api-error-owntranslation": "Vous ne pouvez pas marquer vos propres traductions comme relues",
- "translate-messagereview-no-fuzzy": "Les traductions douteuses ne peuvent pas être marquées comme relues.",
- "translate-messagereview-no-own": "Vous ne pouvez pas marquer vos propres traductions comme relues.",
- "translate-messagereview-doit": "Marquer cette traduction comme relue.",
"log-name-translationreview": "Journal de relecture des traductions",
"log-description-translationreview": "Journal de toutes les relectures des traductions et des groupes de message.",
"logentry-translationreview-message": "$1 {{GENDER:$2|a relu}} la traduction $3",
@@ -316,7 +319,6 @@
"translate-dynagroup-recent-desc": "Ce groupe de messages montre toutes les traductions récentes faites dans cette langue.\nIl est surtout utilisé pour les tâches de relecture.",
"translate-dynagroup-additions-label": "Ajouts récents",
"translate-dynagroup-additions-desc": "Ce groupe de messages affiche les messages nouveaux et modifiés.",
- "translate-gethelp": "Aide",
"translate-msggroupselector-projects": "Groupe de messages",
"translate-msggroupselector-search-placeholder": "Rechercher des groupes",
"translate-msggroupselector-search-all": "Tous",
@@ -325,17 +327,19 @@
"tux-languageselector": "Traduire en",
"tux-tab-all": "Tous",
"tux-tab-untranslated": "Non traduit",
- "tux-tab-outdated": "Obsolète",
+ "tux-tab-outdated": "Désuets",
"tux-tab-translated": "Traduit",
"tux-tab-unproofread": "Non relu",
"tux-edit": "Modifier",
"tux-status-optional": "Facultatif",
- "tux-status-fuzzy": "Obsolète",
+ "tux-status-fuzzy": "Désuète",
"tux-status-proofread": "Corrigé",
"tux-status-translated": "Traduit",
"tux-status-saving": "Enregistrement en cours…",
"tux-status-unsaved": "Non enregistrée",
+ "tux-save-unknown-error": "Une erreur inconnue s’est produite.",
"tux-editor-placeholder": "Votre traduction",
+ "tux-editor-editsummary-placeholder": "Résumé (facultatif)",
"tux-editor-paste-original-button-label": "Coller le texte source",
"tux-editor-discard-changes-button-label": "Annuler les modifications",
"tux-editor-save-button-label": "Enregistrer la traduction",
@@ -343,14 +347,14 @@
"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 « $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",
"tux-editor-in-other-languages": "En d’autres langues",
"tux-editor-need-more-help": "Besoin d’aide ?",
- "tux-editor-ask-help": "Demander plus d’information",
- "tux-editor-tm-match": "$1% correspond",
+ "tux-editor-ask-help": "Demander plus d’informations",
+ "tux-editor-tm-match": "$1 % de correspondance",
"tux-warnings-more": "{{PLURAL:$1|$1 de plus}}",
"tux-warnings-hide": "masquer",
"tux-editor-save-failed": "Échec de l’enregistrement de la traduction : $1",
@@ -372,8 +376,8 @@
"tux-editor-doc-editor-cancel": "Annuler",
"tux-messagetable-more-messages": "$1 {{PLURAL:$1|message|messages}} de plus",
"tux-messagetable-loading-messages": "Chargement {{PLURAL:$1|du message|des messages}}…",
- "tux-message-filter-placeholder": "Liste de filtres",
- "tux-message-filter-result": "$1 {{PLURAL:$1|résultat trouvé|résultats trouvés}} pour « $2 »",
+ "tux-message-filter-placeholder": "Filtrer la liste",
+ "tux-message-filter-result": "{{PLURAL:$1|0=Aucun résultat trouvé|1=Un résultat trouvé|$1 résultats trouvés}} pour « $2 »",
"tux-message-filter-advanced-button": "Recherche avancée",
"tux-message-filter-optional-messages-label": "Messages facultatifs",
"tux-proofread-translated-by-self": "Traduit par vous",
@@ -386,7 +390,7 @@
"tux-empty-no-messages-to-display": "Aucun message à afficher.",
"tux-empty-there-are-optional": "Il y a des messages facultatifs n’apparaissant pas dans la liste",
"tux-empty-show-optional-messages": "Afficher les messages facultatifs",
- "tux-empty-no-outdated-messages": "Pas de messages obsolètes",
+ "tux-empty-no-outdated-messages": "Pas de messages désuets",
"tux-empty-nothing-to-proofread": "Rien à relire",
"tux-empty-you-can-help-providing": "Vous pouvez aider en apportant de nouvelles traductions",
"tux-empty-nothing-new-to-proofread": "Rien de nouveau à relire",
@@ -398,16 +402,18 @@
"tux-editor-close-tooltip": "Fermer",
"tux-editor-expand-tooltip": "Développer",
"tux-editor-collapse-tooltip": "Replier",
+ "tux-editor-message-tools-show-editor": "Afficher dans l'éditeur wiki",
"tux-editor-message-tools-history": "Historique",
"tux-editor-message-tools-delete": "Supprimer",
"tux-editor-message-tools-translations": "Toutes les traductions",
+ "tux-editor-message-tools-linktothis": "Lien vers ce message",
"tux-editor-loading": "Chargement en cours…",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|langue supplémentaire|langues supplémentaires}}",
"translate-statsbar-tooltip": "$1% traduit, $2% relu",
- "translate-statsbar-tooltip-with-fuzzy": "$1% traduit, $2% relu, $3% obsolète",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% traduit, $2% relu, $3% désuet",
"translate-search-more-groups-info": "$1 groupe{{PLURAL:$1||s}} de plus",
"translate-ulsdep-title": "Erreur de configuration",
"translate-ulsdep-body": "L’extension de traduction dépend de l’[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector Universal extension Sélecteur de langue].",
"tux-session-expired": "Vous n’êtes plus connecté. Veuillez vous connecter dans un autre onglet. Sinon, faites une copie des traductions non enregistrées, connectez-vous et revenez sur cette page.",
- "tux-nojs": "Cette page nécessite JavaScript."
+ "tux-nojs": "Cet outil ne fonctionne pas sans JavaScript. JavaScript est désactivé ou n'a pas pu s'exécuter, ou cet explorateur ne le prend pas en charge."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/frp.json b/www/wiki/extensions/Translate/i18n/core/frp.json
index 1086890f..d216f5bf 100644
--- a/www/wiki/extensions/Translate/i18n/core/frp.json
+++ b/www/wiki/extensions/Translate/i18n/core/frp.json
@@ -7,11 +7,6 @@
},
"translate": "Traduire",
"translate-desc": "[[Special:Translate|Pâge spèciâla]] por traduire MediaWiki et en-delé",
- "translate-taskui-view": "Fâre vêre tôs los mèssâjos",
- "translate-taskui-untranslated": "Fâre vêre los mèssâjos pas traduits",
- "translate-taskui-optional": "Fâre vêre los mèssâjos u chouèx",
- "translate-taskui-acceptqueue": "Solament los mèssâjos que pouè accèptar",
- "translate-taskui-reviewall": "Revêre totes les traduccions",
"translate-taskui-export-to-file": "Èxportar u format natif",
"translate-taskui-export-as-po": "Èxportar por na traduccion en defôr de legne",
"translate-taction-translate": "Traduire",
@@ -40,7 +35,6 @@
"translate-page-description-hasoptional": "Ceti groupo de mèssâjos contint los mèssâjos u chouèx.\nLos mèssâjos u chouèx devriant étre traduits ren que quand voutra lengoua at des ègzigences spèciâles\ncoment pas empleyér d’èspâços ou ben la translitèracion des noms prôpros. $1",
"translate-page-description-hasoptional-open": "Fâre vêre los mèssâjos u chouèx.",
"translate-page-edit": "changiér",
- "translate-ext-url": "<hr />Seto vouèbe : $1",
"translate-optional": "(u chouèx)",
"translate-ignored": "(ignorâ)",
"translate-edit-title": "Changiér « $1 »",
@@ -50,9 +44,7 @@
"translate-edit-no-information": "''Ceti mèssâjo est pas documentâ.''\n''Se vos sâde yô ou ben coment il est empleyê, vos pouede édiér los ôtros traductors en fassent la documentacion de ceti mèssâjo.''",
"translate-edit-information": "Enformacions sur lo mèssâjo ($1)",
"translate-edit-in-other-languages": "Mèssâjo dens d’ôtres lengoues",
- "translate-edit-committed": "Traduccion d’ora dedens la programeria",
"translate-edit-warnings": "Avèrtissements sur les traduccions encomplètes",
- "translate-edit-tmsugs": "Idês de mèmouères de traduccion et de la traduccion ôtomatica",
"translate-edit-tmmatch-source": "Tèxto sôrsa de la traduccion : $1",
"translate-edit-tmmatch": "$1 % de corrèspondance",
"translate-use-suggestion": "Remplaciér la traduccion d’ora per cet’idê.",
@@ -133,7 +125,6 @@
"translate-statsf-language": "Lista de codes lengoues sèparâs per des virgules :",
"translate-statsf-group": "Lista de codes de groupos sèparâs per des virgules :",
"translate-statsf-submit": "Prèvisualisar",
- "translate-tag-category": "Pâges traduisibles",
"translate-tag-page-desc": "Traduccion de la pâge vouiqui [[$2|$1]].",
"translate-sidebar-alltrans": "Dens les ôtres lengoues",
"translations": "Totes les traduccions",
@@ -206,7 +197,6 @@
"translate-manage-toolong": "Lo temps maximon de trètament de $1 second{{PLURAL:$1|a|es}} est étâ dèpassâ.\nVolyéd remandar lo formulèro por continuar lo trètament.",
"translate-manage-import-summary": "Importacion d’una novèla vèrsion dês na sôrsa de defôr",
"translate-manage-conflict-summary": "Importacion d’una novèla vèrsion dês na sôrsa de defôr.\nControlâd se vos plét.",
- "translate-manage-fuzzy-summary": "La dèfinicion du mèssâjo at changiêye",
"translate-manage-submit": "Ègzécutar",
"translate-manage-import-ok": "Una novèla vèrsion de la pâge $1 at étâ importâ.",
"translate-manage-import-done": "Tot at étâ fêt !",
@@ -223,9 +213,7 @@
"translate-js-summary": "Rèsumâ :",
"translate-js-save": "Encartar",
"translate-js-next": "Encartar et pués uvrir celi d’aprés",
- "translate-js-nonext": "O ére lo dèrriér mèssâjo de ceta pâge.",
"translate-js-skip": "Alar a celi d’aprés",
- "translate-js-save-failed": "L’encartâjo at pas reussi. Volyéd raportar ceta fôta.",
"translate-js-history": "Historico de traduccion",
"translate-js-support": "Posar na quèstion",
"translate-js-support-title": "Demandâd d’éde s’y at pas prod d’enformacions por traduire cél mèssâjo coment fôt.",
@@ -244,19 +232,6 @@
"translate-searchprofile-tooltip": "Rechèrchiér dens totes les traduccions",
"translate-search-languagefilter": "Filtrar per lengoua :",
"translate-search-nofilter": "Gins de filtracion",
- "translate-messagereview-submit": "Accèptar",
- "translate-messagereview-progress": "En cors d’accèptacion...",
- "translate-messagereview-failure": "Accèptacion... pas reussia : $1",
- "translate-messagereview-done": "Accèptâ",
- "translate-messagereview-reviews": "Accèptâ per {{PLURAL:$1|yon utilisator|$1 utilisators}}",
- "translate-messagereview-reviewswithyou": "Accèptâ per {{PLURAL:$1|vos|$1 utilisators, vos avouéc}}",
- "api-error-invalidrevision": "la traduccion est pas étâye trovâye",
- "api-error-unknownmessage": "lo mèssâjo est pas étâ trovâ",
- "api-error-fuzzymessage": "la traduccion est marcâye coment trobla",
- "api-error-owntranslation": "vos pouede pas accèptar voutres prôpres traduccions",
- "translate-messagereview-no-fuzzy": "Les traduccions trobles pôvont pas étre accèptâyes.",
- "translate-messagereview-no-own": "Vos pouede pas accèptar voutres prôpres traduccions.",
- "translate-messagereview-doit": "Accèptar ceta traduccion coment na traduccion justa.",
"log-name-translationreview": "Jornal de les rèvisions de traduccion",
"log-description-translationreview": "Jornal de totes les rèvisions de les traduccions et des groupos de mèssâjos.",
"logentry-translationreview-message": "$1 at {{GENDER:$2|accèptâ}} la traduccion $3",
@@ -270,7 +245,6 @@
"translate-dynagroup-recent-label": "Novèles traduccions",
"translate-dynagroup-recent-desc": "Ceti groupo de mèssâjos fât vêre totes les novèles traduccions fêtes dens cela lengoua.\nIl est surtot empleyê por los travâlys de relèctura.",
"translate-dynagroup-additions-label": "Aponses novèles",
- "translate-gethelp": "Éde",
"translate-msggroupselector-projects": "Groupo de mèssâjos",
"translate-msggroupselector-search-placeholder": "Rechèrchiér des groupos",
"translate-msggroupselector-search-all": "Tôs",
diff --git a/www/wiki/extensions/Translate/i18n/core/frr.json b/www/wiki/extensions/Translate/i18n/core/frr.json
index 6106beb1..403ab2ff 100644
--- a/www/wiki/extensions/Translate/i18n/core/frr.json
+++ b/www/wiki/extensions/Translate/i18n/core/frr.json
@@ -4,6 +4,7 @@
"Murma174"
]
},
+ "translate-pref-nonewsletter": "Schüür mi nian E-Mail-Neis",
"translate-total": "Bööden",
"translate-untranslated": "Bööden (tu auersaaten)",
"translate-percentage-complete": "Klaar",
diff --git a/www/wiki/extensions/Translate/i18n/core/fur.json b/www/wiki/extensions/Translate/i18n/core/fur.json
index c74e966b..c9199df2 100644
--- a/www/wiki/extensions/Translate/i18n/core/fur.json
+++ b/www/wiki/extensions/Translate/i18n/core/fur.json
@@ -6,10 +6,6 @@
},
"translate": "Traduzion",
"translate-desc": "[[Special:Translate|Pagjine speciâl]] par tradusi MediaWiki e altris robis",
- "translate-taskui-view": "Mostre ducj i messaçs",
- "translate-taskui-untranslated": "Mostre i messaçs no tradusûts",
- "translate-taskui-optional": "Mostre i messaçs opzionâi",
- "translate-taskui-reviewall": "Riviôt dutis lis traduzions",
"translate-taskui-export-to-file": "Espuarte tal formât natîf",
"translate-taction-translate": "Tradûs",
"translate-taction-proofread": "Revision",
@@ -31,7 +27,6 @@
"translate-page-description-legend": "Informazions sul grup",
"translate-page-description-hasoptional-open": "Mostre i messaçs opzionâi.",
"translate-page-edit": "cambie",
- "translate-ext-url": "<hr />Sît web: $1",
"translate-optional": "(opzionâl)",
"translate-ignored": "(ignorât)",
"translate-edit-title": "Cambie \"$1\"",
@@ -42,7 +37,6 @@
"translate-edit-information": "Informazions sul messaç ($1)",
"translate-edit-in-other-languages": "Il messaç in altris lenghis",
"translate-edit-warnings": "Avîs su lis traduzions no completis",
- "translate-edit-tmsugs": "Sugjeriments de memorie di traduzion",
"translate-edit-tmmatch": "corispuint al $1%",
"translate-edit-nopermission": "Ti coventin i dirits di traduzion par tradusi i messaçs.",
"translate-edit-askpermission": "Cjapiti il permès",
@@ -86,7 +80,6 @@
"translate-statsf-count-reviews": "Revisions des traduzions",
"translate-statsf-count-reviewers": "Revisôrs",
"translate-statsf-submit": "Anteprime",
- "translate-tag-category": "Pagjinis che si puedin tradusi",
"translate-tag-page-desc": "Traduzion de pagjine wiki [[$2|$1]].",
"translate-sidebar-alltrans": "In altris lenghis",
"translations": "Dutis lis traduzions",
@@ -136,7 +129,6 @@
"translate-js-summary": "Somari:",
"translate-js-save": "Salve",
"translate-js-next": "Salve e passe al prossim",
- "translate-js-nonext": "Chest al jere l'ultin messaç su cheste pagjine.",
"translate-js-skip": "Passe al prossim",
"translate-js-history": "Storic de traduzion",
"translate-js-support": "Fâs une domande",
@@ -152,16 +144,12 @@
"translate-searchprofile-tooltip": "Cîr jenfri dutis lis traduzions",
"translate-search-languagefilter": "Filtre par lenghe:",
"translate-search-nofilter": "Nissun filtri",
- "translate-messagereview-submit": "Acete",
- "translate-messagereview-progress": "Daûr a acetâ...",
- "translate-messagereview-done": "Acetât",
"log-name-translationreview": "Regjistri des revisions des traduzions",
"translate-workflowstatus": "Stât: $1",
"translate-stats-workflow": "Stât",
"translate-dynagroup-recent-label": "Traduzions recentis",
"translate-dynagroup-additions-label": "Gnovis zontis",
"translate-dynagroup-additions-desc": "Chest grup di messaçs al mostre i messaçs gnûfs e cambiâts.",
- "translate-gethelp": "Jutori",
"translate-msggroupselector-projects": "Grup di messaçs",
"translate-msggroupselector-search-placeholder": "Cîr tai grups",
"translate-msggroupselector-search-all": "Ducj",
diff --git a/www/wiki/extensions/Translate/i18n/core/fy.json b/www/wiki/extensions/Translate/i18n/core/fy.json
index 71517158..72816fb6 100644
--- a/www/wiki/extensions/Translate/i18n/core/fy.json
+++ b/www/wiki/extensions/Translate/i18n/core/fy.json
@@ -3,25 +3,34 @@
"authors": [
"Kening Aldgilles",
"Snakesteuben",
- "Robin0van0der0vliet"
+ "Robin0van0der0vliet",
+ "Robin van der Vliet",
+ "PiefPafPier"
]
},
"translate": "Oersette",
"translate-taction-translate": "Oersette",
- "translate-taction-mstats": "Berjochtengroepstatistiken",
+ "translate-taction-mstats": "Berjochtegroepstatistiken",
"translate-page-settings-legend": "Ynstellingen",
"translate-page-group": "Groep",
"translate-page-language": "Taal",
"translate-page-navigation-legend": "Navigaasje",
"translate-next": "Folgjende side",
"translate-page-edit": "bewurkje",
- "translate-ext-url": "<hr />Webstee: $1",
"translate-optional": "(opsjoneel)",
"translate-edit-title": "Bewurk \"$1\"",
"translate-edit-translation": "Oersetting",
"translate-magic-cm-export": "Eksportearje",
"translate-magic-cm-comment": "Oanmerking:",
"translate-magic-cm-save": "Bewarje",
+ "translate-rcfilters-translations": "Oersettings",
+ "translate-rcfilters-translations-only-label": "Oersettings",
+ "translate-rcfilters-translations-only-desc": "Wizigings oan oersette siden.",
+ "translate-rcfilters-translations-filter-label": "Gjin oersettings",
+ "translate-rcfilters-translations-filter-desc": "Alle wizigings dy't gjin oersettings binne.",
+ "translate-rcfilters-translations-site-label": "Systeemberjochten",
+ "translate-rcfilters-translations-site-desc": "Oanpassings fan websteeberjochten yn de MediaWiki-nammeromte.",
+ "translate-rc-translation-filter": "Oersettings filterje",
"translate-stats-users": "Oersetters",
"translate-statsf-scale-months": "Moannen",
"translate-statsf-scale-weeks": "Wiken",
@@ -33,9 +42,9 @@
"translate-language-code-field-name": "Taalkoade:",
"translate-language": "Taal",
"translate-untranslated": "Unoerset",
- "translate-ls-column-group": "Berjochtengroep",
- "translate-mgs-pagename": "Berjochtengroepstatistiken",
- "translate-mgs-group": "Berjochtengroep:",
+ "translate-ls-column-group": "Berjochtegroep",
+ "translate-mgs-pagename": "Berjochtegroepstatistiken",
+ "translate-mgs-group": "Berjochtegroep:",
"translate-mgs-column-language": "Taal",
"supportedlanguages-translators": "{{PLURAL:$2|Oersetter|Oersetters}}: $1",
"translate-save": "Bewarje ($1)",
@@ -44,8 +53,12 @@
"translate-gs-continent": "Kontinent",
"translate-documentation-language": "Berjochtbeskriuwing",
"translate-searchprofile": "Oersettings",
- "translate-gethelp": "Help",
- "translate-msggroupselector-projects": "Berjochtengroep",
+ "log-name-translationreview": "Oersettingshifkloch",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|hat}} de oersetting $3 hifke",
+ "translate-msggroupselector-projects": "Berjochtegroep",
+ "translate-msggroupselector-search-placeholder": "Groepen sykje",
+ "translate-msggroupselector-search-all": "Alles",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgroep|subgroepen}}",
"tux-languageselector": "Oersette nei",
"tux-tab-untranslated": "Unoerset",
"tux-tab-translated": "Oerset",
diff --git a/www/wiki/extensions/Translate/i18n/core/ga.json b/www/wiki/extensions/Translate/i18n/core/ga.json
index 91140c30..607933ff 100644
--- a/www/wiki/extensions/Translate/i18n/core/ga.json
+++ b/www/wiki/extensions/Translate/i18n/core/ga.json
@@ -23,6 +23,5 @@
"translate-translations-messagename": "Ainm:",
"translate-language": "Teanga",
"translate-js-summary": "Achoimre:",
- "translate-js-save": "Sábháil",
- "translate-gethelp": "Cuidiú"
+ "translate-js-save": "Sábháil"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/gaa.json b/www/wiki/extensions/Translate/i18n/core/gaa.json
new file mode 100644
index 00000000..6f3da63b
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/gaa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chivano"
+ ]
+ },
+ "translate-documentation-language": "Shiɛmɔ he saneŋmaa"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/gcr.json b/www/wiki/extensions/Translate/i18n/core/gcr.json
new file mode 100644
index 00000000..47d6770a
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/gcr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "LeGuyanaisPure"
+ ]
+ },
+ "translate-documentation-language": "Dokimantasyon di mésaj"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/gl.json b/www/wiki/extensions/Translate/i18n/core/gl.json
index be1ff863..8de6a919 100644
--- a/www/wiki/extensions/Translate/i18n/core/gl.json
+++ b/www/wiki/extensions/Translate/i18n/core/gl.json
@@ -7,16 +7,13 @@
"Xosé",
"Fitoschido",
"Elisardojm",
- "Banjo"
+ "Banjo",
+ "Navhy"
]
},
"translate": "Traducir",
"translate-desc": "[[Special:Translate|Páxina especial]] para traducir MediaWiki e outras extensións",
- "translate-taskui-view": "Mostrar todas as mensaxes",
- "translate-taskui-untranslated": "Mostrar as mensaxes sen traducir",
- "translate-taskui-optional": "Mostrar as mensaxes opcionais",
- "translate-taskui-acceptqueue": "Só as mensaxes que poida marcar como revisadas",
- "translate-taskui-reviewall": "Revisar todas as traducións",
+ "translate-fuzzybot-desc": "Esta é unha conta de sistema especial usada pola extensión de [https://www.mediawiki.org/wiki/Extension:Translate Tradución] de MediaWiki para manter as traducións.\nEsta conta é parte do software MediaWiki e non pertence a ningún usuario.",
"translate-taskui-export-to-file": "Exportar en formato nativo",
"translate-taskui-export-as-po": "Exportar para traducir sen conexión",
"translate-taction-translate": "Traducir",
@@ -28,24 +25,23 @@
"translate-page-no-such-language": "O código de lingua especificado non é válido.",
"translate-page-no-such-group": "O grupo especificado non é válido.",
"translate-page-disabled": "As traducións a esta lingua neste grupo están desactivadas.\nMotivo:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 é a lingua orixen desta páxina.",
"translate-language-disabled": "As traducións nesta lingua están desactivadas.",
"translate-page-settings-legend": "Configuracións",
"translate-page-group": "Grupo",
"translate-page-language": "Lingua",
"translate-page-limit": "Límite",
"translate-page-limit-option": "$1 {{PLURAL:$1|mensaxe|mensaxes}} por páxina",
- "translate-submit": "Mostrar",
+ "translate-submit": "Amosar",
"translate-page-navigation-legend": "Navegación",
- "translate-page-showing": "Mostrando as mensaxes da $1 á $2, dun total de $3.",
- "translate-page-showing-all": "Mostrando {{PLURAL:$1|unha mensaxe|$1 mensaxes}}.",
+ "translate-page-showing": "Amosando as mensaxes da $1 á $2, dun total de $3.",
+ "translate-page-showing-all": "Amosando {{PLURAL:$1|unha mensaxe|$1 mensaxes}}.",
+ "translate-page-showing-none": "Non hai ningunha mensaxe que amosar.",
"translate-next": "Páxina seguinte",
"translate-prev": "Páxina anterior",
"translate-page-description-legend": "Información acerca do grupo",
"translate-page-description-hasoptional": "Este grupo de mensaxes contén mensaxes opcionais.\nAs mensaxes opcionais só se deberían traducir cando a lingua teña necesidades especiais,\ncomo non empregar espazos ou para a transliteración de nomes propios. $1",
- "translate-page-description-hasoptional-open": "Mostrar as mensaxes opcionais.",
+ "translate-page-description-hasoptional-open": "Amosar as mensaxes opcionais.",
"translate-page-edit": "editar",
- "translate-ext-url": "<hr />Páxina web: $1",
"translate-optional": "(opcional)",
"translate-ignored": "(ignorado)",
"translate-edit-title": "Editar \"$1\"",
@@ -61,10 +57,15 @@
"translate-use-suggestion": "Substituír a tradución actual por esta suxestión.",
"translate-edit-nopermission": "Necesita ter os dereitos de tradución para traducir mensaxes.",
"translate-edit-askpermission": "Obter os permisos",
+ "exporttranslations": "Exportar traducións",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Por favor, especifique un formato válido.",
+ "translate-export-not-supported": "A exportación de traducións non está soportada.",
+ "translate-export-format-notsupported": "O grupo de mensaxes non soporta o formato de exportación especificado.",
"translate-magic-pagename": "Tradución estendida de MediaWiki",
"translate-magic-help": "Pode traducir os pseudónimos das páxinas especiais, as palabras máxicas e mais os nomes dos espazos de nomes.\n\nOs pseudónimos das páxinas especiais e as palabras máxicas poden ter numerosas traducións.\nAs traducións sepáranse mediante unha coma (\",\").\nOs nomes dos espazos de nomes só poden ter unha tradución.\n\nA tradución do espazo de nomes de conversa do proxecto, <code>$1 talk</code>, pode ser complicado.\n<code>$1</code> substitúese polo nome do sitio (por exemplo, <code>{{ns:project_talk}}</code>).\nSe na súa lingua non resulta posible formar unha expresión válida sen mudar o nome do sitio, fáganolo saber na [[Support|páxina de axuda]].\n\nTen que estar no grupo dos tradutores para gardar os cambios.\nOs cambios non se gardan ata que prema no botón \"Gardar\" que hai ao final.",
"translate-magic-module": "Módulo:",
- "translate-magic-submit": "Mostrar",
+ "translate-magic-submit": "Amosar",
"translate-magic-cm-export": "Exportar",
"translate-magic-nothing-to-export": "Non hai nada que exportar.",
"translate-magic-cm-to-be": "Será",
@@ -79,7 +80,7 @@
"translate-magic-namespace": "Nomes dos espazos de nomes",
"translate-magic-notsaved": "A súa edición non foi gardada!",
"translate-magic-errors": "Por favor, corrixa {{PLURAL:$1|o seguinte erro|os seguintes erros}} nas traducións:",
- "translate-magic-saved": "As súas modificacións gardáronse.",
+ "translate-magic-saved": "Gardáronse as súas modificacións.",
"translate-checks-parameters": "{{PLURAL:$2|Non se emprega o seguinte parámetro|Non se empregan os seguintes parámetros}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Descoñécese o seguinte parámetro|Descoñécense os seguintes parámetros}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Hai unha cantidade irregular de {{PLURAL:$2|parénteses|parénteses}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -90,12 +91,12 @@
"translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> recibiu {{PLURAL:$1|unha forma|$1 formas}} de plural, pero unicamente {{PLURAL:$2|está soportada unha forma|están soportadas $2 formas}} (excluíndo as formas 0= e 1=).",
"translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ten formas de plural duplicadas ao final. <nowiki>{{PLURAL:$1|lapis|lapis}}</nowiki> debe escribirse así: <nowiki>{{PLURAL:$1|lapis}}</nowiki>.",
"translate-checks-pagename": "O espazo de nomes é diferente con respecto ao presente na definición",
- "translate-checks-format": "Esta tradución non segue a definición ou ten unha sintaxe inválida: $1",
+ "translate-checks-format": "Esta tradución non segue a definición ou ten unha sintaxe non válida: $1",
"translate-checks-escape": "As seguintes secuencias de escape poden ser accidentais: <strong>$1</strong>",
"translate-checks-parametersnotequal": "O número de parámetros é {{PLURAL:$1|$1}}, cando {{PLURAL:$2|debe ser $2|deben ser $2}}.",
"translate-checks-malformed": "\"<nowiki>$1</nowiki>\" ten un formato incorrecto.",
"translate-checks-fudforum-syntax": "Use <nowiki>$1</nowiki> no canto de <nowiki>$2</nowiki> neste proxecto.",
- "translate-pref-nonewsletter": "Non me enviedes boletíns ao meu correo electrónico",
+ "translate-pref-nonewsletter": "Non recibir boletíns no meu correo electrónico",
"translate-pref-editassistlang": "Linguas axudantes:",
"prefs-translate": "Opcións de tradución",
"translate-pref-editassistlang-help": "Lista de códigos de linguas separados por comas.\nMóstranse as traducións dunha mensaxe nestas linguas cando a traduce.\nA lista de linguas por defecto depende da súa.",
@@ -106,12 +107,21 @@
"right-translate-import": "Importar as traducións sen conexión",
"action-translate-import": "importar as traducións sen conexión",
"right-translate-messagereview": "Revisar as traducións",
+ "action-translate-messagereview": "revisar traducións",
"right-translate-groupreview": "Cambiar o estado do fluxo de traballo dos grupos de mensaxes",
+ "action-translate-groupreview": "modificar o estado do fluxo de traballo dos grupos de mensaxes",
+ "translate-rcfilters-translations": "Traducións",
+ "translate-rcfilters-translations-only-label": "Traducións",
+ "translate-rcfilters-translations-only-desc": "Cambios realizados nas páxinas traducidas.",
+ "translate-rcfilters-translations-filter-label": "Non traducións",
+ "translate-rcfilters-translations-filter-desc": "Tódolos cambios que non son traducións.",
+ "translate-rcfilters-translations-site-label": "Mensaxes de sistema",
+ "translate-rcfilters-translations-site-desc": "Personalizacións ás mensaxes de sistema no espazo de nomes MediaWiki.",
"translate-rc-translation-filter": "Filtrar as traducións:",
"translate-rc-translation-filter-no": "Non facer nada",
- "translate-rc-translation-filter-only": "Mostrar só as traducións",
- "translate-rc-translation-filter-filter": "Mostrar o que non sexan traducións",
- "translate-rc-translation-filter-site": "Mostrar só os cambios nas mensaxes do sitio",
+ "translate-rc-translation-filter-only": "Amosar só as traducións",
+ "translate-rc-translation-filter-filter": "Amosar o que non sexan traducións",
+ "translate-rc-translation-filter-site": "Amosar só os cambios nas mensaxes do sitio",
"translationstats": "Estatísticas das traducións",
"translate-stats-edits": "Edicións",
"translate-stats-users": "Tradutores",
@@ -151,8 +161,8 @@
"translate-translations-including-no-param": "Por favor, especifique unha clave de mensaxe válida no parámetro da subpáxina",
"translate-translations-history-short": "h",
"languagestats": "Estatísticas da lingua",
- "languagestats-summary": "Esta páxina mostra as estatísticas de tradución dos grupos de mensaxes dunha lingua.",
- "messagegroupstats-summary": "Esta páxina mostra as estatísticas dos grupos de mensaxes.",
+ "languagestats-summary": "Esta páxina amosa as estatísticas de tradución dos grupos de mensaxes dunha lingua.",
+ "messagegroupstats-summary": "Esta páxina amosa as estatísticas dos grupos de mensaxes.",
"languagestats-stats-for": "Estatísticas das traducións en $1 ($2).",
"languagestats-recenttranslations": "traducións recentes",
"translate-langstats-incomplete": "Algunhas das estatísticas desta páxina están incompletas. Recargue a páxina para ollar máis estatísticas.",
@@ -170,25 +180,26 @@
"translate-percentage-complete": "Completadas",
"translate-percentage-fuzzy": "Anticuadas",
"translate-languagestats-overall": "Todos os grupos de mensaxes xuntos",
- "translate-ls-submit": "Mostrar as estatísticas",
+ "translate-ls-submit": "Amosar as estatísticas",
"translate-ls-column-group": "Grupo de mensaxes",
"translate-mgs-pagename": "Estatísticas dos grupos de mensaxes",
- "translate-mgs-fieldset": "Mostrar as preferencias",
+ "translate-mgs-fieldset": "Amosar as preferencias",
"translate-mgs-group": "Grupo de mensaxes:",
- "translate-mgs-nocomplete": "Non mostrar as linguas que teñen a tradución completa",
- "translate-mgs-noempty": "Non mostrar as linguas que non teñen ningunha tradución",
- "translate-mgs-submit": "Mostrar as estatísticas",
+ "translate-mgs-nocomplete": "Non amosar as linguas que teñen a tradución completa",
+ "translate-mgs-noempty": "Non amosar as linguas que non teñen ningunha tradución",
+ "translate-mgs-submit": "Amosar as estatísticas",
"translate-mgs-column-language": "Lingua",
- "translate-mgs-totals": "Todas as linguas xuntas",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|lingua|linguas}} en total",
"translate-mgs-invalid-group": "O grupo especificado, \"$1\", non existe.",
- "translate-mgs-nothing": "Non hai nada que mostrar para as estatísticas solicitadas.",
- "supportedlanguages": "Linguas soportadas",
- "supportedlanguages-summary": "Esta páxina mostra unha lista de todas as linguas soportadas por {{SITENAME}},\nasí como os nomes dos tradutores que traballan nelas.\nCantas máis contribucións fixese un usuario, máis grande aparecerá o seu nome.\nA cor do suliñado indica como de activo estivo o tradutor recentemente.",
+ "translate-mgs-nothing": "Non hai nada que amosar para as estatísticas solicitadas.",
+ "supportedlanguages": "Linguas admitidas",
+ "supportedlanguages-summary": "Esta páxina amosa unha lista de tódalas linguas soportadas por {{SITENAME}},\nasí como os nomes dos tradutores que traballan nelas.\nCantas máis contribucións fixese un usuario, máis grande aparecerá o seu nome.\nA cor do suliñado indica como de activo estivo o tradutor recentemente.",
"supportedlanguages-colorlegend": "Lenda das cores: Última tradución hai $1 días.",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tradutor|Tradutora}}|Tradutores}}: $1",
"supportedlanguages-recenttranslations": "traducións recentes",
"supportedlanguages-count": "$1 {{PLURAL:$1|lingua|linguas}} en total.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edición|edicións}}; última edición hai $3 {{PLURAL:$3|día|días}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texto de orixe da unidade de traducción",
"translate-save": "Gardar ($1)",
"translate-jssti-add": "Engadir á lista",
"managemessagegroups": "Xestión dos grupos de mensaxes",
@@ -229,9 +240,7 @@
"translate-js-summary": "Resumo:",
"translate-js-save": "Gardar",
"translate-js-next": "Gardar e abrir a seguinte",
- "translate-js-nonext": "Esta é a última mensaxe da páxina.",
"translate-js-skip": "Pasar á seguinte",
- "translate-js-save-failed": "Fallou o proceso de gardado. Por favor, informe sobre este erro.",
"translate-js-history": "Historial de tradución",
"translate-js-support": "Facer unha pregunta",
"translate-js-support-title": "Pida axuda se non dispón de información suficiente para traducir a mensaxe correctamente.",
@@ -248,21 +257,9 @@
"translate-documentation-language": "documentación das mensaxes",
"translate-searchprofile": "Traducións",
"translate-searchprofile-tooltip": "Procurar en todas as traducións",
+ "translate-searchprofile-note": "Hai dispoñibles máis opcións de procura coa [$1 procura de traducións].",
"translate-search-languagefilter": "Filtrar por lingua:",
"translate-search-nofilter": "Non filtrar",
- "translate-messagereview-submit": "Marcar como revisada",
- "translate-messagereview-progress": "Marcando como revisada...",
- "translate-messagereview-failure": "Erro ao marcar como revisada: $1",
- "translate-messagereview-done": "Revisada",
- "translate-messagereview-reviews": "Revisada por {{PLURAL:$1|un usuario|$1 usuarios}}",
- "translate-messagereview-reviewswithyou": "Revisada por {{PLURAL:$1|vostede|$1 usuarios, incluído vostede}}",
- "api-error-invalidrevision": "Non se atopou a tradución",
- "api-error-unknownmessage": "Non se atopou a mensaxe",
- "api-error-fuzzymessage": "A tradución está marcada con FUZZY",
- "api-error-owntranslation": "Non se poden marcar como revisadas as traducións feitas por un mesmo",
- "translate-messagereview-no-fuzzy": "Non se poden marcar como revisadas as traducións anticuadas.",
- "translate-messagereview-no-own": "Non se poden marcar como revisadas as traducións feitas por un mesmo.",
- "translate-messagereview-doit": "Marcar esta tradución como revisada.",
"log-name-translationreview": "Rexistro de revisión das traducións",
"log-description-translationreview": "Rexistro de todas as revisións das traducións e dos grupos de mensaxes.",
"logentry-translationreview-message": "$1 {{GENDER:$2|revisou}} a tradución \"$3\"",
@@ -279,12 +276,11 @@
"translate-workflow-autocreated-summary": "Creación automática da páxina para o estado \"$1\" do fluxo de traballo",
"translate-stats-workflow": "Estado",
"translate-workflowgroup-label": "Estados do fluxo de traballo",
- "translate-workflowgroup-desc": "Este grupo de mensaxes mostra todas as traducións dos estados do fluxo de traballo.\nOs estados están definidos na variable de configuración $wgTranslateWorkflowStates.",
+ "translate-workflowgroup-desc": "Este grupo de mensaxes amosa tódalas traducións dos estados do fluxo de traballo.\nOs estados están definidos na variable de configuración $wgTranslateWorkflowStates.",
"translate-dynagroup-recent-label": "Traducións recentes",
- "translate-dynagroup-recent-desc": "Este grupo de mensaxes mostra todas as traducións recentes feitas nesta lingua.\nÉ moi útil para as tarefas de revisión.",
+ "translate-dynagroup-recent-desc": "Este grupo de mensaxes amosa tódalas traducións recentes feitas nesta lingua.\nÉ moi útil para as tarefas de revisión.",
"translate-dynagroup-additions-label": "Adicións recentes",
- "translate-dynagroup-additions-desc": "Este grupo de mensaxes mostra as mensaxes novas e modificadas.",
- "translate-gethelp": "Axuda",
+ "translate-dynagroup-additions-desc": "Este grupo de mensaxes amosa as mensaxes novas e modificadas.",
"translate-msggroupselector-projects": "Grupo de mensaxes",
"translate-msggroupselector-search-placeholder": "Procurar nos grupos",
"translate-msggroupselector-search-all": "Todos",
@@ -303,7 +299,9 @@
"tux-status-translated": "Traducida",
"tux-status-saving": "Gardando...",
"tux-status-unsaved": "Sen gardar",
+ "tux-save-unknown-error": "Houbo un erro descoñecido.",
"tux-editor-placeholder": "A súa tradución",
+ "tux-editor-editsummary-placeholder": "Resumo opcional",
"tux-editor-paste-original-button-label": "Pegar o texto fonte",
"tux-editor-discard-changes-button-label": "Descartar as modificacións",
"tux-editor-save-button-label": "Gardar a tradución",
@@ -311,7 +309,7 @@
"tux-editor-cancel-button-label": "Cancelar",
"tux-editor-confirm-button-label": "Confirmar a tradución",
"tux-editor-proofread-button-label": "Marcar como revisada",
- "tux-editor-shortcut-info": "Prema en \"$1\" para gardar, en \"$2\" para pasar á seguinte mensaxe ou en \"$3\" para ver outros atallos.",
+ "tux-editor-shortcut-info": "Prema en \"$1\" para gardar, en \"$2\" para pasar á seguinte mensaxe, en \"$4\" para proporcionar un resumo ou en \"$3\" para ver outros atallos.",
"tux-editor-edit-desc": "Editar a documentación",
"tux-editor-add-desc": "Engadir a documentación",
"tux-editor-suggestions-title": "Suxestións",
@@ -329,12 +327,12 @@
"tux-editor-proofreading-mode": "Revisar",
"tux-editor-translate-mode": "Lista",
"tux-editor-proofreading-hide-own-translations": "Agochar as súas traducións",
- "tux-editor-proofreading-show-own-translations": "Mostrar as súas traducións",
+ "tux-editor-proofreading-show-own-translations": "Amosar as súas traducións",
"tux-proofread-action-tooltip": "Marcar como revisada",
"tux-proofread-edit-label": "Editar",
"tux-editor-page-mode": "Páxina",
"tux-editor-outdated-warning": "Esta tradución pode necesitar unha actualización.",
- "tux-editor-outdated-warning-diff-link": "Mostrar as diferenzas",
+ "tux-editor-outdated-warning-diff-link": "Amosar as diferenzas",
"tux-editor-doc-editor-placeholder": "Documentación da mensaxe",
"tux-editor-doc-editor-save": "Gardar a documentación",
"tux-editor-doc-editor-cancel": "Cancelar",
@@ -351,9 +349,9 @@
"tux-empty-list-translated": "Non hai mensaxes traducidas",
"tux-empty-list-translated-guide": "Pode axudar na tradución",
"tux-empty-list-translated-action": "Traducir",
- "tux-empty-no-messages-to-display": "Non hai ningunha mensaxe que mostrar.",
- "tux-empty-there-are-optional": "Hai mensaxes opcionais non mostradas na lista",
- "tux-empty-show-optional-messages": "Mostrar as mensaxes opcionais",
+ "tux-empty-no-messages-to-display": "Non hai ningunha mensaxe que amosar.",
+ "tux-empty-there-are-optional": "Hai mensaxes opcionais non amosadas na lista",
+ "tux-empty-show-optional-messages": "Amosar as mensaxes opcionais",
"tux-empty-no-outdated-messages": "Non hai mensaxes anticuadas",
"tux-empty-nothing-to-proofread": "Non hai nada que revisar",
"tux-empty-you-can-help-providing": "Pode axudar achegando traducións novas",
@@ -362,13 +360,15 @@
"tux-empty-list-other": "Non hai nada que traducir",
"tux-empty-list-other-guide": "Pode axudar na revisión das traducións existentes",
"tux-empty-list-other-action": "Revisar as traducións",
- "tux-empty-list-other-link": "Mostrar todas as mensaxes",
+ "tux-empty-list-other-link": "Amosar tódalas mensaxes",
"tux-editor-close-tooltip": "Pechar",
"tux-editor-expand-tooltip": "Expandir",
"tux-editor-collapse-tooltip": "Contraer",
+ "tux-editor-message-tools-show-editor": "Amosar no editor wiki",
"tux-editor-message-tools-history": "Historial",
"tux-editor-message-tools-delete": "Borrar",
"tux-editor-message-tools-translations": "Todas as traducións",
+ "tux-editor-message-tools-linktothis": "Ligazóns a esta mensaxe",
"tux-editor-loading": "Cargando...",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|lingua|linguas}} máis",
"translate-statsbar-tooltip": "$1% traducidas, $2% revisadas",
@@ -377,5 +377,5 @@
"translate-ulsdep-title": "Erro de configuración",
"translate-ulsdep-body": "A extensión de tradución depende da [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector extensión do selector universal de linguas].",
"tux-session-expired": "Pechouse a súa sesión. Por favor, acceda ao sistema noutra lapela. Como alternativa, copie as traducións non gardadas, acceda ao sistema, regrese a esta páxina e insira as súas traducións de novo.",
- "tux-nojs": "Esta páxina require JavaScript."
+ "tux-nojs": "Esta ferramenta non funciona sen JavaScript. Ou JavaScript está desactivado, ou non funcionou, ou este navegador non está soportado."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/gom-latn.json b/www/wiki/extensions/Translate/i18n/core/gom-latn.json
index 4a70db49..5186d74f 100644
--- a/www/wiki/extensions/Translate/i18n/core/gom-latn.json
+++ b/www/wiki/extensions/Translate/i18n/core/gom-latn.json
@@ -5,6 +5,9 @@
]
},
"translate-page-language": "Bhas",
+ "translate-rcfilters-translations": "Onnkaram",
+ "translate-rcfilters-translations-only-label": "Onnkaram",
+ "translate-rcfilters-translations-site-label": "Sayticheo sondex",
"translate-language": "Bhas",
"translate-mgs-column-language": "Bhas",
"translate-documentation-language": "Sondexache documentacao"
diff --git a/www/wiki/extensions/Translate/i18n/core/gor.json b/www/wiki/extensions/Translate/i18n/core/gor.json
new file mode 100644
index 00000000..3fb8b6fa
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/gor.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Marwan Mohamad"
+ ]
+ },
+ "translate-documentation-language": "Dokumentasi tahuli"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/got.json b/www/wiki/extensions/Translate/i18n/core/got.json
new file mode 100644
index 00000000..b674d51f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/got.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gothicspeaker"
+ ]
+ },
+ "translate-documentation-language": "𐍅𐌰𐌿𐍂𐌳𐌹𐍃 𐌳𐌰𐌿𐌺𐌿𐌼𐌰𐌹𐌽𐍄𐌰𐍄𐍃𐌾𐍉"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/gsw.json b/www/wiki/extensions/Translate/i18n/core/gsw.json
index 7c37bf54..d4b633fe 100644
--- a/www/wiki/extensions/Translate/i18n/core/gsw.json
+++ b/www/wiki/extensions/Translate/i18n/core/gsw.json
@@ -9,11 +9,6 @@
},
"translate": "Ibersetze",
"translate-desc": "[[Special:Translate|Spezialsyte]] fir d Ibersetzig vu MediaWiki-Syschtemnochrichte",
- "translate-taskui-view": "Alli Nochrichte aazeige",
- "translate-taskui-untranslated": "Alli nit ibersetzte Mäldige aazeige",
- "translate-taskui-optional": "Alli optionale Mäldige aazeige",
- "translate-taskui-acceptqueue": "Nume Mäldige aazeige, wu ich cha akzeptiere",
- "translate-taskui-reviewall": "Alli Ibersetzige iberpriefe",
"translate-taskui-export-to-file": "Im syschtemeigene Format exportiere",
"translate-taskui-export-as-po": "Fir d Offline-Ibersetzig exportiere",
"translate-taction-translate": "Ibersetze",
@@ -42,7 +37,6 @@
"translate-page-description-hasoptional": "Die Mäldigsgruppe enthält optionali Mäldige.\nOptionali Mäldige sötte numme übersetzt werde, wänn's in dynrer Sprooch en Bedarf defür het, wie z.B. dass kei Läärzeiche bruucht werde oder s richtigi transliteriere vo Eigenäme. $1",
"translate-page-description-hasoptional-open": "Optionali Mäldige aazeige.",
"translate-page-edit": "bearbeite",
- "translate-ext-url": "<hr />Website: $1",
"translate-optional": "(optional)",
"translate-ignored": "(ignoriert)",
"translate-edit-title": "„$1“ bearbeite",
@@ -52,9 +46,7 @@
"translate-edit-no-information": "''Die Syschtemnochricht het no kei Dokumentation. Wänn Du weisch, wu un in welem Zämmehang si bruucht wird, no chasch andere Ibersetzer hälfe, wänn Du ne Dokumentation zuefiegsch.''",
"translate-edit-information": "Information iber d Syschtemnochricht ($1)",
"translate-edit-in-other-languages": "Syschtemnochricht in andere Sproche",
- "translate-edit-committed": "Aktuälli Ibersetzig",
"translate-edit-warnings": "Warnig iber uuvollständigi Ibersetzige",
- "translate-edit-tmsugs": "Vorschleg vum Ibersetzigsspycher",
"translate-edit-tmmatch-source": "Ibersetzigsquälltext: $1",
"translate-edit-tmmatch": "$1% Ibereinstimmig",
"translate-use-suggestion": "Di aktuäll Ibersetzig mit däm Vorschlag ersetze:",
@@ -137,7 +129,6 @@
"translate-statsf-language": "Komma-trännti Lischt vu dr Sprochcode:",
"translate-statsf-group": "Komma-trännti Lischt vu dr Gruppecode:",
"translate-statsf-submit": "Vorschou",
- "translate-tag-category": "Ibersetzbari Syte",
"translate-tag-page-desc": "Ibersetzig vu dr Wikisyte [[$2|$1]].",
"translate-sidebar-alltrans": "In andere Sproche",
"translations": "Alli Ibersetzige",
@@ -210,7 +201,6 @@
"translate-manage-toolong": "Di maximal Arbetsablauf-Zyt vu $1 Sekunde isch iberschritte wore.\nBitte schick s Format nonemol ab go mit em Arbetsablauf wytermache.",
"translate-manage-import-summary": "Am Importiere vun ere neje Version us ere extärne Quälle",
"translate-manage-conflict-summary": "Am Importiere vun ere neje Version us ere extärne Quälle. Bitte iberpriefe.",
- "translate-manage-fuzzy-summary": "D Nochrichtedefinition het sich gänderet",
"translate-manage-submit": "Uusfiere",
"translate-manage-intro-other": "Unte het s Lischt vu Ibersetzigsänderige in dr Sproch $1.\nBitte prief d Änderige un wehl e Aktion uus, wu Du witt uusfiere fir jedi Ibersetzig.\nWänn Du Änderige witt ignoriere, wäre si bim negschte Export ußer Chraft gsetzt.",
"translate-manage-import-ok": "Het e neji Version vu dr Syte $1 importiert.",
@@ -228,9 +218,7 @@
"translate-js-summary": "Zämmefassig:",
"translate-js-save": "Spychere",
"translate-js-next": "Spychere un di negscht ufmache",
- "translate-js-nonext": "Des isch di letscht Nochricht uf däre Syte gsi.",
"translate-js-skip": "Ibergumpe zue dr negschte",
- "translate-js-save-failed": "S Spychere isch fählgschlaa. Bitte due dää Fähler mälde.",
"translate-js-history": "Ibersetzigsgschicht",
"translate-js-support": "Frog stelle",
"translate-js-support-title": "Frog no Hilf, wänn s nit gnue Informatione git go die Nochricht richtig ibersetze.",
@@ -249,19 +237,6 @@
"translate-searchprofile-tooltip": "In allene Übersetzige sueche",
"translate-search-languagefilter": "Nooch Sprooche filtre:",
"translate-search-nofilter": "Nit nooch Sprooche filtre",
- "translate-messagereview-submit": "Aanee",
- "translate-messagereview-progress": "Akzeptier …",
- "translate-messagereview-failure": "Akzeptierig...fehlgschlo: $1",
- "translate-messagereview-done": "Akzeptiert",
- "translate-messagereview-reviews": "Akzeptiert vo {{PLURAL:$1|eme Benutzer|$1 Benutzer}}",
- "translate-messagereview-reviewswithyou": "Akzeptiert vu {{PLURAL:$1|eim Benutzer|$1 Benutzer, Du sälber mitzellt}}",
- "api-error-invalidrevision": "D Übersetzig het nit chönne gfunde werde",
- "api-error-unknownmessage": "D Noochricht het nit chönne gfunde werde",
- "api-error-fuzzymessage": "Die Übersetzig isch als veraltet markiert",
- "api-error-owntranslation": "Du chasch dyni eigni Übersetzige nit akzeptiere.",
- "translate-messagereview-no-fuzzy": "Veralteti Übersetzige chönne nit akzeptiert werde.",
- "translate-messagereview-no-own": "Du chasch dyni eigni Übersetzige nit akzeptiere.",
- "translate-messagereview-doit": "Die Übersetzig als richtig akzeptiere.",
"log-name-translationreview": "Übersetzigspriefer-Logbuech",
"log-description-translationreview": "Logbuech vo allene Übersetzigspriefige vo Übersetzige un Noochrichtegruppe.",
"logentry-translationreview-message": "$1 het d Übersetzig $3{{GENDER:$2|überprieft}}",
@@ -273,6 +248,5 @@
"translate-workflowgroup-label": "Arbetsablaufstatus",
"translate-workflowgroup-desc": "Die Nochrichtegruppe zeigt d Status zum Arbetsablauf bi Ibersetzige.\nD Status wäre mit dr Konfigurationsvariable <code lang=\"en\">$wgTranslateWorkflowStates</code> definiert.",
"translate-dynagroup-recent-label": "Aktuälli Ibersetzige",
- "translate-dynagroup-recent-desc": "Die Nochrichtegruppe zeigt alli aktuälle Ibersetzige in däre Sproch aa.\nAm nitzligschte isch si fir s Korrekturläse.",
- "translate-gethelp": "Hilf"
+ "translate-dynagroup-recent-desc": "Die Nochrichtegruppe zeigt alli aktuälle Ibersetzige in däre Sproch aa.\nAm nitzligschte isch si fir s Korrekturläse."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/gu.json b/www/wiki/extensions/Translate/i18n/core/gu.json
index 7abef3d0..a8117dd8 100644
--- a/www/wiki/extensions/Translate/i18n/core/gu.json
+++ b/www/wiki/extensions/Translate/i18n/core/gu.json
@@ -10,18 +10,16 @@
},
"translate": "ભાષાંતર",
"translate-desc": "મીડિયાવિકિ અને આગળ ભાષાંતરણ માટે [[Special:Translate|ખાસ પાનું]]",
- "translate-taskui-view": "બધાં સંદેશાઓ બતાવો",
- "translate-taskui-untranslated": "અભાષાંતરિત સંદેશાઓ બતાવો",
- "translate-taskui-optional": "વૈકલ્પિક સંદેશાઓ બતાવો",
- "translate-taskui-reviewall": "બધાં ભાષાંતરની ચકાસણી કરો",
"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\n<em>$1</em>",
+ "translate-language-disabled": "આ ભાષામાં ભાષાંતર નિષ્ક્રીય છે.",
"translate-page-settings-legend": "ગોઠવણીઓ",
"translate-page-group": "જૂથ",
"translate-page-language": "ભાષા",
@@ -31,22 +29,27 @@
"translate-page-navigation-legend": "સંચાલન",
"translate-page-showing": "$3 પૈકીના $1થી $2 સંદેશાઓ બતાવ્યા છે.",
"translate-page-showing-all": "રજૂઆત $1 {{PLURAL:$1|સંદેશ|સંદેશાઓ}}",
+ "translate-page-showing-none": "બતાવવા માટે કોઇ સંદેશાઓ નથી.",
"translate-next": "પછીનું પાનું",
"translate-prev": "પહેલાંનું પાનું",
"translate-page-description-legend": "જૂથ વિશે માહિતી",
+ "translate-page-description-hasoptional-open": "વૈકલ્પિક સંદેશાઓ બતાવો.",
"translate-page-edit": "સંપાદન",
- "translate-ext-url": "<hr />વેબસાઇટ: $1",
"translate-optional": "વૈકલ્પિક",
"translate-ignored": "ઉપેક્ષીત",
"translate-edit-title": "\"$1\" સંપાદન કરો",
"translate-edit-definition": "સંદેશ વ્યાખ્યા",
"translate-edit-translation": "ભાષાંતર",
"translate-edit-contribute": "યોગદાન",
- "translate-edit-no-information": "''આ સંદેશામાં ઉપયોગીતાપ્રમાણ નથી.\n\nજો તમે જાણતા હો કે ક્યાં અને કેવી રીતે આ સંદેશો વપરાયો છે, તો તમે આ સંદેશામાં ઉપયોગીતાપ્રમાણ ઉમેરી અને અન્ય ભાષાંતરકારોને મદદ કરી શકો છો.''",
+ "translate-edit-no-information": "<em>આ સંદેશામાં દસ્તાવેજ નથી.\n\nજો તમે જાણતા હો કે ક્યાં અને કેવી રીતે આ સંદેશો વપરાયો છે, તો તમે આ સંદેશામાં દસ્તાવેજ ઉમેરી અને અન્ય ભાષાંતરકારોને મદદ કરી શકો છો.</em>",
"translate-edit-information": "સંદેશા વિશે માહિતી ($1)",
"translate-edit-in-other-languages": "અન્ય ભાષાઓમાં સંદેશો",
"translate-edit-warnings": "અધુરા ભાષાંતરો વિશે ચેતવણી",
+ "translate-edit-tmmatch-source": "ભાષાંતર સ્ત્રોત લખાણ: $1",
+ "translate-edit-tmmatch": "$1% મેળ",
"translate-edit-askpermission": "પરવાનગી મેળવો",
+ "exporttranslations": "ભાષાંતરો નિકાસ કરો",
+ "translate-export-form-format": "શૈલી",
"translate-magic-pagename": "વિસ્તારિત મિડિયાવિકિ ભાષાંતર",
"translate-magic-module": "નમૂનો:",
"translate-magic-submit": "મેળવો",
@@ -62,7 +65,7 @@
"translate-magic-namespace": "નામાવકાશ નામો",
"translate-magic-notsaved": "આપનું સંપાદન સચવાયું નથી!",
"translate-magic-errors": "કૃપા કરી અહીં આપેલ {{PLURAL:$1|ક્ષતિ|ક્ષતિઓ}}ને ભાષાંતરમાં સુધારો:",
- "translate-magic-saved": "આપના ફેરફારો સફળતાપૂર્વક સચવાયા હતા.",
+ "translate-magic-saved": "આપના ફેરફારો સચવાયા હતા.",
"translate-checks-parameters": "અહીં આપેલ {{PLURAL:$2|પરિમાણ|પરિમાણો}}નો ઉપયોગ કરાયો નથી:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "અહીં આપેલ {{PLURAL:$2|પરિમાણ|પરિમાણો}} અજાણ્યા છે:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "ત્યાં અસમાન સંખ્યાનાં {{PLURAL:$2|કૌંસ|કૌંસ}} છે:\n<strong><nowiki>$1</nowiki></strong>",
@@ -76,6 +79,8 @@
"prefs-translate": "ભાષાંતર વિકલ્પો",
"translate-pref-editassistlang-help": "અલ્પવિરામો વડે વિભાજીત ભાષાસંકેતોની યાદી.\n\nજ્યારે તમે ભાષાંતર કરતા હશો ત્યારે આ ભાષાઓમાં ભાષાંતરીત સંદેશાઓ જોવા મળશે.\n\nભાષાઓની ડિફોલ્ટ યાદી તમારી ભાષા પર આધારીત છે.",
"translate-pref-editassistlang-bad": "યાદી <nowiki>$1</nowiki> માં અમાન્ય ભાષાસંકેત.",
+ "translate-rcfilters-translations": "ભાષાંતરો",
+ "translate-rcfilters-translations-only-label": "ભાષાંતરો",
"translate-rc-translation-filter": "ભાષાંતરોને ચાળો:",
"translate-rc-translation-filter-no": "કશું નથી",
"translate-rc-translation-filter-only": "ફક્ત ભાષાંતરો બતાવો",
@@ -114,9 +119,10 @@
"translate-translations-project": "યોજના",
"translate-translations-history-short": "h",
"languagestats": "ભાષાનું અંક વિવરણ",
+ "languagestats-recenttranslations": "તાજેતરના ભાષાંતરો",
"translate-langstats-expand": "વિસ્તારો",
"translate-langstats-collapse": "સંકેલો",
- "translate-langstats-expandall": "બધું વસ્તારો",
+ "translate-langstats-expandall": "બધું વિસ્તારો",
"translate-langstats-collapseall": "બધું સંકેલો",
"translate-language-code": "ભાષાસંહિતા",
"translate-language-code-field-name": "ભાષાસંહિતા:",
@@ -130,11 +136,14 @@
"translate-mgs-pagename": "સંદેશા સમૂહ અંકવિવરણ",
"translate-mgs-fieldset": "સંદર્ભો દર્શાવો",
"translate-mgs-group": "સંદેશ જૂથ",
+ "translate-mgs-submit": "આંકડાકીય માહિતી દર્શાવો",
"translate-mgs-column-language": "ભાષા",
"supportedlanguages": "આધારિત ભાષાઓ",
"supportedlanguages-recenttranslations": "તાજેતરનાં ભાષાંતરો",
"translate-save": "સાચવો ($1)",
"translate-jssti-add": "સૂચિમાં ઉમેરો",
+ "translate-manage-import-new": "નવા સંદેશો $1",
+ "translate-manage-import-deleted": "દૂર કરેલ સંદેશ $1",
"translate-manage-action-import": "આયાત કરો",
"translate-manage-action-ignore": "અવગણો",
"importtranslations": "ભાષાંતરો આયાત કરો",
@@ -152,7 +161,6 @@
"translate-gs-avgscore": "સ્કોર પ્રતિશત્",
"translate-documentation-language": "સંદેશનું દસ્તાવેજીકરણ",
"translate-searchprofile": "ભાષાંતરો",
- "translate-messagereview-done": "પરીક્ષણ થયેલું",
"translate-stats-workflow": "રાજ્ય",
"translate-msggroupselector-search-all": "બધા",
"translate-msggroupselector-search-recent": "હમણાનું",
@@ -176,13 +184,19 @@
"tux-editor-suggestions-title": "સૂચન",
"tux-editor-in-other-languages": "અન્ય ભાષાઓમાં",
"tux-warnings-hide": "છુપાઓ",
+ "tux-editor-clear-translated": "ભાષાંતર કરેલ છુપાવો",
"tux-editor-proofreading-mode": "પરીક્ષણ",
"tux-editor-translate-mode": "યાદી",
+ "tux-editor-proofreading-hide-own-translations": "તમારા ભાષાંતરો છુપાવો",
+ "tux-editor-proofreading-show-own-translations": "તમારા ભાષાંતરો દર્શાવો",
"tux-proofread-edit-label": "ફેરફાર કરો",
"tux-editor-page-mode": "પાનું",
+ "tux-editor-outdated-warning-diff-link": "ભેદ દર્શાવો",
"tux-editor-doc-editor-placeholder": "સંદેશનું દસ્તાવેજીકરણ",
"tux-editor-doc-editor-save": "દસ્તાવેજીકરણ સાચવો",
"tux-editor-doc-editor-cancel": "રદ કરો",
+ "tux-messagetable-more-messages": "$1 વધુ {{PLURAL:$1|સંદેશ|સંદેશાઓ}}",
+ "tux-messagetable-loading-messages": "લાવે છે {{PLURAL:$1|સંદેશ|સંદેશાઓ}}...",
"tux-empty-list-translated-action": "અનુવાદ કરો",
"tux-empty-nothing-new-to-proofread": "પરીક્ષણ માટે નવું કંઈ નથી",
"tux-empty-list-other-action": "ભાષાંતરનું પુનરાવલોકન",
@@ -190,8 +204,11 @@
"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": "રદ કરો",
"tux-editor-message-tools-translations": "બધાં ભાષાંતરો",
- "tux-editor-loading": "લવાઇ રહ્યું છે..."
+ "tux-editor-message-tools-linktothis": "આ સંદેશા પરની કડી",
+ "tux-editor-loading": "લવાઇ રહ્યું છે...",
+ "translate-search-more-languages-info": "$1 વધુ {{PLURAL:$1|ભાષા|ભાષાઓ}}"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ha.json b/www/wiki/extensions/Translate/i18n/core/ha.json
index c9271df2..767cae16 100644
--- a/www/wiki/extensions/Translate/i18n/core/ha.json
+++ b/www/wiki/extensions/Translate/i18n/core/ha.json
@@ -1,4 +1,9 @@
{
- "@metadata": [],
- "translate-magic-cm-comment": "Bahasi:"
+ "@metadata": {
+ "authors": [
+ "Ammarpad"
+ ]
+ },
+ "translate-magic-cm-comment": "Bahasi:",
+ "supportedlanguages-summary": "Wannan shine jerin dukkan harsunan dake akwai a {{SITENAME}}, tare da wanda suke aikin fassara akan harshen."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/hak.json b/www/wiki/extensions/Translate/i18n/core/hak.json
index 2820439e..7ae8a8dc 100644
--- a/www/wiki/extensions/Translate/i18n/core/hak.json
+++ b/www/wiki/extensions/Translate/i18n/core/hak.json
@@ -5,5 +5,6 @@
"Jetlag"
]
},
- "translate-page-edit": "編寫"
+ "translate-page-edit": "編寫",
+ "translate-documentation-language": "Sin-sit sot-mìn vùn-khien"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/he.json b/www/wiki/extensions/Translate/i18n/core/he.json
index 4e1e0959..9e6b29f6 100644
--- a/www/wiki/extensions/Translate/i18n/core/he.json
+++ b/www/wiki/extensions/Translate/i18n/core/he.json
@@ -17,23 +17,18 @@
},
"translate": "תרגום",
"translate-desc": "[[Special:Translate|דף מיוחד]] לתרגום מדיה־ויקי ומעבר לכך",
- "translate-taskui-view": "הצגת כל ההודעות",
- "translate-taskui-untranslated": "הצגת הודעות שאינן מתורגמות",
- "translate-taskui-optional": "הצגת הודעות אופציונליות",
- "translate-taskui-acceptqueue": "רק הודעות שאני יכול לסקור",
- "translate-taskui-reviewall": "לסקור את כל ההודעות",
+ "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-taction-lstats": "סטטיסטיקות שפה",
- "translate-taction-mstats": "סטטיסטיקות על קבוצת ההודעות",
+ "translate-taction-mstats": "סטטיסטיקות של קבוצת ההודעות",
"translate-taction-export": "ייצוא",
"translate-taction-disabled": "הפעולה הזאת אינה מופעלת בוויקי הזה",
"translate-page-no-such-language": "השפה שצוינה שגויה.",
"translate-page-no-such-group": "הקבוצה שצוינה שגויה.",
- "translate-page-disabled": "התרגומים לשפה זו בקבוצה זו בוטלו מהסיבה הבאה:\n\n'<em>$1</em>'",
- "translate-page-disabled-source": "$1 היא שפת המקור של הדף הזה.",
+ "translate-page-disabled": "התרגומים לשפה זו בקבוצה זו בוטלו.\nהסיבה לכך היא:\n\n<em>$1</em>",
"translate-language-disabled": "תרגום לשפה הזאת כבוי.",
"translate-page-settings-legend": "הגדרות",
"translate-page-group": "קבוצה",
@@ -44,13 +39,13 @@
"translate-page-navigation-legend": "ניווט",
"translate-page-showing": "מוצגות הודעות מ־$1 עד $2 מתוך $3.",
"translate-page-showing-all": "{{PLURAL:$1|מוצגת הודעה אחת|מוצגות $1 הודעות}}.",
+ "translate-page-showing-none": "אין הודעות להצגה.",
"translate-next": "לדף הבא",
"translate-prev": "לדף הקודם",
"translate-page-description-legend": "מידע על הקבוצה",
"translate-page-description-hasoptional": "קבוצת ההודעות הזאת מכילה הודעות אופציונליות.\nיש לתרגם הודעות אופציונליות רק אם לשפתכם יש דרישות מיוחדות\nכגון אי־שימוש ברווחים או תעתיק ייחודי של שמות פרטיים. $1",
"translate-page-description-hasoptional-open": "הצגת הודעות אופציונליות.",
"translate-page-edit": "עריכה",
- "translate-ext-url": "<hr />אתר אינטרנט: $1",
"translate-optional": "(אופציונלי)",
"translate-ignored": "(לא לתרגום)",
"translate-edit-title": "עריכת \"$1\"",
@@ -66,6 +61,11 @@
"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-help": "באפשרותכם לתרגם כינויים לדפים מיוחדים, מילות קסם ושמות מרחבי שם.\n\nלשמות דפים מיוחדים ולמילות קסם יכולים להיות כמה תרגומים.\nיש להפריד את התרגומים באמצעות פסיק (,).\nלמרחבי שם יכול להיות תרגום אחד בלבד.\n\nתרגום מרחב השם של שיחת פרויקט <code dir=\"ltr\">$1 talk</code> עשוי להיות מסובך.\nהמחרוזת <code>$1</code> מוחלפת בשם האתר, למשל (<code>{{ns:project_talk}}</code>).\nאם בשפה שלכם קשה ליצור ביטוי תקין בצורה הזאת, נא להודיע לנו על כך בדף [[Support]].\n\nעליכם להיות בקבוצת מתרגמים כדי לשמור שינויים.\nהשינויים לא יישמרו עד שתלחצו על כפתור השמירה שלהלן.",
"translate-magic-module": "מידע לתרגום:",
@@ -103,15 +103,25 @@
"translate-pref-nonewsletter": "אל תשלחו אליי חדשות תקופתיות בדואר אלקטרוני",
"translate-pref-editassistlang": "שפות מסייעות:",
"prefs-translate": "אפשרויות תרגום",
- "translate-pref-editassistlang-help": "רשימה מופרדת בפסיקים של קודי שפות.\nתרגום של ההודעה לשפות אלו יופיע בעת תרגום.\nרשימת שפות התחלתית תלויה בשפה שאתם דוברים.",
+ "translate-pref-editassistlang-help": "רשימת קודים של שפות, כאשר פסיקים מפרידים בין שפה לשפה.\nבעת תרגום של הודעה, יוצגו התרגומים של ההודעה לשפות העזר הללו.\nשפת העזר המשמשת כברירת מחדל תלויה בשפת הממשק שלך.",
"translate-pref-editassistlang-bad": "קוד שפה שגוי ברשימה:\n<nowiki>$1</nowiki>.",
"right-translate": "עריכה באמצעות ממשק התרגום",
+ "action-translate": "לערוך באמצעות ממשק תרגום",
"right-translate-manage": "ניהול קבוצות הודעה",
- "action-translate-manage": "לנהל קבוצות הודעות",
+ "action-translate-manage": "לנהל קבוצות הודעה",
"right-translate-import": "ייבוא תרגומים לא מקוונים",
- "action-translate-import": "לייבא תרגומים הלתי־מקוונים",
+ "action-translate-import": "לייבא תרגומים לא מקוונים",
"right-translate-messagereview": "סקירת תרגומים",
- "right-translate-groupreview": "שינוי מצב זרימת עבודה של קבוצות הודעות",
+ "action-translate-messagereview": "לסקור תרגומים",
+ "right-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": "התאמות מקומיות של הודעות אתר במרחב MediaWiki.",
"translate-rc-translation-filter": "סינון תרגומים:",
"translate-rc-translation-filter-no": "ללא סינון",
"translate-rc-translation-filter-only": "להציג תרגומים בלבד",
@@ -127,7 +137,7 @@
"translate-statsf-options": "אפשרויות גרף",
"translate-statsf-width": "רוחב בפיקסלים:",
"translate-statsf-height": "אורך בפיקסלים:",
- "translate-statsf-days": "תאריך תחילה:",
+ "translate-statsf-days": "מספר ימים:",
"translate-statsf-start": "תאריך תחילה:",
"translate-statsf-scale": "יחידת זמן:",
"translate-statsf-scale-months": "חודשים",
@@ -174,7 +184,8 @@
"translate-untranslated": "לא מתורגמות",
"translate-percentage-complete": "התקדמות",
"translate-percentage-fuzzy": "לא מעודכנות",
- "translate-languagestats-overall": "כל הקבוצות ההודעות יחד",
+ "translate-percentage-proofread": "נסקרו",
+ "translate-languagestats-overall": "כל קבוצות ההודעות יחד",
"translate-ls-submit": "הצגת סטטיסטיקות",
"translate-ls-column-group": "קבוצת הודעות",
"translate-mgs-pagename": "סטטיסטיקת קבוצת הודעות",
@@ -184,16 +195,18 @@
"translate-mgs-noempty": "לא להציג שפות ללא שום תרגום",
"translate-mgs-submit": "הצגת סטטיסטיקות",
"translate-mgs-column-language": "שפה",
- "translate-mgs-totals": "כל השפות ביחד",
+ "translate-mgs-totals": "{{PLURAL:$1|שפה אחת|כל $1 השפות ביחד}}",
"translate-mgs-invalid-group": "הקבוצה $1 אינה קיימת.",
"translate-mgs-nothing": "אין מה להראות עבור הסטטיסטיקות המבוקשות.",
"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": "{{PLURAL:$1|שפה אחת|$1 שפות}} בסך הכול.",
"supportedlanguages-activity": "$1: {{PLURAL:$2|עריכה אחת|$2 עריכות}} - עריכה אחרונה לפני {{PLURAL:$3|יום אחד|$3 ימים}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "טקסט המקור של יחידת התרגום",
"translate-save": "שמירה ($1)",
"translate-jssti-add": "הוספה לרשימה",
"managemessagegroups": "ניהול קבוצות הודעות",
@@ -203,13 +216,13 @@
"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",
"translate-manage-action-import": "יבוא",
"translate-manage-action-conflict": "לייבא ולטשטש",
- "translate-manage-action-ignore": "התעלמות",
+ "translate-manage-action-ignore": "להתעלם",
"translate-manage-action-fuzzy": "לייבא ולטשטש תרגומים",
"translate-manage-nochanges": "אין שינויים להגדרות ההודעות עבור קבוצה זו.",
"translate-manage-nochanges-other": "אין שינויים עבור השפה הזאת.\nהשתמשו בקישור למטה כדי לחוזר לתצוגת פרטי קבוצה.",
@@ -234,9 +247,7 @@
"translate-js-summary": "תקציר:",
"translate-js-save": "שמירה",
"translate-js-next": "לשמור ולפתוח את ההודעה הבאה",
- "translate-js-nonext": "זו הייתה ההודעה האחרונה בדף זה.",
"translate-js-skip": "מעבר להודעה הבאה",
- "translate-js-save-failed": "השמירה נכשלה. נא לדווח את השגיאה הזאת.",
"translate-js-history": "היסטוריית התרגום",
"translate-js-support": "לשאול שאלה",
"translate-js-support-title": "לבקש עזרה אם אין מספיק מידע לתרגום נכון של ההודעה הזאת.",
@@ -253,21 +264,9 @@
"translate-documentation-language": "תיעוד הודעות",
"translate-searchprofile": "תרגומים",
"translate-searchprofile-tooltip": "חיפוש בכל התרגומים",
+ "translate-searchprofile-note": "ניתן למצוא תוצאות נוספות באמצעות [$1 חיפוש תרגומים].",
"translate-search-languagefilter": "סינון לפי שפה:",
"translate-search-nofilter": "ללא סינון",
- "translate-messagereview-submit": "לסמן שההודעה נסקרה",
- "translate-messagereview-progress": "מתבצע סימון שההודעה נסקרה...",
- "translate-messagereview-failure": "סימון שההודעה נסקרה נכשל: $1",
- "translate-messagereview-done": "נסקרה",
- "translate-messagereview-reviews": "נסקרה על־ידי {{PLURAL:$1|משתמש אחד|$1 משתמשים}}",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|סקרת את ההודעה הזאת|ההודעה אושרה על־ידי $1 משתמשים, כולל אותך}}",
- "api-error-invalidrevision": "התרגום לא נמצא",
- "api-error-unknownmessage": "ההודעה לא נמצאה",
- "api-error-fuzzymessage": "ההודעה מסומנת כמטושטשת",
- "api-error-owntranslation": "לא ניתן לסקור תרגום של עצמך",
- "translate-messagereview-no-fuzzy": "לא ניתן לסקור תרגומים בלתי־מעודכנים.",
- "translate-messagereview-no-own": "לא ניתן לסקור תרגומים של עצמך.",
- "translate-messagereview-doit": "לסמן שהתרגום הזה נסקר.",
"log-name-translationreview": "יומן סקירת תרגומים",
"log-description-translationreview": "יומן של כל הסקירות של תרגומים ושל קבוצות תרגומים.",
"logentry-translationreview-message": "$1 {{GENDER:$2|סקר|סקרה}} את התרגום $3",
@@ -289,13 +288,12 @@
"translate-dynagroup-recent-desc": "קבוצת ההודעות הזאת מציגה את כל התרגומים האחרונים לשפה הזאת.\nזה שימושי בעיקר לסקירה.",
"translate-dynagroup-additions-label": "תוספות אחרונות",
"translate-dynagroup-additions-desc": "קבוצת ההודעות הזאת מציגה הודעות חדשות והודעות ששונו.",
- "translate-gethelp": "עזרה",
"translate-msggroupselector-projects": "קבוצות הודעות",
"translate-msggroupselector-search-placeholder": "חיפוש קבוצה",
"translate-msggroupselector-search-all": "הכול",
"translate-msggroupselector-search-recent": "אחרונות",
"translate-msggroupselector-view-subprojects": "הצגת {{PLURAL:$1|תת־מיזם אחד|$1 תת־מיזמים}}",
- "tux-languageselector": "שפה היעד לתרגום",
+ "tux-languageselector": "שפת היעד לתרגום:",
"tux-tab-all": "הכול",
"tux-tab-untranslated": "לא מתורגמות",
"tux-tab-outdated": "לא עדכניות",
@@ -308,7 +306,9 @@
"tux-status-translated": "מתורגמת",
"tux-status-saving": "מתבצעת שמירה...",
"tux-status-unsaved": "לא שמורה",
+ "tux-save-unknown-error": "אירעה שגיאה בלתי ידועה.",
"tux-editor-placeholder": "התרגום שלך",
+ "tux-editor-editsummary-placeholder": "תקציר עריכה (לא חובה)",
"tux-editor-paste-original-button-label": "הדבקת טקסט המקור",
"tux-editor-discard-changes-button-label": "ביטול שינויים",
"tux-editor-save-button-label": "שמירת תרגום",
@@ -316,7 +316,7 @@
"tux-editor-cancel-button-label": "ביטול",
"tux-editor-confirm-button-label": "אישור תרגום",
"tux-editor-proofread-button-label": "לסמן שהתרגום נסקר",
- "tux-editor-shortcut-info": "\"$1\" לשמירה, \"$2\" למעבר להודעה הבאה, \"$3\" להצגת קיצורים אחרים.",
+ "tux-editor-shortcut-info": "אפשר ללחוץ על \"$1\" לאישור ומעבר להודעה הבאה, \"$2\" למעבר להודעה הבאה, \"$4\" לכתיבת תקציר או להחזיק \"$3\" להצגת קיצורים אחרים.",
"tux-editor-edit-desc": "עריכת תיעוד",
"tux-editor-add-desc": "הוספת תיעוד",
"tux-editor-suggestions-title": "הצעות",
@@ -371,9 +371,11 @@
"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": "מחיקה",
"tux-editor-message-tools-translations": "כל התרגומים",
+ "tux-editor-message-tools-linktothis": "קישור להודעה הזאת",
"tux-editor-loading": "טעינה...",
"translate-search-more-languages-info": "עוד {{PLURAL:$1|שפה אחת|$1 שפות}}",
"translate-statsbar-tooltip": "$1% תורגם, $2% נסקר",
@@ -382,5 +384,5 @@
"translate-ulsdep-title": "שגיאת הגדרות",
"translate-ulsdep-body": "ההרחבה Translate משתמשת ב[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector הרחבה Universal Language Selector].",
"tux-session-expired": "אינך נמצא בחשבון עוד. נא להיכנס בלשונית אחרת. לחלופין, יש להעתיק תרגומים שלא נשמרו, להיכנס, לחזור לדף הזה, ולהזין שוב את התרגומים שלך.",
- "tux-nojs": "הדף הזה דורש שימוש ב־JavaScript."
+ "tux-nojs": "הדף הזה דורש שימוש ב־JavaScript. התמיכה ב־JavaScript כבויה, לא פעלה, או שהדפדפן הזה אינו נתמך."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/hi.json b/www/wiki/extensions/Translate/i18n/core/hi.json
index 47084ea2..e4607bfd 100644
--- a/www/wiki/extensions/Translate/i18n/core/hi.json
+++ b/www/wiki/extensions/Translate/i18n/core/hi.json
@@ -14,8 +14,6 @@
]
},
"translate": "अनुवाद",
- "translate-taskui-view": "सभी सन्देश दिखाए",
- "translate-taskui-untranslated": "सारे अनअनुवादित सन्देश दिखाए",
"translate-taction-translate": "अनुवाद",
"translate-taction-proofread": "अवलोकन",
"translate-taction-lstats": "भाषा सांख्यिकी",
@@ -29,12 +27,12 @@
"translate-submit": "खोजें",
"translate-page-navigation-legend": "नैविगेशन",
"translate-page-showing": "$3 में से $1 से $2 तक संदेश दर्शित हैं.",
+ "translate-page-showing-none": "दिखने के लिए कोई संदेश नहीं ।",
"translate-next": "अगला पृष्ठ",
"translate-prev": "पिछला पृष्ठ",
"translate-page-description-legend": "दल के बारे में जानकारी",
"translate-page-description-hasoptional-open": "वैकल्पिक संदेश दिखाएँ ।",
"translate-page-edit": "सम्पादन",
- "translate-ext-url": "<hr />वेबसाइट: $1",
"translate-optional": "(वैकल्पिक)",
"translate-ignored": "(अवगणित)",
"translate-edit-title": "सम्पादन \"$1\"",
@@ -44,7 +42,8 @@
"translate-edit-information": "संदेश ($1) के बारे में जानकारी",
"translate-edit-in-other-languages": "संदेश अन्य भाषा में",
"translate-edit-tmmatch": "$1% मैच",
- "translate-edit-askpermission": "अनुमति के लिए अनुरोध",
+ "translate-edit-askpermission": "अनुमति लें",
+ "translate-export-form-format": "प्रारूप",
"translate-magic-pagename": "एक्स्टेंडेड मीडियाविकि अनुवाद",
"translate-magic-module": "मोड्यूल:",
"translate-magic-submit": "खोजें",
@@ -81,6 +80,7 @@
"translate-statsf-count-edits": "संपादनोंकी संख्या",
"translate-statsf-count-users": "सक्रिय अनुबादक",
"translate-statsf-count-registrations": "नया सदस्य",
+ "translate-statsf-count-reviews": "अनुवाद समीक्षा",
"translate-statsf-count-reviewers": "पुनरीक्षक",
"translate-statsf-submit": "पूर्वावलोकन",
"translate-tag-page-desc": "$3 ($4) से [[$2|$1]] विकि पृष्ठ का अनुवाद है।",
@@ -117,7 +117,7 @@
"translate-mgs-invalid-group": "विनिर्दिष्ट समूह $1 अस्तित्व में नहीं है।",
"translate-mgs-nothing": "अनुरोध किए गए आँकड़े दिखाने के लिए कुछ नहीं है ।",
"supportedlanguages": "समर्थित भाषाएँ",
- "supportedlanguages-translators": "{{PLURAL:$2|अनुबादक|अनुबादक}}: $1",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|अनुवादक}}}}: $1",
"supportedlanguages-recenttranslations": "हाल में हुए अनुवाद",
"supportedlanguages-count": "$1 {{PLURAL:$1|भाषा|भाषाएँ}} कुल ।",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|सम्पादन|सम्पादन}} - शेष सम्पादन $3 {{PLURAL:$3|दिन|दिन}} पेहले",
@@ -132,13 +132,11 @@
"importtranslations": "अनुवाद आयात करें",
"translate-import-from-local": "स्थानीय फ़ाइल अपलोड:",
"translate-import-load": "लोड़ फ़ाइल",
- "translate-import-err-ul-failed": "फ़ाइल अपलोड सफल नहीं रहा",
+ "translate-import-err-ul-failed": "फ़ाइल अपलोड विफल रहा",
"translate-js-summary": "सारांश:",
"translate-js-save": "सहेजें",
"translate-js-next": "सहेजें और अगले सन्देश-कुंजी खोलें",
- "translate-js-nonext": "ये अंतिम संदेश था इस पृष्ठ पे ।",
"translate-js-skip": "त्यागें और अगली सन्देश-कुंजी खोलें",
- "translate-js-save-failed": "सहेजने में विफल। कृपया इस त्रुटि की रिपोर्ट करें।",
"translate-js-history": "अनुवाद इतिहास",
"translate-js-support": "सवाल पूछें",
"translate-js-support-title": "कृपया मदद मांगें अगर इस सन्देश के अनुवाद में कोई जानकारी की कमी हो तो",
@@ -155,18 +153,6 @@
"translate-searchprofile-tooltip": "सभी अनुवादों से खोज",
"translate-search-languagefilter": "निस्पंदन (छानना) - भाषा के आधार पर",
"translate-search-nofilter": "निःनिस्पंदन (बिना छननी)",
- "translate-messagereview-submit": "स्वीकारें",
- "translate-messagereview-progress": "पुनरीक्षित कर रहे हैं...",
- "translate-messagereview-failure": "पुनरीक्षण विफल हुआ... : $1",
- "translate-messagereview-done": "पुनरीक्षित",
- "translate-messagereview-reviews": "{{PLURAL:$1|एक सदस्य|$1 सदस्यों}} द्वारा पुनरीक्षित किया गया",
- "translate-messagereview-reviewswithyou": "आप को मिला कर {{PLURAL:$1|केवल आप|$1 सदस्यों}} द्वारा पुनरीक्षित किया गया",
- "api-error-invalidrevision": "अनुवाद नहीं मिला",
- "api-error-unknownmessage": "सन्देश नहीं मिला",
- "api-error-fuzzymessage": "अनुवाद FUZZY अँकित हुआ है",
- "api-error-owntranslation": "आप अपने स्वयं के अनुवाद का पुनरीक्षण नहीं कर सकते",
- "translate-messagereview-no-fuzzy": " FUZZY अनुवाद पुनरीक्षित नहीं हो सकता",
- "translate-messagereview-no-own": "आप अपने स्वयं के अनुवाद को पुनरीक्षित चिह्नित नहीं कर सकते।",
"log-name-translationreview": "अनुवाद समीक्षा लॉग",
"translate-workflowstatus": "स्थिति: $1",
"translate-stats-workflow": "स्थिति",
@@ -175,6 +161,7 @@
"translate-msggroupselector-search-placeholder": "अन्वेषणसमूह",
"translate-msggroupselector-search-all": "सभी",
"translate-msggroupselector-search-recent": "अभी",
+ "tux-languageselector": "में अनुवाद",
"tux-tab-all": "सभी",
"tux-tab-untranslated": "बिना अनुवाद",
"tux-tab-outdated": "कालग्रस्त",
@@ -188,6 +175,7 @@
"tux-status-saving": "सहेज रहा है",
"tux-status-unsaved": "नहीं सहेजा",
"tux-editor-placeholder": "आपके अनुवाद",
+ "tux-editor-editsummary-placeholder": "वैकल्पिक सारांश",
"tux-editor-paste-original-button-label": "स्रोत पाठ का उपयोग करें",
"tux-editor-discard-changes-button-label": "परिवर्तनों को त्यागें",
"tux-editor-save-button-label": "अनुवाद सहेजे",
@@ -204,9 +192,11 @@
"tux-proofread-edit-label": "सम्पादन",
"tux-editor-page-mode": "पृष्ठ",
"tux-editor-doc-editor-cancel": "रद्द करें",
+ "tux-message-filter-optional-messages-label": "वैकल्पिक संदेश",
"tux-proofread-translated-by-self": "आपके द्वारा अनुवादित",
"tux-empty-list-translated-guide": "आप अनुवाद हेतु सहायता कर सकते हैं",
"tux-empty-list-translated-action": "अनुवाद करें",
+ "tux-empty-list-other": "अनुवाद के लिए कुछ नहीं है",
"tux-editor-close-tooltip": "बंध करें",
"tux-editor-expand-tooltip": "बड़ा करें",
"tux-editor-collapse-tooltip": "छोटा करें",
diff --git a/www/wiki/extensions/Translate/i18n/core/hif-latn.json b/www/wiki/extensions/Translate/i18n/core/hif-latn.json
new file mode 100644
index 00000000..57016680
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/hif-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abdul Kadir"
+ ]
+ },
+ "translate-documentation-language": "Message ke baare me jaankari"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/hr.json b/www/wiki/extensions/Translate/i18n/core/hr.json
index 7510e4cb..c774cd48 100644
--- a/www/wiki/extensions/Translate/i18n/core/hr.json
+++ b/www/wiki/extensions/Translate/i18n/core/hr.json
@@ -7,14 +7,25 @@
"MaGa",
"Roberta F.",
"SpeedyGonsales",
- "Tivek"
+ "Tivek",
+ "Bugoslav"
]
},
- "translate": "Prijevodi sistemskih poruka",
+ "translate": "Prevedi",
"translate-desc": "[[Special:Translate|Posebna stranica]] za prevođenje MediaWiki i izvan",
- "translate-page-no-such-language": "Unešen jezik je neispravan",
+ "translate-fuzzybot-desc": "Ovo je poseban sustavski račun koji se rabi u [https://www.mediawiki.org/wiki/Extension:Translate proširenju »Prevođenje« (engl. Translate)] MediaWikija, koje se upotrebljava za održavanje prijevoda. Ovaj je račun dio softvera MediaWiki i nije u vlasništvu ijednoga suradnika.",
+ "translate-taskui-export-to-file": "Izvoz u izvornom obliku",
+ "translate-taskui-export-as-po": "Izvoz za ''off-line'' prijevod",
+ "translate-taction-translate": "Prevođenje",
+ "translate-taction-proofread": "Pregled",
+ "translate-taction-lstats": "Statistike jezika",
+ "translate-taction-mstats": "Statistike skupine poruka",
+ "translate-taction-export": "Izvoz",
+ "translate-taction-disabled": "Ova akcija je onemogućena na ovom wikiju.",
+ "translate-page-no-such-language": "Navedeni jezični kod ne postoji.",
"translate-page-no-such-group": "Navedena grupa je neispravna.",
"translate-page-disabled": "Prijevodi na ovaj jezik u ovoj grupi su onemogućeni. Razlog:\n\n<em>$1</em>",
+ "translate-language-disabled": "Prijevod na ovaj jezik je onemogućen.",
"translate-page-settings-legend": "Postavke",
"translate-page-group": "Skupina",
"translate-page-language": "Jezik",
@@ -24,22 +35,33 @@
"translate-page-navigation-legend": "Navigacija",
"translate-page-showing": "Prikazane poruke od $1 do $2 od ukupno $3.",
"translate-page-showing-all": "Prikazano: $1 {{PLURAL:$1|poruka|poruke|poruka}}.",
+ "translate-page-showing-none": "Nema traženih poruka.",
"translate-next": "Sljedeća stranica",
"translate-prev": "Prethodna stranica",
"translate-page-description-legend": "Podaci o grupi",
+ "translate-page-description-hasoptional": "Ova skupina sadržava neobvezne poruke.\nNeobvezne poruke treba prevoditi samo ukoliko Vaš jezik ima posebne potrebe;\nna primjer, ukoliko ne treba rabiti bjeline ili ukoliko treba preslovljavati imena. $1",
+ "translate-page-description-hasoptional-open": "Prikaži dodatne poruke.",
"translate-page-edit": "uredi",
- "translate-ext-url": "<hr />Web stranica: $1",
- "translate-optional": "(opcionalno)",
+ "translate-optional": "(neobvezno)",
"translate-ignored": "(zanemareno)",
"translate-edit-title": "Uredi \"$1\"",
"translate-edit-definition": "Definicija poruke",
"translate-edit-translation": "Prijevod",
"translate-edit-contribute": "dodaj",
- "translate-edit-no-information": "''Ova poruka nema dokumentacije. Ako znate gdje ili kako se koristi poruka, možete pomoći drugim prevoditeljima dodavajući dokumentaciju ovoj poruci.''",
+ "translate-edit-no-information": "<em>Ova poruka nema dokumentacije. Ako znate gdje ili kako se koristi poruka, možete pomoći drugim prevoditeljima dodavajući dokumentaciju ovoj poruci.</em>",
"translate-edit-information": "Informacije o poruci ($1)",
"translate-edit-in-other-languages": "Poruka na ostalim jezicima",
"translate-edit-warnings": "Upozorenja o nepotpunim prijevodima",
+ "translate-edit-tmmatch-source": "Izvorni tekst: $1",
"translate-edit-tmmatch": "$1% podudarnosti",
+ "translate-use-suggestion": "Zamijenite trenutačni prijevod ovim prijedlogom.",
+ "translate-edit-nopermission": "Da biste prevodili poruke, trebate imati prevoditeljska prava.",
+ "translate-edit-askpermission": "Zatraži dopuštenje",
+ "exporttranslations": "Izvoz prijevoda",
+ "translate-export-form-format": "Oblik",
+ "translate-export-invalid-format": "Navedite valjani oblik.",
+ "translate-export-not-supported": "Izvoz prijevoda nije podržan.",
+ "translate-export-format-notsupported": "Skupina poruka ne podržava navedeni izvozni format.",
"translate-magic-pagename": "Prošireni MediaWiki prijevod",
"translate-magic-module": "Modul:",
"translate-magic-submit": "Dohvati",
@@ -57,33 +79,51 @@
"translate-magic-namespace": "Imena imenskih prostora",
"translate-magic-notsaved": "Vaše uređivanje nije spremljeno!",
"translate-magic-errors": "Ispravite {{PLURAL:$1|sljedeću grešku|sljedeće greške}} u prijevodima:",
- "translate-magic-saved": "Vaše izmjene su uspješno spremljene.",
+ "translate-magic-saved": "Vaše izmjene su spremljene.",
"translate-checks-parameters": "Sljedeći {{PLURAL:$2|parametar se ne koristi|parametri se ne koriste}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-parameters-unknown": "Sljedeći {{PLURAL:$2|parametar je nepoznat|parametri su nepoznati}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Nejednak broj {{PLURAL:$2|zagrada|zagrada}}:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-links": "{{PLURAL:$2|Sljedeća poveznica je problematična|$2 sljedećih poveznica su problematične}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Sljedeća je poveznica problematična|$2 sljedeće poveznice problematične su|$2 sljedećih poveznica su problematične}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Nedostaje sljedeća poveznica|$2 Nedostaju sljedeće poveznice}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-xhtml": "Molimo, zamijenite {{PLURAL:$2|oznaku točnom|sljedeće oznake točnim}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "Definicija koristi <nowiki>{{PLURAL:}}</nowiki>, ali prijevod ne.",
+ "translate-checks-fudforum-syntax": "Upotrijebite nowiki>$1</nowiki> umjesto <nowiki>$2</nowiki> u ovom projektu.",
"translate-pref-nonewsletter": "Ne šalji mi e-poštom obavijesti translatewiki.net projekta",
"translate-pref-editassistlang": "Pomoćni jezici:",
"prefs-translate": "Mogućnosti prijevoda",
- "translate-pref-editassistlang-help": "Popis jezičnih kodova odjeljen zarezima.\nPrijevod poruke na tim jezicima bit će prikazani dok prevodite.\nZadani popis jezika ovisi o vašem jeziku.",
+ "translate-pref-editassistlang-help": "Popis jezičnih kodova odijeljen zarezima.\nPrijevod poruke na tim jezicima bit će prikazani dok prevodite.\nZadani popis jezika ovisi o vašem jeziku.",
+ "translate-pref-editassistlang-bad": "Nevaljan kôd jezika u popisu:\n<nowiki>$1</nowiki>.",
"right-translate": "Uređivanje koristeći sučelje za prevođenje",
- "right-translate-manage": "Upravljanje grupama prijevoda",
+ "right-translate-manage": "Upravljanje grupama poruka",
+ "action-translate-manage": "upravljanje skupinama poruka",
"right-translate-import": "Uvoz izvanmrežnih prijevoda",
+ "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.",
+ "translate-rcfilters-translations-filter-label": "Nisu prijevodi",
+ "translate-rcfilters-translations-filter-desc": "Sva uređivanja koja nisu prijevodi.",
"translate-rc-translation-filter": "Filtriraj prijevode:",
"translate-rc-translation-filter-no": "Ne filtriraj ništa",
"translate-rc-translation-filter-only": "Prikaži samo prijevode",
"translate-rc-translation-filter-filter": "Izbaci prijevode",
"translate-rc-translation-filter-site": "Samo uređivanja poruka projekta",
- "translationstats": "Statistike prevođenja",
+ "translationstats": "Statistika o prevođenju",
"translate-stats-edits": "Uređivanja",
"translate-stats-users": "Prevoditelji",
"translate-stats-registrations": "Prijave",
+ "translate-stats-reviews": "Provjere",
+ "translate-stats-reviewers": "Provjeravatelji",
"translate-statsf-intro": "Možete generirati jednostavne statistike s ovim obrascem.\nSve vrijednosti imaju gornju i donju granicu.",
"translate-statsf-options": "Opcije grafa",
"translate-statsf-width": "Širina u pikselima:",
"translate-statsf-height": "Visina u pikselima:",
"translate-statsf-days": "Vremensko razdoblje u danima:",
- "translate-statsf-start": "Vremensko razdoblje u danima:",
+ "translate-statsf-start": "Početni datum:",
"translate-statsf-scale": "Zrnatost:",
"translate-statsf-scale-months": "Mjeseci",
"translate-statsf-scale-weeks": "Tjedana",
@@ -93,16 +133,18 @@
"translate-statsf-count-edits": "Broj uređivanja",
"translate-statsf-count-users": "Aktivni prevoditelji",
"translate-statsf-count-registrations": "Novi suradnici",
+ "translate-statsf-count-reviews": "Provjere prijevoda",
+ "translate-statsf-count-reviewers": "Provjeravatelji",
"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 wiki stranice [[$2|$1]].",
+ "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.",
"translate-translations-no-message": "\"$1\" nije poruka koja se prevodi",
"translate-translations-none": "Ne postoje prijevodi za \"$1\"",
- "translate-translations-count": "{{PLURAL:$1|Pronađen jedan prijevod|Pronađena $1 prijevoda|Pronađeno $1 prijevoda}}.",
+ "translate-translations-count": "Pronađeno prijevoda: {{PLURAL:$1|jedan|$1}}.",
"translate-translations-fieldset-title": "Poruka",
"translate-translations-messagename": "Ime:",
"translate-translations-project": "Projekt:",
@@ -110,49 +152,211 @@
"translate-translations-history-short": "h",
"languagestats": "Statistika jezika",
"languagestats-summary": "Ova stranica prikazuje statistiku prijevoda za sve grupe poruka za jezik.",
+ "messagegroupstats-summary": "Ova stranica prikazuje statistike grupa poruka.",
"languagestats-stats-for": "Statistika prijevoda za $1 ($2).",
"languagestats-recenttranslations": "nedavni prijevodi",
+ "translate-langstats-incomplete": "Neke su statistike na ovoj stranici nepotpune. Da biste dobili više statistika, molimo ponovno učitajte stranicu.",
+ "translate-langstats-expand": "proširi",
+ "translate-langstats-collapse": "sažmi",
+ "translate-langstats-expandall": "proširi sve",
+ "translate-langstats-collapseall": "sažmi sve",
"translate-language-code": "Jezični kôd",
"translate-language-code-field-name": "Jezični kôd:",
"translate-suppress-complete": "Izostavi potpuno prevedene grupe poruka",
+ "translate-ls-noempty": "Izostavi potpuno neprevedene grupe poruka",
"translate-language": "Jezik",
"translate-total": "Poruke",
"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",
+ "translate-mgs-pagename": "Statistika skupine poruka",
+ "translate-mgs-fieldset": "Mogućnosti prikaza",
+ "translate-mgs-group": "Grupa poruka:",
+ "translate-mgs-nocomplete": "Ne prikazuj jezike koji su u cijelosti prevedeni",
+ "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": "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",
+ "supportedlanguages-summary": "Ova stranica prikazuje popis svih podržanih jezika na ovome wikiju, {{SITENAME}}, zajedno s imenima prevoditelja koji rade na tim jezicima.\nVeličina suradničkih imena prevoditelja, tj. veličina slova, ovisi od toga koliko je tko poruka preveo.\nBoja podcrtavanja ovdje označuje kolika je aktivnost prevoditeljā – prevoditeljicā.",
+ "supportedlanguages-colorlegend": "Legenda za boju: Posljednji prijevod načinjen prije $1 dana.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Prevoditelj}}|Prevoditelji}}: $1",
"supportedlanguages-recenttranslations": "nedavni prijevodi",
+ "supportedlanguages-count": "Ukupno $1 {{PLURAL:$1|jezik|jezika}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|uređivanje|uređivanja}} – posljednje uređivanje prije $3 {{PLURAL:$3|dan|dana}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Izvorni tekst prijevodne jedinice",
"translate-save": "Sačuvaj ($1)",
"translate-jssti-add": "Dodaj na popis",
+ "managemessagegroups": "Upravljanje skupinom poruka",
+ "translate-smg-notallowed": "Nije Vam dopušteno izvršiti ovu radnju.",
+ "translate-smg-nochanges": "Nema izmjena koje treba obraditi.",
+ "translate-smg-submit": "Proslijedi izmjene na obradbu",
+ "translate-smg-submitted": "Definicije poruka su ažurirane. Izmjene se obrađuju u pozadini.",
+ "translate-smg-more": "Bit će još izmjena za obradbu nakon što proslijedite ove.",
+ "translate-smg-left": "Sadržaj poruke na wikiju",
+ "translate-smg-right": "Predstojeće izmjene",
+ "translate-manage-import-diff": "Poruka $1 | Radnje: $2",
"translate-manage-import-new": "Nova poruka $1",
"translate-manage-import-deleted": "Obrisana poruka $1",
"translate-manage-action-import": "Uvezi",
"translate-manage-action-conflict": "Uvezi i označi kao ''fuzzy''",
"translate-manage-action-ignore": "Ignoriraj",
"translate-manage-action-fuzzy": "Uvoz i ''fuzzy'' prijevodi",
+ "translate-manage-nochanges": "Nema promjena u definicijama poruka u ovoj skupini.",
+ "translate-manage-nochanges-other": "Nema promjena za ovaj jezik.\nUpotrijebite poveznicu (ispod) za povratak na pregled detalja skupine.",
"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-import-done": "Obavljeno je sve!",
+ "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:",
"translate-import-load": "Učitaj datoteku",
+ "translate-import-err-ul-failed": "Postavljanje datoteke nije uspjelo",
+ "translate-import-err-invalid-title": "Navedeno ime datoteke <nowiki>$1</nowiki> nije bilo valjano.",
+ "translate-js-summary": "Sažetak:",
+ "translate-js-save": "Spremi",
"translate-js-next": "Spremi i otvori sljedeću",
- "translate-js-nonext": "Bila je to posljednja poruka na ovoj stranici.",
"translate-js-skip": "Prijeđi na sljedeću poruku",
- "translate-js-save-failed": "Spremanje nije uspjelo. Molimo prijavite ovu pogrešku.",
"translate-js-history": "Povijest prijevoda",
"translate-js-support": "Postavi pitanje",
"translate-js-support-title": "Zatražite pomoć ako nemate dovoljno informacija za ispravan prijevod ove poruke.",
"translate-js-support-unsaved-warning": "Imate nesačuvanih izmjena.",
- "translate-gs-code": "Kod",
+ "translate-gs-pos": "Mj.",
+ "translate-gs-code": "Kôd",
"translate-gs-continent": "Kontinent",
- "translate-gs-speakers": "Govornici",
+ "translate-gs-speakers": "Govornika",
"translate-gs-score": "Rezultat",
- "translate-gs-multiple": "Višestruki",
+ "translate-gs-multiple": "višestruki",
"translate-gs-count": "Broj",
"translate-gs-total": "Ukupno",
"translate-gs-avgscore": "Prosječno",
"translate-documentation-language": "Dokumentacija poruke",
+ "translate-searchprofile": "Prijevodi",
+ "translate-searchprofile-tooltip": "Traži iz svih prijevoda",
+ "translate-searchprofile-note": "Više mogućnosti pretraživanja dostupno je pomoću [$1 pretrage prijevoda].",
+ "translate-search-languagefilter": "Filtriranje po jeziku:",
+ "translate-search-nofilter": "Bez filtriranja",
+ "log-name-translationreview": "Evidencija pregleda prijevoda",
+ "log-description-translationreview": "Evidencija svih provjera prijevoda i skupina poruka.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|pregledao|pregledala}} je prijevod $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|promijenio|promijenila}} je stanje za $4 prijevod stranice $3 iz $6 u $7",
+ "group-translate-sandboxed": "Neodobreni prevoditelji",
+ "group-translate-sandboxed-member": "{{GENDER:$1|neodobreni prevoditelj|neodobrena prevoditeljica}}",
+ "right-translate-sandboxmanage": "Rukovođenje sa suradnicima, koji su ograničeni na pješčanike",
+ "action-translate-sandboxmanage": "rukovodi suradnicima ograničenima na pješčanike",
+ "right-translate-sandboxaction": "Izvršavanje radnji (na bijeloj listi) dopuštenih suradnicima ograničenim na pješčanik",
+ "action-translate-sandboxaction": "izvršavati radnje (na bijeloj listi) dopuštene suradnicima koji su ograničeni na uporabu pješčanika",
+ "translate-workflow-state-": "(isključeno)",
+ "translate-workflowstatus": "Stanje: $1",
+ "translate-workflow-set-doing": "Postavljam...",
+ "translate-workflow-autocreated-summary": "Automatsko stvaranje stranice za radno stanje $1",
+ "translate-stats-workflow": "Stanje",
+ "translate-workflowgroup-label": "Radna stanja",
+ "translate-dynagroup-recent-label": "Nedavni prijevodi",
+ "translate-dynagroup-recent-desc": "Ova skupina poruka prikazuje sve nedavne prijevode na ovaj jezik.\nNajkorisnije je pri provjeri prijevoda.",
+ "translate-dynagroup-additions-label": "Nedavna dodavanja",
+ "translate-dynagroup-additions-desc": "Ova grupa poruka prikazuje nove i promijenjene poruke.",
+ "translate-msggroupselector-projects": "Grupa poruka",
+ "translate-msggroupselector-search-placeholder": "Pretraga grupa",
+ "translate-msggroupselector-search-all": "Sve",
+ "translate-msggroupselector-search-recent": "Nedavne",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|podskupina|podskupine|podskupina}}",
+ "tux-languageselector": "Prijevod na",
+ "tux-tab-all": "Sve",
+ "tux-tab-untranslated": "Neprevedeno",
+ "tux-tab-outdated": "Zastarjelo",
+ "tux-tab-translated": "Prevedeno",
+ "tux-tab-unproofread": "Neprovjereno",
+ "tux-edit": "Uredi",
+ "tux-status-optional": "Neobvezno",
+ "tux-status-fuzzy": "Zastarjelo",
+ "tux-status-proofread": "Provjereno",
+ "tux-status-translated": "Prevedeno",
+ "tux-status-saving": "Pohranjivanje...",
+ "tux-status-unsaved": "Nesačuvano",
+ "tux-save-unknown-error": "Nepoznata se pogrješka dogodila.",
+ "tux-editor-placeholder": "Vaš prijevod",
+ "tux-editor-editsummary-placeholder": "Neobvezan sažetak",
+ "tux-editor-paste-original-button-label": "Zalijepi izvorni tekst",
+ "tux-editor-discard-changes-button-label": "Zanemari izmjene",
+ "tux-editor-save-button-label": "Spremi prijevod",
+ "tux-editor-skip-button-label": "Preskoči na sljedeću poruku",
+ "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 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",
+ "tux-editor-in-other-languages": "Na drugim jezicima",
+ "tux-editor-need-more-help": "Trebate pomoć?",
+ "tux-editor-ask-help": "Zatražite više informacija",
+ "tux-editor-tm-match": "$1% podudarnosti",
+ "tux-warnings-more": "{{PLURAL:$1|još $1}}",
+ "tux-warnings-hide": "skrij",
+ "tux-editor-save-failed": "Spremanje prijevoda nije uspjelo: $1",
+ "tux-editor-n-uses": "upotrijebljeno $1 {{PLURAL:$1|put|puta}}",
+ "tux-editor-message-desc-more": "Prikaži više",
+ "tux-editor-message-desc-less": "Prikaži manje",
+ "tux-editor-clear-translated": "Skrij prevedeno",
+ "tux-editor-proofreading-mode": "Provjera",
+ "tux-editor-translate-mode": "Popis",
+ "tux-editor-proofreading-hide-own-translations": "Skrij moje prijevode",
+ "tux-editor-proofreading-show-own-translations": "Prikaži moje prijevode",
+ "tux-proofread-action-tooltip": "Označi provjerenim",
+ "tux-proofread-edit-label": "Uredi",
+ "tux-editor-page-mode": "Stranica",
+ "tux-editor-outdated-warning": "Ovaj prijevod možda mora biti ažuriran.",
+ "tux-editor-outdated-warning-diff-link": "Prikaži razlike",
+ "tux-editor-doc-editor-placeholder": "Dokumentacija poruke",
+ "tux-editor-doc-editor-save": "Spremi dokumentaciju",
+ "tux-editor-doc-editor-cancel": "Otkaži",
+ "tux-messagetable-more-messages": "Još $1 {{PLURAL:$1|poruka|poruke|poruka}}",
+ "tux-messagetable-loading-messages": "Učitavanje {{PLURAL:$1|poruke|poruka}}...",
+ "tux-message-filter-placeholder": "Filtriranje",
+ "tux-message-filter-result": "Ukupno $1 {{PLURAL:$1|rezultat|rezultata}} za \"$2\"",
+ "tux-message-filter-advanced-button": "Napredno pretraživanje",
+ "tux-message-filter-optional-messages-label": "Dodatne poruke",
+ "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",
+ "tux-empty-no-messages-to-display": "Nema poruka za prikaz.",
+ "tux-empty-there-are-optional": "Postoje neobvezne poruke koje nisu prikazane na popisu",
+ "tux-empty-show-optional-messages": "Prikaži neobvezne poruke",
+ "tux-empty-no-outdated-messages": "Nema zastarjelih poruka",
+ "tux-empty-nothing-to-proofread": "Nema ničega za provjeru",
+ "tux-empty-you-can-help-providing": "Pomozite i Vi prevodeći nove poruke",
+ "tux-empty-nothing-new-to-proofread": "Za provjeru nema novih poruka",
+ "tux-empty-you-can-review-already-proofread": "Provjeri već provjerene prijevode.",
+ "tux-empty-list-other": "Ničega za prevođenje",
+ "tux-empty-list-other-guide": "Možete pomoći provjeravanjem postojećih prijevoda",
+ "tux-empty-list-other-action": "Provjeri prijevode",
+ "tux-empty-list-other-link": "Prikaz svih poruka",
+ "tux-editor-close-tooltip": "Zatvori",
+ "tux-editor-expand-tooltip": "Proširi",
+ "tux-editor-collapse-tooltip": "Sklopi",
+ "tux-editor-message-tools-show-editor": "Prikaži u wikiuređivaču",
+ "tux-editor-message-tools-history": "Povijest izmjena",
"tux-editor-message-tools-delete": "Izbriši",
- "translate-search-more-languages-info": "{{PLURAL:$1|Još jedan jezik|Još $1 druga jezika|Još $1 drugih jezika}}"
+ "tux-editor-message-tools-translations": "Svi prijevodi",
+ "tux-editor-message-tools-linktothis": "Poveznica na ovu poruku",
+ "tux-editor-loading": "Učitavam...",
+ "translate-search-more-languages-info": "{{PLURAL:$1|Još jedan jezik|Još $1 druga jezika|Još $1 drugih jezika}}",
+ "translate-statsbar-tooltip": "$1 % prevedeno, $2 % pregledano",
+ "translate-statsbar-tooltip-with-fuzzy": "‎$1 % prevedeno, $2 % provjereno, $3 % zastarjelo",
+ "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": "Ovaj alat ne radi bez JavaScripta. Javascript je onemogućen, ne radi ili je preglednik nepodržan."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/hsb.json b/www/wiki/extensions/Translate/i18n/core/hsb.json
index 88374a07..a0d0cfde 100644
--- a/www/wiki/extensions/Translate/i18n/core/hsb.json
+++ b/www/wiki/extensions/Translate/i18n/core/hsb.json
@@ -9,11 +9,6 @@
},
"translate": "Přełožić",
"translate-desc": "[[Special:Translate|Specialna strona]] za přełožowanje MediaWiki a druheho",
- "translate-taskui-view": "Wšě zdźělenki pokazać",
- "translate-taskui-untranslated": "Njepřełožene zdźělenki pokazać",
- "translate-taskui-optional": "Opcionalne zdźělenki pokazać",
- "translate-taskui-acceptqueue": "Jenož zdźělenki, kotrež móžu jako přepruwowane markěrować",
- "translate-taskui-reviewall": "Wšě přełožki přepruwować",
"translate-taskui-export-to-file": "Do systemoweho formata eksportować",
"translate-taskui-export-as-po": "Za přełožowanje offline eksportować",
"translate-taction-translate": "Přełožić",
@@ -42,7 +37,6 @@
"translate-page-description-hasoptional": "Tuta zdźělenska skupina wobsahuje opcionalne zdźělenki.\nOpcionalne zdźělenki měli so jenož přełožować, jeli twoja rěč ma wosebitu potrjebu za nje,\nkaž na přikład njewužiwanje mjezerow abo transliteraciju swójskich mjenow. $1",
"translate-page-description-hasoptional-open": "Opcionalne zdźělenki pokazać.",
"translate-page-edit": "wobdźěłać",
- "translate-ext-url": "<hr />Websydło: $1",
"translate-optional": "(opcionalny)",
"translate-ignored": "(ignorowany)",
"translate-edit-title": "\"$1\" wobdźěłać",
@@ -52,9 +46,7 @@
"translate-edit-no-information": "<em>Tuta zdźělenka dokumentaciju nima, Jeli wěš, hdźež abo kak so tuta zdźělenka wužiwa, móžeš druhim přełožowarjam pomhać přidawajo dokumentaciju k tutej zdźělence.</em>'",
"translate-edit-information": "Informacije wo zdźělence ($1)",
"translate-edit-in-other-languages": "Zdźělenka w druhich rěčach",
- "translate-edit-committed": "Aktualny přełožk w softwarje",
"translate-edit-warnings": "Warnowanja wo njedospołnych přełožkach",
- "translate-edit-tmsugs": "Namjety z přełožowanskeho pomjatka",
"translate-edit-tmmatch-source": "Žórłowy tekst přełožka: $1",
"translate-edit-tmmatch": "$1 % wotpowědowanja",
"translate-use-suggestion": "Aktualny přełožk přez tutón namjet wuměnić",
@@ -106,6 +98,8 @@
"action-translate-import": "offline přewjedźene přełožki importować",
"right-translate-messagereview": "Přełožki přepruwować",
"right-translate-groupreview": "Dźěłowy status zdźělenskich skupinow změnić",
+ "translate-rcfilters-translations": "Přełožki",
+ "translate-rcfilters-translations-only-label": "Přełožki",
"translate-rc-translation-filter": "Přełožki filtrować:",
"translate-rc-translation-filter-no": "Ničo nječinić",
"translate-rc-translation-filter-only": "Jenož přełožki pokazać",
@@ -137,7 +131,6 @@
"translate-statsf-language": "Lisćina přez komu wotdźělenych rěčnych kodow:",
"translate-statsf-group": "Lisćina přez komu wotdźělenych skupinowych kodow:",
"translate-statsf-submit": "Přehlad",
- "translate-tag-category": "Přełožujomne strony",
"translate-tag-page-desc": "Přełožk wikijoweje strony [[$2|$1]].",
"translate-sidebar-alltrans": "W druhich rěčach",
"translations": "Wšě přełožki",
@@ -212,7 +205,6 @@
"translate-manage-toolong": "Maksimalny předźěłowanski čas $1 {{PLURAL:$1|sekundy|sekundow|sekundow|sekundow}} je překročeny.\nProšu wotpósćel formular hišće raz, zo by z předźěłowanjom pokročował.",
"translate-manage-import-summary": "Nowa wersija so eksterneho žórła importuje",
"translate-manage-conflict-summary": "Nowa wersija so z eksterneho žórła importuje.\nProšu přepruwować.",
- "translate-manage-fuzzy-summary": "Definicija zdźělenki je so změniła",
"translate-manage-submit": "Wuwjesć",
"translate-manage-intro-other": "Slěduje lisćina přełožowanskich změnow w rěči $1.\nProšu přepruwuj změny a wubjer akciju, kotruž chceš za kóždy přełožk wuwjesć.\nJeli změny ignoruješ, je tuta akcija jenož nachwilna.",
"translate-manage-import-ok": "Importowany: $1",
@@ -230,9 +222,7 @@
"translate-js-summary": "Zjeće:",
"translate-js-save": "Składować",
"translate-js-next": "Přichodnu powěsć składować a wočinić",
- "translate-js-nonext": "To bě poslednja zdźělenka na tutej stronje.",
"translate-js-skip": "K přichodnej powěsći skočić",
- "translate-js-save-failed": "Składowanje je so njeporadźiło. Prošu zdźěl tutón zmylk.",
"translate-js-history": "Přełožowanska historija",
"translate-js-support": "Prašeć so",
"translate-js-support-title": "Poproš wo pomoc, jeli dosć informacijow njeje, zo by so tuta powěsć prawje přełožiła.",
@@ -251,19 +241,6 @@
"translate-searchprofile-tooltip": "We wšěch přełožkach pytać",
"translate-search-languagefilter": "Po rěči filtrować:",
"translate-search-nofilter": "Žane filtrowanje",
- "translate-messagereview-submit": "Jako přepruwowany markěrować",
- "translate-messagereview-progress": "Markěruje so jako přepruwowany...",
- "translate-messagereview-failure": "Markěrowanje jako přepruwowany je so njeporadźiło: $1",
- "translate-messagereview-done": "Přepruwowany",
- "translate-messagereview-reviews": "Wot {{PLURAL:$1|jednoho wužiwarja|$1 wužiwarjow}} přepruwowany",
- "translate-messagereview-reviewswithyou": "Wot {{PLURAL:$1|tebje|$1 wužiwarjow inkluziwnje tebje}} přepruwowany",
- "api-error-invalidrevision": "Přełožk njeje so namakał",
- "api-error-unknownmessage": "Zdźělenka njeje so namakała",
- "api-error-fuzzymessage": "Přełožk je jako zestarjeny markěrowany",
- "api-error-owntranslation": "Njemóžeš swójske přełožki jako přepruwowane markěrować.",
- "translate-messagereview-no-fuzzy": "Zestarjene přełožki njehodźa so jako přepruwowane markěrować.",
- "translate-messagereview-no-own": "Njemóžeš swójske přełožki jako přepruwowane markěrować.",
- "translate-messagereview-doit": "Tutón přełožk jako přepruwowany markěrować.",
"log-name-translationreview": "Protokol přepruwowanjow přełožkow",
"log-description-translationreview": "Protokol wšěch přepruwowanjow k přełožkam a zdźělenskim skupinam.",
"logentry-translationreview-message": "$1 je přełožk $3 {{GENDER:$2|přepruwował|přepruwowała}}",
@@ -285,7 +262,6 @@
"translate-dynagroup-recent-desc": "Tuta zdźělenska skupina pokazuje wšě aktualne přełožki do tuteje rěče.\nJe najwužitniša za přepruwowanske nadawki.",
"translate-dynagroup-additions-label": "Aktualne přidawki",
"translate-dynagroup-additions-desc": "Tuta zdźělenska skupina pokazuje nowe a změnjene zdźělenki.",
- "translate-gethelp": "Pomoc",
"translate-msggroupselector-projects": "Zdźělenska skupina",
"translate-msggroupselector-search-placeholder": "Skupiny přepytać",
"translate-msggroupselector-search-all": "Wšě",
diff --git a/www/wiki/extensions/Translate/i18n/core/ht.json b/www/wiki/extensions/Translate/i18n/core/ht.json
index e5c45e9e..c5e1fad1 100644
--- a/www/wiki/extensions/Translate/i18n/core/ht.json
+++ b/www/wiki/extensions/Translate/i18n/core/ht.json
@@ -27,7 +27,6 @@
"translate-prev": "Paj presedan",
"translate-page-description-legend": "Enfòmasyon sou gwoup la",
"translate-page-edit": "modifye",
- "translate-ext-url": "<hr /> Sit wèb: $1",
"translate-optional": "(opsyon)",
"translate-ignored": "(inyore)",
"translate-edit-title": "Modifye \"$1\"",
@@ -36,9 +35,7 @@
"translate-edit-no-information": "''Mesaj sa pa dokimante.\nSi w konnen ki kote mesaj sa itilize, ou kapab ede lòt tradiktè lè ou ajoute dokimantasyon pou mesaj sa.''",
"translate-edit-information": "Enfòmasyon sou mesaj \"$2\" ($1)",
"translate-edit-in-other-languages": "Mesaj nan lòt lang yo",
- "translate-edit-committed": "Tradiksyon kouran nan logisyèl",
"translate-edit-warnings": "Avètisman sou tradiksyon ki pa konplete yo",
- "translate-edit-tmsugs": "Sijesyon ki soti nan memwa tradiksyon",
"translate-edit-tmmatch": "$1% korespondans",
"translate-use-suggestion": "Mete sijesyon sa a nan zòn tradiksyon a. L ap ranplase tout kontni aktyèl.",
"translate-magic-pagename": "Tradiksyon MediaWiki pwolonje",
@@ -106,7 +103,6 @@
"translate-statsf-language": "Lis kòd pou lang yo ki separe pa yon vigil:",
"translate-statsf-group": "Lis kòd pou gwoup yo ki separe pa yon vigil:",
"translate-statsf-submit": "Kout je",
- "translate-tag-category": "Paj ki kapab tradui",
"translate-tag-page-desc": "Tradiksyon pou paj [[$2|$1]].",
"translate-sidebar-alltrans": "Nan lòt lang yo",
"translations": "Tout tradiksyon yo",
@@ -155,7 +151,6 @@
"translate-manage-toolong": "Tan $1 {{PLURAL:$1|segonn|segonn}} maksimòm pou tretman an depase.\nTanpri, soumèt fòmilè ankò pou kontinye tretman.",
"translate-manage-import-summary": "Enpòtasyon yon nouvo vèsyon depi yon sous andeyò",
"translate-manage-conflict-summary": "Enpòtasyon yon nouvo vèsyon depi yon sous andeyò.\nTanpri verifye.",
- "translate-manage-fuzzy-summary": "Definisyon an te chanje",
"translate-manage-submit": "Ekzekite",
"translate-manage-intro-other": "Anba w ap jwenn yon lis chanjman nan tradiksyon pou lang $1.\nTanpri, revize chanjman yo epi chwazi kisa ou vle fè pou chak tradiksyon.\nSi ou deside pou inyore chanjman yo, y ap kraze nan pwochen ekspòtasyon.",
"translate-manage-import-ok": "Yon nouvo vèsyon pou paj $1 te enpòte.",
@@ -170,9 +165,7 @@
"translate-import-err-no-headers": "Fichye sa pa byen fòme nan fòma Gettext pou ekstansyon tradiksyon:\nPa kapab detèmine gwoup ak lang depi tèt fichye.",
"translate-import-err-warnings": "Fichye sa pa byen fòme.\nAsire w editè ou itilize a pa retire mòso msgctxt yo.\nDetay: $1",
"translate-js-next": "Anrejistre epi ouvri swivan.",
- "translate-js-nonext": "Sa se te dènye mesaj nan paj sa a.",
"translate-js-skip": "Sote ale nan swivan",
- "translate-js-save-failed": "Anrejistreman pa t reyisi. Tanpri siyale erè sa a.",
"translate-js-history": "Istorik tradiksyon",
"translate-gs-pos": "Pos.",
"translate-gs-code": "Kòd",
diff --git a/www/wiki/extensions/Translate/i18n/core/hu.json b/www/wiki/extensions/Translate/i18n/core/hu.json
index ef989965..2f147bae 100644
--- a/www/wiki/extensions/Translate/i18n/core/hu.json
+++ b/www/wiki/extensions/Translate/i18n/core/hu.json
@@ -16,17 +16,13 @@
},
"translate": "Fordítás",
"translate-desc": "[[Special:Translate|Speciális lap]] a MediaWiki és más projektek fordítására",
- "translate-taskui-view": "Összes üzenet megjelenítése",
- "translate-taskui-untranslated": "Lefordítatlan üzenetek megjelenítése",
- "translate-taskui-optional": "Opcionális üzenetek megjelenítése.",
- "translate-taskui-acceptqueue": "Csak az általam ellenőrzöttnek jelölt üzenetek",
- "translate-taskui-reviewall": "Valamennyi fordítás ellenőrzése",
+ "translate-fuzzybot-desc": "Ez egy speciális rendszerfiók, amit a MediaWiki [https://www.mediawiki.org/wiki/Extension:Translate Translate kiterjesztése] használ a fordítások karbantartásához.\nEz a fiók a MediaWiki szoftver része, és nem tulajdonosa egyetlen felhasználó sem.",
"translate-taskui-export-to-file": "Exportálás natív formátumban",
"translate-taskui-export-as-po": "Exportálás offline fordításhoz",
"translate-taction-translate": "Fordítás",
"translate-taction-proofread": "Ellenőriz",
"translate-taction-lstats": "Nyelvi statisztika",
- "translate-taction-mstats": "Üzenetcsoport statisztika",
+ "translate-taction-mstats": "Üzenetcsoport-statisztika",
"translate-taction-export": "Exportálás",
"translate-taction-disabled": "Ez a művelet le van tiltva ebben a wikiben.",
"translate-page-no-such-language": "A megadott nyelv érvénytelen",
@@ -42,13 +38,13 @@
"translate-page-navigation-legend": "Navigáció",
"translate-page-showing": "Üzenetek: $1–$2 (összesen $3)",
"translate-page-showing-all": "$1 üzenet megjelenítve",
+ "translate-page-showing-none": "Nincs a keresési feltételeknek megfelelő üzenet",
"translate-next": "következő",
"translate-prev": "előző",
"translate-page-description-legend": "Információk a csoportról",
- "translate-page-description-hasoptional": "Ez az üzenetcsoport opcionális üzeneteket tartalmaz.\nAz opcionális üzeneteket csak akkor kell lefordítani, ha a nyelvnek speciális követelménye van, mint például a szóközök, vagy a tulajdonnevek átírása. $1",
+ "translate-page-description-hasoptional": "Ez az üzenetcsoport opcionális üzeneteket tartalmaz.\nAz opcionális üzeneteket csak akkor kell lefordítani, ha a nyelvnek speciális követelményei vannak, mint például a szóközök elhagyása vagy a tulajdonnevek átírása. $1",
"translate-page-description-hasoptional-open": "Opcionális üzenetek megjelenítése.",
"translate-page-edit": "szerkesztés",
- "translate-ext-url": "<hr />Weboldal: $1",
"translate-optional": "(nem kötelező)",
"translate-ignored": "(figyelmen kívül hagyva)",
"translate-edit-title": "„$1” szerkesztése",
@@ -64,6 +60,11 @@
"translate-use-suggestion": "A javasolt szöveg átmásolása a fordítási mezőbe, lecserélve annak aktuális tartalmát!",
"translate-edit-nopermission": "Az üzenetek fordításához fordítói jogok szükségesek.",
"translate-edit-askpermission": "Engedélyszerzés",
+ "exporttranslations": "Fordítások exportálása",
+ "translate-export-form-format": "Formátum",
+ "translate-export-invalid-format": "Adj meg egy érvényes formátumot.",
+ "translate-export-not-supported": "A fordítások exportálása nem támogatott.",
+ "translate-export-format-notsupported": "A megadott exportálási formátumot nem támogatja ez az üzenetcsoport.",
"translate-magic-pagename": "Kibővített MediaWiki-fordítás",
"translate-magic-help": "Lefordíthatod a speciális lapok álneveit, a varázsszavakat és a névterek neveit.\n\nA speciális lapoknak és a varázsszavaknak több fordítása is lehet.\nA fordításokat vesszővel (,) kell elválasztani.\nA névtereknek csak egyetlen fordítása lehet.\n\nA projektvita-névtér fordításánál a <code>$1 talk</code> speciális, a <code>$1</code> az oldal nevére lesz lecserélve (pl. <code>{{ns:project_talk}}</code>).\nHa a te nyelveden nem lehet az oldal nevének változtatása nélkül értelmes kifejezést összehozni, értesítsd a fejlesztőket a [[Support]] lapon.\n\nA változtatások mentését csak az tudja elvégezni, aki tagja a fordítók csoportjának.\nA változtatások nem mentődnek, míg alul a mentés gombra nem kattintasz.",
"translate-magic-module": "Modul:",
@@ -109,7 +110,16 @@
"right-translate-import": "kapcsolat nélküli fordítások importálása",
"action-translate-import": "offline fordítások importálása",
"right-translate-messagereview": "fordítások ellenőrzése",
+ "action-translate-messagereview": "fordítások átnézése",
"right-translate-groupreview": "Üzenetcsoportok állapotának megváltoztatása",
+ "action-translate-groupreview": "üzenetcsoportok állapotának megváltoztatása",
+ "translate-rcfilters-translations": "Fordítások",
+ "translate-rcfilters-translations-only-label": "Fordítások",
+ "translate-rcfilters-translations-only-desc": "Lefordított lapok változtatásai.",
+ "translate-rcfilters-translations-filter-label": "Nem fordítások.",
+ "translate-rcfilters-translations-filter-desc": "Minden változtatás, ami nem fordítás.",
+ "translate-rcfilters-translations-site-label": "Rendszerüzenetek",
+ "translate-rcfilters-translations-site-desc": "A rendszerüzenetek testreszabása a MediaWiki névtérben.",
"translate-rc-translation-filter": "Fordítások szűrése:",
"translate-rc-translation-filter-no": "Ne csináljon semmit",
"translate-rc-translation-filter-only": "Csak a fordítások mutatása",
@@ -172,26 +182,29 @@
"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",
- "translate-mgs-pagename": "Üzenetcsoport statisztika",
+ "translate-mgs-pagename": "Üzenetcsoport-statisztika",
"translate-mgs-fieldset": "Megjelenítési beállítások",
"translate-mgs-group": "Üzenetcsoport:",
"translate-mgs-nocomplete": "Ne jelenjenek meg a teljesen lefordított nyelvek",
"translate-mgs-noempty": "Ne jelenjenek meg azok a nyelvek, amelyeknek nincs egyetlen fordítása sem",
"translate-mgs-submit": "Statisztika megjelenítése",
"translate-mgs-column-language": "Nyelv",
- "translate-mgs-totals": "Minden nyelv együtt",
+ "translate-mgs-totals": "Mind a(z) $1 nyelv együtt",
"translate-mgs-invalid-group": "A megadott $1 csoport nem létezik.",
"translate-mgs-nothing": "Nincs megjeleníthető statisztika.",
"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.",
"supportedlanguages-activity": "$1: {{PLURAL:$2|egy|$2}} szerkesztés, a legutóbb {{PLURAL:$3|egy|$3}} napja szerkesztett",
+ "abusefilter-edit-builder-vars-translate-source-text": "A fordítási egység forrásszövege",
"translate-save": "Mentés ($1)",
"translate-jssti-add": "Hozzáadás a listához",
"managemessagegroups": "Üzenetcsoportok karbantartása",
@@ -199,6 +212,7 @@
"translate-smg-nochanges": "Nincsenek feldolgozandó változtatások.",
"translate-smg-submit": "Változtatások elküldése feldolgozásra",
"translate-smg-submitted": "Az üzenet definíciók frissítése megtörtént. A változások a háttérben kerülnek feldolgozásra.",
+ "translate-smg-more": "További feldolgozandó változtatások lesznek ezen módosítások elküldése után.",
"translate-smg-left": "Üzenet tartalom wikiben",
"translate-smg-right": "Bejövő változtatások",
"translate-manage-import-diff": "Üzenet: $1 | Műveletek: $2",
@@ -222,7 +236,7 @@
"translate-import-from-local": "Helyi fájlfeltöltés:",
"translate-import-load": "Fájl betöltése",
"translate-import-err-dl-failed": "Nem sikerült olvasni a fájlt:\n$1",
- "translate-import-err-ul-failed": "A fájlfeltöltés sikertelen volt",
+ "translate-import-err-ul-failed": "A fájlfeltöltés sikertelen",
"translate-import-err-invalid-title": "A megadott fájlnév (<nowiki>$1</nowiki>) érvénytelen.",
"translate-import-err-no-such-file": "A(z) <nowiki>$1</nowiki> fájl nem létezik vagy nem helyben lett feltöltve.",
"translate-import-err-stale-group": "A fájlhoz tartozó üzenetcsoport nem létezik.",
@@ -231,12 +245,10 @@
"translate-js-summary": "Összefoglaló:",
"translate-js-save": "Mentés",
"translate-js-next": "Mentés és a következő megnyitása",
- "translate-js-nonext": "Ez volt az utolsó üzenet ezen a lapon.",
"translate-js-skip": "Ugrás a következőre",
- "translate-js-save-failed": "A mentés nem sikerült. Kérlek jelezd a hibát.",
"translate-js-history": "Fordítási előzmények",
"translate-js-support": "Kérdés feltevése",
- "translate-js-support-title": "Itt kérhetsz segítséged, ha nincs elegendő információd egy üzenet megfelelő lefordításához.",
+ "translate-js-support-title": "Itt kérhetsz segítséget, ha nincs elegendő információd egy üzenet megfelelő lefordításához.",
"translate-js-support-unsaved-warning": "Mentetlen fordításaid vannak.",
"translate-gs-pos": "Hely",
"translate-gs-code": "Kód",
@@ -250,24 +262,13 @@
"translate-documentation-language": "üzenetdokumentáció",
"translate-searchprofile": "Fordítások",
"translate-searchprofile-tooltip": "Keresés az összes fordítás között",
+ "translate-searchprofile-note": "További keresési opciók elérhetők a [$1 fordításkeresővel].",
"translate-search-languagefilter": "Szűrés nyelv szerint",
"translate-search-nofilter": "Nincs szűrés",
- "translate-messagereview-submit": "Ellenőrzöttnek jelölés",
- "translate-messagereview-progress": "Ellenőrzöttnek jelölés...",
- "translate-messagereview-failure": "Ellenőrzöttnek jelölés sikertelen: $1",
- "translate-messagereview-done": "Ellenőrizve",
- "translate-messagereview-reviews": "{{PLURAL:$1|Egy|$1}} felhasználó ellenőrizte",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|Csak te ellenőrizted|$1 felhasználó ellenőrizte, veled együtt}}",
- "api-error-invalidrevision": "nem található a fordítás",
- "api-error-unknownmessage": "nem található az üzenet",
- "api-error-fuzzymessage": "a fordítás fuzzy",
- "api-error-owntranslation": "nem jelölheted ellenőrzöttnek a saját fordításaidat",
- "translate-messagereview-no-fuzzy": "FUZZY fordításokat nem lehet ellenőrzöttnek jelölni.",
- "translate-messagereview-no-own": "Saját fordításodat nem tudod ellenőrzöttnek jelölni.",
- "translate-messagereview-doit": "A fordítás megjelölése ellenőrzöttként.",
"log-name-translationreview": "Fordítás-ellenőrzési napló",
"log-description-translationreview": "Valamennyi fordítás és üzenetcsoport ellenőrzésének a naplója.",
"logentry-translationreview-message": "$1 {{GENDER:$2|ellenőrizte}} a fordítást: $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|megváltoztatta}} a(z) $4 lap $3 fordításainak állapotát erről: $6 erre: $7",
"group-translate-sandboxed": "megerősítetlen fordítók",
"group-translate-sandboxed-member": "{{GENDER:$1|megerősítetlen fordító}}",
"right-translate-sandboxmanage": "megerősítetlen fordítók kezelése",
@@ -280,11 +281,11 @@
"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",
"translate-dynagroup-additions-desc": "Ez az üzenetcsoport új és megváltoztatott üzeneteket tartalmaz.",
- "translate-gethelp": "Súgó",
"translate-msggroupselector-projects": "Üzenetcsoport",
"translate-msggroupselector-search-placeholder": "Csoportok keresése",
"translate-msggroupselector-search-all": "Mind",
@@ -303,14 +304,17 @@
"tux-status-translated": "Lefordítva",
"tux-status-saving": "Mentés…",
"tux-status-unsaved": "Nincs mentve",
+ "tux-save-unknown-error": "Ismeretlen hiba történt.",
"tux-editor-placeholder": "A te fordításod",
+ "tux-editor-editsummary-placeholder": "Opcionális összefoglaló",
"tux-editor-paste-original-button-label": "Forrásszöveg beillesztése",
"tux-editor-discard-changes-button-label": "Változtatások elvetése",
"tux-editor-save-button-label": "Fordítás elmentése",
"tux-editor-skip-button-label": "Továbblépés a következőre",
"tux-editor-cancel-button-label": "Mégse",
"tux-editor-confirm-button-label": "Fordítás megerősítése",
- "tux-editor-shortcut-info": "Nyomd meg a „$1” billentyűkombinációt a mentéshez, a „$2”-t a továbblépéshez vagy az „$3”-ot további gyorsbillentyűk megjelenítéséhez.",
+ "tux-editor-proofread-button-label": "Megjelölés átnézettként",
+ "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",
@@ -365,9 +369,11 @@
"tux-editor-close-tooltip": "Bezárás",
"tux-editor-expand-tooltip": "Szélesebb felület",
"tux-editor-collapse-tooltip": "Összecsukás",
+ "tux-editor-message-tools-show-editor": "Megjelenítés wikiszerkesztőben",
"tux-editor-message-tools-history": "Laptörténet",
"tux-editor-message-tools-delete": "Törlés",
"tux-editor-message-tools-translations": "Összes fordítás",
+ "tux-editor-message-tools-linktothis": "Hivatkozás erre az üzenetre",
"tux-editor-loading": "Betöltés…",
"translate-search-more-languages-info": "$1 további nyelv",
"translate-statsbar-tooltip": "$1% lefordítva, $2% átnézve",
@@ -376,5 +382,5 @@
"translate-ulsdep-title": "Konfigurációs hiba",
"translate-ulsdep-body": "A fordítás kiterjesztés a [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector Universal Language Selector kiterjesztésen] alapszik.",
"tux-session-expired": "Már nem vagy bejelentkezve. Jelentkezz be egy másik fülön, vagy másold ki a mentetlen fordításaidat, jelentkezz be, gyere vissza erre a lapra és másold vissza a fordításaidat.",
- "tux-nojs": "Ennek a lapnak a használatához JavaScript szükséges."
+ "tux-nojs": "Ez az eszköz nem működik JavaScript nélkül. A JavaScript le van tiltva, nem működik, vagy ez a böngésző nem támogatott."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/hyw.json b/www/wiki/extensions/Translate/i18n/core/hyw.json
new file mode 100644
index 00000000..c5037155
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/hyw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ArmenBakkalian"
+ ]
+ },
+ "translate-documentation-language": "Հաղորդագրութեան փաստագրութիւն"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/ia.json b/www/wiki/extensions/Translate/i18n/core/ia.json
index df0637fc..20909d0e 100644
--- a/www/wiki/extensions/Translate/i18n/core/ia.json
+++ b/www/wiki/extensions/Translate/i18n/core/ia.json
@@ -6,11 +6,6 @@
},
"translate": "Traducer",
"translate-desc": "[[Special:Translate|Pagina special]] pro traducer MediaWiki e ultra",
- "translate-taskui-view": "Monstrar tote le messages",
- "translate-taskui-untranslated": "Monstrar messages non traducite",
- "translate-taskui-optional": "Monstrar messages optional",
- "translate-taskui-acceptqueue": "Solmente messages que io pote marcar como revidite",
- "translate-taskui-reviewall": "Revider tote le traductiones",
"translate-taskui-export-to-file": "Exportar in formato native",
"translate-taskui-export-as-po": "Exportar pro traduction foras de linea",
"translate-taction-translate": "Traducer",
@@ -39,7 +34,6 @@
"translate-page-description-hasoptional": "Iste gruppo de messages contine messages optional.\nLe messages optional debe solmente esser traducite si le lingua ha special exigentias,\ncomo non usar spatios o le translitteration de nomines proprie. $1",
"translate-page-description-hasoptional-open": "Monstrar messages optional.",
"translate-page-edit": "modificar",
- "translate-ext-url": "<hr />Sito web: $1",
"translate-optional": "(optional)",
"translate-ignored": "(ignorate)",
"translate-edit-title": "Modificar \"$1\"",
@@ -49,14 +43,17 @@
"translate-edit-no-information": "<em>Iste message non ha documentation.\nSi tu sape ubi o como iste message es usate, tu pote adjutar le altere traductores per adder documentation a iste message.</em>",
"translate-edit-information": "Information super le message ($1)",
"translate-edit-in-other-languages": "Iste message in altere linguas",
- "translate-edit-committed": "Traduction actual in software",
"translate-edit-warnings": "Advertimentos super traductiones incomplete",
- "translate-edit-tmsugs": "Suggestiones ab le memoria de traductiones",
"translate-edit-tmmatch-source": "Texto fonte pro traduction: $1",
"translate-edit-tmmatch": "$1% de correspondentia",
"translate-use-suggestion": "Reimplaciar le traduction actual per iste suggestion.",
"translate-edit-nopermission": "Tu debe obtener derectos de traduction pro poter traducer messages.",
"translate-edit-askpermission": "Obtener autorisation",
+ "exporttranslations": "Exportar traductiones",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Specifica un formato valide.",
+ "translate-export-not-supported": "Le exportation de traductiones non es supportate.",
+ "translate-export-format-notsupported": "Le formato de exportation specificate non es supportate per le gruppo de messages.",
"translate-magic-pagename": "Traduction extendite de MediaWiki",
"translate-magic-help": "Tu pote traducer le aliases de paginas special, le parolas magic e le nomines de spatios de nomines.\n\nLe aliases de paginas special e le parolas magic pote haber plure traductiones.\nLe traductiones es separate per un comma (,).\nLe spatios de nomines pote haber solmente un traduction.\n\nLe traduction del spatio de nomines pro le discussion del projecto, <code>$1 talk</code>, pote esser complexe. Le codice <code>$1</code> es reimplaciate per le nomine del sito (per exemplo <code>{{ns:project_talk}}</code>).\nSi non es possibile in tu lingua formar un expression valide sin cambiar le nomine del sito, per favor contacta nos in [[Support]].\n\nTu debe esser traductor pro poter salveguardar le modificationes.\nLe modificationes non es salveguardate usque tu clicca super le button Salveguardar hic infra.",
"translate-magic-module": "Modulo:",
@@ -75,7 +72,7 @@
"translate-magic-namespace": "Nomines de spatios de nomines",
"translate-magic-notsaved": "Tu modification non ha essite salveguardate!",
"translate-magic-errors": "Corrige per favor le sequente {{PLURAL:$1|error|errores}} in le traductiones:",
- "translate-magic-saved": "Le modificationes ha essite salveguardate con successo.",
+ "translate-magic-saved": "Le modificationes ha essite salveguardate.",
"translate-checks-parameters": "Le sequente {{PLURAL:$2|parametro|parametros}} non es usate:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "Le sequente {{PLURAL:$2|parametro|parametros}} es incognite:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Il ha un numero impar de {{PLURAL:$2|parentheses|parentheses}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -102,7 +99,16 @@
"right-translate-import": "Importar traductiones foras de linea",
"action-translate-import": "importar traductiones foras de linea",
"right-translate-messagereview": "Revider traductiones",
+ "action-translate-messagereview": "revider traductiones",
"right-translate-groupreview": "Cambiar le stato del fluxo de travalio del gruppos de messages",
+ "action-translate-groupreview": "cambiar le stato del fluxo de travalio del gruppos de messages",
+ "translate-rcfilters-translations": "Traductiones",
+ "translate-rcfilters-translations-only-label": "Traductiones",
+ "translate-rcfilters-translations-only-desc": "Modificationes in paginas traducite.",
+ "translate-rcfilters-translations-filter-label": "Non traductiones",
+ "translate-rcfilters-translations-filter-desc": "Tote le modificationes que non es traductiones.",
+ "translate-rcfilters-translations-site-label": "Messages del sito",
+ "translate-rcfilters-translations-site-desc": "Personalisation de messages de sito in le spatio de nomines MediaWiki.",
"translate-rc-translation-filter": "Filtrar traductiones:",
"translate-rc-translation-filter-no": "Facer nihil",
"translate-rc-translation-filter-only": "Monstrar solmente traductiones",
@@ -134,8 +140,7 @@
"translate-statsf-language": "Lista de codices de lingua separate per commas:",
"translate-statsf-group": "Lista de codices de gruppo separate per commas:",
"translate-statsf-submit": "Previsualisar",
- "translate-tag-category": "Paginas traducibile",
- "translate-tag-page-desc": "Traduction del pagina wiki [[$2|$1]].",
+ "translate-tag-page-desc": "Traduction del pagina wiki [[$2|$1]] ab $3 ($4).",
"translate-sidebar-alltrans": "In altere linguas",
"translations": "Tote le traductiones",
"translations-summary": "Entra le nomine de un message infra pro monstrar tote le traductiones disponibile.",
@@ -176,16 +181,17 @@
"translate-mgs-noempty": "Non monstrar linguas sin traductiones",
"translate-mgs-submit": "Monstrar statisticas",
"translate-mgs-column-language": "Lingua",
- "translate-mgs-totals": "Tote le linguas insimul",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|lingua|linguas}} in total",
"translate-mgs-invalid-group": "Le gruppo specificate, \"$1\", non existe.",
"translate-mgs-nothing": "Nihil a monstrar pro le statisticas requestate.",
"supportedlanguages": "Linguas supportate",
"supportedlanguages-summary": "Iste pagina presenta un lista de tote le linguas supportate per {{SITENAME}}, con le nomines del traductores laborante a iste lingua.\nLe nomine de un traductor appare tanto plus grande, quanto plus modificationes le traductor ha contribuite.\nLe color de un tracto de sublineamento indica quante tempore ha passate post le ultime activitate de un traductor.",
"supportedlanguages-colorlegend": "Legenda pro le colores: Ultime traduction $1 dies retro.",
- "supportedlanguages-translators": "{{PLURAL:$2|Traductor|Traductores}}: $1",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traductor|Traductrice}}|Traductores}}: $1",
"supportedlanguages-recenttranslations": "traductiones recente",
"supportedlanguages-count": "$1 {{PLURAL:$1|lingua|linguas}} in total.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|modification|modificationes}} - ultime modification $3 {{PLURAL:$3|die|dies}} retro",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texto original del unitate de traduction",
"translate-save": "Salveguardar ($1)",
"translate-jssti-add": "Adder al lista",
"managemessagegroups": "Gestion de gruppos de messages",
@@ -209,7 +215,6 @@
"translate-manage-toolong": "Le durata maximal de processamento de $1 {{PLURAL:$1|secunda|secundas}} ha essite excedite.\nResubmitte per favor le formulario pro continuar le processamento.",
"translate-manage-import-summary": "Un nove version es importate ex un fonte externe",
"translate-manage-conflict-summary": "Un nove version es importate ex un fonte externe.\nPer favor verifica.",
- "translate-manage-fuzzy-summary": "Le definition del message ha cambiate",
"translate-manage-submit": "Executar",
"translate-manage-intro-other": "Ci infra es un lista de modificationes de traductiones in lingua $1.\nPer favor, revide le modificationes e selige un action a prender pro cata actualisation.\nSi tu opta pro ignorar le modificationes, iste action es solmente temporari.",
"translate-manage-import-ok": "Importate: $1",
@@ -218,7 +223,7 @@
"translate-import-from-local": "Incargar un file local:",
"translate-import-load": "Cargar file",
"translate-import-err-dl-failed": "Impossibile obtener le file:\n$1",
- "translate-import-err-ul-failed": "Le cargamento del file non ha succedite",
+ "translate-import-err-ul-failed": "Le incargamento del file ha fallite",
"translate-import-err-invalid-title": "Le nomine de file <nowiki>$1</nowiki> es invalide.",
"translate-import-err-no-such-file": "Le file <nowiki>$1</nowiki> non existe o non ha essite incargate localmente.",
"translate-import-err-stale-group": "Le gruppo de messages al qual iste file pertine non existe.",
@@ -227,9 +232,7 @@
"translate-js-summary": "Summario:",
"translate-js-save": "Salveguardar",
"translate-js-next": "Salveguardar e aperir le sequente",
- "translate-js-nonext": "Isto esseva le ultime message in iste pagina.",
"translate-js-skip": "Saltar al sequente",
- "translate-js-save-failed": "Salveguarda fallite. Per favor reporta iste error.",
"translate-js-history": "Historia del traduction",
"translate-js-support": "Poner question",
"translate-js-support-title": "Demandar adjuta si il non ha sufficiente informationes pro traducer iste message correctemente.",
@@ -246,21 +249,9 @@
"translate-documentation-language": "documentation de messages",
"translate-searchprofile": "Traductiones",
"translate-searchprofile-tooltip": "Cercar in tote le traductiones",
+ "translate-searchprofile-note": "Plus optiones de recerca es disponibile con le [$1 recerca de traductiones].",
"translate-search-languagefilter": "Filtrar per lingua:",
"translate-search-nofilter": "Non filtrar",
- "translate-messagereview-submit": "Marcar como revidite",
- "translate-messagereview-progress": "Marca como revidite…",
- "translate-messagereview-failure": "Error al marcar como revidite: $1",
- "translate-messagereview-done": "Revidite",
- "translate-messagereview-reviews": "Revidite per {{PLURAL:$1|un usator|$1 usatores}}",
- "translate-messagereview-reviewswithyou": "Revidite per {{PLURAL:$1|un usator|$1 usatores}} includente te",
- "api-error-invalidrevision": "Traduction non trovate",
- "api-error-unknownmessage": "Message non trovate",
- "api-error-fuzzymessage": "Le traduction es marcate como obsolete",
- "api-error-owntranslation": "Tu non pote marcar tu proprie traductiones como revidite.",
- "translate-messagereview-no-fuzzy": "Le traductiones obsolete (\"fuzzy\") non pote esser marcate como revidite.",
- "translate-messagereview-no-own": "Tu non pote marcar tu proprie traductiones como revidite.",
- "translate-messagereview-doit": "Marcar iste traduction como revidite.",
"log-name-translationreview": "Registro de revision de traductiones",
"log-description-translationreview": "Registro de tote le revisiones de traductiones e gruppos de messages.",
"logentry-translationreview-message": "$1 {{GENDER:$2|revideva}} le traduction $3",
@@ -282,7 +273,6 @@
"translate-dynagroup-recent-desc": "Iste gruppo de messages monstra tote le traductiones recente in iste lingua.\nEs utile principalmente pro le revision de traductiones.",
"translate-dynagroup-additions-label": "Additiones recente",
"translate-dynagroup-additions-desc": "Iste gruppo de messages monstra le messages nove e cambiate.",
- "translate-gethelp": "Adjuta",
"translate-msggroupselector-projects": "Gruppo de messages",
"translate-msggroupselector-search-placeholder": "Cercar gruppos",
"translate-msggroupselector-search-all": "Totes",
@@ -301,14 +291,17 @@
"tux-status-translated": "Traducite",
"tux-status-saving": "Salveguarda…",
"tux-status-unsaved": "Non salveguardate",
+ "tux-save-unknown-error": "Un error incognite ha occurrite.",
"tux-editor-placeholder": "Tu traduction",
+ "tux-editor-editsummary-placeholder": "Summario facultative",
"tux-editor-paste-original-button-label": "Collar texto original",
"tux-editor-discard-changes-button-label": "Abandonar modificationes",
"tux-editor-save-button-label": "Salveguardar traduction",
"tux-editor-skip-button-label": "Saltar al sequente",
"tux-editor-cancel-button-label": "Cancellar",
"tux-editor-confirm-button-label": "Confirmar traduction",
- "tux-editor-shortcut-info": "Preme \"$1\" pro salveguardar o \"$2\" pro saltar al sequente message o \"$3\" pro altere claves accelerator.",
+ "tux-editor-proofread-button-label": "Marcar como revidite",
+ "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",
@@ -337,7 +330,7 @@
"tux-editor-doc-editor-cancel": "Cancellar",
"tux-messagetable-more-messages": "$1 altere {{PLURAL:$1|message|messages}}",
"tux-messagetable-loading-messages": "Carga $1 {{PLURAL:$1|message|messages}}...",
- "tux-message-filter-placeholder": "Lista de filtros",
+ "tux-message-filter-placeholder": "Filtrar le lista",
"tux-message-filter-result": "$1 {{PLURAL:$1|resultato|resultatos}} trovate pro \"$2\"",
"tux-message-filter-advanced-button": "Recerca avantiate",
"tux-message-filter-optional-messages-label": "Messages optional",
@@ -363,14 +356,18 @@
"tux-editor-close-tooltip": "Clauder",
"tux-editor-expand-tooltip": "Displicar",
"tux-editor-collapse-tooltip": "Plicar",
+ "tux-editor-message-tools-show-editor": "Monstrar in editor wiki",
"tux-editor-message-tools-history": "Historia",
"tux-editor-message-tools-delete": "Deler",
"tux-editor-message-tools-translations": "Tote le traductiones",
+ "tux-editor-message-tools-linktothis": "Ligamine verso iste message",
"tux-editor-loading": "Cargamento…",
"translate-search-more-languages-info": "$1 altere {{PLURAL:$1|lingua|linguas}}",
"translate-statsbar-tooltip": "$1% traducite, $2% revidite",
"translate-statsbar-tooltip-with-fuzzy": "$1% traducite, $2% revidite, $3% obsolete",
"translate-search-more-groups-info": "$1 altere {{PLURAL:$1|gruppo|gruppos}}",
"translate-ulsdep-title": "Error de configuration",
- "translate-ulsdep-body": "Le extension Translate depende del [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector extension Universal Language Selector]."
+ "translate-ulsdep-body": "Le extension Translate depende del [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector extension Universal Language Selector].",
+ "tux-session-expired": "Le session ha essite claudite. Per favor, re-aperi session in un fenestra o scheda separate del navigator. Alternativemente, face un copia del traductiones non salveguardate, aperi session, retorna a iste pagina e re-insere le traductiones.",
+ "tux-nojs": "Iste instrumento non functiona sin JavaScript. Pote esser que JavaScript es disactivate o non functiona, o que iste navigator non es supportate."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/id.json b/www/wiki/extensions/Translate/i18n/core/id.json
index aebb738a..ea27ac84 100644
--- a/www/wiki/extensions/Translate/i18n/core/id.json
+++ b/www/wiki/extensions/Translate/i18n/core/id.json
@@ -13,16 +13,14 @@
"Naval Scene",
"Rex",
"William Surya Permana",
- "පසිඳු කාවින්ද"
+ "පසිඳු කාවින්ද",
+ "NoiX180",
+ "Uchup19"
]
},
"translate": "Terjemahkan",
"translate-desc": "[[Special:Translate|Halaman istimewa]] untuk menerjemahkan MediaWiki dan lain-lain",
- "translate-taskui-view": "Tampilkan semua pesan",
- "translate-taskui-untranslated": "Tampilkan pesan yang belum diterjemahkan",
- "translate-taskui-optional": "Tampilkan pesan opsional",
- "translate-taskui-acceptqueue": "Hanya pesan yang dapat saya tandai sebagai telah ditinjau",
- "translate-taskui-reviewall": "Tinjau semua terjemahan",
+ "translate-fuzzybot-desc": "Ini adalah akun sistem khusus yang digunakan oleh [https://www.mediawiki.org/wiki/Extension:Translate ekstensi Terjemahan] MediaWiki untuk mengelola terjemahan. Akun ini adalah bagian dari perangkat lunak MediaWiki dan tidak dimiliki oleh pengguna mana pun.",
"translate-taskui-export-to-file": "Ekspor dalam format asli",
"translate-taskui-export-as-po": "Ekspor untuk terjemahan luring",
"translate-taction-translate": "Terjemahkan",
@@ -52,43 +50,45 @@
"translate-page-description-hasoptional": "Kelompok pesan ini memuat pesan opsional.\nPesan opsional seharusnya hanya boleh diterjemahkan jika bahasa Anda memiliki keperluan khusus\nseperti tidak memakai spasi atau mengalihaksarakan nama umum. $1",
"translate-page-description-hasoptional-open": "Tampilkan pesan opsional.",
"translate-page-edit": "sunting",
- "translate-ext-url": "<hr />Situs web: $1",
"translate-optional": "(opsional)",
"translate-ignored": "(diabaikan)",
"translate-edit-title": "Sunting \"$1\"",
"translate-edit-definition": "Definisi pesan",
"translate-edit-translation": "Terjemahan",
"translate-edit-contribute": "berkontribusi",
- "translate-edit-no-information": "''Pesan ini tidak memiliki dokumentasi.''\n''Jika Anda tahu di mana dan bagaimana pesan ini digunakan, Anda dapat membantu penerjemah lain dengan menambahkan dokumentasi untuk pesan ini.''",
- "translate-edit-information": "Informasi pesan ($1)",
+ "translate-edit-no-information": "<em>Pesan ini tidak memiliki dokumentasi.\nJika Anda mengetahui di mana dan bagaimana pesan ini digunakan, Anda dapat membantu penerjemah lain dengan menambahkan dokumentasi untuk pesan ini.</em>",
+ "translate-edit-information": "Informasi mengenai pesan ($1)",
"translate-edit-in-other-languages": "Pesan dalam bahasa lain",
- "translate-edit-committed": "Terjemahan dalam perangkat lunak saat ini",
"translate-edit-warnings": "Peringatan mengenai terjemahan yang tak lengkap",
- "translate-edit-tmsugs": "Saran dari memori terjemahan dan terjemahan mesin",
"translate-edit-tmmatch-source": "Teks sumber terjemahan: $1",
"translate-edit-tmmatch": "$1% sesuai",
"translate-use-suggestion": "Ganti terjemahan saat ini dengan saran ini.",
- "translate-edit-nopermission": "Anda memerlukan izin untuk menerjemahkan pesan.",
+ "translate-edit-nopermission": "Anda memerlukan hak terjemahan untuk menerjemahkan pesan.",
"translate-edit-askpermission": "Minta izin",
+ "exporttranslations": "Ekspor terjemahan",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Silakan tentukan format yang sah.",
+ "translate-export-not-supported": "Ekspor terjemahan tidak didukung.",
+ "translate-export-format-notsupported": "Format ekspor yang diinginkan tidak didukung oleh kelompok pesan ini.",
"translate-magic-pagename": "Terjemahan MediaWiki yang Diperluas",
- "translate-magic-help": "Anda dapat menerjemahkan alias untuk halaman istimewa, kata magis, dan ruang nama.\n\nAlias untuk halaman istimewa dan kata magis dapat memiliki beberapa terjemahan.\nSetiap terjemahan dipisahkan dengan tanda koma (,).\nRuang nama hanya boleh memiliki satu terjemahan.\n\nMenerjemahkan ruang nama pembicaraan proyek <code>pembicaraan $1</code> mungkin cukup rumit.\n<code>$1</code> akan digantikan dengan nama situs proyek (misalnya <code>{{ns:project_talk}}</code>).\nJika bahasa Anda tidak memungkinkan untuk membentuk suatu frase yang sah tanpa mengganti nama situs, silakan beri tahu kami di [[Support|halaman Dukungan]].\n\nAnda harus menjadi penerjemah untuk menyimpan perubahan.\nPerubahan tidak akan disimpan hingga Anda mengeklik tombol simpan di bawah.",
+ "translate-magic-help": "Anda dapat menerjemahkan alias halaman istimewa, kata magis, dan nama ruang nama.\n\nAlias untuk halaman istimewa dan kata magis dapat memiliki beberapa terjemahan.\nSetiap terjemahan dipisahkan dengan tanda koma (,).\nRuang nama hanya boleh memiliki satu terjemahan.\n\nMenerjemahkan ruang nama pembicaraan proyek <code>pembicaraan $1</code> mungkin cukup rumit.\n<code>$1</code> akan digantikan dengan nama situs proyek (misalnya <code>{{ns:project_talk}}</code>).\nJika tidak mungkin untuk membentuk suatu frase yang sah dalam bahasa Anda tanpa mengganti nama situs, silakan beri tahu kami di [[Support|halaman Dukungan]].\n\nAnda harus menjadi penerjemah untuk menyimpan perubahan.\nPerubahan tidak akan disimpan hingga Anda mengeklik tombol simpan di bawah.",
"translate-magic-module": "Modul:",
"translate-magic-submit": "Ambil",
"translate-magic-cm-export": "Ekspor",
"translate-magic-nothing-to-export": "Tidak ada yang dapat diekspor.",
- "translate-magic-cm-to-be": "Ubah menjadi",
+ "translate-magic-cm-to-be": "Nantinya",
"translate-magic-cm-current": "Saat ini",
"translate-magic-cm-original": "Asli",
"translate-magic-cm-comment": "Komentar:",
"translate-magic-cm-save": "Simpan",
- "translate-magic-cm-updatedusing": "Diperbaharui menggunakan [[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]",
- "translate-magic-cm-savefailed": "Penyimpanan gagal",
+ "translate-magic-cm-updatedusing": "Diperbarui menggunakan [[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]",
+ "translate-magic-cm-savefailed": "Gagal menyimpan",
"translate-magic-special": "Alias halaman istimewa",
"translate-magic-words": "Kata magis",
"translate-magic-namespace": "Nama ruang nama",
"translate-magic-notsaved": "Suntingan Anda tidak tersimpan!",
"translate-magic-errors": "Mohon perbaiki {{PLURAL:$1|kesalahan|kesalahan}} berikut pada terjemahan:",
- "translate-magic-saved": "Perubahan Anda berhasil tersimpan",
+ "translate-magic-saved": "Perubahan Anda telah disimpan.",
"translate-checks-parameters": "{{PLURAL:$2|Parameter|Parameter}} berikut ini tidak digunakan:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Parameter|Parameter}} berikut ini tidak dikenali:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Terdapat {{PLURAL:$2|tanda kurung|tanda kurung}} dengan jumlah yang tidak sama:\n<strong><nowiki>$1</nowiki></strong>",
@@ -96,13 +96,13 @@
"translate-checks-links-missing": "{{PLURAL:$2|Pranala|Pranala}} berikut ini hilang:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Harap ganti {{PLURAL:$2|tag|tag}} berikut ini dengan tag yang tepat:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "Definisi menggunakan <nowiki>{{PLURAL:}}</nowiki> namun terjemahannya tidak menggunakannya.",
- "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> menghasilkan {{PLURAL:$1|sebuah wujud|$1 buah wujud}} namun {{PLURAL:$2|hanya ada sebuah wujud yang|$2 buah wujud lainnya juga}} didukung (kecuali wujud 0= dan 1=).",
- "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> memiliki wujud yang sama di akhir. <nowiki>{{PLURAL:$1|orang|orang}}</nowiki> seharusnya ditulis menjadi <nowiki>{{PLURAL:$1|orang}}</nowiki>.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> diberikan {{PLURAL:$1|satu bentukan|$1 bentukan}}, namun {{PLURAL:$2|hanya ada satu bentukan|sebenarnya ada $2 buah bentuk}} yang didukung (selain bentukan 0= dan 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> memiliki bentukan yang sama di akhir. <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> seharusnya ditulis menjadi <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
"translate-checks-pagename": "Ruang nama berubah dari definisinya",
"translate-checks-format": "Terjemahan ini tidak mengikuti definisi atau memiliki sintaks yang tidak sah: $1",
"translate-checks-escape": "''Escape'' berikut mungkin tidak disengaja: <strong>$1</strong>",
"translate-checks-parametersnotequal": "Terdapat {{PLURAL:$1|$1}} parameter; seharusnya ada {{PLURAL:$2|$2}}.",
- "translate-checks-malformed": "<nowiki>$1</nowiki> cacat.",
+ "translate-checks-malformed": "Bentukan <nowiki>$1</nowiki> salah.",
"translate-checks-fudforum-syntax": "Gunakan <nowiki>$1</nowiki> bukan <nowiki>$2</nowiki> pada proyek ini.",
"translate-pref-nonewsletter": "Jangan kirimi saya surel berita",
"translate-pref-editassistlang": "Bahasa penunjang:",
@@ -115,20 +115,29 @@
"right-translate-import": "Mengimpor terjemahan luring",
"action-translate-import": "mengimpor terjemahan luring",
"right-translate-messagereview": "Meninjau terjemahan",
+ "action-translate-messagereview": "meninjau terjemahan",
"right-translate-groupreview": "Mengubah keadaan alur kerja kelompok pesan",
+ "action-translate-groupreview": "mengubah keadaan alur kerja kelompok pesan",
+ "translate-rcfilters-translations": "Terjemahan",
+ "translate-rcfilters-translations-only-label": "Terjemahan",
+ "translate-rcfilters-translations-only-desc": "Perubahan pada halaman terjemahan.",
+ "translate-rcfilters-translations-filter-label": "Bukan terjemahan",
+ "translate-rcfilters-translations-filter-desc": "Semua perubahan yang bukan terjemahan.",
+ "translate-rcfilters-translations-site-label": "Pesan situs",
+ "translate-rcfilters-translations-site-desc": "Penyesuaian pesan situs dalam ruang nama MediaWiki.",
"translate-rc-translation-filter": "Saring terjemahan:",
"translate-rc-translation-filter-no": "Jangan lakukan apa pun",
"translate-rc-translation-filter-only": "Tampilkan hanya terjemahan",
- "translate-rc-translation-filter-filter": "Tampilkan selain terjemahan",
+ "translate-rc-translation-filter-filter": "Jangan sertakan terjemahan",
"translate-rc-translation-filter-site": "Hanya perubahan ke pesan situs",
"translationstats": "Statistik penerjemahan",
- "translate-stats-edits": "Sunting",
+ "translate-stats-edits": "Suntingan",
"translate-stats-users": "Penerjemah",
"translate-stats-registrations": "Pendaftaran",
"translate-stats-reviews": "Tinjauan",
"translate-stats-reviewers": "Peninjau",
"translate-statsf-intro": "Anda dapat menciptakan statistik sederhana menggunakan formulir ini. Semua nilai memiliki batas atas dan bawah.",
- "translate-statsf-options": "Opsi grafik",
+ "translate-statsf-options": "Opsi bagan",
"translate-statsf-width": "Lebar dalam piksel:",
"translate-statsf-height": "Tinggi dalam piksel:",
"translate-statsf-days": "Periode waktu dalam hari:",
@@ -138,17 +147,16 @@
"translate-statsf-scale-weeks": "Pekan",
"translate-statsf-scale-days": "Hari",
"translate-statsf-scale-hours": "Jam",
- "translate-statsf-count": "Ukuran:",
+ "translate-statsf-count": "Yang diukur:",
"translate-statsf-count-edits": "Jumlah suntingan",
"translate-statsf-count-users": "Penerjemah aktif",
"translate-statsf-count-registrations": "Pengguna baru",
"translate-statsf-count-reviews": "Tinjauan terjemahan",
"translate-statsf-count-reviewers": "Peninjau",
"translate-statsf-language": "Daftar kode bahasa dipisahkan koma:",
- "translate-statsf-group": "Daftar kode kelompok dipisahkan koma.",
+ "translate-statsf-group": "Daftar kode kelompok dipisahkan koma:",
"translate-statsf-submit": "Pratayang",
- "translate-tag-category": "Halaman yang dapat diterjemahkan",
- "translate-tag-page-desc": "Terjemahan atas halaman wiki [[$2|$1]].",
+ "translate-tag-page-desc": "Terjemahan dari halaman wiki [[$2|$1]] dalam bahasa $3 ($4).",
"translate-sidebar-alltrans": "Dalam bahasa lain",
"translations": "Semua terjemahan",
"translations-summary": "Masukkan sebuah nama pesan di bawah ini untuk menampilkan semua terjemahan yang tersedia.",
@@ -162,6 +170,7 @@
"translate-translations-history-short": "r",
"languagestats": "Statistik bahasa",
"languagestats-summary": "Halaman ini menampilkan statistik terjemahan untuk semua kelompok pesan dalam suatu bahasa tertentu.",
+ "messagegroupstats-summary": "Laman ini menampilkan statistik kelompok pesan.",
"languagestats-stats-for": "Statistik terjemahan untuk $1 ($2).",
"languagestats-recenttranslations": "terjemahan terkini",
"translate-langstats-incomplete": "Beberapa statistik pada halaman ini belum lengkap. Silakan muat ulang untuk mendapatkan lebih banyak statistik.",
@@ -171,14 +180,15 @@
"translate-langstats-collapseall": "ciutkan semua",
"translate-language-code": "Kode bahasa",
"translate-language-code-field-name": "Kode bahasa:",
- "translate-suppress-complete": "Sembunyikan grup yang telah diterjemahkan sepenuhnya",
- "translate-ls-noempty": "Sembunyikan grup yang belum diterjemahkan sepenuhnya",
+ "translate-suppress-complete": "Sembunyikan kelompok pesan yang telah diterjemahkan sepenuhnya",
+ "translate-ls-noempty": "Sembunyikan kelompok pesan yang belum diterjemahkan sepenuhnya",
"translate-language": "Bahasa",
"translate-total": "Pesan",
"translate-untranslated": "Belum diterjemahkan",
- "translate-percentage-complete": "Selesai",
+ "translate-percentage-complete": "Rampung",
"translate-percentage-fuzzy": "Usang",
- "translate-languagestats-overall": "Semua kelompok pesan sekaligus",
+ "translate-percentage-proofread": "Telah ditinjau",
+ "translate-languagestats-overall": "Total keseluruhan kelompok pesan",
"translate-ls-submit": "Tampilkan statistik",
"translate-ls-column-group": "Kelompok pesan",
"translate-mgs-pagename": "Statistik kelompok pesan",
@@ -188,18 +198,20 @@
"translate-mgs-noempty": "Jangan tampilkan bahasa yang tidak memiliki terjemahan",
"translate-mgs-submit": "Tampilkan statistik",
"translate-mgs-column-language": "Bahasa",
- "translate-mgs-totals": "Semua bahasa sekaligus",
+ "translate-mgs-totals": "Total keseluruhan $1 {{PLURAL:$1|bahasa}}",
"translate-mgs-invalid-group": "Kelompok $1 yang dimaksud tidak ditemukan.",
"translate-mgs-nothing": "Tidak ada statistik yang dapat ditampilkan.",
"supportedlanguages": "Bahasa yang didukung",
- "supportedlanguages-summary": "Halaman ini menampilkan daftar semua bahasa yang didukung oleh {{SITENAME}}, beserta nama penerjemah yang bekerja pada bahasa tersebut. Nama penerjemah nampak lebih besar jika telah mereka telah menyumbangkan banyak suntingan. Warna garis bawah menandakan seberapa sering penerjemah tersebut aktif di sini.",
+ "supportedlanguages-summary": "Halaman ini menampilkan daftar total keseluruhan bahasa yang didukung oleh {{SITENAME}}, beserta nama penerjemah yang mengerjakan bahasa tersebut. Nama penerjemah nampak semakin besar jika mereka telah semakin banyak memberikan kontribusi. Warna garis bawah menandakan apakah seorang penerjemah baru saja aktif di sini.",
"supportedlanguages-colorlegend": "Legenda warna: Terjemahan terakhir $1 hari yang lalu.",
"supportedlanguages-portallink": "[$1] $2 - $3",
"supportedlanguages-portallink-nocldr": "[$1] $2",
- "supportedlanguages-translators": "{{PLURAL:$2|Penerjemah|Penerjemah}}: $1",
+ "supportedlanguages-sqlite-error": "SQLite tidak didukung",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Penerjemah}}|Penerjemah}}: $1",
"supportedlanguages-recenttranslations": "terjemahan terkini",
- "supportedlanguages-count": "Total: $1 {{PLURAL:$1|bahasa|bahasa}}.",
+ "supportedlanguages-count": "Ada $1 {{PLURAL:$1|bahasa|bahasa}} totalnya.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|suntingan|suntingan}} - suntingan terakhir $3 {{PLURAL:$3|hari|hari}} yang lalu",
+ "abusefilter-edit-builder-vars-translate-source-text": "Teks sumber satuan terjemahan",
"translate-save": "Simpan ($1)",
"translate-jssti-add": "Tambah ke daftar",
"managemessagegroups": "Pengelolaan kelompok pesan",
@@ -207,47 +219,45 @@
"translate-smg-nochanges": "Tidak ada perubahan yang dapat diproses.",
"translate-smg-submit": "Kirim perubahan untuk diproses",
"translate-smg-submitted": "Definisi pesan telah diperbarui. Perubahan sedang diproses di latar.",
+ "translate-smg-more": "Akan ada perubahan lainnya untuk diproses setelah mengirimkan perubahan ini.",
"translate-smg-left": "Konten pesan di wiki",
- "translate-smg-right": "Peubahan baru",
+ "translate-smg-right": "Perubahan baru",
"translate-manage-import-diff": "Pesan $1 | Tindakan: $2",
"translate-manage-import-new": "Pesan baru $1",
- "translate-manage-import-deleted": "Pesan terhapus $1",
+ "translate-manage-import-deleted": "Pesan $1 terhapus",
"translate-manage-action-import": "Impor",
- "translate-manage-action-conflict": "Impor dan takjelas",
+ "translate-manage-action-conflict": "Impor dan tandai perlu diulas",
"translate-manage-action-ignore": "Abaikan",
- "translate-manage-action-fuzzy": "Terjemahan impor dan takjelas",
+ "translate-manage-action-fuzzy": "Impor dan tandai perlu diulas terjemahan",
"translate-manage-nochanges": "Tidak ada perubahan pada definisi pesan untuk kelompok ini.",
"translate-manage-nochanges-other": "Tidak ada perubahan pada bahasa ini.\nGunakan pranala berikut untuk kembali ke tampilan rincian kelompok.",
- "translate-manage-inconsistent": "Ketidakkonsistenan terdeteksi pada permintaan.\nPeriksa ulang perubahan yang dilakukan dan cobalah lagi.\nDetail: $1.",
- "translate-manage-toolong": "Waktu proses maksimum {{PLURAL:$1||}}$1 detik telah terlampaui.\nMohon kirimkan kembali formulir untuk melanjutkan proses.",
- "translate-manage-import-summary": "Impor versi baru dari sumber luar",
- "translate-manage-conflict-summary": "Mengimpor versi baru dari sumber luar.\nSilakan diperiksa.",
- "translate-manage-fuzzy-summary": "Definisi pesan telah berubah",
+ "translate-manage-inconsistent": "Ketidakkonsistenan terdeteksi pada permintaan.\nPeriksa ulang perubahan lalu coba kembali.\nRincian: $1.",
+ "translate-manage-toolong": "Waktu proses maksimum $1 {{PLURAL:$1|detik}} telah terlampaui.\nMohon kirimkan kembali formulir untuk melanjutkan proses.",
+ "translate-manage-import-summary": "Mengimpor versi baru dari sumber eksternal",
+ "translate-manage-conflict-summary": "Mengimpor versi baru dari sumber eksternal.\nTolong diperiksa.",
"translate-manage-submit": "Jalankan",
- "translate-manage-intro-other": "Di bawah ini adalah daftar perubahan terjemahan dalam bahasa $1.\nSilakan tinjau perubahan-perubahan ini dan pilihlah tindakan yang ingin Anda lakukan untuk setiap perubahan.\nJika Anda memilih untuk tidak menghiraukan perubahan, tindakan ini hanya bersifat sementara.",
- "translate-manage-import-ok": "Impor versi baru dari halaman $1.",
- "translate-manage-import-done": "Semua selesai!",
+ "translate-manage-intro-other": "Di bawah ini adalah daftar perubahan terjemahan dalam bahasa $1.\nSilakan tinjau perubahan ini dan pilih tindakan yang ingin Anda lakukan untuk setiap perubahannya.\nJika Anda memilih untuk tidak mengabaikan perubahan, tindakan ini hanya bersifat sementara.",
+ "translate-manage-import-ok": "Diimpor: $1",
+ "translate-manage-import-done": "Impor selesai!",
"importtranslations": "Impor terjemahan",
"translate-import-from-local": "Unggah berkas lokal:",
"translate-import-load": "Muatkan berkas",
"translate-import-err-dl-failed": "Tidak dapat mengambil berkas:\n$1",
- "translate-import-err-ul-failed": "Pemuatan berkas tidak berhasil",
+ "translate-import-err-ul-failed": "Pengunggahan berkas gagal",
"translate-import-err-invalid-title": "Nama berkas <nowiki>$1</nowiki> yang diberikan tidak sah.",
- "translate-import-err-no-such-file": "Berkas <nowiki>$1</nowiki> tidak ada atau belum di unggah kelokal.",
- "translate-import-err-stale-group": "Kelompok pesan berkas ini tidak ditemukan.",
- "translate-import-err-no-headers": "Berkas bukan merupakan berkas Gettext dalam format pengaya Translate yang diciptakan dengan benar:\nTidak dapat menentukan grup dan bahasa dari kepala berkas.",
- "translate-import-err-warnings": "Berkas ini tidak diciptakan dengan benar.\nPastikan penyunting Anda tidak membuang ''field'' msgctxt.\nDetail: $1",
+ "translate-import-err-no-such-file": "Berkas <nowiki>$1</nowiki> tidak ada atau belum diunggah secara lokal.",
+ "translate-import-err-stale-group": "Kelompok pesan dari berkas ini tidak ditemukan.",
+ "translate-import-err-no-headers": "Berkas bukan merupakan berkas Gettext dalam format pengaya Translate yang diciptakan dengan benar:\nTidak dapat menentukan kelompok pesan dan bahasa dari kop berkas.",
+ "translate-import-err-warnings": "Berkas ini tidak diciptakan dengan benar.\nPastikan penyunting Anda tidak membuang bidang msgctxt.\nRincian: $1",
"translate-js-summary": "Ringkasan:",
"translate-js-save": "Simpan",
"translate-js-next": "Simpan dan buka selanjutnya",
- "translate-js-nonext": "Ini adalah pesan terakhir di halaman ini.",
- "translate-js-skip": "Lewati ke selanjutnya",
- "translate-js-save-failed": "Gagal menyimpan. Silakan laporkan kesalahan ini.",
- "translate-js-history": "Terjemahan terdahulu",
+ "translate-js-skip": "Lewati ke pesan selanjutnya",
+ "translate-js-history": "Riwayat terjemahan",
"translate-js-support": "Ajukan pertanyaan",
"translate-js-support-title": "Mintalah bantuan jika informasi yang ada tidak cukup untuk menerjemahkan pesan ini dengan benar.",
"translate-js-support-unsaved-warning": "Anda memiliki terjemahan yang belum disimpan.",
- "translate-gs-pos": "Tingkat.",
+ "translate-gs-pos": "Posisi",
"translate-gs-code": "Kode",
"translate-gs-continent": "Benua",
"translate-gs-speakers": "Penutur",
@@ -259,25 +269,11 @@
"translate-documentation-language": "Dokumentasi pesan",
"translate-searchprofile": "Terjemahan",
"translate-searchprofile-tooltip": "Cari dari semua terjemahan",
+ "translate-searchprofile-note": "Lebih banyak opsi penelusuran tersedia dalam [$1 penelusuran terjemahan].",
"translate-search-languagefilter": "Saring menurut bahasa:",
"translate-search-nofilter": "Tanpa penyaringan",
- "translate-messagereview-submit": "Tandai sudah ditinjau",
- "translate-messagereview-progress": "Menandai sudah ditinjau...",
- "translate-messagereview-failure": "Gagal menandai sudah tertinjau: $1",
- "translate-messagereview-done": "Tertinjau",
- "translate-messagereview-reviews": "Ditinjau oleh {{PLURAL:$1|seorang pengguna|$1 pengguna}}",
- "translate-messagereview-reviewswithyou": "Ditinjau oleh {{PLURAL:$1|Anda|$1 pengguna termasuk Anda}}",
- "api-error-invalidrevision": "Terjemahan tidak ditemukan",
- "api-error-unknownmessage": "Pesan tidak ditemukan",
- "api-error-fuzzymessage": "Terjemahan ditandai sebagai takjelas",
- "api-error-owntranslation": "Anda tidak dapat menandai terjemahan Anda sendiri tertinjau",
- "translate-messagereview-no-fuzzy": "Terjemahan takjelas tidak dapat ditandai sebagai telah ditinjau.",
- "translate-messagereview-no-own": "Anda tidak dapat menandai terjemahan Anda sendiri sebagai telah ditinjau.",
- "translate-messagereview-doit": "Tandai terjemahan ini sebagai telah ditinjau.",
- "group-translate-proofr.css": "/* CSS placed here will affect translation reviewers only */",
- "group-translate-proofr.js": "/* JS placed here will affect translation reviewer only */",
- "log-name-translationreview": "Catatan peninjauan terjemahan",
- "log-description-translationreview": "Catatan semua tinjauan terhadap terjemahan dan kelompok pesan.",
+ "log-name-translationreview": "Log peninjauan terjemahan",
+ "log-description-translationreview": "Log semua tinjauan terjemahan dan kelompok pesan.",
"logentry-translationreview-message": "$1 {{GENDER:$2|telah meninjau}} terjemahan $3",
"logentry-translationreview-group": "$1 {{GENDER:$2|mengubah}} status terjemahan $4 untuk $3 dari $6 menjadi $7",
"group-translate-sandboxed": "Penerjemah yang belum disetujui",
@@ -288,19 +284,20 @@
"action-translate-sandboxaction": "menjalankan tindakan yang masuk daftar putih untuk pengguna dalam bak pasir",
"translate-workflow-state-": "(tidak ditetapkan)",
"translate-workflowstatus": "Status: $1",
- "translate-workflow-set-doing": "Sedang menetapkan...",
- "translate-workflow-autocreated-summary": "Pembuatan halaman otomatis untuk status alur kerja $1",
- "translate-stats-workflow": "Status",
- "translate-workflowgroup-label": "Status alur kerja",
+ "translate-workflow-set-doing": "Menetapkan...",
+ "translate-workflow-autocreated-summary": "Pembuatan halaman otomatis untuk keadaan alur kerja $1",
+ "translate-stats-workflow": "Keadaan",
+ "translate-workflowgroup-label": "Keadaan alur kerja",
+ "translate-workflowgroup-desc": "Kelompok pesan ini menampilkan keadaan alur kerja terjemahan.\nKeadaan ini didefinisikan dalam variabel konfigurasi $wgTranslateWorkflowStates.",
"translate-dynagroup-recent-label": "Terjemahan terkini",
+ "translate-dynagroup-recent-desc": "Kelompok pesan ini menampilkan seluruh terjemahan terkini dalam bahasa ini.\nSangat berguna saat mengerjakan tugas peninjauan.",
"translate-dynagroup-additions-label": "Penambahan terkini",
"translate-dynagroup-additions-desc": "Kelompok pesan ini menampilkan pesan yang baru dan yang telah berubah.",
- "translate-gethelp": "Bantuan",
"translate-msggroupselector-projects": "Kelompok pesan",
"translate-msggroupselector-search-placeholder": "Cari kelompok",
"translate-msggroupselector-search-all": "Semua",
"translate-msggroupselector-search-recent": "Terkini",
- "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|sub-kelompok|sub-kelompok}}",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subkelompok|subkelompok}}",
"tux-languageselector": "Terjemahkan ke",
"tux-tab-all": "Semua",
"tux-tab-untranslated": "Belum diterjemahkan",
@@ -312,16 +309,19 @@
"tux-status-fuzzy": "Usang",
"tux-status-proofread": "Telah ditinjau",
"tux-status-translated": "Telah diterjemahkan",
- "tux-status-saving": "Sedang menyimpan...",
+ "tux-status-saving": "Menyimpan...",
"tux-status-unsaved": "Belum disimpan",
+ "tux-save-unknown-error": "Terjadi galat tak dikenal.",
"tux-editor-placeholder": "Terjemahan Anda",
+ "tux-editor-editsummary-placeholder": "Ringkasan opsional",
"tux-editor-paste-original-button-label": "Tempel teks sumber",
"tux-editor-discard-changes-button-label": "Buang perubahan",
"tux-editor-save-button-label": "Simpan terjemahan",
- "tux-editor-skip-button-label": "Lewati",
+ "tux-editor-skip-button-label": "Lewati ke pesan selanjutnya",
"tux-editor-cancel-button-label": "Batal",
"tux-editor-confirm-button-label": "Konfirmasikan terjemahan",
- "tux-editor-shortcut-info": "Tekan \"$1\" untuk menyimpan atau \"$2\" untuk lanjut ke pesan selanjutnya",
+ "tux-editor-proofread-button-label": "Tandai sebagai telah ditinjau",
+ "tux-editor-shortcut-info": "Tekan \"$1\" untuk mengkonfirmasi dan pindah ke pesan selanjutnya, \"$2\" untuk melewatinya, \"$4\" untuk menyediakan ringkasan, atau tahan\"$3\" untuk melihat pintasan lainnya.",
"tux-editor-edit-desc": "Sunting dokumentasi",
"tux-editor-add-desc": "Tambah dokumentasi",
"tux-editor-suggestions-title": "Saran",
@@ -331,7 +331,7 @@
"tux-editor-tm-match": "$1% sesuai",
"tux-warnings-more": "{{PLURAL:$1|$1 lagi}}",
"tux-warnings-hide": "sembunyikan",
- "tux-editor-save-failed": "Penyimpanan terjemahan gagal: $1",
+ "tux-editor-save-failed": "Gagal menyimpan terjemahan: $1",
"tux-editor-n-uses": "digunakan $1 {{PLURAL:$1|kali|kali}}",
"tux-editor-message-desc-more": "Tampilkan selengkapnya",
"tux-editor-message-desc-less": "Tampilkan seperlunya",
@@ -348,7 +348,7 @@
"tux-editor-doc-editor-placeholder": "Dokumentasi pesan",
"tux-editor-doc-editor-save": "Sunting dokumentasi",
"tux-editor-doc-editor-cancel": "Batal",
- "tux-messagetable-more-messages": "$1 {{PLURAL:$1|pesan|pesan}} lainnya",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|pesan|pesan}} lagi",
"tux-messagetable-loading-messages": "Memuat {{PLURAL:$1|pesan|pesan}}...",
"tux-message-filter-placeholder": "Saring daftar",
"tux-message-filter-result": "Ditemukan $1 buah {{PLURAL:$1|hasil|hasil}} untuk \"$2\"",
@@ -356,8 +356,8 @@
"tux-message-filter-optional-messages-label": "Pesan opsional",
"tux-proofread-translated-by-self": "Diterjemahkan oleh Anda",
"tux-empty-list-all": "Kelompok pesan ini kosong",
- "tux-empty-list-all-guide": "Pilih kelompok pesan lainnya untuk diterjemahkan",
- "tux-translate-page-no-such-group": "'''Kelompok yang diminta tidak tersedia.''' Pilihlah kelompok pesan yang lain.",
+ "tux-empty-list-all-guide": "Pilih kelompok pesan yang lain untuk menerjemahkan",
+ "tux-translate-page-no-such-group": "<strong>Kelompok yang diinginkan tidak tersedia.</strong> Pilihlah kelompok pesan yang lain.",
"tux-empty-list-translated": "Tidak ada pesan yang telah diterjemahkan",
"tux-empty-list-translated-guide": "Anda dapat membantu menerjemahkan",
"tux-empty-list-translated-action": "Terjemahkan",
@@ -374,13 +374,20 @@
"tux-empty-list-other-action": "Tinjau terjemahan",
"tux-empty-list-other-link": "Tampilkan semua pesan",
"tux-editor-close-tooltip": "Tutup",
- "tux-editor-expand-tooltip": "Bentangkan",
+ "tux-editor-expand-tooltip": "Luaskan",
"tux-editor-collapse-tooltip": "Ciutkan",
+ "tux-editor-message-tools-show-editor": "Tampilkan dalam penyunting wiki",
"tux-editor-message-tools-history": "Riwayat",
+ "tux-editor-message-tools-delete": "Hapus",
"tux-editor-message-tools-translations": "Semua terjemahan",
- "tux-editor-loading": "Sedang memuat...",
- "translate-search-more-languages-info": "$1 {{PLURAL:$1|bahasa|bahasa}} lainnya",
+ "tux-editor-message-tools-linktothis": "Pranala balik pesan ini",
+ "tux-editor-loading": "Memuat...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|bahasa|bahasa}} lagi",
"translate-statsbar-tooltip": "$1% telah diterjemahkan, $2% telah ditinjau",
"translate-statsbar-tooltip-with-fuzzy": "$1% telah diterjemahkan, $2% telah ditinjau, $3% usang",
- "translate-search-more-groups-info": "$1 {{PLURAL:$1|kelompok|kelompok}} lainnya"
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|kelompok|kelompok}} lagi",
+ "translate-ulsdep-title": "Galat konfigurasi",
+ "translate-ulsdep-body": "Ekstensi Terjemahan bergantung pada [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector ekstensi Pemilihan Bahasa Universal].",
+ "tux-session-expired": "Anda sudah tidak lagi masuk log. Silakan masuk log di tab yang terpisah. Atau, buatlah salinan dari terjemahan yang belum disimpan, masuk log, kembali ke halaman ini, lalu masukkan kembali terjemahan Anda.",
+ "tux-nojs": "Perkakas ini tidak dapat bekerja tanpa JavaScript. JavaScript dinonaktifkan, gagal berfungsi, atau peramban ini tidak mendukungnya."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ig.json b/www/wiki/extensions/Translate/i18n/core/ig.json
index e4969f4c..db120eb0 100644
--- a/www/wiki/extensions/Translate/i18n/core/ig.json
+++ b/www/wiki/extensions/Translate/i18n/core/ig.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Ukabia"
+ "Ukabia",
+ "Uzoma Ozurumba"
]
},
"translate": "Tụ̀wári ásụ̀sụ̀",
@@ -10,17 +11,18 @@
"translate-page-language": "Ásụ̀sụ̀",
"translate-page-limit": "Érúrú",
"translate-submit": "Ga wèré",
- "translate-page-navigation-legend": "Otú Uzọr",
+ "translate-page-navigation-legend": "Nturuụzọ̀",
"translate-page-showing-none": "Ozi adighi I zi.",
"translate-next": "Ihü sò",
"translate-page-edit": "mèzi",
"translate-optional": "(ichóró)",
"translate-ignored": "(atùfùghịrị)",
+ "translate-edit-title": "Mèzi \"$1\"",
"translate-edit-definition": "Mkpurụ ómárí ozi",
"translate-magic-cm-to-be": "I-bu",
- "translate-magic-cm-save": "Domá",
+ "translate-magic-cm-save": "Dònye",
"translate-rc-translation-filter-no": "Emela ihe obulà",
- "translate-stats-edits": "Mmezi",
+ "translate-stats-edits": "Ḿmezi",
"translate-stats-users": "Ndi na kuwari asụsụ na asụsụ nke ozor",
"translate-statsf-width": "Íbụ ime ogụgụ pixel:",
"translate-statsf-height": "Ógólógó ime ogụgụ pixel:",
@@ -29,20 +31,27 @@
"translate-statsf-count": "Güo ógólógó:",
"translate-statsf-count-edits": "Ogụgụ orü",
"translate-statsf-count-users": "Ndi na su asụsụ di ngwamme",
- "translate-sidebar-alltrans": "Na asụsụ ozor",
+ "translate-sidebar-alltrans": "Nà asụ̀sụ̀ ndị ọ̀zọ",
"translate-translations-fieldset-title": "Ozi",
"translate-translations-messagename": "Áhà:",
"translate-translations-project": "Nzu:",
"translate-language": "Ásụ̀sụ̀",
"translate-percentage-complete": "Mmechá",
- "translate-save": "Domá ($1)",
+ "translate-save": "Dònye ($1)",
"translate-jssti-add": "Tinyé na ndetu",
- "translate-manage-import-new": "Ozi ohúrù $1",
+ "translate-manage-import-new": "Ozi ọhụrụ $1",
"translate-manage-import-deleted": "Ozi bakashịrị $1",
"translate-manage-import-done": "Omechá!",
+ "translate-js-save": "Dònye",
"translate-gs-code": "Edemede i zonari",
"translate-gs-continent": "Obodo ukwu",
"translate-gs-speakers": "Ndi na su",
"translate-gs-multiple": "Onuogụgụ kachara otụ",
- "translate-gs-total": "Òlé níle"
+ "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ọ",
+ "tux-proofread-edit-label": "Mèzi",
+ "tux-editor-doc-editor-cancel": "Hapụ̀"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ilo.json b/www/wiki/extensions/Translate/i18n/core/ilo.json
index 5ab9df14..259dc506 100644
--- a/www/wiki/extensions/Translate/i18n/core/ilo.json
+++ b/www/wiki/extensions/Translate/i18n/core/ilo.json
@@ -8,11 +8,6 @@
},
"translate": "Ipatarus",
"translate-desc": "[[Special:Translate|Espesial a panid]] para iti panagipatarus ti MediaWiki ken iti labes",
- "translate-taskui-view": "Ipakita amin dagiti mensahe",
- "translate-taskui-untranslated": "Ipakita dagiti saan pay a naipatarus a mensahe",
- "translate-taskui-optional": "Ipakita dagiti pagpilian a mensahe",
- "translate-taskui-acceptqueue": "Dagiti laeng mensahe a mamarkaak a kas narepaso",
- "translate-taskui-reviewall": "Irepaso amin dagiti patarus",
"translate-taskui-export-to-file": "Iparuar iti patneng a pormat",
"translate-taskui-export-as-po": "Iruar para iti off-line a panangipatarus",
"translate-taction-translate": "Ipatarus",
@@ -32,13 +27,13 @@
"translate-page-limit-option": "$1 {{PLURAL:$1|a mensahe|kadagiti mensahe}} tunggal maysa a panid",
"translate-submit": "Alaen",
"translate-page-navigation-legend": "Panagdaliasat",
- "translate-page-showing": "Agipakpakita kadagiti mensahe manipud ti $1 aginggana ti $2 iti $3.",
+ "translate-page-showing": "Agipakpakita kadagiti mensahe manipud iti $1 aginggana iti $2 iti $3.",
"translate-page-showing-all": "Agipakpakita ti $1 {{PLURAL:$1|a mensahe|a mensahe}}.",
"translate-page-showing-none": "Awan dagiti maiparang a mensahe.",
"translate-next": "Sumaruno a panid",
"translate-prev": "Napalabas a panid",
"translate-page-description-legend": "Pakaammo a maipanggep ti grupo",
- "translate-page-description-hasoptional": "Daytoy a grupo ti mensahe ket aglaon kadagiti pagpilian a mensahe.\nDagiti pagpilian a mensahe ket maipatarus laeng kuma no ti pagsasaom ket ket addaan ti naipangruna a kammasapulan\nkasla ti saan a panag-usar kadagiti pagbaetan wenno transliterasion iti maitutop a nagnagan. $1",
+ "translate-page-description-hasoptional": "Daytoy a grupo ti mensahe ket aglaon kadagiti pagpilian a mensahe.\nDagiti pagpilian a mensahe ket maipatarus laeng kuma no ti pagsasaom ket ket addaan ti naipangruna a kammasapulan\nkasla ti saan a panagusar kadagiti pagbaetan wenno transliterasion iti maitutop a nagnagan. $1",
"translate-page-description-hasoptional-open": "Ipakita dagiti pagpilian a mensahe.",
"translate-page-edit": "urnosen",
"translate-optional": "(pagpilian)",
@@ -50,10 +45,8 @@
"translate-edit-no-information": "<em>Daytoy a mensahe ket awan ti dokumentasionna.\nNo ammom ti ayan wenno kasano ti pannaka-usar daytoy a mensahe, matulongam dagiti sabali nga agipatpatarus babaen ti panagnayon ti dokumentasion daytoy a mensahe.</em>",
"translate-edit-information": "Pakaammo a maipanggep ti mensahe ($1)",
"translate-edit-in-other-languages": "Mensahe kadagiti sabali a pagsasao",
- "translate-edit-committed": "Agdama a panakaipatarus iti software",
"translate-edit-warnings": "Dagiti ballaag a maipanggep kadagiti saan a kompleto a patarus",
- "translate-edit-tmsugs": "Dagiti singasing manipud ti laglagip ti panagitarus ken panagitarus ti makina",
- "translate-edit-tmmatch-source": "Testo a taudan ti panagitarus: $1",
+ "translate-edit-tmmatch-source": "Teksto a taudan ti panagitarus: $1",
"translate-edit-tmmatch": "$1% a kapada",
"translate-use-suggestion": "Sukatan ti agdama panakaipatarus iti daytoy a singasing.",
"translate-edit-nopermission": "Masapolmo ti karbengan ti panagipatarus tapno makaipatarus kadagiti mensahe.",
@@ -86,7 +79,7 @@
"translate-checks-plural": "Ti panangipalawag ket agus-usar ti <nowiki>{{PLURAL:}}</nowiki> ngem ti panangipatarus ket saan.",
"translate-checks-plural-forms": "Ti <nowiki>{{PLURAL:}}</nowiki> ket naikkan {{PLURAL:$1|ti maysa a porma|kadagiti $1 a porma}} ngem {{PLURAL:$2|maysa laeng a porma|$2 a porporma}} ti masuportaran (malaksid ti 0= ken 1= a porporma).",
"translate-checks-plural-dupe": "Ti <nowiki>{{PLURAL:}}</nowiki> ket addaan ti duplikado a porporma iti gibus. Ti <nowiki>{{PLURAL:$1|karnero|karnero}}</nowiki> ket maisurat kuma a kas <nowiki>{{PLURAL:$1|karnero}}</nowiki>.",
- "translate-checks-pagename": "Ti nagan ti espasio ket nagbaliw manipud ti panangipalawag",
+ "translate-checks-pagename": "Ti nagan ti espasio ket nagbaliw manipud iti panangipalawag",
"translate-checks-format": "Daytoy a patarus ket saanna a suroten ti panangipalawag wenno addaan ti imbalido a gramatika:$1",
"translate-checks-escape": "Dagiti sumaganad a pangitalaw ket mabalin nga aksidental: <strong>$1</strong>",
"translate-checks-parametersnotequal": "Ti bilang ti parametro ket {{PLURAL:$1|$1}}; nasken kuma a {{PLURAL:$2|$2}}.",
@@ -135,7 +128,6 @@
"translate-statsf-language": "Listaan dagiti kodigo ti pagsasao nga insinsina ti koma:",
"translate-statsf-group": "Listaan ti grupo dagiti kodigo nga insinsina ti koma:",
"translate-statsf-submit": "Ipadas",
- "translate-tag-category": "Maipatarus a pampanid",
"translate-tag-page-desc": "Patarus ti panid ti wiki ti [[$2|$1]].",
"translate-sidebar-alltrans": "Iti sabali a sasao",
"translations": "Amin a patarus",
@@ -173,7 +165,7 @@
"translate-mgs-fieldset": "Ipakita dagiti kakaykayatan",
"translate-mgs-group": "Grupo ti mensahe:",
"translate-mgs-nocomplete": "Saan nga iparang dagiti pagsasao nga addaan ti kompleto a patarus",
- "translate-mgs-noempty": "Saan nga iparang dagiti pagsasao nga awan dagiti aniaman a patarus",
+ "translate-mgs-noempty": "Saan nga iparang dagiti pagsasao nga awan dagiti ania man a patarus",
"translate-mgs-submit": "Ipakita ti estadistika",
"translate-mgs-column-language": "Pagsasao",
"translate-mgs-totals": "Pagtiponen amin dagiti pagsasao",
@@ -207,9 +199,8 @@
"translate-manage-nochanges-other": "Awan dagiti binalbaliwan para iti daytoy a pagsasao.\nUsaren ti silpo dita baba tapno agsubli idiay naisalaysay a panagkita ti grupo.",
"translate-manage-inconsistent": "Nakaduktal ti bangking iti kiddaw.\nPangaasi nga agkita kadagiti panagbalbaliw ket padasen manen.\nDagiti salaysay: $1.",
"translate-manage-toolong": "Ti kaaduan a panagproseso nga oras iti $1 a {{PLURAL:$1|segundo|segsegundo}} ket nalabsan.\nPangngaasi nga ited manen ti porma tapno maituloy ti panagproseso.",
- "translate-manage-import-summary": "Agal-ala ti baro a bersion manipud ti akin-ruar a taudan",
- "translate-manage-conflict-summary": "Agal-ala ti baro a bersion manipud ti akin-ruar a taudan.\nPangngaasi a kitaen.",
- "translate-manage-fuzzy-summary": "Nagbaliw ti panangipalawag ti mensahe",
+ "translate-manage-import-summary": "Agal-ala ti baro a bersion manipud iti akin-ruar a taudan",
+ "translate-manage-conflict-summary": "Agal-ala ti baro a bersion manipud iti akin-ruar a taudan.\nPangngaasi a kitaen.",
"translate-manage-submit": "Aramiden",
"translate-manage-intro-other": "Dita baba ket listaan dagiti panagbaliw ti patarus iti pagsasao ti $1.\nPangngaasi nga irepaso dagiti binaliwan ken agpili ti tignay a kayatmo nga aramiden para iti tunggal maysa pabaro.\nNo piliem a saan nga ikaskaso dagiti ibinaliwan, temporario laeng daytoy a tignay.",
"translate-manage-import-ok": "Nagala: $1",
@@ -227,9 +218,7 @@
"translate-js-summary": "Pakabuklan:",
"translate-js-save": "Idulin",
"translate-js-next": "Idulin ken lukatan ti sumaruno",
- "translate-js-nonext": "Daytoy ti naudi a mensahe iti daytoy a panid",
"translate-js-skip": "Mapan iti sumaruno",
- "translate-js-save-failed": "Napaay ti panagidulin. Pangngaasi nga ireporta daytoy a biddut.",
"translate-js-history": "Pakasaritaan ti patarus",
"translate-js-support": "Agdamag ti saludsod",
"translate-js-support-title": "Agdamag ti tulong no awan ti makaanay a pakaamo tapno husto ti pannakaipatarus daytoy a mensahe.",
@@ -248,23 +237,10 @@
"translate-searchprofile-tooltip": "Agbiruk manipud kadagiti amin a patarus",
"translate-search-languagefilter": "Sagaten babaen ti pagsasao:",
"translate-search-nofilter": "Awan panagsagat",
- "translate-messagereview-submit": "Markaan a narepaso",
- "translate-messagereview-progress": "Agmarmarka a kas narepaso...",
- "translate-messagereview-failure": "Napaay ti panagmarka a kas narepaso: $1",
- "translate-messagereview-done": "Narepaso",
- "translate-messagereview-reviews": "Rinepaso babaen {{PLURAL:$1|ti maysa nga agar-aramat|dagiti $1 nga agar-aramat}}",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|Rinepasom|Rinepaso dagiti $1 nga agr-aramat ken nairamanka}}",
- "api-error-invalidrevision": "Saan a nabirukan ti patarus",
- "api-error-unknownmessage": "Saan a nabirukan ti mensahe",
- "api-error-fuzzymessage": "Ti patarus ket namarkaan a kas saan a nalawag",
- "api-error-owntranslation": "Saanmo a mamarkaan dagiti bukodmo a patarus a kas narepaso",
- "translate-messagereview-no-fuzzy": "Dagit saan a nalawag a panagipatarus ket saan a mabalin a mamarkaan a kas narepaso.",
- "translate-messagereview-no-own": "Saanmo a mamarkaan dagiti bukodmo a patarus a kas narepaso.",
- "translate-messagereview-doit": "Markaam daytoy a patarus a kas narepaso.",
"log-name-translationreview": "Listaan ti panagrepaso ti patarus",
"log-description-translationreview": "Ilista amin dagiti panagrepaso kadagiti patarus ken dagiti grupo ti mensahe.",
"logentry-translationreview-message": "Ni $1 ket {{GENDER:$2|nagrepaso}} ti patarus ti $3",
- "logentry-translationreview-group": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti kasasaad dagiti $4 a patarus ti $3 manipud ti $6 iti $7",
+ "logentry-translationreview-group": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti kasasaad dagiti $4 a patarus ti $3 manipud iti $6 iti $7",
"group-translate-sandboxed": "Dagiti di naaprobaran nga agipatpatarus",
"group-translate-sandboxed-member": "{{GENDER:$1|di naaprobaran nga agipatpatarus}}",
"right-translate-sandboxmanage": "Taripatuen dagiti naipadpadas nga agar-aramat",
@@ -282,9 +258,8 @@
"translate-dynagroup-recent-desc": "Daytoy a grupo ti mensahe ket mangipakpakita kadagiti amin a kinaudi a patarus iti daytoy a pagsasao.\nKaserbian daytoy para iti obra ti panagrepaso.",
"translate-dynagroup-additions-label": "Dagiti kinaudi a nainayon",
"translate-dynagroup-additions-desc": "Daytoy a grupo ti mensahe ket mangipakpakita kadagiti baro ken nabaliwan a mensahe.",
- "translate-gethelp": "Tulong",
"translate-msggroupselector-projects": "Grupo ti mensahe",
- "translate-msggroupselector-search-placeholder": "Biruken dagiti grupo",
+ "translate-msggroupselector-search-placeholder": "Agbiruk kadagiti grupo",
"translate-msggroupselector-search-all": "Amin",
"translate-msggroupselector-search-recent": "Kinaudi",
"translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|a subgrupo|kadagiti subgrupo}}",
@@ -302,7 +277,7 @@
"tux-status-saving": "Agiduldulin...",
"tux-status-unsaved": "Di naidulin",
"tux-editor-placeholder": "Ti patarusmo",
- "tux-editor-paste-original-button-label": "Ipegket ti testo ti taudan",
+ "tux-editor-paste-original-button-label": "Ipegket ti teksto ti taudan",
"tux-editor-discard-changes-button-label": "Iwagsak dagiti binaliwan",
"tux-editor-save-button-label": "Idulin ti patarus",
"tux-editor-skip-button-label": "Mapan iti sumaruno",
@@ -360,7 +335,7 @@
"tux-empty-list-other-guide": "Makatulongka nga agrepaso kadagiti addan a naipatarus",
"tux-empty-list-other-action": "Agrepaso kadagiti patarus",
"tux-empty-list-other-link": "Ipakita amin dagiti mensahe",
- "tux-editor-close-tooltip": "Irekep",
+ "tux-editor-close-tooltip": "Irikep",
"tux-editor-expand-tooltip": "Palawaen",
"tux-editor-collapse-tooltip": "Rebbaen",
"tux-editor-message-tools-history": "Pakasaritaan",
diff --git a/www/wiki/extensions/Translate/i18n/core/inh.json b/www/wiki/extensions/Translate/i18n/core/inh.json
index 049ca1ec..f014f0ad 100644
--- a/www/wiki/extensions/Translate/i18n/core/inh.json
+++ b/www/wiki/extensions/Translate/i18n/core/inh.json
@@ -2,8 +2,22 @@
"@metadata": {
"authors": [
"Умар",
- "Adam-Yourist"
+ "Adam-Yourist",
+ "ElizaMag"
]
},
- "translate-documentation-language": "Хоаман документаци"
+ "translate-page-group": "Тоаба",
+ "translate-page-language": "Мотт",
+ "translate-edit-translation": "Таржам",
+ "translate-rcfilters-translations": "Таржамаш",
+ "translate-rcfilters-translations-only-label": "Таржамаш",
+ "translate-rcfilters-translations-filter-label": "Таржамаш дац",
+ "translations": "Деррига таржамаш",
+ "translate-language": "Мотт",
+ "translate-mgs-column-language": "Мотт",
+ "translate-documentation-language": "Хоам бара документаци",
+ "translate-searchprofile": "Таржамаш",
+ "translate-msggroupselector-search-all": "Деррига",
+ "tux-tab-all": "Деррига",
+ "tux-editor-message-tools-translations": "Деррига таржамаш"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/io.json b/www/wiki/extensions/Translate/i18n/core/io.json
index b5fa3ba2..f7152651 100644
--- a/www/wiki/extensions/Translate/i18n/core/io.json
+++ b/www/wiki/extensions/Translate/i18n/core/io.json
@@ -2,33 +2,124 @@
"@metadata": {
"authors": [
"Malafaya",
- "Wyvernoid"
+ "Wyvernoid",
+ "Lakaoso",
+ "Joao Xavier"
]
},
"translate": "Traduko",
+ "translate-taction-lstats": "Linguala statistiki",
+ "translate-taction-mstats": "Statistiki pri grupi di mesaji",
+ "translate-page-no-such-language": "La linguo selektita esas nevalida.",
+ "translate-page-disabled": "Tradukuri ad ica linguo en ica grupo ne permisesas.\nMotivo:\n\n<em>$1</em>",
"translate-page-group": "Grupo",
"translate-page-language": "Linguo",
"translate-page-limit": "Limito",
+ "translate-submit": "Serchez",
"translate-next": "Sequanta pagino",
"translate-prev": "Antea pagino",
+ "translate-page-description-hasoptional": "Ca mesajo-grupo kontenas fakultativa mesaji.\nFakultativa mesaji mustas tradukesar nur se vua linguo havas specala bezoni, exemple ne uzar intervalo inter la vorti, o transliterizar propra nomi. $1",
"translate-page-edit": "redaktar",
+ "translate-edit-definition": "Defino di la mesajo",
"translate-edit-contribute": "kontributez",
- "translate-edit-information": "Informo pri mesajo \"$2\" ($1)",
- "translate-edit-in-other-languages": "Mesajo \"$1\" en altra lingui",
+ "translate-edit-no-information": "<em>Ica mesajo ne havas dokumentigo.\nSe vu savas ube o quale ica mesajo uzesas, vu povas helpar altra tradukuri, per la kreado di dokumentigo pri ica mesajo.</em>",
+ "translate-edit-information": "Informo pri mesajo ($1)",
+ "translate-edit-in-other-languages": "Mesajo en altra lingui",
+ "translate-edit-warnings": "Avizi pri nekompleta tradukuri",
+ "translate-magic-submit": "Serchez",
"translate-magic-cm-current": "Aktuala",
"translate-magic-cm-comment": "Komento:",
"translate-magic-cm-save": "Registragar",
"translate-magic-namespace": "Nomi di la nomari",
+ "translate-magic-notsaved": "Vua redakto ne konservesis!",
+ "translate-checks-balance": "Existas neegala quanto di {{PLURAL:$2|parentezo|parentezi}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-pref-nonewsletter": "Ne sendez \"newsletters\" a me per e-posto",
+ "translate-pref-editassistlang-help": "Listo pri kodexo di lingui separata per komo (,).\nLa tradukuro di ula mesajo en ica lingui montresas dum ke vu tradukas.\nLa listo 'default' pri lingui dependas de vua propra linguo.",
+ "translate-pref-editassistlang-bad": "Linguala kodexo nevalida che la listo:\n<nowiki>$1</nowiki>.",
"translate-rc-translation-filter-only": "Montrez nur tradukuri",
"translate-stats-edits": "Editi",
"translate-stats-users": "Tradukisti",
+ "translate-statsf-scale": "Tempo-skalo:",
+ "translate-statsf-scale-months": "Monati",
+ "translate-statsf-scale-weeks": "Semani",
"translate-statsf-scale-days": "Dii",
"translate-statsf-scale-hours": "Hori",
"translate-statsf-submit": "Previdar",
"translate-sidebar-alltrans": "En altra lingui",
"translations": "Omna tradukuri",
+ "translations-summary": "Skribez la titulo di ula mesajo adinfre, por montrar omna tradukuri disponebla.",
+ "translate-translations-none": "Nula tradukuro existas por \"$1\"",
+ "translate-translations-count": "Trovita {{PLURAL:$1|1 tradukuro|$1 tradukuri}}.",
+ "translate-translations-fieldset-title": "Mesajo",
"translate-translations-messagename": "Nomo:",
+ "languagestats": "Linguala statistiki",
+ "languagestats-summary": "Ica pagino montras statistiki pri tradukuri de omna mesajo-grupi por ula linguo specifika.",
+ "languagestats-stats-for": "Statistiki pri tradukuro $1 ($2).",
+ "languagestats-recenttranslations": "recenta tradukuri",
+ "translate-langstats-expand": "Montrez",
+ "translate-langstats-expandall": "expansar omna",
+ "translate-langstats-collapseall": "rekoliar omna",
+ "translate-language-code": "Linguala kodexo",
+ "translate-language-code-field-name": "Linguala kodexo:",
+ "translate-suppress-complete": "Supresar vidado dil grupi di mesaji komplete tradukita",
+ "translate-ls-noempty": "Supresar de la vidado la grupi di mesaji komplete sen tradukuro",
"translate-language": "Linguo",
"translate-total": "Mesaji",
- "translate-save": "Registragar ($1)"
+ "translate-percentage-fuzzy": "Sen aktualigo",
+ "translate-languagestats-overall": "Omna grupi di mesaji kune",
+ "translate-ls-submit": "Montrez statistiki",
+ "translate-ls-column-group": "Grupo di mesaji",
+ "translate-mgs-pagename": "Statistiki pri la grupo di mesaji",
+ "translate-mgs-fieldset": "Montrez preferaji",
+ "translate-mgs-group": "Grupo di mesaji:",
+ "supportedlanguages": "Suportita lingui",
+ "supportedlanguages-summary": "Ica pagino montras listo pri omna lingui suportida da {{SITENAME}}, kune la nomi di la tradukeri qui verkas en singla de la lingui.\nLa nomo dil tradukero videsas tante plu granda kam la quanto di redakti quin ilu facabas.\nLa koloro dil substrekizo indikas quan recenta esas la verko dil tradukero hike.",
+ "supportedlanguages-colorlegend": "Skalo di kolori: Lasta modifikuri dum la $1 dii.",
+ "supportedlanguages-recenttranslations": "recenta tradukuri",
+ "supportedlanguages-count": "Entote $1 {{PLURAL:$1|linguo|lingui}}.",
+ "translate-save": "Registragar ($1)",
+ "managemessagegroups": "Administrado di mesajo-grupi",
+ "translate-smg-nochanges": "Existas nula modifiki por procedar.",
+ "translate-smg-left": "Kontenajo di la mesajo en la Wiki",
+ "translate-import-err-stale-group": "Ne existas la mesajo-grupo a quo ica arkivo apartenas.",
+ "translate-js-skip": "Saltez a la sequanta",
+ "translate-js-support": "Questionar",
+ "translate-documentation-language": "Dokumentado pri la mesajo",
+ "translate-searchprofile": "Tradukuri",
+ "translate-searchprofile-tooltip": "Serchez de omna tradukuri",
+ "translate-dynagroup-recent-label": "recenta tradukuri",
+ "translate-dynagroup-recent-desc": "Ica grupo di mesaji montras omna recenta tradukuri ad ica linguo.\nTo esas utila precipue por la revizo-taski.",
+ "translate-dynagroup-additions-label": "Recenta adjuntaji",
+ "translate-dynagroup-additions-desc": "Ica mesajo-grupo montras ambe la nova e la modifikita mesaji.",
+ "translate-msggroupselector-projects": "Grupo di mesaji",
+ "translate-msggroupselector-search-all": "Omni",
+ "tux-tab-all": "Omna",
+ "tux-tab-untranslated": "Ne tradukita",
+ "tux-tab-outdated": "Sen aktualigo",
+ "tux-tab-translated": "Tradukita",
+ "tux-status-fuzzy": "Sen aktualigo",
+ "tux-editor-placeholder": "Vua tradukuro",
+ "tux-editor-editsummary-placeholder": "Rezumo fakultativa",
+ "tux-editor-paste-original-button-label": "Kopiez l'originala texto",
+ "tux-editor-discard-changes-button-label": "Eliminar modifikuri",
+ "tux-editor-save-button-label": "Sparez la tradukuro",
+ "tux-editor-skip-button-label": "Saltez a la sequanta",
+ "tux-editor-shortcut-info": "Kliktez \"$1\" por konservar, o \"$2\" por saltar a la sequanta mesajo, o \"$4\" por furnisar rezumo, o \"$3\" por altra plu kurta voyi tra la klavaro.",
+ "tux-editor-edit-desc": "Redaktar dokumentigo",
+ "tux-editor-suggestions-title": "Sugesti",
+ "tux-editor-need-more-help": "Ka vu bezonas plusa helpo?",
+ "tux-editor-ask-help": "Demandez plusa informi",
+ "tux-editor-save-failed": "Faliis pri konservar la tradukuro: $1",
+ "tux-editor-message-desc-more": "Montrez pluse",
+ "tux-editor-message-desc-less": "Montrez mine",
+ "tux-editor-clear-translated": "Celar facita tradukuri",
+ "tux-editor-outdated-warning": "Ica tradukuro posible esas obsoleta.",
+ "tux-editor-outdated-warning-diff-link": "Montrez diferi",
+ "tux-editor-doc-editor-cancel": "Anular",
+ "tux-empty-list-other": "Nulo por tradukar",
+ "tux-empty-list-other-action": "Revizar tradukuri",
+ "tux-empty-list-other-link": "Montrez omna mesaji",
+ "tux-editor-message-tools-show-editor": "Montrar en la redakto-buxo dil Wiki",
+ "tux-editor-message-tools-translations": "Omna tradukuri",
+ "tux-editor-message-tools-linktothis": "Ligilo ad ica mesajo"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/is.json b/www/wiki/extensions/Translate/i18n/core/is.json
index ad05f766..259d808d 100644
--- a/www/wiki/extensions/Translate/i18n/core/is.json
+++ b/www/wiki/extensions/Translate/i18n/core/is.json
@@ -10,12 +10,9 @@
]
},
"translate": "Þýða",
+ "translate-extensionname": "Þýða",
"translate-desc": "[[Special:Translate|Kerfissíða]] til að þýða MediaWiki og önnur verkefni",
- "translate-taskui-view": "Sýna öll skilaboð",
- "translate-taskui-untranslated": "Sýna óþýdd skilaboð",
- "translate-taskui-optional": "Sýna valfrjáls skilaboð",
- "translate-taskui-acceptqueue": "Aðeins skilaboð sem ég get merkt sem yfirfarin",
- "translate-taskui-reviewall": "Yfirfara allar þýðingar",
+ "translate-taskui-export-to-file": "Flytja út á innbyggðu sniði",
"translate-taction-translate": "Þýða",
"translate-taction-proofread": "Yfirferð",
"translate-taction-lstats": "Tölfræði tungumáls",
@@ -29,25 +26,25 @@
"translate-page-group": "Hópur",
"translate-page-language": "Tungumál",
"translate-page-limit": "Takmark",
- "translate-page-limit-option": "$1 {{PLURAL:$1|melding|meldingar}} á hverri síðu",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|streng|strengi}} á hverri síðu",
"translate-submit": "Sækja",
"translate-page-navigation-legend": "Flakk",
- "translate-page-showing": "Sýni meldingar frá $1 til $2 af $3.",
- "translate-page-showing-all": "Sýni $1 {{PLURAL:$1|melding|meldingar}}.",
+ "translate-page-showing": "Sýni strengi frá $1 til $2 af $3.",
+ "translate-page-showing-all": "Sýni $1 {{PLURAL:$1|streng|strengi}}.",
+ "translate-page-showing-none": "Engar meldingar til að sýna.",
"translate-next": "Næsta síða",
"translate-prev": "Fyrri síða",
"translate-page-description-legend": "Upplýsingar um hópinn",
"translate-page-description-hasoptional": "Þessi þýðingahópur inniheldur valfrjálsar þýðingastrengi.\nValfrjálsa þýðingastrengi ætti aðeins að þýða þegar tungumálið hefur sérstakar kröfur\neins og varðandi enga notkun á bilum eða umritun á nöfnum. $1",
"translate-page-description-hasoptional-open": "Sýna valfrjáls skilaboð",
"translate-page-edit": "breyta",
- "translate-ext-url": "<hr />Vefsíða: $1",
"translate-optional": "(valfrjálst)",
"translate-ignored": "(hunsað)",
"translate-edit-title": "Breyta \"$1\"",
"translate-edit-definition": "Útskýring á meldingu",
"translate-edit-translation": "Þýðing",
"translate-edit-contribute": "breyta",
- "translate-edit-no-information": "<em>Þessi melding hefur enga skjölun.\nEf þú veist hvar eða hvernig meldingin er notuð getur þú hjálpað öðrum þýðendum með því að bæta skjölun við hana.</em>",
+ "translate-edit-no-information": "<em>Þessi melding er ekki með neinar leiðbeiningar.\nEf þú veist hvar eða hvernig meldingin er notuð getur þú hjálpað öðrum þýðendum með því að bæta ábendingum við hana.</em>",
"translate-edit-information": "Upplýsingar um þessa meldingu ($1)",
"translate-edit-in-other-languages": "Meldingin á öðrum tungumálum",
"translate-edit-warnings": "Viðvaranir vegna ókláraðra þýðinga",
@@ -56,8 +53,12 @@
"translate-use-suggestion": "Skipta núverandi þýðingu út fyrir þessa uppástungu.",
"translate-edit-nopermission": "Þú þarft þýðenda réttindi til að þýða skilaboð.",
"translate-edit-askpermission": "Fá réttindi",
+ "exporttranslations": "Flytja út þýðingar",
+ "translate-export-form-format": "Snið",
+ "translate-magic-module": "Eining:",
"translate-magic-submit": "Sækja",
"translate-magic-cm-export": "Flytja",
+ "translate-magic-nothing-to-export": "Það er ekkert til að flytja út.",
"translate-magic-cm-to-be": "Verðandi",
"translate-magic-cm-current": "Núverandi",
"translate-magic-cm-original": "Upprunalega",
@@ -88,7 +89,14 @@
"right-translate": "Breyta með þýðingaviðmótinu",
"right-translate-manage": "Stjórna þýðingahópum",
"action-translate-manage": "stjórna þýðingahópum",
+ "right-translate-import": "Flytja inn utanaðkomandi þýðingar",
+ "action-translate-import": "flytja inn utanaðkomandi þýðingar",
"right-translate-messagereview": "Yfirfara þýðingar",
+ "action-translate-messagereview": "yfirfara þýðingar",
+ "translate-rcfilters-translations": "Þýðingar",
+ "translate-rcfilters-translations-only-label": "Þýðingar",
+ "translate-rcfilters-translations-filter-label": "Ekki þýðingar",
+ "translate-rcfilters-translations-filter-desc": "Allar breytingar sem ekki eru þýðingar.",
"translate-rc-translation-filter": "Sía þýðingar:",
"translate-rc-translation-filter-no": "Engin síun",
"translate-rc-translation-filter-only": "Sýna eingöngu þýðingar",
@@ -105,6 +113,7 @@
"translate-statsf-width": "Breidd í dílum:",
"translate-statsf-height": "Hæð í dílum:",
"translate-statsf-start": "Upphafsdagur:",
+ "translate-statsf-scale": "Nákvæmni:",
"translate-statsf-scale-months": "Mánuðir",
"translate-statsf-scale-weeks": "Vikur",
"translate-statsf-scale-days": "Dagar",
@@ -114,6 +123,7 @@
"translate-statsf-count-users": "Virkir þýðendur",
"translate-statsf-count-registrations": "Nýjir notendur",
"translate-statsf-count-reviews": "Yfirferðir á þýðingum",
+ "translate-statsf-count-reviewers": "Ritstjórar",
"translate-statsf-language": "Listi yfir tungumálakóða, aðskildir með kommu:",
"translate-statsf-group": "Listi yfir hópa kóða, aðskildir með kommu:",
"translate-statsf-submit": "Forskoða",
@@ -128,12 +138,13 @@
"translate-translations-messagename": "Nafn:",
"translate-translations-project": "Verkefni:",
"translate-translations-including-no-param": "Vinsamlegast tilgreindu gildan lykil þýðingastrengs í viðfangi undirsíðunnar.",
+ "translate-translations-history-short": "f",
"languagestats": "Tölfræði tungumáls",
"languagestats-summary": "Þessi síða sýnir tölfræði þýðinga í öllum þýðingahópum fyrir tungumálið.",
"messagegroupstats-summary": "Þessi síða sýnir tölfræði þýðingahópa.",
"languagestats-stats-for": "Tölfræði þýðinga fyrir $1 ($2).",
"languagestats-recenttranslations": "nýlegar þýðingar",
- "translate-langstats-incomplete": "Sumar talnana í tölfræðinni eru ónákvæmar. Vinsamlegast endurhladdu síðuna til að fá nákvæmari tölur.",
+ "translate-langstats-incomplete": "Sum tölfræðin á síðunni er ónákvæm. Lestu síðuna inn aftur til að fá nákvæmari tölur.",
"translate-langstats-expand": "sýna",
"translate-langstats-collapse": "fela",
"translate-langstats-expandall": "sýna alla",
@@ -143,21 +154,22 @@
"translate-suppress-complete": "Fela fullþýdda þýðingahópa",
"translate-ls-noempty": "Fela óþýdda þýðingahópa",
"translate-language": "Tungumál",
- "translate-total": "Meldingar",
- "translate-untranslated": "Óþýddar",
+ "translate-total": "Textastrengir",
+ "translate-untranslated": "Óþýtt",
"translate-percentage-complete": "Lokið",
"translate-percentage-fuzzy": "Úrelt",
+ "translate-percentage-proofread": "Yfirfarið",
"translate-languagestats-overall": "Allir þýðingahópar saman",
- "translate-ls-submit": "Sýna tölfræði",
+ "translate-ls-submit": "Birta tölfræði",
"translate-ls-column-group": "Þýðingahópur",
"translate-mgs-pagename": "Tölfræði þýðingahópa",
"translate-mgs-fieldset": "Birtinga stillingar",
"translate-mgs-group": "Þýðingahópur:",
"translate-mgs-nocomplete": "Ekki sýna tungumál sem hafa lokið þýðingu",
"translate-mgs-noempty": "Ekki sýna tungumál sem hafa engar þýðingar",
- "translate-mgs-submit": "Sýna tölfræði",
+ "translate-mgs-submit": "Birta tölfræði",
"translate-mgs-column-language": "Tungumál",
- "translate-mgs-totals": "Öll tungumál saman",
+ "translate-mgs-totals": "Öll $1 {{PLURAL:$1|tungumál|tungumálin}} saman",
"translate-mgs-invalid-group": "Tilgreindi hópurinn $1 er ekki til.",
"translate-mgs-nothing": "Ekkert til að sýna fyrir umbeðna tölfræði.",
"supportedlanguages": "Studd tungumál",
@@ -173,14 +185,20 @@
"translate-smg-notallowed": "Þú hefur ekki leyfi til að framkvæma þessa aðgerð.",
"translate-smg-nochanges": "Það eru engar breytingar til að vinna úr.",
"translate-smg-submit": "Senda breytingar til vinnslu",
+ "translate-manage-import-new": "Ný skilaboð $1",
+ "translate-manage-action-import": "Flytja inn",
+ "translate-manage-action-ignore": "Hunsa",
+ "translate-manage-submit": "Keyra",
"translate-manage-import-ok": "Innflutt: $1",
- "importtranslations": "flytja inn þýðingar",
+ "translate-manage-import-done": "Innflutningi lokið",
+ "importtranslations": "Flytja inn þýðingar",
+ "translate-import-from-local": "Senda inn skrá af tölvunni:",
+ "translate-import-load": "Hlaða inn skrá",
+ "translate-import-err-ul-failed": "Sending skrár mistókst",
"translate-js-summary": "Ágrip:",
"translate-js-save": "Vista",
"translate-js-next": "Vista og opna næstu",
- "translate-js-nonext": "Þetta voru síðustu skilaboðin á síðunni",
"translate-js-skip": "Sleppa og fara yfir á næsta.",
- "translate-js-save-failed": "Vistun mistókst. Vinsamlegast tilkynntu villuna.",
"translate-js-history": "Breytingaskrá þýðingar",
"translate-js-support": "Spyrja spurningar",
"translate-js-support-title": "Óskaðu eftir hjálp ef það eru ekki nægar upplýsingar til að þýða þessi skilaboð rétt.",
@@ -188,25 +206,17 @@
"translate-gs-pos": "Staðs.",
"translate-gs-code": "Kóði",
"translate-gs-continent": "Heimsálfa",
+ "translate-gs-score": "Stig",
+ "translate-gs-multiple": "Margtyngt",
+ "translate-gs-count": "Fjöldi",
+ "translate-gs-total": "Samtals",
"translate-documentation-language": "Leiðbeiningar þýðingastrengs",
"translate-searchprofile": "Þýðingar",
"translate-searchprofile-tooltip": "Leita í öllum þýðingum",
"translate-search-languagefilter": "Sía eftir tungumáli:",
"translate-search-nofilter": "Engin sía",
- "translate-messagereview-submit": "Merkja sem yfirfarna",
- "translate-messagereview-progress": "Merki sem yfirfarna...",
- "translate-messagereview-failure": "Mistókst að merkja sem yfirfarið: $1",
- "translate-messagereview-done": "Yfirfarið",
- "translate-messagereview-reviews": "Yfirfarið af $1 {{PLURAL:$1|notanda|notendum}}",
- "api-error-invalidrevision": "Þýðingin fannst ekki.",
- "api-error-unknownmessage": "Skilaboðin fundust ekki",
- "api-error-fuzzymessage": "Þýðingin er merkt sem úreld",
- "api-error-owntranslation": "Þú getur ekki merkt eigin þýðingar sem yfirfarnar",
- "translate-messagereview-no-fuzzy": "Ekki er hægt að merkja úreldar þýðingar sem yfirfarnar",
- "translate-messagereview-no-own": "Þú getur ekki merkt eigin þýðingar sem yfirfarnar",
- "translate-messagereview-doit": "Merkja þessa þýðingu sem yfirfarna.",
- "log-name-translationreview": "Aðgerðarskrá þýðinga yfirferðar",
- "log-description-translationreview": "Aðgerðarskrá yfir allar yfirferðir á þýðingum og þýðingahópum.",
+ "log-name-translationreview": "Aðtvikaskrá yfirferðar þýðinga",
+ "log-description-translationreview": "Atvikaskrá yfir allar yfirferðir á þýðingum og þýðingahópum.",
"logentry-translationreview-message": "$1 {{GENDER:$2|yfirfór}} þýðinguna $3",
"logentry-translationreview-group": "$1 {{GENDER:$2|breytti}} stöðu $4 þýðinga af $3 frá $6 til $7",
"group-translate-sandboxed": "Ósamþykktir þýðendur",
@@ -215,7 +225,6 @@
"translate-workflow-set-doing": "Set...",
"translate-stats-workflow": "Staða",
"translate-dynagroup-recent-label": "Nýlegar þýðingar",
- "translate-gethelp": "Hjálp",
"translate-msggroupselector-projects": "Þýðingahópur",
"translate-msggroupselector-search-placeholder": "Leita eftir hópum",
"translate-msggroupselector-search-all": "Allt",
@@ -234,20 +243,23 @@
"tux-status-translated": "Þýdd",
"tux-status-saving": "Vista...",
"tux-status-unsaved": "Óvistuð",
+ "tux-save-unknown-error": "Óþekkt villa kom upp.",
"tux-editor-placeholder": "Þín þýðing",
+ "tux-editor-editsummary-placeholder": "Möguleg samantekt",
"tux-editor-paste-original-button-label": "Líma upprunalegan texta",
"tux-editor-discard-changes-button-label": "Hunsa breytingar",
"tux-editor-save-button-label": "Vista þýðingu",
"tux-editor-skip-button-label": "Sleppa og yfir á næstu",
"tux-editor-cancel-button-label": "Hætta við",
"tux-editor-confirm-button-label": "Staðfesta þýðingu",
- "tux-editor-shortcut-info": "Ýttu á „$1” til að vista, „$2” til að sleppa yfir á næstu eða „$3” fyrir aðrar flýtileiðir.",
+ "tux-editor-proofread-button-label": "Merkja sem yfirfarið",
+ "tux-editor-shortcut-info": "Ýttu á „$1” til að vista, „$2” til að sleppa yfir á næstu, „$4” til að gefa skýringu eða eða „$3” fyrir aðrar flýtileiðir.",
"tux-editor-edit-desc": "Breyta leiðbeiningum",
"tux-editor-add-desc": "Bæta við leiðbeiningum",
"tux-editor-suggestions-title": "Uppástungur",
"tux-editor-in-other-languages": "Á öðrum tungumálum",
"tux-editor-need-more-help": "Þarftu meiri hjálp?",
- "tux-editor-ask-help": "Spurja um frekari upplýsingar",
+ "tux-editor-ask-help": "Spyrja um frekari upplýsingar",
"tux-editor-tm-match": "$1% samsvörun",
"tux-warnings-more": "{{PLURAL:$1|$1 meira}}",
"tux-warnings-hide": "fela",
@@ -287,6 +299,10 @@
"tux-empty-no-outdated-messages": "Engin úreld skilaboð",
"tux-empty-nothing-to-proofread": "Ekkert til að yfirfara",
"tux-empty-you-can-help-providing": "Þú getur hjálpað til með nýjar þýðingar",
+ "tux-empty-list-other": "Ekkert til að þýða",
+ "tux-empty-list-other-guide": "Þú getur hjálpað til með því að yfirfara fyrirliggjandi þýðingar",
+ "tux-empty-list-other-action": "Yfirfara þýðingar",
+ "tux-empty-list-other-link": "Birta öll skilaboð",
"tux-editor-close-tooltip": "Loka",
"tux-editor-expand-tooltip": "Stækka",
"tux-editor-collapse-tooltip": "Fella saman",
@@ -297,5 +313,6 @@
"translate-search-more-languages-info": "$1 annað {{PLURAL:$1|tungumál}}",
"translate-statsbar-tooltip": "$1% þýtt, $2% yfirfarið",
"translate-statsbar-tooltip-with-fuzzy": "$1% þýtt, $2% yfirfarið, $3% úrelt",
- "translate-search-more-groups-info": "$1 {{PLURAL:$1|hópur|hópar}} í viðbót"
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|hópur|hópar}} í viðbót",
+ "tux-nojs": "Þetta verkfæri virkar ekki ef slökkt er á JavaScript. JavaScript er óvirkt, það virkaði ekki, eða að þessi vafri er ekki studdur."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/it.json b/www/wiki/extensions/Translate/i18n/core/it.json
index 673e7db8..68fc6c6b 100644
--- a/www/wiki/extensions/Translate/i18n/core/it.json
+++ b/www/wiki/extensions/Translate/i18n/core/it.json
@@ -16,16 +16,15 @@
"Pietrodn",
"Shirayuki",
"VittGam",
- "Vituzzu"
+ "Vituzzu",
+ "Matteocng",
+ "Anto",
+ "Fringio"
]
},
"translate": "Traduzione",
+ "translate-extensionname": "Traduci",
"translate-desc": "[[Special:Translate|Pagina speciale]] per tradurre MediaWiki e non solo",
- "translate-taskui-view": "Mostra tutti i messaggi",
- "translate-taskui-untranslated": "Mostra solo i messaggi non tradotti",
- "translate-taskui-optional": "Mostra i messaggi opzionali",
- "translate-taskui-acceptqueue": "Solo i messaggi che posso revisionare",
- "translate-taskui-reviewall": "Revisiona tutte le traduzioni",
"translate-taskui-export-to-file": "Esporta nel formato nativo",
"translate-taskui-export-as-po": "Esporta per la traduzione off-line",
"translate-taction-translate": "Traduci",
@@ -37,7 +36,6 @@
"translate-page-no-such-language": "La lingua specificata non è valida.",
"translate-page-no-such-group": "Il gruppo specificato non è valido.",
"translate-page-disabled": "Le traduzioni in questa lingua per questo gruppo sono state disabilitate. Motivo:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 è la lingua di origine di questa pagina.",
"translate-language-disabled": "Le traduzioni verso questa lingua sono disabilitate.",
"translate-page-settings-legend": "Impostazioni",
"translate-page-group": "Gruppo",
@@ -48,13 +46,14 @@
"translate-page-navigation-legend": "Navigazione",
"translate-page-showing": "Mostrati i messaggi da $1 a $2 di $3.",
"translate-page-showing-all": "{{PLURAL:$1|Mostrato un messaggio|Mostrati $1 messaggi}}.",
+ "translate-page-showing-none": "Nessun messaggio da mostrare.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "Pagina successiva",
"translate-prev": "Pagina precedente",
"translate-page-description-legend": "Informazioni sul gruppo",
"translate-page-description-hasoptional": "Questo gruppo di messaggi contiene dei messaggi opzionali.\nI messaggi opzionali dovrebbero essere tradotti solo quando la lingua ha dei requisiti speciali come il mancato utilizzo degli spazi o la traslitterazione dei nomi propri. $1",
"translate-page-description-hasoptional-open": "Mostra i messaggi opzionali.",
"translate-page-edit": "modifica",
- "translate-ext-url": "<hr />Sito web: $1",
"translate-optional": "(opzionale)",
"translate-ignored": "(ignorato)",
"translate-edit-title": "Modifica \"$1\"",
@@ -70,6 +69,11 @@
"translate-use-suggestion": "Sostituisci la traduzione presente con questo suggerimento.",
"translate-edit-nopermission": "Hai bisogno dei diritti di traduzione per tradurre i messaggi.",
"translate-edit-askpermission": "Ottieni autorizzazione",
+ "exporttranslations": "Esporta traduzioni",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Specifica un formato valido.",
+ "translate-export-not-supported": "L'esportazione delle traduzioni non è supportata.",
+ "translate-export-format-notsupported": "Il formato di esportazione specificato non è supportato dal gruppo messaggi.",
"translate-magic-pagename": "Traduzione estesa di MediaWiki",
"translate-magic-help": "Puoi tradurre gli alias delle pagine speciali, le parole magiche e i nomi dei namespace.\n\nGli alias delle pagine speciali e le parole magiche possono avere più traduzioni.\nLe traduzioni sono separate da una virgola (,).\nI namespace possono avere solo una traduzione.\n\nTradurre il namespace di discussione delle pagine di progetto <code>$1 talk</code> può essere complicato. <code>$1</code> viene sostituito con il nome del sito (per esempio <code>{{ns:project_talk}}</code>).\nSe non è possibile formare un'espressione valida nella tua lingua senza cambiare il nome del sito, per favore contatta il [[Support]].\n\nDevi essere un traduttore per salvare le modifiche.\nLe modifiche non vengono salvate finché non clicchi sul pulsante \"Salva\" sotto.",
"translate-magic-module": "Modulo:",
@@ -91,7 +95,7 @@
"translate-magic-saved": "Le modifiche sono state salvate.",
"translate-checks-parameters": "{{PLURAL:$2|Il seguente parametro non è stato usato|I seguenti parametri non sono stati usati}}: <strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Il seguente parametro è sconosciuto|I seguenti parametri sono sconosciuti}}:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-balance": "C'è un numero di {{PLURAL:$2|parentesi|parentesi}} dispari: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-balance": "C'è un numero di {{PLURAL:$2|parentesi}} ineguale: <strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "{{PLURAL:$2|Il seguente collegamento è problematico|I seguenti $2 collegamenti sono problematici}}: <strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "{{PLURAL:$2|Il seguente collegamento è mancante|I seguenti $2 collegamenti sono mancanti}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Sostituire {{PLURAL:$2|il marcatore seguente|i marcatori seguenti}} con quelli corretti: <strong><nowiki>$1</nowiki></strong>",
@@ -115,7 +119,16 @@
"right-translate-import": "Importa traduzioni non in linea",
"action-translate-import": "importare le traduzioni non in linea",
"right-translate-messagereview": "Revisiona traduzioni",
+ "action-translate-messagereview": "revisionare traduzioni",
"right-translate-groupreview": "Cambia lo stato del processo di traduzione dei gruppi di messaggi",
+ "action-translate-groupreview": "cambiare lo stato del processo di traduzione dei gruppi di messaggi",
+ "translate-rcfilters-translations": "Traduzioni",
+ "translate-rcfilters-translations-only-label": "Traduzioni",
+ "translate-rcfilters-translations-only-desc": "Modifiche alle pagine tradotte.",
+ "translate-rcfilters-translations-filter-label": "Non traduzioni",
+ "translate-rcfilters-translations-filter-desc": "Tutte le modifiche che non sono traduzioni.",
+ "translate-rcfilters-translations-site-label": "Messaggi di sistema",
+ "translate-rcfilters-translations-site-desc": "Personalizzazione di messaggi di sistema nel namespace MediaWiki.",
"translate-rc-translation-filter": "Filtra le traduzioni:",
"translate-rc-translation-filter-no": "Non fare niente",
"translate-rc-translation-filter-only": "Mostra solo le traduzioni",
@@ -188,16 +201,20 @@
"translate-mgs-noempty": "Non visualizzare lingue che non hanno traduzioni",
"translate-mgs-submit": "Mostra statistiche",
"translate-mgs-column-language": "Lingua",
- "translate-mgs-totals": "Tutte le lingue insieme",
+ "translate-mgs-totals": "Tutte le $1 {{PLURAL:$1|lingua|lingue}} insieme",
"translate-mgs-invalid-group": "Il gruppo indicato $1 non esiste.",
"translate-mgs-nothing": "Nulla da mostrare per le statistiche richieste.",
"supportedlanguages": "Lingue mantenute",
"supportedlanguages-summary": "Questa pagina mostra un elenco di tutte le lingue mantenute da {{SITENAME}}, insieme ai nomi dei traduttori che hanno lavorato su quella lingua. Il nome di un traduttore appare di dimensioni maggiori in proporzione al numero di modifiche che ha apportato, mentre il colore della sottolineatura indica quanto tempo è passato dalla sua ultima attività.",
"supportedlanguages-colorlegend": "Legenda dei colori: ultima traduzione $1 giorni fa.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite non è supportato",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traduttore|Traduttrice}}|Traduttori}}: $1",
"supportedlanguages-recenttranslations": "traduzioni recenti",
"supportedlanguages-count": "$1 {{PLURAL:$1|lingua|lingue}} in totale.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|modifica|modifiche}} - ultima modifica $3 {{PLURAL:$3|giorno|giorni}} fa",
+ "abusefilter-edit-builder-vars-translate-source-text": "Testo di origine di un'unità di traduzione",
"translate-save": "Salva ($1)",
"translate-jssti-add": "Aggiungi all'elenco",
"managemessagegroups": "Gestione del gruppo di messaggi",
@@ -238,9 +255,7 @@
"translate-js-summary": "Oggetto:",
"translate-js-save": "Salva",
"translate-js-next": "Salva e passa al successivo",
- "translate-js-nonext": "Questo era l'ultimo messaggio in questa pagina.",
"translate-js-skip": "Passa al successivo",
- "translate-js-save-failed": "Salvataggio non riuscito. Si prega di segnalare l'errore.",
"translate-js-history": "Cronologia traduzione",
"translate-js-support": "Fai una domanda",
"translate-js-support-title": "Richiesta d'assistenza nel caso non si trovino sufficienti informazioni per tradurre questo messaggio.",
@@ -257,21 +272,9 @@
"translate-documentation-language": "Documentazione del messaggio",
"translate-searchprofile": "Traduzioni",
"translate-searchprofile-tooltip": "Cerca in tutte le traduzioni",
+ "translate-searchprofile-note": "Opzioni di ricerca ulteriori disponibili con la [$1 ricerca di traduzioni].",
"translate-search-languagefilter": "Filtro per lingua",
"translate-search-nofilter": "Nessun filtraggio",
- "translate-messagereview-submit": "Contrassegna come revisionata",
- "translate-messagereview-progress": "Marcando come revisionata...",
- "translate-messagereview-failure": "Marcatura come revisionata non riuscita: $1",
- "translate-messagereview-done": "Revisionata",
- "translate-messagereview-reviews": "Revisionata da {{PLURAL:$1|un utente|$1 utenti}}",
- "translate-messagereview-reviewswithyou": "Revisionata da {{PLURAL:$1|te|$1 utenti, te compreso}}",
- "api-error-invalidrevision": "Traduzione non trovata",
- "api-error-unknownmessage": "Messaggio non trovato",
- "api-error-fuzzymessage": "La traduzione è segnata come da aggiornare",
- "api-error-owntranslation": "Non è possibile segnare le proprie traduzioni come revisionate",
- "translate-messagereview-no-fuzzy": "Le traduzioni da aggiornare non possono essere segnate come revisionate.",
- "translate-messagereview-no-own": "Non è possibile segnare le proprie traduzioni come revisionate.",
- "translate-messagereview-doit": "Accetta questa traduzione come revisionata.",
"log-name-translationreview": "Revisioni delle traduzioni",
"log-description-translationreview": "Registro di tutte le revisioni delle traduzioni e dei gruppi di messaggi.",
"logentry-translationreview-message": "$1 {{GENDER:$2|ha revisionato}} la traduzione di $3",
@@ -293,7 +296,6 @@
"translate-dynagroup-recent-desc": "Questo gruppo messaggi mostra tutte le ultime traduzioni in questa lingua.\nUtile per l'attività di revisione.",
"translate-dynagroup-additions-label": "Aggiunte recenti",
"translate-dynagroup-additions-desc": "Questo gruppo messaggi mostra i messaggi nuovi o modificati.",
- "translate-gethelp": "Aiuto",
"translate-msggroupselector-projects": "Gruppo di messaggi",
"translate-msggroupselector-search-placeholder": "Ricerca gruppi",
"translate-msggroupselector-search-all": "Tutti",
@@ -312,15 +314,17 @@
"tux-status-translated": "Tradotto",
"tux-status-saving": "Salvataggio...",
"tux-status-unsaved": "Non salvate",
+ "tux-save-unknown-error": "Si è verificato un errore sconosciuto.",
"tux-editor-placeholder": "La tua traduzione",
+ "tux-editor-editsummary-placeholder": "Oggetto facoltativo",
"tux-editor-paste-original-button-label": "Incolla il testo sorgente",
- "tux-editor-discard-changes-button-label": "Annulla modifiche",
+ "tux-editor-discard-changes-button-label": "Ignora modifiche",
"tux-editor-save-button-label": "Salva traduzione",
"tux-editor-skip-button-label": "Passa al successivo",
"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 \"$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",
@@ -375,9 +379,11 @@
"tux-editor-close-tooltip": "Chiudi",
"tux-editor-expand-tooltip": "Espandi",
"tux-editor-collapse-tooltip": "Comprimi",
+ "tux-editor-message-tools-show-editor": "Mostra nell'editor wiki",
"tux-editor-message-tools-history": "Cronologia",
"tux-editor-message-tools-delete": "Cancella",
"tux-editor-message-tools-translations": "Tutte le traduzioni",
+ "tux-editor-message-tools-linktothis": "Collegamenti a questo messaggio",
"tux-editor-loading": "Caricamento in corso...",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|altra lingua|altre lingue}}",
"translate-statsbar-tooltip": "$1% tradotti, $2% revisionati",
@@ -386,5 +392,5 @@
"translate-ulsdep-title": "Errore di configurazione",
"translate-ulsdep-body": "L'estensione Translate dipende dall'[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector estensione Universal Language Selector].",
"tux-session-expired": "Non hai effettuato l'accesso. Accedi in una scheda separata; o in alternativa copia la traduzione non salvata, accedi, ritorna in questa pagina e inserisci nuovamente la tua traduzione.",
- "tux-nojs": "Questa pagina richiede JavaScript."
+ "tux-nojs": "Questo strumento non funziona senza JavaScript. JavaScript potrebbe essere disattivato, non ha funzionato o questo browser non è supportato."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ja.json b/www/wiki/extensions/Translate/i18n/core/ja.json
index 876031c6..d33e55c8 100644
--- a/www/wiki/extensions/Translate/i18n/core/ja.json
+++ b/www/wiki/extensions/Translate/i18n/core/ja.json
@@ -18,17 +18,15 @@
"Rxy",
"Sujiniku",
"Otokoume",
- "2nd-player"
+ "2nd-player",
+ "Gminky",
+ "Omotecho",
+ "Afaz"
]
},
"translate": "翻訳",
"translate-extensionname": "翻訳",
"translate-desc": "MediaWiki やその他のものを翻訳するための[[Special:Translate|特別ページ]]",
- "translate-taskui-view": "全メッセージを表示",
- "translate-taskui-untranslated": "未翻訳メッセージを表示",
- "translate-taskui-optional": "省略可能なメッセージを表示",
- "translate-taskui-acceptqueue": "自分が査読できるメッセージのみ",
- "translate-taskui-reviewall": "すべての翻訳を査読",
"translate-taskui-export-to-file": "ネイティブ形式で書き出し",
"translate-taskui-export-as-po": "オフライン翻訳のために書き出し",
"translate-taction-translate": "翻訳",
@@ -40,7 +38,6 @@
"translate-page-no-such-language": "言語の指定が正しくありません。",
"translate-page-no-such-group": "群の指定が正しくありません。",
"translate-page-disabled": "この群では、この言語への翻訳は停止されています。\n理由:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1は、このページの元々の言語です。",
"translate-language-disabled": "この言語への翻訳は無効になっています。",
"translate-page-settings-legend": "設定",
"translate-page-group": "群",
@@ -51,6 +48,7 @@
"translate-page-navigation-legend": "ナビゲーション",
"translate-page-showing": "$3 件のメッセージのうち、$1 件目から $2 件目までを表示しています。",
"translate-page-showing-all": "$1 {{PLURAL:$1|件のメッセージ}}を表示しています。",
+ "translate-page-showing-none": "表示するメッセージがありません。",
"translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "次のページ",
"translate-prev": "前のページ",
@@ -58,7 +56,6 @@
"translate-page-description-hasoptional": "このメッセージ群には省略可能なメッセージがあります。\n省略可能なメッセージは、その言語で特別な必要性 (空白の除去、固有名詞の翻字など) がある場合のみ翻訳してください。$1",
"translate-page-description-hasoptional-open": "省略可能なメッセージを表示する。",
"translate-page-edit": "編集",
- "translate-ext-url": "<hr />ウェブサイト: $1",
"translate-optional": "(省略可能)",
"translate-ignored": "(翻訳無視)",
"translate-edit-title": "「$1」を編集",
@@ -74,6 +71,9 @@
"translate-use-suggestion": "この現在の翻訳を、この翻訳提案に置き換えます。",
"translate-edit-nopermission": "メッセージを翻訳する権限が必要です。",
"translate-edit-askpermission": "権限を取得",
+ "exporttranslations": "翻訳の書き出し",
+ "translate-export-form-format": "形式",
+ "translate-export-not-supported": "翻訳の書き出しはサポートされていません。",
"translate-magic-pagename": "拡張MediaWiki翻訳",
"translate-magic-help": "特別ページへのエイリアス、マジックワード、名前空間名を翻訳できます。\n\n特別ページへのエイリアスとマジックワードには複数の翻訳を当てられます。\n複数の翻訳がある場合はカンマ (,) で区切ってください。\n名前空間名には 1 つの翻訳のみを当てられます。\n\nプロジェクトのトーク名前空間 <code>$1 talk</code> の翻訳は複雑かもしれません。\n<code>$1</code> はプロジェクトのサイト名に置換されます (例: <code>{{ns:project_talk}}</code>)。\nあなたの言語において、サイト名の変更なしでは正しく表現できない場合は、[[Support]] にお問い合わせください。\n\nあなたが翻訳者であれば、変更を保存できます。\n下の保存ボタンをクリックするまで、変更内容は保存されません。",
"translate-magic-module": "モジュール:",
@@ -114,12 +114,22 @@
"translate-pref-editassistlang-help": "言語コードをカンマ区切りで列挙します。\n翻訳中に、これらの言語での翻訳が表示されます。\n既定の言語一覧は、自身の言語により変化します。",
"translate-pref-editassistlang-bad": "無効な言語コードを含んでいます:\n<nowiki>$1</nowiki>",
"right-translate": "翻訳用インターフェイスを使用して編集",
+ "action-translate": "翻訳用インターフェイスを使用した編集",
"right-translate-manage": "メッセージ群を管理",
"action-translate-manage": "メッセージ群の管理",
"right-translate-import": "オフラインでの翻訳を取り込み",
"action-translate-import": "オフラインでの翻訳の取り込み",
"right-translate-messagereview": "翻訳を査読",
+ "action-translate-messagereview": "翻訳を査読",
"right-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": "MediaWiki 名前空間のシステム メッセージのカスタマイズ。",
"translate-rc-translation-filter": "翻訳を絞り込み:",
"translate-rc-translation-filter-no": "絞り込まない",
"translate-rc-translation-filter-only": "翻訳のみ表示",
@@ -181,7 +191,8 @@
"translate-total": "メッセージ数",
"translate-untranslated": "未翻訳",
"translate-percentage-complete": "完了",
- "translate-percentage-fuzzy": "要修正",
+ "translate-percentage-fuzzy": "要更新",
+ "translate-percentage-proofread": "査読済",
"translate-languagestats-overall": "合計",
"translate-ls-submit": "統計を表示",
"translate-ls-column-group": "メッセージ群",
@@ -192,7 +203,7 @@
"translate-mgs-noempty": "翻訳が1つもない言語を表示しない",
"translate-mgs-submit": "統計を表示",
"translate-mgs-column-language": "言語",
- "translate-mgs-totals": "すべての言語",
+ "translate-mgs-totals": "全$1{{PLURAL:$1|言語}}",
"translate-mgs-invalid-group": "指定された群$1は存在しません。",
"translate-mgs-nothing": "要求された統計には表示するものがありません。",
"supportedlanguages": "サポートしている言語",
@@ -204,6 +215,7 @@
"supportedlanguages-recenttranslations": "最近の翻訳",
"supportedlanguages-count": "合計 $1 {{PLURAL:$1|言語}}",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|回の編集}}・$3 {{PLURAL:$3|日}}前に最終編集",
+ "abusefilter-edit-builder-vars-translate-source-text": "翻訳する単位の翻訳原文",
"translate-save": "保存 ($1)",
"translate-jssti-add": "追加",
"managemessagegroups": "メッセージ群の管理",
@@ -218,9 +230,9 @@
"translate-manage-import-new": "新しいメッセージ $1",
"translate-manage-import-deleted": "削除されたメッセージ $1",
"translate-manage-action-import": "取り込む",
- "translate-manage-action-conflict": "取り込んで要修正にする",
+ "translate-manage-action-conflict": "取り込んで要更新にする",
"translate-manage-action-ignore": "無視",
- "translate-manage-action-fuzzy": "翻訳を取り込んで要修正の印を付ける",
+ "translate-manage-action-fuzzy": "翻訳を取り込んで要更新の印を付ける",
"translate-manage-nochanges": "この群のメッセージの定義には変更はありません。",
"translate-manage-nochanges-other": "この言語が対応すべき変更はありませんでした。\n下のリンクをクリックするとメッセージ群の詳細画面に戻ります。",
"translate-manage-inconsistent": "リクエスト内で矛盾を検出しました。\n変更点を確認してから、再度試してください。\n詳細: $1",
@@ -244,9 +256,7 @@
"translate-js-summary": "要約:",
"translate-js-save": "保存",
"translate-js-next": "保存して次を開く",
- "translate-js-nonext": "このページの最後のメッセージに達しました。",
"translate-js-skip": "次へスキップ",
- "translate-js-save-failed": "保存に失敗しました。このエラーを報告してください。",
"translate-js-history": "翻訳履歴",
"translate-js-support": "サポートに質問",
"translate-js-support-title": "このメッセージを正しく翻訳するための情報が足りない場合は助けを求めてください。",
@@ -263,21 +273,9 @@
"translate-documentation-language": "メッセージについての説明文",
"translate-searchprofile": "訳文",
"translate-searchprofile-tooltip": "すべての翻訳から検索",
+ "translate-searchprofile-note": "より多くの検索設定は、[$1 翻訳検索]を通して利用することができます。",
"translate-search-languagefilter": "言語で絞り込み:",
"translate-search-nofilter": "すべて表示",
- "translate-messagereview-submit": "査読済にする",
- "translate-messagereview-progress": "査読済にしています...",
- "translate-messagereview-failure": "査読済にできませんでした: $1",
- "translate-messagereview-done": "査読済",
- "translate-messagereview-reviews": "{{PLURAL:$1|$1人の利用者}}が査読済",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|あなた|あなたを含む$1人の利用者}}が査読済",
- "api-error-invalidrevision": "翻訳が見つかりませんでした",
- "api-error-unknownmessage": "メッセージが見つかりませんでした",
- "api-error-fuzzymessage": "翻訳に要修正の印が付いています",
- "api-error-owntranslation": "自分の翻訳は査読済にできません",
- "translate-messagereview-no-fuzzy": "要修正の印が付いている翻訳は査読済にできません。",
- "translate-messagereview-no-own": "自分の翻訳は査読済にできません。",
- "translate-messagereview-doit": "この翻訳に査読済の印を付けます。",
"log-name-translationreview": "翻訳査読記録",
"log-description-translationreview": "翻訳とメッセージ群に対するすべての査読の記録",
"logentry-translationreview-message": "$1 が $3 の翻訳を{{GENDER:$2|査読}}",
@@ -299,26 +297,27 @@
"translate-dynagroup-recent-desc": "このメッセージ群ではこの言語への最近の翻訳をすべて表示します。\n査読作業に便利です。",
"translate-dynagroup-additions-label": "最近の追加",
"translate-dynagroup-additions-desc": "このメッセージ群では新たに追加または変更されたメッセージを表示します。",
- "translate-gethelp": "ヘルプ",
"translate-msggroupselector-projects": "メッセージ群",
- "translate-msggroupselector-search-placeholder": "検索するメッセージ群",
+ "translate-msggroupselector-search-placeholder": "メッセージ群内を検索",
"translate-msggroupselector-search-all": "すべて",
"translate-msggroupselector-search-recent": "最近のもの",
"translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|件の下位群}}を閲覧",
"tux-languageselector": "翻訳先",
"tux-tab-all": "すべて",
"tux-tab-untranslated": "未翻訳",
- "tux-tab-outdated": "要修正",
+ "tux-tab-outdated": "要更新",
"tux-tab-translated": "翻訳済",
"tux-tab-unproofread": "未査読",
"tux-edit": "編集",
"tux-status-optional": "省略可能",
- "tux-status-fuzzy": "要修正",
+ "tux-status-fuzzy": "要更新",
"tux-status-proofread": "査読済",
"tux-status-translated": "翻訳済",
"tux-status-saving": "保存中...",
"tux-status-unsaved": "未保存",
+ "tux-save-unknown-error": "不明なエラーが発生しました。",
"tux-editor-placeholder": "あなたの翻訳を入力",
+ "tux-editor-editsummary-placeholder": "要約 (省略可能)",
"tux-editor-paste-original-button-label": "原文を貼り付け",
"tux-editor-discard-changes-button-label": "変更内容を破棄",
"tux-editor-save-button-label": "翻訳を保存",
@@ -326,7 +325,7 @@
"tux-editor-cancel-button-label": "キャンセル",
"tux-editor-confirm-button-label": "翻訳を確認",
"tux-editor-proofread-button-label": "査読済の印を付ける",
- "tux-editor-shortcut-info": "保存するには「$1」を、次のメッセージへスキップするには「$2」を、他のショートカットキーについては「$3」を押してください",
+ "tux-editor-shortcut-info": "確認して次のメッセージへ移動するには「$1」を、単にスキップするには「$2」を、要約を入力するには「$4」を押してください。他のショートカットキーを表示するには「$3」を押し続けてください。",
"tux-editor-edit-desc": "説明文を編集",
"tux-editor-add-desc": "説明文を追加",
"tux-editor-suggestions-title": "提案",
@@ -369,7 +368,7 @@
"tux-empty-no-messages-to-display": "表示できるメッセージがありません。",
"tux-empty-there-are-optional": "省略可能なメッセージがありますが、一覧に表示されていません",
"tux-empty-show-optional-messages": "省略可能なメッセージを表示",
- "tux-empty-no-outdated-messages": "要修正のメッセージはありません",
+ "tux-empty-no-outdated-messages": "要更新のメッセージはありません",
"tux-empty-nothing-to-proofread": "査読できるものはありません",
"tux-empty-you-can-help-providing": "新たに翻訳して貢献することもできます",
"tux-empty-nothing-new-to-proofread": "新たに査読できるものはありません",
@@ -381,16 +380,18 @@
"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": "削除",
"tux-editor-message-tools-translations": "全言語の翻訳",
+ "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-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 拡張機能]を必要とします。",
"tux-session-expired": "ログインしていない状態になっています。別のタブでログインしてください。できない場合は、未保存の翻訳をコピーしておいて、ログインして、このページに戻ってきて、翻訳ページに入り直してください。",
- "tux-nojs": "このページは JavaScript を必要としています。"
+ "tux-nojs": "このツールの動作には JavaScript が必要です。JavaScript が無効、作動していないもしくはブラウザーがサポートされていません。"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/jam.json b/www/wiki/extensions/Translate/i18n/core/jam.json
index 5392a345..029d584a 100644
--- a/www/wiki/extensions/Translate/i18n/core/jam.json
+++ b/www/wiki/extensions/Translate/i18n/core/jam.json
@@ -19,11 +19,11 @@
"translate-page-navigation-legend": "Navigieshan",
"translate-page-showing": "Mechiz frahn $1 tu $2 a $3 a shuo.",
"translate-page-showing-all": "A shuo $1 {{PLURAL:$1|mechiz|mechiz}}.",
+ "translate-page-showing-none": "No mechiz fi shuo.",
"translate-next": "Nex piej",
"translate-prev": "Priivos piej",
"translate-page-description-legend": "Infamieshan bout di gruup",
"translate-page-edit": "edit",
- "translate-ext-url": "<hr />Websait: $1",
"translate-optional": "(apshanal)",
"translate-ignored": "(ignuor)",
"translate-edit-title": "Edit \"$1\"",
diff --git a/www/wiki/extensions/Translate/i18n/core/jbo.json b/www/wiki/extensions/Translate/i18n/core/jbo.json
index 0d1cd77f..cd645f22 100644
--- a/www/wiki/extensions/Translate/i18n/core/jbo.json
+++ b/www/wiki/extensions/Translate/i18n/core/jbo.json
@@ -6,7 +6,6 @@
"Olwe519"
]
},
- "translate-page-disabled-source": "la lu $1 li'u krasi bangu le papri",
"translate-page-edit": "stika ti",
"translate-edit-title": "stika $1",
"translate-edit-in-other-languages": "lo notci poi se bangu lo drata",
@@ -23,7 +22,6 @@
"translate-js-save": "gau se vreji",
"translate-js-support": "ko retsku",
"translate-gs-total": "lo sumji",
- "translate-gethelp": "sidju ckupau",
"tux-edit": "stika",
"tux-editor-cancel-button-label": "kansele",
"tux-editor-in-other-languages": "bau lo drata",
diff --git a/www/wiki/extensions/Translate/i18n/core/jv.json b/www/wiki/extensions/Translate/i18n/core/jv.json
index 3bd088fe..099bdad2 100644
--- a/www/wiki/extensions/Translate/i18n/core/jv.json
+++ b/www/wiki/extensions/Translate/i18n/core/jv.json
@@ -8,108 +8,117 @@
"Bennylin"
]
},
- "translate": "Pertalna/Terjemahna",
- "translate-desc": "[[Special:Translate|Kaca astaméwa]] kanggo mertal MediaWiki lan liyané",
- "translate-taskui-view": "Tuduhaké kabèh layang",
- "translate-taskui-untranslated": "Tuduhaké layang sing durung diterjemahaké",
- "translate-taskui-optional": "Tuduhaké layang pilihan",
- "translate-taskui-acceptqueue": "Namung layang sing tak tampa",
- "translate-taskui-reviewall": "Ulas kabèh terjemahan",
- "translate-taskui-export-to-file": "Èkspor nèng format basa asli",
- "translate-taskui-export-as-po": "Èkspor kanggo terjemahan offline",
- "translate-taction-translate": "Terjemahaké",
- "translate-taction-proofread": "Korèksi",
+ "translate": "Pertal",
+ "translate-extensionname": "Pertal",
+ "translate-desc": "[[Special:Translate|Kaca mirunggan]] kanggo mertal MediaWiki lan liyané",
+ "translate-taskui-export-to-file": "Èspor nganggo format asli",
+ "translate-taskui-export-as-po": "Èspor kanggo pertalan njaban jaringan",
+ "translate-taction-translate": "Pertal",
+ "translate-taction-proofread": "Priksa",
"translate-taction-lstats": "Statistik basa",
- "translate-taction-mstats": "Statistik klompok layang",
- "translate-taction-export": "Èkspor",
- "translate-taction-disabled": "Laku iki dipatèni nèng wiki iki.",
- "translate-page-no-such-language": "Basa sing dipilih ora absah.",
- "translate-page-no-such-group": "Grup sing dipilih ora absah.",
- "translate-page-disabled": "Penerjemahan jroning basa iki wis dinon-aktifaké. Alesan:\n\n<em>$1</em>",
- "translate-language-disabled": "Terjemahan kanggo basa iki dipatèni.",
- "translate-page-settings-legend": "Pangaturan",
- "translate-page-group": "Kelompok",
+ "translate-taction-mstats": "Statistik golongan layang",
+ "translate-taction-export": "Èspor",
+ "translate-taction-disabled": "Tumindak iki dipatèni ing wiki iki.",
+ "translate-page-no-such-language": "Basa kang kapilih ora trep.",
+ "translate-page-no-such-group": "Golongan kang kapilih ora trep.",
+ "translate-page-disabled": "Pertalan nyang basa iki kanggo golongan iki wis dipatèni.\nAlesané:\n\n<em>$1</em>",
+ "translate-language-disabled": "Pertalan menyang basa iki dipatèni.",
+ "translate-page-settings-legend": "Setèlan",
+ "translate-page-group": "Golongan",
"translate-page-language": "Basa",
- "translate-page-limit": "Limit (wates)",
- "translate-page-limit-option": "$1 {{PLURAL:$1|pesen|pesen}} per kaca",
+ "translate-page-limit": "Wates",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|layang}} saben kaca",
"translate-submit": "Jupuk",
"translate-page-navigation-legend": "Navigasi",
- "translate-page-showing": "Nuduhaké pesen $1 nganti $2 saka $3.",
- "translate-page-showing-all": "Nuduhaké $1 {{PLURAL:$1|pesen|pesen}}.",
+ "translate-page-showing": "Nuduhaké layang cacah $1 nganti $2 saka gunggung $3 layang.",
+ "translate-page-showing-all": "Nuduhaké $1 {{PLURAL:$1|layang}}.",
+ "translate-page-showing-none": "Ora ana layang kanggo dituduhaké.",
"translate-next": "Kaca sabanjuré",
"translate-prev": "Kaca sadurungé",
- "translate-page-description-legend": "Informasi ngenani grup utawa kelompok",
- "translate-page-description-hasoptional": "Klompok layang iki kaisi layang pilihan.\nLayang pilihan namung bisa diterjemahaké nalika basa Sampéyan nduwèni kabutuhan kusus\nkaya ora nganggo spasi utawa ngalihaksarakaké jeneng dhiri. $1",
- "translate-page-description-hasoptional-open": "Tuduhaké layang pilihan.",
+ "translate-page-description-legend": "Katerangan ngenani golongané",
+ "translate-page-description-hasoptional": "Golongan layang iki ngemu layang-layang manasuka.\nLayang manasuka kapertal mung manawa basané panjenengan duwé kabutuhan mirunggan kaya ta ora nganggo sepasi utawa ngalihaksara jeneng. $1",
+ "translate-page-description-hasoptional-open": "Tuduhaké layang manasuka.",
"translate-page-edit": "besut",
- "translate-ext-url": "<hr />Situs wèb: $1",
- "translate-optional": "(opsional)",
+ "translate-optional": "(manasuka)",
"translate-ignored": "(dilirwakaké)",
"translate-edit-title": "Besut \"$1\"",
- "translate-edit-definition": "Définisi pesen",
- "translate-edit-translation": "Terjamahan",
+ "translate-edit-definition": "Wedharaning layang",
+ "translate-edit-translation": "Pertalan",
"translate-edit-contribute": "nyumbang",
- "translate-edit-no-information": "''Pesen iki ora nduwé dokumèntasi. Menawa panjenengan ngerti kepriyé pesen iki dienggo, mangga panjenengan bisa nulungi para panerjemah liyané mawa nambahaké dokumentasi ing pesen iki.''",
- "translate-edit-information": "Informasi bab layang ($1)",
- "translate-edit-in-other-languages": "Pesen ing basa liya",
- "translate-edit-warnings": "Pèngetan perkara pertalan sing ora pepak",
- "translate-edit-tmmatch-source": "Tèks sumber terjemahan: $1",
- "translate-edit-tmmatch": "$1% cocok",
- "translate-use-suggestion": "Ganti terjemahan saiki nganggo sing disaranaké iki.",
- "translate-edit-nopermission": "Sampéyan butuh idin kanggo nerjemahaké layang.",
- "translate-edit-askpermission": "Njaluk idin",
- "translate-magic-pagename": "Pangambanan pertalan MediaWiki",
- "translate-magic-help": "Panjenengan bisa nerjemahaké alias kanggo kaca istiméwa, tembung magis, lan jeneng bilik-jeneng.\n\nAlias kanggo kaca istiméwa lan tembung magis bisa nduwèni luwih saka siji terjemahan.\nSiji lan sijiné kudu dipisahaké nganggo tandha koma (,).\nBilik jeneng mung bisa duwé siji terjemahan.\n\nJroning nerjemahaké bilik-jeneng <code>$1 talk</code> kuwi istiméwa. <code>$1</code> digantèkaké nganggo jeneng situs (conto <code>{{ns:project_talk}}</code>).\nYèn basa panjenengan ora mungkinaké gawé èksprèsi sing sah tanpa ngganti jeneng situs, mangga hubungi salah siji pangembang.\n\nPanjenengan perlu dadi anggota klompok penerjemah kanggo nyimpen owah-owahan.\nOwah-owahan ora bakal disimpen nganti panjenengan ngeklik tombol simpen ing ngisor.",
- "translate-magic-module": "Modul:",
+ "translate-edit-no-information": "<em>Layang iki ora ana dhokumèntasiné.\nManawa panjenengan ngerti ana ngendi lan kepiyé layang iki dianggo, panjenengan bisa ngéwangi pamertal liyané kanthi nambahaké dhokumèntasi nyang layang iki.</em>",
+ "translate-edit-information": "Pratélan ngenani layang ($1)",
+ "translate-edit-in-other-languages": "Layang ing basa liya",
+ "translate-edit-warnings": "Pepéling bab pertalan kang durung rampung",
+ "translate-edit-tmmatch-source": "Tulisan sumber pertalan: $1",
+ "translate-edit-tmmatch": "$1% cocog",
+ "translate-use-suggestion": "Ganti pertalan saiki nganggo saran iki.",
+ "translate-edit-nopermission": "Panjenengan butuh hak pamertal saperlu mertal layang.",
+ "translate-edit-askpermission": "Nyuwun palilah",
+ "exporttranslations": "Èspor pertalan",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Sumangga isi mawa format kang trep.",
+ "translate-export-not-supported": "Èspor pertalan ora kasengkuyung.",
+ "translate-export-format-notsupported": "Format èspor kang koisèkaké ora disengkuyung golongan layangé.",
+ "translate-magic-pagename": "Pertalan MediaWiki mirunggan",
+ "translate-magic-help": "Panjenengan bisa mertal aliyasé kaca mirunggan, tembung ajaib, lan jeneng mandala aran.\n\nAliasé kaca mirunggan lan tembung ajaib bisa ngemu manéka pertalan.\nPertalan kaletan komah (,).\nMandala aran mung ngemu sapertalan.\n\nMertal mandala aran parembugan proyèk <code>parembugan $1</code> bokmanawa angèl. <code>$1</code> kudu panjenengan ganti mawa jeneng situsé proyèk (contoné <code>{{ns:project_talk}}</code>).\nYèn basané panjenengan mokal ngripta pitembungan kang trep tanpa ngowahi jenengé situs, sumangga ngubungi [[Support]].\n\nPanjenengan kudu dadi juru pamertal saperlu nyimpen owah-owahan.\nOwah-owahané mokal panjenengan simpen nganti panjenengan klik tombol simpen ing ngisor.",
+ "translate-magic-module": "Modhul:",
"translate-magic-submit": "Jupuk",
- "translate-magic-cm-export": "Èkspor",
- "translate-magic-nothing-to-export": "Ora ana sing kudu dièkspor.",
- "translate-magic-cm-to-be": "Dadi",
+ "translate-magic-cm-export": "Èspor",
+ "translate-magic-nothing-to-export": "Ora ana kang kudu panjenegan èspor.",
+ "translate-magic-cm-to-be": "Kudu dadi",
"translate-magic-cm-current": "Saiki",
"translate-magic-cm-original": "Asli",
- "translate-magic-cm-comment": "Komentar:",
+ "translate-magic-cm-comment": "Tanggepan:",
"translate-magic-cm-save": "Simpen",
- "translate-magic-cm-updatedusing": "Dimutakiraké nganggo [[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]",
- "translate-magic-cm-savefailed": "Gagal disimpen",
+ "translate-magic-cm-updatedusing": "Dianyari sarana [[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]",
+ "translate-magic-cm-savefailed": "Wurung kasimpen",
"translate-magic-special": "Aliyas kaca mirunggan",
- "translate-magic-words": "Tembung-tembung magis",
- "translate-magic-namespace": "Jeneng bilik nama",
- "translate-magic-notsaved": "Besutan sampéyan ora kasimpen!",
- "translate-magic-errors": "Mangga tuntasaké {{PLURAL:$1|kasalahan|}} nèng terjemahan iki:",
- "translate-magic-saved": "Owah-owahan Sampéyan suksès disimpen.",
- "translate-checks-parameters": "{{PLURAL:$2|parameter|parameter-parameter}} iki ora dianggo:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-parameters-unknown": "{{PLURAL:$2|Parameter|Parameter-parameter}} iki ora dikenal:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-magic-words": "Tembung ajaib",
+ "translate-magic-namespace": "Jeneng mandala aran",
+ "translate-magic-notsaved": "Besutanmu ora kasimpen!",
+ "translate-magic-errors": "Dandanana {{PLURAL:$1|masalah}} iki ing pertalan:",
+ "translate-magic-saved": "Owahané panjenengan wis kasimpen.",
+ "translate-checks-parameters": "{{PLURAL:$2|Paramèter}} iki ora dianggo:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Paramèter}} iki ora kaweruhan:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Cacahing {{PLURAL:$2|pangapit|pangapit-pangapit}} ora seimbang:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "{{PLURAL:$2|Pranala|Pranala-pranala}} iki nduwèni masalah:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "{{PLURAL:$2|Pranala|Pranala-pranala}} iki ilang:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-xhtml": "Mangga ganti {{PLURAL:$2|tag|tag-tag}} iki nganggo tag sing cocog:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-plural": "Dhéfinisi migunakaké <nowiki>{{PLURAL:}}</nowiki> nanging terjemahané ora.",
- "translate-checks-pagename": "Bilik jeneng owah saka dhéfinisiné",
- "translate-checks-format": "Terjemahan iki ora manut definisiné utawa nduwèni sintaks sing ora sah: $1",
+ "translate-checks-xhtml": "Gantinen {{PLURAL:$2|tenger|tenger-tenger}} iki nganggo tenger kang mathuk:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Wedharané nganggo <nowiki>{{PLURAL:}}</nowiki> nanging pertalané ora.",
+ "translate-checks-pagename": "Mandala aran diowah saka wedharané",
+ "translate-checks-format": "Pertalan iki ora manut wedharané utawa ora trep sintaksisé: $1",
"translate-checks-parametersnotequal": "Itungan paramèter {{PLURAL:$1|$1}}; kuduné {{PLURAL:$2|$2}}.",
- "translate-checks-fudforum-syntax": "Anggo <nowiki>$1</nowiki> tinimbang <nowiki>$2</nowiki> nèng proyèk iki.",
- "translate-pref-nonewsletter": "Aja ngirimi aku jurnal warta e-mail",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> salah format.",
+ "translate-checks-fudforum-syntax": "Anggonen <nowiki>$1</nowiki> tinimbang <nowiki>$2</nowiki> ing proyèk iki.",
+ "translate-pref-nonewsletter": "Aja kirimi aku pawarta layang-èl",
"translate-pref-editassistlang": "Basa panyengkuyung:",
- "prefs-translate": "Pilihan terjemahan",
- "translate-pref-editassistlang-help": "Daptar kodhé basa dipisahaké mawa koma.\nTerjemahan layang nèng basa iki dituduhaké nalika Sampéyan nerjemehaké.\nDaptar basa gawan gumantung saka basa Sampéyan.",
- "translate-pref-editassistlang-bad": "Kodhé basa ora sah nèng daptar:\n<nowiki>$1</nowiki>.",
+ "prefs-translate": "Pilihan pertalan",
+ "translate-pref-editassistlang-help": "Pratélan kodhe basa kang dipisah komah.\nPertalan layang ing basa iki bakal katuduhaké nalika panjenengan pinuju mertal.\nPratélan basa baku gumantung ing basané panjenengan.",
+ "translate-pref-editassistlang-bad": "Kodhe basa ora trep ing pratélan:\n<nowiki>$1</nowiki>.",
"right-translate": "Mbesut sarana antarmuka jarwan",
- "right-translate-manage": "Tata klompok layang",
- "action-translate-manage": "tata klompok layang",
- "right-translate-import": "Impor terjemahan offline",
- "action-translate-import": "impor terjemahan offline",
- "right-translate-messagereview": "Ulas terjemahan",
- "translate-rc-translation-filter": "Filter terjemahan:",
+ "right-translate-manage": "Kemunah golongan layang",
+ "action-translate-manage": "kemunah golongan layang",
+ "right-translate-import": "Impor pertalan njaban jaringan",
+ "action-translate-import": "impor pertalan njaban jaringan",
+ "right-translate-messagereview": "Priksa pertalan",
+ "action-translate-messagereview": "priksa pertalan",
+ "translate-rcfilters-translations": "Pertalan",
+ "translate-rcfilters-translations-only-label": "Pertalan",
+ "translate-rcfilters-translations-only-desc": "Owahan ing kaca kapertal.",
+ "translate-rcfilters-translations-filter-label": "Dudu pertalan",
+ "translate-rcfilters-translations-filter-desc": "Kabèh owahan kang dudu pertalan.",
+ "translate-rcfilters-translations-site-label": "Layang situs",
+ "translate-rc-translation-filter": "Saring pertalan:",
"translate-rc-translation-filter-no": "Ora difilter",
- "translate-rc-translation-filter-only": "Tampilaké mung terjemahan waé",
- "translate-rc-translation-filter-filter": "Tampilaké saliyané terjemahan",
- "translate-rc-translation-filter-site": "Mung owah-owahan ing pesen situs waé",
- "translationstats": "Statistik penerjemahan",
+ "translate-rc-translation-filter-only": "Tuduhaké pertalané waé",
+ "translate-rc-translation-filter-filter": "Saring kajaba pertalan",
+ "translate-rc-translation-filter-site": "Mung owah-owahan ing layang situs waé",
+ "translationstats": "Statistik pertalan",
"translate-stats-edits": "Besutan",
- "translate-stats-users": "Penerjemah",
- "translate-stats-registrations": "Pandaptaran",
- "translate-stats-reviews": "Ulasan",
- "translate-stats-reviewers": "Pangulas",
+ "translate-stats-users": "Pamertal",
+ "translate-stats-registrations": "Pandhaftaran",
+ "translate-stats-reviews": "Pepriksan",
+ "translate-stats-reviewers": "Pamriksa",
"translate-statsf-intro": "Pajenengan bisa nggawé statistik prasaja migunakaké formulir iki. Kabèh angka nduwèni wates ndhuwur lan ngisor.",
"translate-statsf-options": "Opsi grafik",
"translate-statsf-width": "Jembar jroning piksel:",
@@ -117,142 +126,237 @@
"translate-statsf-days": "Période wektu jroning dina:",
"translate-statsf-start": "Tanggal miwiti:",
"translate-statsf-scale": "Granularitas:",
- "translate-statsf-scale-months": "Sasi",
+ "translate-statsf-scale-months": "Wulan",
"translate-statsf-scale-weeks": "Minggu",
"translate-statsf-scale-days": "Dina",
"translate-statsf-scale-hours": "Jam",
"translate-statsf-count": "Ukuran:",
"translate-statsf-count-edits": "Cacahing besutan",
- "translate-statsf-count-users": "Penerjemah aktif",
+ "translate-statsf-count-users": "Pamertal aktif",
"translate-statsf-count-registrations": "Panganggo anyar",
- "translate-statsf-count-reviews": "Ulasan terjemahan",
- "translate-statsf-count-reviewers": "Pangulas",
- "translate-statsf-language": "Dhaptar kodhe basa diwatesi nganggo koma:",
- "translate-statsf-group": "Dhaptar kodhe klompok sing diwatesi nganggo koma:",
- "translate-statsf-submit": "Pratayang",
- "translate-tag-page-desc": "Terjemahan saka kaca wiki [[$2|$1]].",
- "translate-sidebar-alltrans": "Jroning basa liya",
- "translations": "Kabèh terjemahan",
- "translations-summary": "Lebokaké jeneng layang nèng ngisor iki kanggo nuduhaké kabè terjemahan sumadhiya.",
- "translate-translations-no-message": "\"$1\" dudu layang sing bisa diterjemahaké",
- "translate-translations-none": "Ora ana terjemahan kanggo \"$1\"",
- "translate-translations-count": "Nemokaké {{PLURAL:$1|sak terjemahan|$1 terjemahan}}.",
+ "translate-statsf-count-reviews": "Pepriksan pertalan",
+ "translate-statsf-count-reviewers": "Pamriksa",
+ "translate-statsf-language": "Pratélan kodhe basa kang kapisah komah:",
+ "translate-statsf-group": "Pratélan kodhe golongan kang dipisah komah:",
+ "translate-statsf-submit": "Pratuduh",
+ "translate-tag-page-desc": "Pertalané kaca wiki [[$2|$1]] saka $3 ($4).",
+ "translate-sidebar-alltrans": "Ing basa liyané",
+ "translations": "Kabèh pertalan",
+ "translations-summary": "Isi jeneng layang ing ngisor iki kanggo nuduhaké kabèh pertalan kang ana.",
+ "translate-translations-no-message": "\"$1\" dudu layang kang bisa kapertal",
+ "translate-translations-none": "Ora ana pertalan kanggo \"$1\"",
+ "translate-translations-count": "Nemu {{PLURAL:$1|pertalan cacah 1|pertalan cacah $1}}.",
"translate-translations-fieldset-title": "Layang",
"translate-translations-messagename": "Jeneng:",
"translate-translations-project": "Proyèk:",
- "translate-translations-including-no-param": "Temtokaké kunci sing sah nèng paramètèr subkaca",
+ "translate-translations-including-no-param": "Sumangga isi kunci layang kang trep ing paramètèr anak-kacané",
"translate-translations-history-short": "r",
"languagestats": "Statistik basa",
- "languagestats-summary": "Kaca iki nuduhaké statistik terjemahan saka kabèh klompok layang kanggo sak basa.",
- "languagestats-stats-for": "Statistik terjemahan kanggo $1 ($2).",
- "languagestats-recenttranslations": "terjemahan paling anyar",
- "translate-langstats-incomplete": "Sebagèyan statistik nèng kaca iki ora jangkep. Mangga ngemot manèh kanggo ngèntukaké luwih akèh statistik.",
- "translate-langstats-expand": "ambakna",
- "translate-langstats-collapse": "ciyutna",
+ "languagestats-summary": "Kaca iki nuduhaké statistik pertalan saka kabèh golongan layang mungguh ing sawijining basa.",
+ "messagegroupstats-summary": "Kaca iki nuduhaké statistik golongan layang.",
+ "languagestats-stats-for": "Statistik pertalan kanggo $1 ($2).",
+ "languagestats-recenttranslations": "pertalan mentas waé",
+ "translate-langstats-incomplete": "Sapérangan statistik ing kaca iki ora wutuh. Sumangga ambali ngamot supaya olèh statistik liyané.",
+ "translate-langstats-expand": "amba",
+ "translate-langstats-collapse": "ciyut",
"translate-langstats-expandall": "ambakaké kabèh",
"translate-langstats-collapseall": "ciyutaké kabèh",
- "translate-language-code": "Kodhé basa",
- "translate-language-code-field-name": "Kodhé basa:",
- "translate-suppress-complete": "Brèdèl babar blas klompok layang sing wis diterjemahaké",
- "translate-ls-noempty": "Brèdèl babar blas klompok layang sing durung diterjemahaké",
+ "translate-language-code": "Kodhe basa",
+ "translate-language-code-field-name": "Kodhe basa:",
+ "translate-suppress-complete": "Singkiraké kabèh golongan layang kang wis kapertal",
+ "translate-ls-noempty": "Singkiraké kabèh golongan layang kang durung kapertal",
"translate-language": "Basa",
"translate-total": "Layang",
- "translate-untranslated": "Durung diterjemahaké",
+ "translate-untranslated": "Durung kapertal",
"translate-percentage-complete": "Parampungan",
"translate-percentage-fuzzy": "Lawas",
- "translate-languagestats-overall": "Kabèh klompok layang bebarengan",
+ "translate-languagestats-overall": "Kabèh golongan layang mesisan",
"translate-ls-submit": "Tuduhaké statistik",
- "translate-ls-column-group": "Klompok layang",
- "translate-mgs-pagename": "Statistik klompok layang",
- "translate-mgs-fieldset": "Tampilaké préferensi",
- "translate-mgs-group": "Klompok layang:",
- "translate-mgs-nocomplete": "Aja tampulaké basa sing wis diterjemahaké",
- "translate-mgs-noempty": "Aja tampilaké basa sing durung diterjemahaké",
+ "translate-ls-column-group": "Golongan layang",
+ "translate-mgs-pagename": "Statistik golongan layang",
+ "translate-mgs-fieldset": "Pitontonaké pilalan",
+ "translate-mgs-group": "Golongan layang:",
+ "translate-mgs-nocomplete": "Aja mitontonaké basa kang wis rampung kapertal",
+ "translate-mgs-noempty": "Aja majang basa kang durung ana pertalané",
"translate-mgs-submit": "Tuduhaké statistik",
"translate-mgs-column-language": "Basa",
- "translate-mgs-totals": "Kabèh basa dadi siji",
- "translate-mgs-invalid-group": "Klompok $1 sing dimaksud ora ana.",
- "translate-mgs-nothing": "Ora ana sing bisa ditampilaké kanggo statistik sing dimaksud.",
- "supportedlanguages": "Basa sing nyengkuyung",
- "supportedlanguages-colorlegend": "Legenda kanggo werna: Terjemahan pungkasan $1 dina kapungkur.",
- "supportedlanguages-translators": "{{PLURAL:$2|Pnerjemah|Penerjemah}}: $1",
- "supportedlanguages-recenttranslations": "terjemahan paling anyar",
- "supportedlanguages-count": "$1 {{PLURAL:$1|basa|basa}} kabèhé.",
- "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|suntingan|suntingan}} - disunting pungkasan $3 {{PLURAL:$3|dina|dina}} kapungkur",
+ "translate-mgs-totals": "Kabèh $1 {{PLURAL:$1|basa|basa}}",
+ "translate-mgs-invalid-group": "Golongan $1 kang panjenengan karsakaké ora ana.",
+ "translate-mgs-nothing": "Ora ana kang bisa katuduhaké bab statistik kang panjenengan karsakaké.",
+ "supportedlanguages": "Basa kang kasengkuyung",
+ "supportedlanguages-colorlegend": "Legèndha tumrap werna: Pertalan pungkasan $1 dina kapungkur.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Pamertal}}|Pamertal}}: $1",
+ "supportedlanguages-recenttranslations": "pertalan mentas waé",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|basa}} kabèhé.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|besutan}} - besutan pungkasan $3 {{PLURAL:$3|dina}} kapungkur",
+ "abusefilter-edit-builder-vars-translate-source-text": "Tèks sumberé unit pertalan",
"translate-save": "Simpen ($1)",
- "translate-jssti-add": "Tambah nèng daptar",
- "managemessagegroups": "Panatan klompok layang",
- "translate-smg-notallowed": "Sampéyan ora dililakaké nglakokaé iki.",
- "translate-smg-nochanges": "Ora ana sing owah saka prosès iki.",
+ "translate-jssti-add": "Tambah ing pratélan",
+ "managemessagegroups": "Tata kemunah golongan layang",
+ "translate-smg-notallowed": "Panjenengan ora dililakaké nglakokaé iki.",
+ "translate-smg-nochanges": "Ora ana owah-owahan kang bisa kaprosès.",
"translate-smg-submit": "Kirim owahan kanggo diprosès",
- "translate-smg-submitted": "Definisi layang wis dianyari. Owah-owahan lagi diprosès nèng latar mburi.",
- "translate-smg-left": "Kontèn layang nèng wiki",
- "translate-smg-right": "Owahan sing bakal teka",
+ "translate-smg-submitted": "Wedharan layang wis dianyari. Owah-owahan lagi digarap ing latar wuri.",
+ "translate-smg-more": "Bakal ana luwih akèh owahan kang bisa kaprosès sawisé owahan-owahan iki katumpuk.",
+ "translate-smg-left": "Isiné layang ing wiki",
+ "translate-smg-right": "Owahan kang bakal teka",
"translate-manage-import-diff": "Layang $1 | Laku: $2",
"translate-manage-import-new": "Layang anyar $1",
"translate-manage-import-deleted": "Layang dibusak $1",
"translate-manage-action-import": "Impor",
"translate-manage-action-conflict": "Impor lan tandhai ora cetha",
- "translate-manage-action-ignore": "Bènaké",
- "translate-manage-action-fuzzy": "Impor lan tandhai terjemahan ora cetha",
- "translate-manage-nochanges": "Ora ana owah-owahan nèng definisi layang kanggo klompok iki.",
- "translate-manage-nochanges-other": "Ora ana owah-owahan kanggo basa iki,\nAnggo pranala nèng ngisor kanggo mbalikaké tampilan rincian klompok.",
+ "translate-manage-action-ignore": "Jarna",
+ "translate-manage-action-fuzzy": "Impor lan tandhani pertalan supaya kapriksa",
+ "translate-manage-nochanges": "Ora ana owah-owahan ngenani wedharan layang kanggo golongan iki.",
+ "translate-manage-nochanges-other": "Ora ana owah-owahan tumrap basa iki.\nAnggonen pranala ngisor iki kanggo bali nyang sesawangan rerincèn golongan.",
"translate-manage-import-summary": "Ngimpor vèrsi anyar saka sumber njaba",
- "translate-manage-conflict-summary": "Ngimpor vèrsi anyar saka sumber njaba.\nMangga ditiliki.",
- "importtranslations": "Impor terjemahan",
- "translate-import-from-local": "Pangunggahan berkas lokal:",
- "translate-import-load": "Unggah berkas",
- "translate-import-err-dl-failed": "Ora bisa njupuk berkas:\n$1",
- "translate-import-err-ul-failed": "Pangunggahan berkas ora suksès",
- "translate-import-err-invalid-title": "Jeneng berkas <nowiki>$1</nowiki> ora sah.",
- "translate-import-err-no-such-file": "Berkas <nowiki>$1</nowiki> ora ana utawa durung diunggah nèng lokal.",
- "translate-import-err-stale-group": "Klompok layangé berkas iki ora ana.",
- "translate-import-err-no-headers": "Berkas dudu berkas Gettext sing katata apik nèng format èkstènsi Translate:\nOra bisa nemtokaké klompok lan basa layang saka sirah berkas.",
- "translate-import-err-warnings": "Berkas ora ditata apik.\nPesthèkaké Panyunting SampÚyan ora mbusan bidhang msgctxt.\nRincian: $1",
+ "translate-manage-conflict-summary": "Ngimpor vèrsi anyar saka sumber njaba.\nSumangga panjenengan priksani.",
+ "translate-manage-submit": "Ayahi",
+ "translate-manage-import-ok": "Diimpor: $1",
+ "translate-manage-import-done": "Rampung ngimpor!",
+ "importtranslations": "Impor pertalan",
+ "translate-import-from-local": "Unggah barkas ing lokal:",
+ "translate-import-load": "Unggah barkas",
+ "translate-import-err-dl-failed": "Ora bisa njupuk barkas:\n$1",
+ "translate-import-err-ul-failed": "Wurung ngunggah barkas",
+ "translate-import-err-invalid-title": "Jeneng barkas <nowiki>$1</nowiki> ora trep.",
+ "translate-import-err-no-such-file": "Barkas <nowiki>$1</nowiki> ora ana utawa durung diunggah ing papan lokal.",
+ "translate-import-err-stale-group": "Golongan layangé barkas iki ora ana.",
+ "translate-import-err-no-headers": "Barkasé dudu barkas Gettext kang karipta kanthi becik nganggo format èstènsi Pertal:\nOra bisa nemtokaké golongan lan basané layang saka sesirahé barkas.",
+ "translate-import-err-warnings": "Barkas ora diyasa kanthi becik.\nPesthèkaké pambesuté panjenengan ora mbusak babagan msgctxt.\nRerincèn: $1",
"translate-js-summary": "Ringkesan:",
"translate-js-save": "Simpen",
"translate-js-next": "Simpen lan bukak sabanjuré",
- "translate-js-nonext": "Iki layang pungkasan saka kaca iki.",
- "translate-js-skip": "Lumpati nèng sabanjuré",
- "translate-js-save-failed": "Gagal nyimpen. Laporaké kasalahan iki.",
- "translate-js-history": "Riwayat terjemahan",
+ "translate-js-skip": "Lumpati menyang sabanjuré",
+ "translate-js-history": "Sajarah pertalan",
"translate-js-support": "Takon",
"translate-js-support-title": "Njaluk pitulung yèn ora ana cukup informasi kanggo nerjemahaké layang iki kanthi bener.",
- "translate-js-support-unsaved-warning": "Sampéyan nduwé terjamahan sing durung kasimpen.",
+ "translate-js-support-unsaved-warning": "Ana pertalané panjenengan kang durung kasimpen.",
"translate-gs-pos": "Pos.",
- "translate-gs-code": "Kodhé",
- "translate-gs-continent": "Benua",
+ "translate-gs-code": "Kodhe",
+ "translate-gs-continent": "Bawana",
"translate-gs-speakers": "Panutur",
- "translate-gs-score": "Skor",
+ "translate-gs-score": "Biji",
"translate-gs-multiple": "Werna-werna",
"translate-gs-count": "Cacah",
"translate-gs-total": "Cacahé kabèh",
"translate-gs-avgscore": "Skor reratan",
- "translate-documentation-language": "Dokumentasi layang",
- "translate-searchprofile": "Terjemahan",
- "translate-searchprofile-tooltip": "Golèk saka kabèh terjemahan",
+ "translate-documentation-language": "Dhokumèntasi layang",
+ "translate-searchprofile": "Pertalan",
+ "translate-searchprofile-tooltip": "Golèk saka kabèh pertalan",
+ "translate-searchprofile-note": "Pilihan golèkan luwih akèh cumepak mawa [$1 golèkan pertalan].",
"translate-search-languagefilter": "Saring miturut basa:",
"translate-search-nofilter": "Ora ana saringan",
- "translate-messagereview-submit": "Tampa",
- "translate-messagereview-progress": "Nampa...",
- "translate-messagereview-failure": "Nampa... gagal: $1",
- "translate-messagereview-done": "Katampa",
- "translate-messagereview-reviews": "Ditampa déning {{PLURAL:$1|sak pangango|$1 panganggo}}",
- "translate-messagereview-reviewswithyou": "Ditampa déning {{PLURAL:$1|Sampéyan|$1 panganggo kalebu Sampéyan}}",
- "api-error-invalidrevision": "Terjemahan ora ana",
- "api-error-unknownmessage": "Layang ora ana",
- "api-error-fuzzymessage": "Terjemahan ditandhai \"ora cetha\"",
- "api-error-owntranslation": "Sampéyan ora bisa nampa terjemahané Sampéyan dhéwé",
- "translate-messagereview-no-fuzzy": "Terjemahan sing ora cetha ora bakal ditampa.",
- "translate-messagereview-no-own": "Sampéyan ora bisa nampa terjemahané Sampéyan dhéwé",
- "translate-messagereview-doit": "Tampa terjemahan iki minangka terjemahan sing bener.",
- "log-name-translationreview": "Log pangulasan terjemahan",
- "log-description-translationreview": "Log kanggo kabèh klompok terjemahan lan layang.",
- "logentry-translationreview-message": "$1 {{GENDER:$2|nampa}} terjemahan $3",
+ "log-name-translationreview": "Log pepriksan pertalan",
+ "log-description-translationreview": "Log kabèh pepriksan golongan layang lan pertalan.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|mriksa}} pertalan $3",
+ "group-translate-sandboxed": "Juru pamertal kang durung katampa",
+ "group-translate-sandboxed-member": "{{GENDER:$1|juru pamertal kang durung katampa}}",
+ "right-translate-sandboxmanage": "Kemunah panganggo ing bak wedhi",
+ "action-translate-sandboxmanage": "kemunah panganggo ing bak wedhi",
"translate-workflow-state-": "(durung disetel)",
"translate-workflowstatus": "Status: $1",
"translate-workflow-set-doing": "Nyetèl...",
"translate-stats-workflow": "Status",
- "translate-dynagroup-recent-label": "Terjemahan paling anyar",
- "translate-dynagroup-recent-desc": "Klompok layang iki nuduhaké kabèh terjemahan paling anyar saka basa iki.\nPaling migunani kanggo tugas korèksi."
+ "translate-dynagroup-recent-label": "Pertalan mentas waé",
+ "translate-dynagroup-recent-desc": "Golongan layang iki nuduhaké kabèh pertalan anyar saka basa iki.\nBisa migunani banget manawa arep mriksani.",
+ "translate-dynagroup-additions-label": "Tambahan anyar",
+ "translate-dynagroup-additions-desc": "Golongan layang iki isiné layang anyar lan owahan.",
+ "translate-msggroupselector-projects": "Golongan layang",
+ "translate-msggroupselector-search-placeholder": "Golèk golongan",
+ "translate-msggroupselector-search-all": "Kabèh",
+ "translate-msggroupselector-search-recent": "Anyar",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|anak golongan}}",
+ "tux-languageselector": "Pertal menyang",
+ "tux-tab-all": "Kabèh",
+ "tux-tab-untranslated": "Durung kapertal",
+ "tux-tab-outdated": "Kadaluwarsa",
+ "tux-tab-translated": "Wis kapertal",
+ "tux-tab-unproofread": "Durung dipriksa",
+ "tux-edit": "Besut",
+ "tux-status-optional": "Manasuka",
+ "tux-status-fuzzy": "Kadaluwarsa",
+ "tux-status-proofread": "Wis dipriksa",
+ "tux-status-translated": "Wis kapertal",
+ "tux-status-saving": "Nyimpen...",
+ "tux-status-unsaved": "Durung kasimpen",
+ "tux-save-unknown-error": "Ana masalah kang ora kaweruhan.",
+ "tux-editor-placeholder": "Pertalané panjenengan",
+ "tux-editor-editsummary-placeholder": "Ringkesan manasuka",
+ "tux-editor-paste-original-button-label": "Templèkaké tulisan sumber",
+ "tux-editor-discard-changes-button-label": "Buwang owahan",
+ "tux-editor-save-button-label": "Simpen pertalan",
+ "tux-editor-skip-button-label": "Lumpati menyang sabanjuré",
+ "tux-editor-cancel-button-label": "Wurung",
+ "tux-editor-confirm-button-label": "Iyai pertalan",
+ "tux-editor-proofread-button-label": "Tandhani manawa wis dipriksa",
+ "tux-editor-edit-desc": "Besut dhokumèntasi",
+ "tux-editor-add-desc": "Tambah dhokumèntasi",
+ "tux-editor-suggestions-title": "Saran",
+ "tux-editor-in-other-languages": "Ing basa liyané",
+ "tux-editor-need-more-help": "Butuh pitulung?",
+ "tux-editor-ask-help": "Takona supaya olèh katerangan luwih akèh",
+ "tux-editor-tm-match": "$1% cocog",
+ "tux-warnings-more": "{{PLURAL:$1|$1 liyané}}",
+ "tux-warnings-hide": "dhelikaké",
+ "tux-editor-save-failed": "Wurung nyimpen pertalan: $1",
+ "tux-editor-n-uses": "dianggo {{PLURAL:$1|ping}} $1",
+ "tux-editor-message-desc-more": "Tuduhaké liyané",
+ "tux-editor-message-desc-less": "Tuduhaké saperluné",
+ "tux-editor-clear-translated": "Dhelikaké kang wis kapertal",
+ "tux-editor-proofreading-mode": "Priksa",
+ "tux-editor-translate-mode": "Pratélan",
+ "tux-editor-proofreading-hide-own-translations": "Dhelikaké pertalané panjenengan",
+ "tux-editor-proofreading-show-own-translations": "Tuduhaké pertalané panjenengan",
+ "tux-proofread-action-tooltip": "Tandhani manawa wis dipriksa",
+ "tux-proofread-edit-label": "Besut",
+ "tux-editor-page-mode": "Kaca",
+ "tux-editor-outdated-warning": "Pertalan iki butuh dianyari.",
+ "tux-editor-outdated-warning-diff-link": "Tuduhaké béda",
+ "tux-editor-doc-editor-placeholder": "Dhokumèntasi layang",
+ "tux-editor-doc-editor-save": "Simpen dhokumèntasi",
+ "tux-editor-doc-editor-cancel": "Wurung",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|layang}} liyané",
+ "tux-messagetable-loading-messages": "Ngamot {{PLURAL:$1|layang}}...",
+ "tux-message-filter-placeholder": "Saring pratélan",
+ "tux-message-filter-result": "Tinemu $1 {{PLURAL:$1|kasil}} ngenani \"$2\"",
+ "tux-message-filter-advanced-button": "Panggolèk linuwih",
+ "tux-message-filter-optional-messages-label": "Layang manasuka",
+ "tux-proofread-translated-by-self": "Kapertal déning panjenengan",
+ "tux-empty-list-all": "Golongan layang iki kosong",
+ "tux-empty-list-all-guide": "Pilih golongan layang séjé saperlu kapertal",
+ "tux-translate-page-no-such-group": "<strong>Golongan kang panjenengan karsakaké ora ana.</strong> Pilih golongan layang liyané.",
+ "tux-empty-list-translated": "Ora ana layang kang kapertal",
+ "tux-empty-list-translated-guide": "Panjenengan bisa ngéwangi mertal",
+ "tux-empty-list-translated-action": "Pertal",
+ "tux-empty-no-messages-to-display": "Ora ana layang kanggo dituduhaké.",
+ "tux-empty-there-are-optional": "Ana layang manasuka kang ora kapacak ing pratélan",
+ "tux-empty-show-optional-messages": "Tuduhaké layang manasuka",
+ "tux-empty-no-outdated-messages": "Ora ana layang lawas",
+ "tux-empty-nothing-to-proofread": "Ora ana kang bisa kapriksa",
+ "tux-empty-you-can-help-providing": "Panjenengan kena ngéwangi gawé pertalan anyar",
+ "tux-empty-nothing-new-to-proofread": "Ora ana kang anyar kang bisa kapriksa",
+ "tux-empty-you-can-review-already-proofread": "Panjenengan bisa mriksa pertalan kang wis dipriksa wong liya.",
+ "tux-empty-list-other": "Ora ana kang kena kapertal",
+ "tux-empty-list-other-guide": "Panjenengan bisa ngéwangi mriksa pertalan kang ana",
+ "tux-empty-list-other-action": "Priksa pertalan",
+ "tux-empty-list-other-link": "Tuduhaké kabèh layang",
+ "tux-editor-close-tooltip": "Tutup",
+ "tux-editor-expand-tooltip": "Jembarna",
+ "tux-editor-collapse-tooltip": "Ciyutna",
+ "tux-editor-message-tools-show-editor": "Tuduhaké ing pambesut wiki",
+ "tux-editor-message-tools-history": "Sajarah",
+ "tux-editor-message-tools-delete": "Busak",
+ "tux-editor-message-tools-translations": "Kabèh pertalan",
+ "tux-editor-loading": "Ngamot...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|basa}} liyané",
+ "translate-statsbar-tooltip": "$1% wis kapertal, $2% wis kapriksa",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% wis kapertal, $2% wis kapriksa, $3% wis lawas",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|golongan}} liyané",
+ "translate-ulsdep-title": "Masalah konfigurasi",
+ "translate-ulsdep-body": "Èkstènsi pertalan gumantung [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector èkstènsi Sèlèktor Basa Global].",
+ "tux-session-expired": "Panjenengan wis ora mlebu log manèh. Mlebua log lumantar tab séjé. Utawa, turuna pertalan kang durung kasimpen, mlebua log, balia menyang kaca iki banjur isinen manèh pertalané panjenengan.",
+ "tux-nojs": "Kaca iki butuh JavaScript."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ka.json b/www/wiki/extensions/Translate/i18n/core/ka.json
index 0168c074..76827e15 100644
--- a/www/wiki/extensions/Translate/i18n/core/ka.json
+++ b/www/wiki/extensions/Translate/i18n/core/ka.json
@@ -7,15 +7,12 @@
"Sopho",
"Temuri rajavi",
"გიორგიმელა",
- "Otogi"
+ "Otogi",
+ "MIKHEIL"
]
},
"translate": "თარგმნა",
"translate-desc": "[[Special:Translate|სპეციალური გვერდი]] მედიავიკისა და სხვათა შეტყობინებების სათარგმნელად.",
- "translate-taskui-view": "ყველა შეტყობინების ჩვენება",
- "translate-taskui-untranslated": "ყველა უთარგმნელი შეტყობინების ჩვენება",
- "translate-taskui-optional": "არასავალდებულო შეტყობინებების ჩვენება",
- "translate-taskui-acceptqueue": "მხოლოდ ის შეტყობინებები რომლებიც შემიძლია დავამოწმო",
"translate-taskui-export-to-file": "ექსპორტი ადგილობრივ ფორმატში",
"translate-taskui-export-as-po": "ექსპორტი ოფლაინური თარგმნისათვის",
"translate-taction-translate": "თარგმნა",
@@ -37,7 +34,6 @@
"translate-page-description-legend": "ინფორმაცია ჯგუფის შესახებ",
"translate-page-description-hasoptional-open": "არასავალდებულო შეტყობინებების ჩვენება.",
"translate-page-edit": "რედაქტირება",
- "translate-ext-url": "<hr />ვებ-გვერდი: $1",
"translate-optional": "(არასავალდებულო)",
"translate-ignored": "(იგნორირებული)",
"translate-edit-title": "„$1“ რედაქტირება",
@@ -63,6 +59,7 @@
"translate-pref-nonewsletter": "არ გამომიგზავნო სიახლეები ელ. ფოსტით",
"translate-pref-editassistlang": "დამხმარე ენები:",
"prefs-translate": "თარგმნის პარამეტრები",
+ "translate-pref-editassistlang-help": "მძიმეებით გაყოფილი ენების კოდების სია. ამ ენებზე თარგმანები ნაჩვენები იქნება შეტყობინების ცვლილების დროს. სია, ნაგულისხმევად თქვენ ენაზეა დამოკიდებული.",
"right-translate-manage": "შეტყობინებების ჯგუფების მართვა",
"action-translate-manage": "შეტყობინებების ჯგუფების მართვა",
"right-translate-messagereview": "თარგმანების გადახედვა",
@@ -93,7 +90,6 @@
"translate-statsf-count-reviews": "თარგმანის რეცენზენტები",
"translate-statsf-count-reviewers": "შემმოწმებლები",
"translate-statsf-submit": "წინასწარი გადახედვა",
- "translate-tag-category": "თარგმნადი გვერდები",
"translate-sidebar-alltrans": "სხვა ენებზე",
"translations": "ყველა თარგმანი",
"translate-translations-no-message": "შეტყობინება \"$1\" არ ითარგმნება",
@@ -164,22 +160,11 @@
"translate-documentation-language": "შეტყობინების დოკუმენტაცია",
"translate-searchprofile": "თარგმანები",
"translate-search-languagefilter": "გაფილტვრა ენის მიხედვით:",
- "translate-messagereview-submit": "შემოწმებულად მონიშვნა",
- "translate-messagereview-progress": "მონიშნულია როგორც შემოწმებული...",
- "translate-messagereview-failure": "შემოწმებულად მონიშვნა ვერ მოხერხდა: $1",
- "translate-messagereview-done": "შემოწმებულია",
- "translate-messagereview-reviews": "შეამოწმა {{PLURAL:$1|ერთმა მომხმარებელმა|$1 მომხმარებელმა}}",
- "translate-messagereview-reviewswithyou": "შეამოწმა {{PLURAL:$1|თქვენ|$1 მომხმარებელმა თქვენი ჩათვლით}}",
- "api-error-invalidrevision": "თარგმანი ვერ მოიძებნა",
- "api-error-unknownmessage": "შეტყობინება ვერ მოიძებნა",
- "api-error-fuzzymessage": "თარგმანი მონიშნულია როგორც უზუსტო",
- "api-error-owntranslation": "თქვენ არ შეგიძლიათ საკუთარი თარგმანის შემოწმება",
"translate-workflow-state-": "(არ არის არჩეული)",
"translate-workflowstatus": "სტატუსი: $1",
"translate-workflow-set-doing": "ყენდება...",
"translate-stats-workflow": "სტატუსი",
"translate-dynagroup-recent-label": "ბოლო თარგმანები",
- "translate-gethelp": "დახმარება",
"translate-msggroupselector-projects": "შეტყობინების ჯგუფი",
"translate-msggroupselector-search-placeholder": "ჯგუფების ძიება",
"translate-msggroupselector-search-all": "ყველა",
@@ -198,6 +183,7 @@
"tux-status-translated": "ნათარგმნი",
"tux-status-saving": "ინახება...",
"tux-status-unsaved": "არ შეინახა",
+ "tux-save-unknown-error": "დაფიქსირდა უცნობი შეცდომა.",
"tux-editor-placeholder": "თქვენი თარგმანები",
"tux-editor-paste-original-button-label": "საწყისი ტექსტის ჩასმა",
"tux-editor-discard-changes-button-label": "ცვლილებების გაუქმება",
diff --git a/www/wiki/extensions/Translate/i18n/core/kaa.json b/www/wiki/extensions/Translate/i18n/core/kaa.json
index 0f15b965..4c247ee7 100644
--- a/www/wiki/extensions/Translate/i18n/core/kaa.json
+++ b/www/wiki/extensions/Translate/i18n/core/kaa.json
@@ -28,7 +28,6 @@
"translate-edit-no-information": "''Bul xabardın' hu'jjet mag'lıwmatı joq. Eger siz bul xabar qayerde yamasa qalay paydalang'anın bilsen'iz, basqa awdarıwshılıwg'a usı xabardın' hu'jjet mag'lıwmatın ko'rsetip ja'rdem beriwin'iz mu'mkin.''",
"translate-edit-information": "Bul xabar haqqında mag'lıwmat ($1)",
"translate-edit-in-other-languages": "Bul xabar basqa tillerde",
- "translate-edit-committed": "Bag'darlamadag'ı ha'zirgi awdarması",
"translate-edit-warnings": "Tolıq awdarılmag'an xabarlar haqqında esletpeler",
"translate-magic-pagename": "Ken'eytilgen MediaWiki awdarması",
"translate-magic-submit": "Ko'rset",
diff --git a/www/wiki/extensions/Translate/i18n/core/kab.json b/www/wiki/extensions/Translate/i18n/core/kab.json
index d23a84a2..2c15f64d 100644
--- a/www/wiki/extensions/Translate/i18n/core/kab.json
+++ b/www/wiki/extensions/Translate/i18n/core/kab.json
@@ -1,11 +1,243 @@
{
"@metadata": {
"authors": [
- "Mmistmurt"
+ "Mmistmurt",
+ "Belkacem77"
]
},
- "translate-page-settings-legend": "Iɣewwaren",
+ "translate": "Suqel",
+ "translate-desc": "[[Special:Translate|Asebter ameẓlu]] i tsuqilt n MediaWiki d wayen-nniḍen",
+ "translate-taskui-export-to-file": "Sifeḍ ar umasal aneṣli",
+ "translate-taskui-export-as-po": "Sifeḍ i tsuqilt war tuqqna",
+ "translate-taction-translate": "Suqel",
+ "translate-taction-proofread": "Aceggir",
+ "translate-taction-lstats": "Tidaddanin n tutlayt",
+ "translate-taction-mstats": "Tidaddanin n ugraw n yiznan",
+ "translate-taction-export": "Sifeḍ",
+ "translate-taction-disabled": "Tigawt-agi tensa ɣef uwiki-agi.",
+ "translate-page-no-such-language": "Tangalt n tutlayt yettwamlen mačči d tameɣtut.",
+ "translate-page-no-such-group": "Agraw yettwamlen mačči d ameɣtu.",
+ "translate-page-disabled": "Tisuqilin ar tutlayt-agi deg ugraw-agi nsant.\nAcuɣer:\n\n<em>$1</em>",
+ "translate-language-disabled": "Tasuqilt ar tutlayt-agi tensa.",
+ "translate-page-settings-legend": "Iɣewwaṛen",
"translate-page-group": "Agraw",
"translate-page-language": "Tutlayt",
- "translate-submit": "Umuɣ"
+ "translate-page-limit": "Talast",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|n yizen|n yiznan}} deg usebter",
+ "translate-submit": "Bder",
+ "translate-page-navigation-legend": "Tunigin",
+ "translate-page-showing": "Askan n yiznan si $1 ar $2 ɣef $3.",
+ "translate-page-showing-all": "Askan n $1 n {{PLURAL:$1|yizen|yiznan}}",
+ "translate-page-showing-none": "Ulac iznan ara yettwaseknen.",
+ "translate-next": "Asebter d-iteddun",
+ "translate-prev": "Asebter yezrin",
+ "translate-page-description-legend": "Talɣut ɣef ugraw",
+ "translate-page-description-hasoptional-open": "Sken iznan ifrayanen",
+ "translate-page-edit": "ẓreg",
+ "translate-optional": "(afrayan)",
+ "translate-ignored": "(yettwazgel)",
+ "translate-edit-title": "Ẓreg \"$1\"",
+ "translate-edit-definition": "Tabadut n yizen",
+ "translate-edit-translation": "Tasuqilt",
+ "translate-edit-contribute": "ttekki",
+ "translate-edit-information": "Talɣef ɣef yizen ($1)",
+ "translate-edit-in-other-languages": "Izen di tutlayin-nniḍen",
+ "translate-edit-warnings": "Alɣu ɣef tsuqilin ur yemmiden ara",
+ "translate-edit-tmmatch-source": "Aḍris aɣbalu n tsuqilt : $1",
+ "translate-edit-tmmatch": "$1 % n umenṭaḍ",
+ "translate-use-suggestion": "Semselsi tasuqlit tamirant akked s usumer.",
+ "translate-edit-nopermission": "Yessefk ad tesɛuḍ izerfan n tsuqilt akken ad tsuqleḍ iznan.",
+ "translate-edit-askpermission": "Awi tasiregt",
+ "exporttranslations": "Sifeḍ tisuqilin",
+ "translate-export-form-format": "Amasal",
+ "translate-export-invalid-format": "Mudd amasal ameɣtu.",
+ "translate-export-not-supported": "Asifeḍ n tsuqilin ur yettusefrak ara.",
+ "translate-magic-module": "Azegrir",
+ "translate-magic-submit": "Bder",
+ "translate-magic-cm-export": "Sifeḍ",
+ "translate-magic-nothing-to-export": "Ulac ayen ara sifḍeḍ.",
+ "translate-magic-cm-to-be": "Ad yuɣal",
+ "translate-magic-cm-current": "Amiran",
+ "translate-magic-cm-original": "Aneṣli",
+ "translate-magic-cm-comment": "Awennit:",
+ "translate-magic-cm-save": "Sekles",
+ "translate-magic-cm-updatedusing": "Aleqqem s [[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]",
+ "translate-magic-cm-savefailed": "Asekles yecceḍ",
+ "translate-magic-notsaved": "Taẓreg ur tettwaseklen ara!",
+ "translate-checks-fudforum-syntax": "Seqdec <nowiki>$1</nowiki> deg umḍiq n <nowiki>$2</nowiki> deg usenfaṛ-agi.",
+ "translate-pref-editassistlang": "Amarag n tutlayin:",
+ "prefs-translate": "Iɣewwaṛen n tsuqilt",
+ "translate-pref-editassistlang-bad": "Yir tangalt n tutlayt di tebdart:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Ẓreg aseqdec n ugrudem n tsuqilt",
+ "right-translate-manage": "Sefrek igrawen n tsuqlit",
+ "action-translate-manage": "sefrek igrawen n yiznan",
+ "right-translate-import": "Kter tisuqilin n war tuqqna",
+ "action-translate-import": "kter tisuqilin n war tuqqna",
+ "right-translate-messagereview": "Sleḍ tisuqilin",
+ "action-translate-messagereview": "ales taɣuri n tsuqilin",
+ "right-translate-groupreview": "Snifel addad n usuddem n igrawen n yiznan",
+ "action-translate-groupreview": "snifel addad n usuddem n umahil i yigrawen n yiznan",
+ "translate-rc-translation-filter": "Zizdeg tisuqilin",
+ "translate-rc-translation-filter-no": "Ur teg wara",
+ "translate-rc-translation-filter-only": "Sken kan tiquqilin",
+ "translate-rc-translation-filter-filter": "Zideg tisuqilin",
+ "translate-rc-translation-filter-site": "Ala asnifel n yiznan n usmel",
+ "translationstats": "Tidaddanin n tsuqilt",
+ "translate-stats-edits": "Tiẓrigin",
+ "translate-stats-users": "Imsuqal",
+ "translate-stats-registrations": "Ajerred",
+ "translate-stats-reviews": "Iceggiren",
+ "translate-stats-reviewers": "Imceggiren",
+ "translate-statsf-width": "Tehri s ipiksilen:",
+ "translate-statsf-height": "Teɣzi s ipiksilen:",
+ "translate-statsf-start": "Azemz n tazwara:",
+ "translate-statsf-scale-months": "Ayyuren",
+ "translate-statsf-scale-weeks": "Imalasen",
+ "translate-statsf-scale-days": "Ussan",
+ "translate-statsf-scale-hours": "Isragen",
+ "translate-statsf-count": "Aktal:",
+ "translate-statsf-count-edits": "Amḍan n teẓrigin",
+ "translate-statsf-count-users": "Imsuqal urmiden",
+ "translate-statsf-count-registrations": "Iseqdacen imaynuten",
+ "translate-statsf-count-reviews": "Tulsa n tɣrui n tsuqilt",
+ "translate-statsf-count-reviewers": "Imceggiren",
+ "translate-sidebar-alltrans": "S tutlayin tiyaḍ",
+ "translations": "Akk tisuqilin",
+ "translate-translations-count": "Tettwaf(ttwafent) {{PLURAL:$1|yiwet n tsuqilt|$1 n tquqilin}}.",
+ "translate-translations-fieldset-title": "Izen",
+ "translate-translations-messagename": "Isem:",
+ "translate-translations-project": "Asenfaṛ:",
+ "translate-translations-history-short": "z",
+ "languagestats": "Tidaddanin n tutlayt",
+ "languagestats-stats-for": "Tidaddanin n tsuqilt i $1 ($2).",
+ "languagestats-recenttranslations": "tisuqilin tineggura",
+ "translate-langstats-expand": "snefli",
+ "translate-langstats-collapse": "fneẓ",
+ "translate-langstats-expandall": "snefli meṛṛa",
+ "translate-langstats-collapseall": "fneẓ meṛṛa",
+ "translate-language-code": "Tangalt n tutlayt",
+ "translate-language-code-field-name": "Tangalt n tutlayt:",
+ "translate-suppress-complete": "Ffer akk igrawen n yiznan yettwasuqqlen i meṛṛa",
+ "translate-ls-noempty": "Ffer igrawen n yiznan s war tasuqilt",
+ "translate-language": "Tutlayt",
+ "translate-total": "Iznan",
+ "translate-untranslated": "Ur yettwasuqel ara",
+ "translate-percentage-complete": "Afmiḍi",
+ "translate-percentage-fuzzy": "Ifat",
+ "translate-languagestats-overall": "Akk igrawen n yiznan i meṛṛa",
+ "translate-ls-submit": "Sken tidaddanin",
+ "translate-ls-column-group": "Agraw n yiznan",
+ "translate-mgs-pagename": "Tidaddanin n ugraw n yiznan",
+ "translate-mgs-fieldset": "Sken ismenyifen",
+ "translate-mgs-group": "Agraw n yiznan:",
+ "translate-mgs-submit": "Sken tidaddanin",
+ "translate-mgs-column-language": "Tutlayt",
+ "translate-mgs-totals": "Akk tutlayin i meṛṛa",
+ "supportedlanguages": "Tutlayin yettusefraken",
+ "supportedlanguages-recenttranslations": "tisuqilin tineggura",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|tutlayt|tutlayin}} s umata.",
+ "translate-save": "Sekles ($1)",
+ "managemessagegroups": "Asefrek n ugraw n yiznan",
+ "translate-manage-import-diff": "Iznan $1 | Tiggawin: $2",
+ "translate-manage-import-new": "Izen amaynut $1",
+ "translate-manage-import-deleted": "Izen yettwakkes $1",
+ "translate-manage-action-import": "Kter",
+ "translate-manage-action-conflict": "Kter sakin creḍ d arewway",
+ "translate-manage-action-ignore": "Zgel",
+ "translate-manage-action-fuzzy": "Kter sakin creḍ tisuqilin d tirewwayin",
+ "translate-manage-import-summary": "Akter n lqem amaynut seg teɣbalut tazɣarayt",
+ "translate-manage-submit": "Selkem",
+ "translate-manage-import-ok": "Ttwaketren: $1",
+ "translate-manage-import-done": "Akter yedda!",
+ "importtranslations": "Kter tisuqilin",
+ "translate-import-from-local": "Sali afaylu adigan:",
+ "translate-import-load": "Sali afaylu",
+ "translate-import-err-dl-failed": "Ur izmir ara ad yekcem ar ufaylu:\n$1",
+ "translate-import-err-ul-failed": "Asali n ufaylu ur yeddi ara",
+ "translate-import-err-invalid-title": "Isem n ufayly yettwanefken <nowiki>$1</nowiki> mačči d ameɣtu.",
+ "translate-js-summary": "Agzul:",
+ "translate-js-save": "Sekles",
+ "translate-js-next": "Sekles sakin ldi wayeḍ",
+ "translate-gs-code": "Tangalt",
+ "translate-gs-continent": "Amenẓaw",
+ "translate-gs-score": "Agmuḍ",
+ "translate-gs-count": "Amiḍan",
+ "translate-gs-total": "Amatu",
+ "translate-documentation-language": "Tasemlit n yizen",
+ "translate-searchprofile": "Tisuqilin",
+ "translate-searchprofile-tooltip": "Nadi di tsuqilin meṛṛa",
+ "translate-search-languagefilter": "Zizdeg s tytlayt:",
+ "translate-dynagroup-recent-label": "Tisuqilin tineggura",
+ "translate-msggroupselector-search-placeholder": "Nadi igrawen",
+ "translate-msggroupselector-search-all": "Akk",
+ "translate-msggroupselector-search-recent": "Melmi kan",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|asenfaṛ asnawan|isenfaṛen isnawanen}}",
+ "tux-languageselector": "Suqel ar",
+ "tux-tab-all": "Akk",
+ "tux-tab-untranslated": "Ur yettwasuqel ara",
+ "tux-tab-outdated": "Ifat",
+ "tux-tab-translated": "Yettwasuqel",
+ "tux-edit": "Ẓreg",
+ "tux-status-fuzzy": "Ifat",
+ "tux-status-translated": "Yettwasuqel",
+ "tux-editor-edit-desc": "Ẓreg tasemlit",
+ "tux-editor-add-desc": "Rnu tasemlit",
+ "tux-editor-suggestions-title": "Isumar",
+ "tux-editor-in-other-languages": "S tutlayin tiyaḍ",
+ "tux-editor-need-more-help": "Tesriḍ tallelt?",
+ "tux-editor-ask-help": "Suter ugar n telɣut",
+ "tux-editor-tm-match": "$1 % n umenṭaḍ",
+ "tux-warnings-more": "{{PLURAL:$1|$1 nniḍen}}",
+ "tux-warnings-hide": "ffer",
+ "tux-editor-save-failed": "Asekles n tsuqilt ur yeddi ara:$1",
+ "tux-editor-n-uses": "yettwaseqdec $1 {{PLURAL:$1|n tikelt|n tikal}}",
+ "tux-editor-message-desc-more": "Sken ugar",
+ "tux-editor-message-desc-less": "Sken drus",
+ "tux-editor-clear-translated": "Ffer tasuqilt",
+ "tux-editor-proofreading-mode": "Aceggir",
+ "tux-editor-translate-mode": "Tabdart",
+ "tux-editor-proofreading-hide-own-translations": "Ffer tisuqilin-ik",
+ "tux-editor-proofreading-show-own-translations": "Sken tisuqilin-ik",
+ "tux-proofread-action-tooltip": "Creḍ yettwaɣra",
+ "tux-proofread-edit-label": "Ẓreg",
+ "tux-editor-page-mode": "Asebter",
+ "tux-editor-outdated-warning": "Tasuqilt-agi tesra aleqqem.",
+ "tux-editor-outdated-warning-diff-link": "Sken amgired",
+ "tux-editor-doc-editor-placeholder": "Tasemlit n yizen",
+ "tux-editor-doc-editor-save": "Sekles tasemlit",
+ "tux-editor-doc-editor-cancel": "Sefsex",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|n yizen|n yiznan}}-nniḍen",
+ "tux-messagetable-loading-messages": "Asali n $1 n {{PLURAL:$1|yizen|yiznan}}...",
+ "tux-message-filter-placeholder": "Zizdeg tabdart",
+ "tux-message-filter-result": "{{PLURAL:$1|0=Ula d yiwen n ugmuḍ ur yettwaf|1=Yettwaf yiwen n ugmuḍ|$1 n igmaḍ ttwafen}} i « $2 »",
+ "tux-message-filter-advanced-button": "Anadi leqqayen",
+ "tux-message-filter-optional-messages-label": "Iznan ifrayanen",
+ "tux-proofread-translated-by-self": "Tsuqleṭ",
+ "tux-empty-list-all": "Agraw-agi n yizen d ilem",
+ "tux-empty-list-all-guide": "Fren agraw n yizen-nniḍen ara tsuqleḍ",
+ "tux-empty-list-translated": "Ulac iznan yettwasuqlen",
+ "tux-empty-list-translated-guide": "Tzemreḍ ad tmuddeḍ afus di tsuqilt",
+ "tux-empty-list-translated-action": "Suqel",
+ "tux-empty-no-messages-to-display": "Ulac iznan ara d-sekneḍ.",
+ "tux-empty-show-optional-messages": "Sken iznan ifrayanen",
+ "tux-empty-no-outdated-messages": "Ilac iznan ifaten",
+ "tux-empty-nothing-to-proofread": "Ulac ayen ara teɣreḍ",
+ "tux-empty-you-can-help-providing": "Tzemreḍ ad tmuddeḍ afus di tsuqlin timaynutin",
+ "tux-empty-list-other": "Ulac acu ara tsuqleḍ.",
+ "tux-empty-list-other-guide": "Tzemreḍ ad tmuddeḍ afus di tsuqilin yellan",
+ "tux-empty-list-other-link": "Sken akk iznan",
+ "tux-editor-close-tooltip": "Mdel",
+ "tux-editor-expand-tooltip": "snefli",
+ "tux-editor-collapse-tooltip": "Fneẓ",
+ "tux-editor-message-tools-show-editor": "Sken deg umaẓeag n uwiki",
+ "tux-editor-message-tools-history": "Amazray",
+ "tux-editor-message-tools-delete": "Kkes",
+ "tux-editor-message-tools-translations": "Akk tisuqilin",
+ "tux-editor-loading": "Asali...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|tutlayt-nniḍen|tutlayin-nniḍen}}",
+ "translate-statsbar-tooltip": "$1% tasuqilt, $2% taɣuri",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% asuqilt, $2% acegger, $3% ifat",
+ "translate-search-more-groups-info": "$1 n {{PLURAL:$1|ugraw|igrawen}}-nniden",
+ "translate-ulsdep-title": "Tuccḍa n twila",
+ "tux-nojs": "Asebter-agi yesra JavaScript."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/kbp.json b/www/wiki/extensions/Translate/i18n/core/kbp.json
new file mode 100644
index 00000000..7be5438e
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/kbp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gnangbade"
+ ]
+ },
+ "translate-documentation-language": "Tɔm kɩmamatʋ yɔɔ aseɣɖe"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/kiu.json b/www/wiki/extensions/Translate/i18n/core/kiu.json
index 628db615..218f1d98 100644
--- a/www/wiki/extensions/Translate/i18n/core/kiu.json
+++ b/www/wiki/extensions/Translate/i18n/core/kiu.json
@@ -1,8 +1,15 @@
{
"@metadata": {
"authors": [
- "Erdemaslancan"
+ "Erdemaslancan",
+ "Kumkumuk",
+ "Mirzali"
]
},
- "translate-tag-page-desc": "Açarnayışê pela da [[$2|$1]] wiki"
+ "translate-page-settings-legend": "Eyari",
+ "translate-tag-page-desc": "Açarnayışê pela da [[$2|$1]] wiki",
+ "translate-ls-submit": "İstatistikan bımocne",
+ "tux-editor-cancel-button-label": "Bıtexelne",
+ "tux-editor-page-mode": "Pele",
+ "tux-editor-doc-editor-cancel": "Bıtexelne"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/kjp.json b/www/wiki/extensions/Translate/i18n/core/kjp.json
new file mode 100644
index 00000000..2e4f4055
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/kjp.json
@@ -0,0 +1,90 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "translate": "ခၠယ့်လာႋဆာ်",
+ "translate-taction-translate": "ခၠယ့်လာႋ",
+ "translate-taction-lstats": "ဆ်ုခၠါင်ဘာႋသာ့ စ်ုရင့်ကါင်ကါ",
+ "translate-taction-mstats": "လိက်သုံ့ၜိင်းကုံရွာဲ စ်ုရင့်ကါင်ကါ",
+ "translate-taction-export": "မ်ုသုံ့ထင်း",
+ "translate-page-settings-legend": "အင်းတါင်ဆ်ုက်ုယိုင့်လ်ုဖး",
+ "translate-page-group": "ကုံရွာဲ",
+ "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": "ဆ်ုခၠယ်ထသယ်လ်ုဖး",
+ "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-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": "လိက်သုံ့ၜိင်းကုံရွာဲ စ်ုရင့်ကါင်ကါ",
+ "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": "လ်ုယိက်လ်ုမဝ်ႋ ဆ်ုခၠယ့်လ်ုဖး",
+ "supportedlanguages-count": "{{PLURAL:$1|ဆ်ုခၠါင်ဘာႋသာ့|ဆ်ုခၠါင်ဘာႋသာ့လ်ုဖး}} ကုံကံင်း $1",
+ "translate-manage-action-import": "ဆူ့ဍုဂ်သုံ့လင်",
+ "translate-js-support": "မ်ုအင်းကိင်ဆ်ုအင်းစာ",
+ "translate-documentation-language": "လိက်ၜၠာ် လိက်မါၮါင်း",
+ "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/www/wiki/extensions/Translate/i18n/core/kk-arab.json b/www/wiki/extensions/Translate/i18n/core/kk-arab.json
index fd23c435..abfeeeed 100644
--- a/www/wiki/extensions/Translate/i18n/core/kk-arab.json
+++ b/www/wiki/extensions/Translate/i18n/core/kk-arab.json
@@ -27,7 +27,6 @@
"translate-edit-no-information": "''بۇل حابار قۇجاتتاماسىز. ەگەر وسى حاباردىڭ قايدا نەمەسە قالاي قولدانعانىن بىلسەڭىز, بۇل حابارعا قۇجاتتاما كەلتىرىپ, باسقا اۋدارۋشىلارعا كومەكتەسە الاسىز.''",
"translate-edit-information": "بۇل حابار تۋرالى مالىمەت ($1)",
"translate-edit-in-other-languages": "حابار باسقا تىلدەردە",
- "translate-edit-committed": "باعدارلاماداعى اعىمدىق اۋدارما",
"translate-edit-warnings": "تولىق اۋدارىلماعان حابارلار تۋرالى اڭعارتپالار",
"translate-magic-pagename": "كەڭەيتىلگەن MediaWiki اۋدارۋى",
"translate-magic-help": "ارنايى بەت بۇركەمەلەرىن, سىيقىرلى سوزدەرىن, بەزەندىرۋ مانەر اتاۋلارىن جانە ەسىم ايا اتاۋلارىن اۋدارا الاسىز.\n\nسىيقىرلى سوزدەردە اعىلشىنشا نۇسقاسىن كىرگىزۋىڭىز ٴجون, ايتپەسە قىزمەتى توقتالادى. تاعى دا ٴبىرىنشى بابىن (0 نە 1) ٴاردايىم قالدىرىڭىز.\n\nارنايى بەت بۇركەمەلەرىندە جانە سىيقىرلى سوزدەرىندە بىرنەشە اۋدارما بولۋى مۇمكىن. اۋدارمالار ۇتىرمەن (,) بولىكتەنەدى. بەزەندىرۋ مانەر جانە ەسىم ايا اتاۋلارىندا تەك ٴبىر اۋدارما بولۋى ٴتىيىس.\n\nەسىم ايا اۋدارمالارىندا <code>$1_talk</code> دەگەن ارنايى كەلتىرىلەدى. <code>$1</code> دەگەن اينالمالى وزدىكتىك توراپ اتاۋىمەن الماستىرىلادى (مىسالى, <code>{{SITENAME}} تالقىلاۋى</code>). ەگەر ٴسىزدىڭ تىلىڭىزدە توراپ اتاۋىن وزگەرتپەي دۇرىس سويلەم قۇرىلماسا, دامىتۋشىلارعا حابارلاسىڭىز.",
diff --git a/www/wiki/extensions/Translate/i18n/core/kk-cyrl.json b/www/wiki/extensions/Translate/i18n/core/kk-cyrl.json
index 7bba24e9..0cdbc59f 100644
--- a/www/wiki/extensions/Translate/i18n/core/kk-cyrl.json
+++ b/www/wiki/extensions/Translate/i18n/core/kk-cyrl.json
@@ -9,11 +9,6 @@
},
"translate": "Аудару",
"translate-desc": "MediaWiki және бұнан тыстарды аударуға арналған [[Special:Translate|арнайы бет]]",
- "translate-taskui-view": "Барлық хабарламаларды көрсету",
- "translate-taskui-untranslated": "Аударылмаған хабарларды көрсету",
- "translate-taskui-optional": "Қосымша хабарларды көрсету",
- "translate-taskui-acceptqueue": "Тек мен тексердім деп белгілеген хабарламалар",
- "translate-taskui-reviewall": "Барлық аудармаларды қайта қарау",
"translate-taskui-export-to-file": "Негізгі форматын экспорттау",
"translate-taskui-export-as-po": "Оффлайн аударма үшін экспорттау",
"translate-taction-translate": "Аудару",
@@ -35,12 +30,12 @@
"translate-page-navigation-legend": "Шарлау",
"translate-page-showing": "Көрсетілген хабар ауқымы: $1 — $2 (не барлығы $3).",
"translate-page-showing-all": "$1 {{PLURAL:$1|хабарлама|хабарлама}} көрсетілуде.",
+ "translate-page-showing-none": "Көрсетілетін еш хабар жоқ.",
"translate-next": "Келесі бет",
"translate-prev": "Алдыңғы бет",
"translate-page-description-legend": "Бұл топ туралы мәлімет",
"translate-page-description-hasoptional-open": "Қосымша хабарларды көрсету",
"translate-page-edit": "өңдеу",
- "translate-ext-url": "<hr />Уебсайт: $1",
"translate-optional": "(міндетті емес)",
"translate-ignored": "(елемейтін)",
"translate-edit-title": "«$1» аудармасын өңдеу",
@@ -183,9 +178,7 @@
"translate-js-summary": "Түйіндемесі:",
"translate-js-save": "Сақтау",
"translate-js-next": "Сақтау жөне келесісін ашу",
- "translate-js-nonext": "Бұл осы беттегі соңғы хабарлама.",
"translate-js-skip": "Келесісіне өту",
- "translate-js-save-failed": "Сақталмады. Бұл қате туралы хабарлаңыз.",
"translate-js-history": "Аударма тарихы",
"translate-js-support": "Сұрақ қою",
"translate-js-support-title": "Егер бұл хабарламаны дұрысымен аудару үшін жеткілікті мәлімет болмаса көмек сұрау.",
@@ -204,19 +197,6 @@
"translate-searchprofile-tooltip": "Барлық аудармалардан іздеу",
"translate-search-languagefilter": "Тілі бойынша сүзгілеу:",
"translate-search-nofilter": "Сүзгілеу жоқ",
- "translate-messagereview-submit": "Тексерілген деп белгілеу",
- "translate-messagereview-progress": "Тексерілді деп белгілеу...",
- "translate-messagereview-failure": "Тексерілді деп белгілеу сәтсіз болды: $1",
- "translate-messagereview-done": "Тексерілген",
- "translate-messagereview-reviews": "{{PLURAL:$1|Бір қатысушы|$1 қатысушы}} тексерген",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|Сіз|$1 қатысушы (сізді қоса алғанда)}} арқылы тексерілді",
- "api-error-invalidrevision": "Аударма табылмады",
- "api-error-unknownmessage": "Хабарлама табылмады",
- "api-error-fuzzymessage": "Аударма нақтыланбаған ретінде белгіленген",
- "api-error-owntranslation": "Сіз өз аудармаларыңызды тексере алмайсыз",
- "translate-messagereview-no-fuzzy": "Нақтыланбаған аудармалар тексерілді деп белгіленбейді.",
- "translate-messagereview-no-own": "Сіз өз аудармаларыңызды тексерілді деп белгілей алмайсыз.",
- "translate-messagereview-doit": "Бұл аударманы тексерілді деп белгілеу.",
"log-name-translationreview": "Аударманы тексеру журналы",
"log-description-translationreview": "Хабарлама топтары және барлық аудармаларды тексеру журналы.",
"logentry-translationreview-message": "$1 $3 аудармасын {{GENDER:$2|тексерді}}",
@@ -243,7 +223,9 @@
"tux-status-translated": "Аударылған",
"tux-status-saving": "Сақталып жатыр...",
"tux-status-unsaved": "Сақталмады",
+ "tux-save-unknown-error": "Белгісіз қате кездесті.",
"tux-editor-placeholder": "Сіздің аудармаңыз",
+ "tux-editor-editsummary-placeholder": "Түйіндемесін жазыңыз...",
"tux-editor-paste-original-button-label": "Қайнар мәтінін қою",
"tux-editor-discard-changes-button-label": "Өзгерістерді болдырмау",
"tux-editor-save-button-label": "Аударманы сақтау",
@@ -261,7 +243,7 @@
"tux-editor-tm-match": "$1% сай келеді",
"tux-warnings-more": "{{PLURAL:$1|$1 көбірек}}",
"tux-warnings-hide": "жасыру",
- "tux-editor-save-failed": "Аударманы сақтау болмады: $1",
+ "tux-editor-save-failed": "Аударманы сақтау сәтсіз болды: $1",
"tux-editor-n-uses": " $1 {{PLURAL:$1|рет|рет}} қолданған",
"tux-editor-message-desc-more": "Көбірек қарау",
"tux-editor-message-desc-less": "Азырақ қарау",
@@ -280,7 +262,7 @@
"tux-editor-doc-editor-cancel": "Болдырмау",
"tux-messagetable-more-messages": "Көбірек $1 {{PLURAL:$1|хабарлама|хабарлама}}",
"tux-messagetable-loading-messages": "{{PLURAL:$1|Хабарлама|Хабарламалар}} оқылып жатыр...",
- "tux-message-filter-placeholder": "Сүзгілеу тізімі",
+ "tux-message-filter-placeholder": "Тізімді сүзгілеу",
"tux-message-filter-result": "«$2» деген іздеу сұранысына $1 {{PLURAL:$1|нәтиже|нәтиже}} табылды",
"tux-message-filter-advanced-button": "Кеңейтілген іздеу",
"tux-message-filter-optional-messages-label": "Міндетті емес хабарламалар",
@@ -306,6 +288,7 @@
"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": "Жою",
"tux-editor-message-tools-translations": "Барлық аудармалар",
diff --git a/www/wiki/extensions/Translate/i18n/core/kk-latn.json b/www/wiki/extensions/Translate/i18n/core/kk-latn.json
index c363cacf..a3bd457d 100644
--- a/www/wiki/extensions/Translate/i18n/core/kk-latn.json
+++ b/www/wiki/extensions/Translate/i18n/core/kk-latn.json
@@ -29,7 +29,6 @@
"translate-edit-no-information": "''Bul xabar qujattamasız. Eger osı xabardıñ qaýda nemese qalaý qoldanğanın bilseñiz, bul xabarğa qujattama keltirip, basqa awdarwşılarğa kömektese alasız.''",
"translate-edit-information": "Bul xabar twralı mälimet ($1)",
"translate-edit-in-other-languages": "Xabar basqa tilderde",
- "translate-edit-committed": "Bağdarlamadağı ağımdıq awdarma",
"translate-edit-warnings": "Tolıq awdarılmağan xabarlar twralı añğartpalar",
"translate-magic-pagename": "Keñeýtilgen MediaWiki awdarwı",
"translate-magic-help": "Arnaýı bet bürkemelerin, sïqırlı sözderin, bezendirw mäner atawların jäne esim aya atawların awdara alasız.\n\nSïqırlı sözderde ağılşınşa nusqasın kirgizwiñiz jön, äýtpese qızmeti toqtaladı. Tağı da birinşi babın (0 ne 1) ärdaýım qaldırıñız.\n\nArnaýı bet bürkemelerinde jäne sïqırlı sözderinde birneşe awdarma bolwı mümkin. Awdarmalar ütirmen (,) böliktenedi. Bezendirw mäner jäne esim aya atawlarında tek bir awdarma bolwı tïis.\n\nEsim aya awdarmalarında <code>$1_talk</code> degen arnaýı keltiriledi. <code>$1</code> degen aýnalmalı özdiktik torap atawımen almastırıladı (mısalı, <code>{{SITENAME}} talqılawı</code>). Eger sizdiñ tiliñizde torap atawın özgertpeý durıs söýlem qurılmasa, damıtwşılarğa xabarlasıñız.",
diff --git a/www/wiki/extensions/Translate/i18n/core/km.json b/www/wiki/extensions/Translate/i18n/core/km.json
index b3150152..cd8eb540 100644
--- a/www/wiki/extensions/Translate/i18n/core/km.json
+++ b/www/wiki/extensions/Translate/i18n/core/km.json
@@ -6,20 +6,16 @@
"Thearith",
"គីមស៊្រុន",
"វ័ណថារិទ្ធ",
- "Sovichet"
+ "Sovichet",
+ "Aefgh39622"
]
},
"translate": "បកប្រែ",
"translate-desc": "[[Special:Translate|ទំព័រ​ពិសេស]] សម្រាប់ប្រែសម្រួល​មេឌាវិគី​ និង របស់​ផ្សេងទៀត",
- "translate-taskui-view": "បង្ហាញសារទាំងអស់",
- "translate-taskui-untranslated": "បង្ហាញសារដែលមិនទាន់បកប្រែ",
- "translate-taskui-optional": "បង្ហាញសារមិនសូវចាំបាច់អោយបកប្រែ",
- "translate-taskui-acceptqueue": "តែ​សារ​ទាំង​ឡាយ​ណា​ដែល​ខ្ញុំ​បញ្ជាក់​ថា​បាន​ពិនិត្យ​រួច",
- "translate-taskui-reviewall": "ផ្ទៀងផ្ទាត់ការបកប្រែទាំងអស់",
"translate-taskui-export-to-file": "នាំចេញជាទម្រង់ដើម",
"translate-taskui-export-as-po": "នាំចេញសម្រាប់ធ្វើការបកប្រែក្រៅបណ្ដាញ",
"translate-taction-translate": "បកប្រែ",
- "translate-taction-proofread": "ពិនិត្យ​ឡើងវិញ",
+ "translate-taction-proofread": "ផ្ទៀងផ្ទាត់ឡើងវិញ",
"translate-taction-lstats": "ស្ថិតិ​ភាសា",
"translate-taction-mstats": "ស្ថិតិក្រុមសារ",
"translate-taction-export": "នាំចេញ​",
@@ -44,7 +40,6 @@
"translate-page-description-hasoptional": "ក្រុមសារនេះមានផ្ទុកសារដែលមិនសូវចាំបាច់អោយបកប្រែ។\nសារដែលមិនសូវចាំបាច់អោយបកប្រែគួរតែបកប្រែតែពេលណាត្រូវការអោយសរសេរជាពិសេសក្នុងភាសារបស់អ្នក ដូចជាការមិនប្រើចន្លោះដកឃ្លា ឬការសរសេរអោយត្រូវតាមតួអក្សរបានត្រឹមត្រូវ។ $1",
"translate-page-description-hasoptional-open": "បង្ហាញសារមិនសូវចាំបាច់អោយបកប្រែ",
"translate-page-edit": "កែប្រែ",
- "translate-ext-url": "<hr />វិបសាយ៖ $1",
"translate-optional": "(ជម្រើស)",
"translate-ignored": "(បានបោះបង់)",
"translate-edit-title": "កែប្រែ \"$1\"",
@@ -54,14 +49,15 @@
"translate-edit-no-information": "<em>សារ​នេះ​មិន​មាន​ព័ត៌មាន​បន្ថែម​ទេ​។\nប្រសិនបើ​អ្នក​ដឹង​ពី​ទីកន្លែង និង​របៀប​ប្រើប្រាស់​សារ​នេះ អ្នក​អាច​ជួយ​អ្នក​បកប្រែ​ផ្សេងទៀត​តាមរយៈ​ការ​ដាក់​បន្ថែម​ព័ត៌មាន​ទាំងនោះ​មក​ឱ្យ​សារ​នេះ​។</em>",
"translate-edit-information": "ព័ត៌មាន​អំពី​សារ ($1)",
"translate-edit-in-other-languages": "សារជាភាសា​ដទៃទៀត",
- "translate-edit-committed": "បទប្រែសម្រួល​បច្ចុប្បន្ន​ក្នុងសូហ្វវែរ",
"translate-edit-warnings": "ការព្រមាន​អំពី​បទប្រែសម្រួលមិនពេញលេញ",
- "translate-edit-tmsugs": "សំណើពីឃ្លាំងផ្ទុកការបកប្រែ",
"translate-edit-tmmatch-source": "ការ​បក​ប្រែ​ប្រភព​អត្ថបទ៖ $1",
"translate-edit-tmmatch": "ត្រូវគ្នា $1%",
"translate-use-suggestion": "ជំនួសការបកប្រែបច្ចុប្បន្នដោយសំណើបកប្រែនេះ។",
"translate-edit-nopermission": "អ្នក​ត្រូវ​ការ​សិទ្ធិ​បក​ប្រែ ដើម្បី​បក​ប្រែ​សារ។",
"translate-edit-askpermission": "សុំ​ការ​អនុញ្ញាត",
+ "exporttranslations": "នាំចេញការបកប្រែ",
+ "translate-export-form-format": "ទម្រង់",
+ "translate-export-invalid-format": "សូមផ្ដល់ទម្រង់ត្រឹមត្រូវមួយ។",
"translate-magic-pagename": "ការបកប្រែ​មេឌាវិគី​បន្ថែម",
"translate-magic-help": "អ្នកអាចធ្វើការបកប្រែឈ្មោះក្លាយរបស់ទំព័រពិសេសៗ សិល្ប៍ស័ព្ទ និងឈ្មោះនៃលំហឈ្មោះ។\n\n\nឈ្មោះក្លាយរបស់ទំព័រពិសេសៗ​និង​សិល្ប៍ស័ព្ទ​អាចមានបទប្រែសំរួលច្រើន។\nបទប្រែសំរួលទាំងនោះច្រូវខណ្ឌចែកពីគ្នាដោយសញ្ញាក្បៀស (,)។\nលំហឈ្មោះអាចមានបទប្រែសំរួលតែមួយប៉ុណ្ណោះ ។\n\n\nក្នុងការបកប្រែលំហឈ្មោះ <code>ការពិភាក្សាអំពី $1</code> ជាករណីពិសេស។ <code>$1</code> ត្រូវបានជំនួសដោយឈ្មោះវិបសាយ (ឧទាហរណ៍៖ <code>{{ns:project_talk}}</code>)។\nប្រសិនបើ​ភាសារបស់អ្នក​មិនបានបង្ហាញត្រឹមត្រូវដោយមិនប្តូរឈ្មោះវិបសាយទេ សូមទាក់ទងអ្នកអភិវឌ្ឍ (អ្នករចនាវិបសាយ)។\n\n\nអ្នកចាំបាច់ត្រូវតែស្ថិតក្នុងក្រុមអ្នកប្រែសម្រួល ទើបអាចរក្សាទុកបំលាស់ប្តូរបាន។\nបំលាស់ប្តូរនឹងមិនត្រូវបានរក្សាទុកទេ​លើកលែងតែអ្នកបានចុចប៊ូតុង​រក្សាទំព័រទុក​នៅខាងក្រោម ។",
"translate-magic-module": "ម៉ូឌុល៖",
@@ -80,20 +76,20 @@
"translate-magic-namespace": "ឈ្មោះនៃលំហឈ្មោះ",
"translate-magic-notsaved": "កំណែប្រែរបស់អ្នកមិនត្រូវបានរក្សាទុកទេ!",
"translate-magic-errors": "សូមកែប្រែ{{PLURAL:$1|កំហុសឆ្គង|កំហុសឆ្គង}}ទាំងនេះ ដែលមានក្នុងការកែប្រែ៖",
- "translate-magic-saved": "ការកែប្រែរបស់អ្នក​ត្រូវបានរក្សាទុកដោយជោគជ័យ។",
+ "translate-magic-saved": "បន្លាស់ប្ដូររបស់អ្នក​ត្រូវបានរក្សាទុក។",
"translate-checks-parameters": "{{PLURAL:$2|ប៉ារ៉ាម៉ែត្រ|ប៉ារ៉ាម៉ែត្រ}}ខាងក្រោមនេះមិនត្រូវបានគេប្រើទេ៖\n\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|parameter is|ប៉ារ៉ាម៉ែត្រ}}ខាងក្រោមនេះមិនត្រូវបានស្គាល់ទេ៖\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "មាន{{PLURAL:$2|វង់ក្រចក|វង់ក្រចក}}​ដែលមិន​មាន​គូ៖\n\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "{{PLURAL:$2|តំណភ្ជាប់|តំណភ្ជាប់}}ខាងក្រោមនេះ​មានបញ្ហា៖ <strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "Following {{PLURAL:$2|តំណភ្ជាប់|តំណភ្ជាប់ចំនួន $2}} ខាងក្រោមនេះបាត់៖\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-xhtml": "សូម​ជំនួស​{{PLURAL:$2|tag|ប្លាក}}​ខាងក្រោមដោយប្លាកដែលត្រឹមត្រូវ៖\n\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-xhtml": "សូម​ជំនួស​{{PLURAL:$2|tag|ស្លាក}}​ខាងក្រោមដោយស្លាកដែលត្រឹមត្រូវ៖\n\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "និយមន័យ​ប្រើប្រាស់ <nowiki>{{PLURAL:}}</nowiki> ប៉ុន្តែ​បទប្រែសម្រួល​មិនមាន ។",
"translate-checks-pagename": "លំហឈ្មោះ​ត្រូវ​បាន​ផ្លាស់ប្ដូរ​ពី​និយមន័យ",
"translate-checks-format": "ការបកប្រែនេះមិនគោរពតាមនិយមន័យឬមានវេយ្យាករណ៍មិនត្រឹមត្រូវ៖ $1",
"translate-checks-fudforum-syntax": "ប្រើ <nowiki>$1</nowiki> ជំនួសអោយ <nowiki>$2</nowiki> នៅក្នុងគំរោងនេះ។",
"translate-pref-nonewsletter": "កុំផ្ញើអ៊ីមែលព្រឹត្តិប័ត្រសារព័ត៌មានមកខ្ញុំអី",
"translate-pref-editassistlang": "ភាសាជំនួយ៖",
- "prefs-translate": "ជំរើសទាក់ទិននឹងការបកប្រែ",
+ "prefs-translate": "ជម្រើសទាក់ទិននឹងការបកប្រែ",
"translate-pref-editassistlang-help": "បញ្ជីកូដភាសាខណ្ឌចែកដោយសញ្ញាក្បៀស។\nការបកប្រែសារមួយនៅក្នុងភាសាទាំងនេះ ត្រូវបានបង្ហាញពេលដែលអ្នកកំពុងបកប្រែ។\nបញ្ចីភាសាតាមលំនាំដើម អាស្រ័យលើភាសារបស់អ្នក។",
"translate-pref-editassistlang-bad": "កូដភាសាមិនត្រឹមត្រូវនៅក្នុងបញ្ជីនេះ៖\n<nowiki>$1</nowiki>។",
"right-translate": "កែប្រែដោយប្រើអន្តរមុខបកប្រែ",
@@ -102,6 +98,9 @@
"right-translate-import": "នាំចូលការបកប្រែក្រៅបណ្ដាញ",
"action-translate-import": "នាំចូលការបកប្រែក្រៅបណ្ដាញ",
"right-translate-messagereview": "ផ្ទៀងផ្ទាត់ការបកប្រែ",
+ "action-translate-messagereview": "ផ្ទៀងផ្ទាត់ការបកប្រែ",
+ "translate-rcfilters-translations": "ការបកប្រែ",
+ "translate-rcfilters-translations-only-label": "ការបកប្រែ",
"translate-rc-translation-filter": "ការបកប្រែតម្រង៖",
"translate-rc-translation-filter-no": "កុំធ្វើអ្វីទាំងអស់",
"translate-rc-translation-filter-only": "បង្ហាញតែការបកប្រែប៉ុណ្ណោះ",
@@ -133,7 +132,6 @@
"translate-statsf-language": "ចុល្លភាគ (,)-បាន​ខណ្ឌ​ចែក​បញ្ជី​កូដ​ភាសា",
"translate-statsf-group": "ចុល្លភាគ (,)-បាន​ខណ្ឌ​ចែក​បញ្ជី​កូដ​ក្រុម",
"translate-statsf-submit": "ការមើលមុន",
- "translate-tag-category": "ទំព័រដែលអាចបកប្រែបាន",
"translate-tag-page-desc": "ការបកប្រែរបស់ទំព័រវិគី [[$2|$1]] ពី $3 ($4)។",
"translate-sidebar-alltrans": "ជាភាសាដទៃទៀត",
"translations": "បំណកប្រែទាំងអស់",
@@ -165,7 +163,7 @@
"translate-untranslated": "មិនទាន់បកប្រែ",
"translate-percentage-complete": "បកប្រែរួច",
"translate-percentage-fuzzy": "ហួសសម័យ",
- "translate-languagestats-overall": "សរុប",
+ "translate-languagestats-overall": "សារទាំងអស់រួមគ្នា",
"translate-ls-submit": "បង្ហាញស្ថិតិ",
"translate-ls-column-group": "ក្រុមសារ",
"translate-mgs-pagename": "ស្ថិតិក្រុមសារ",
@@ -175,7 +173,7 @@
"translate-mgs-noempty": "កុំបង្ហាញភាសាដែលគ្មានការបកប្រែ",
"translate-mgs-submit": "បង្ហាញស្ថិតិ",
"translate-mgs-column-language": "ភាសា",
- "translate-mgs-totals": "សរុប",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|ភាសា|ភាសា}}សរុបទាំងអស់",
"supportedlanguages": "ភាសាដែលអាចប្រើបាន",
"supportedlanguages-summary": "ទំព័រនេះបង្ហាញបញ្ជីភាសាទាំងអស់ដែលគាំទ្រដោយ {{SITENAME}} រួមជាមួួយឈ្មោះអ្នកបកប្រែដែលកំពុងធ្វើការលើភាសានោះ។ ឈ្មោះអ្នកបកប្រែឃើញកាន់តែធំ មានន័យថាអ្នកប្រើប្រាស់នោះបានរួមចំណែកកែប្រែកាន់តែច្រើន។ ពណ៌បន្ទាត់គូសពីក្រោមបង្ហាញពីភាពសកម្មរបស់អ្នកបកប្រែនាពេលថ្មីៗនេះ។",
"supportedlanguages-colorlegend": "អត្ថន័យពណ៌៖ ការបកប្រែចុងក្រោយ $1 ថ្ងៃមុន។",
@@ -197,9 +195,7 @@
"translate-js-summary": "ចំណារពន្យល់៖",
"translate-js-save": "រក្សាទុក",
"translate-js-next": "រក្សាទុករួចបើកសារបន្ទាប់",
- "translate-js-nonext": "នេះជាសារចុងក្រោយគេនៅលើទំព័រនេះ",
"translate-js-skip": "រំលងទៅកាន់សារបន្ទាប់",
- "translate-js-save-failed": "ការរក្សាទុកបានបរាជ័រ។ សូមរាយការណ៍អំពីបញ្ហានេះ។",
"translate-js-history": "ប្រវត្តិនៃការបកប្រែ",
"translate-js-support": "សួរសំណួរ",
"translate-js-support-title": "សួររកជំនួយប្រសិនបើគ្មានព័ត៌មានគ្រប់គ្រាន់សំរាប់ជួយអោយអ្នកបកប្រើសារនេះបានត្រឹមត្រូវទេ។",
@@ -218,16 +214,6 @@
"translate-searchprofile-tooltip": "ស្វែងរកពីក្នុងការបកប្រែទាំងអស់",
"translate-search-languagefilter": "ចម្រោះតាមភាសា៖",
"translate-search-nofilter": "បង្ហាញទាំងអស់",
- "translate-messagereview-submit": "កត់ចំណាំថាបានផ្ទៀងផ្ទាត់រួច",
- "translate-messagereview-progress": "កំពុងកត់ចំណាំថាបានផ្ទៀងផ្ទាត់រួច",
- "translate-messagereview-failure": "កត់ចំណាំថាបានផ្ទៀងផ្ទាត់មិនបានសម្រេច៖ $1",
- "translate-messagereview-done": "បានផ្ទៀងផ្ទាត់រួច",
- "translate-messagereview-reviews": "បានផ្ទៀងផ្ទាត់រួចដោយ {{PLURAL:$1|អ្នកប្រើប្រាស់ម្នាក់|អ្នកប្រើប្រាស់ $1 នាក់}}",
- "translate-messagereview-reviewswithyou": "បានផ្ទៀងផ្ទាត់រួចដោយ {{PLURAL:$1|អ្នក|អ្នកប្រើប្រាស់ $1 នាក់រួមទាំងរូបអ្នក}}",
- "api-error-invalidrevision": "រកមិនឃើញការបកប្រែ",
- "api-error-unknownmessage": "រកមិនឃើញសារ",
- "api-error-owntranslation": "អ្នកមិនអាចកត់ចំណាំការបកប្រែរបស់ខ្លួនអ្នកផ្ទាល់ថាបានផ្ទៀងផ្ទាត់រួចទេ",
- "translate-gethelp": "ជំនួយ​",
"translate-msggroupselector-projects": "ក្រុមសារ",
"translate-msggroupselector-search-placeholder": "ស្វែងរកក្រុម",
"translate-msggroupselector-search-all": "ទាំង​អស់",
@@ -246,8 +232,9 @@
"tux-status-saving": "កំពុងរក្សាទុក",
"tux-status-unsaved": "មិនទាន់រក្សាទុក",
"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/www/wiki/extensions/Translate/i18n/core/kn.json b/www/wiki/extensions/Translate/i18n/core/kn.json
index 9136edfc..c482ccc6 100644
--- a/www/wiki/extensions/Translate/i18n/core/kn.json
+++ b/www/wiki/extensions/Translate/i18n/core/kn.json
@@ -12,7 +12,6 @@
},
"translate": "ಭಾಷಾಂತರಿಸಿ",
"translate-desc": "[[Special:Translate|ವಿಷೇಶ ಪುಟ]]ಮೀಡಿಯಾವಿಕಿ ಮತ್ತು ಹೆಚ್ಚಿನದನ್ನು ಭಾಷಾಂತರಿಸಲು",
- "translate-taskui-view": "ಎಲ್ಲಾ ಸಂದೇಶಗಳನ್ನು ತೋರಿಸಿ",
"translate-taction-translate": "ಭಾಷಾಂತರಿಸಿ",
"translate-taction-lstats": "ಭಾಷಾ ಅಂಕಿಅಂಶಗಳು",
"translate-page-no-such-language": "ಉಲ್ಲೇಖಿಸಿದ ಭಾಷೆ ಅಸ್ತಿತ್ವದಲ್ಲಿ ಇಲ್ಲ",
@@ -43,9 +42,7 @@
"translate-edit-no-information": "\"ಈ ಸಂದೇಶಕ್ಕೆ ಯಾವುದೇ ದಾಖಲೆಗಳಿಲ್ಲ.\"\n\"ನಿಮಗೆ ಈ ಸಂದೇಶ ಎಲ್ಲಿಯಾದರೂ ಅಥವಾ ಹೇಗಾದರೂ ಉಪಯೋಗದಲ್ಲಿರುವುದು ತಿಳಿದಿದ್ದರೆ,ನೀವು ಇದಕ್ಕೆ ತಕ್ಕ ದಾಖಲೆಗಳನ್ನು ಸೇರಿಸಿ ಬೇರಿ ಭಾಷಾಂತರಕಾರರಿಗೆ ಸಹಾಯ ಮಾಡಬಹುದು.\"",
"translate-edit-information": "ಸಂದೇಶದ ಬಗ್ಗೆ ಮಾಹಿತಿ ($1)",
"translate-edit-in-other-languages": "ಬೇರೆ ಭಾಷೆಗಳಲ್ಲಿ ಸಂದೇಶ",
- "translate-edit-committed": "ತಂತ್ರಾಂಶದಲ್ಲಿ ಪ್ರಸ್ತುತ ಭಾಷಾಂತರ",
"translate-edit-warnings": "ಅಸಂಪೂರ್ಣ ಭಾಷಾಂತರದ ಬಗ್ಗೆ ಎಚ್ಚರಿಕೆ",
- "translate-edit-tmsugs": "ಭಾಷಾಂತರ ನೆನಪು ಹಾಗೂ ಭಾಷಾಂತರ ಯಂತ್ರಗಳ ಸಲಹೆ",
"translate-edit-tmmatch": "$1% ಹೊ೦ದಿಸಿ",
"translate-use-suggestion": "ಈಗಿನ ಭಾಷಾಂತರವನ್ನು ಈ ಸಲಹೆಯೊಂದಿಗೆ ಬದಲಾಯಿಸಿ",
"translate-edit-nopermission": "ಭಾಷಾಂತರಿಸಲು ನಿಮಗೆ ಅನುಮತಿ ಬೇಕು",
@@ -94,7 +91,6 @@
"translate-statsf-count-edits": "ಸಂಪಾದನೆಗಳ ಸಂಖ್ಯೆ",
"translate-statsf-count-users": "ಸಕ್ರಿಯ ಭಾಷಾಂತರಕಾರರು",
"translate-statsf-submit": "ಮುನ್ನೋಟ",
- "translate-tag-category": "ಭಾಷಾಂತರಿಸಬಹುದಾದ ಪುಟಗಳು",
"translate-tag-page-desc": "ವಿಕಿ [[$2|$1]]ಪುಟಗಳ ಅನುವಾದ.",
"translate-sidebar-alltrans": "ಇತರ ಭಾಷೆಗಳಲ್ಲಿ",
"translations": "ಎಲ್ಲಾ ಅನುವಾದಗಳು",
diff --git a/www/wiki/extensions/Translate/i18n/core/ko.json b/www/wiki/extensions/Translate/i18n/core/ko.json
index 743053de..11d9a975 100644
--- a/www/wiki/extensions/Translate/i18n/core/ko.json
+++ b/www/wiki/extensions/Translate/i18n/core/ko.json
@@ -14,16 +14,12 @@
"Bluemersen",
"Infinity",
"Hwangjy9",
- "HDNua"
+ "HDNua",
+ "Ykhwong"
]
},
"translate": "번역하기",
"translate-desc": "미디어위키와 다른 것들을 번역하기 위한 [[Special:Translate|특수 문서]]",
- "translate-taskui-view": "모든 메시지 보기",
- "translate-taskui-untranslated": "번역되지 않은 메시지 보기",
- "translate-taskui-optional": "선택적 메시지 보기",
- "translate-taskui-acceptqueue": "내가 검토한 것으로 표시할 수 있는 메시지만",
- "translate-taskui-reviewall": "모든 번역 검토하기",
"translate-taskui-export-to-file": "네이티브 형식으로 내보내기",
"translate-taskui-export-as-po": "오프라인 번역용으로 내보내기",
"translate-taction-translate": "번역하기",
@@ -31,7 +27,7 @@
"translate-taction-lstats": "언어 통계",
"translate-taction-mstats": "메시지 그룹 통계",
"translate-taction-export": "내보내기",
- "translate-taction-disabled": "이 행동은 이 위키에서 비활성화되어 있습니다.",
+ "translate-taction-disabled": "이 동작은 이 위키에서 비활성화되어 있습니다.",
"translate-page-no-such-language": "지정한 언어가 잘못되었습니다.",
"translate-page-no-such-group": "지정한 그룹이 잘못되었습니다.",
"translate-page-disabled": "이 그룹에서 이 언어로의 번역이 비활성화되어 있습니다.\n이유:\n\n<em>$1</em>",
@@ -45,20 +41,20 @@
"translate-page-navigation-legend": "둘러보기",
"translate-page-showing": "메시지 $3개 중 $1 - $2을(를) 보고 있습니다.",
"translate-page-showing-all": "{{PLURAL:$1|메시지}} $1개를 보고 있습니다.",
+ "translate-page-showing-none": "보여줄 메시지가 없습니다.",
"translate-next": "다음 페이지",
"translate-prev": "이전 페이지",
"translate-page-description-legend": "이 그룹에 대한 정보",
"translate-page-description-hasoptional": "이 메시지 그룹은 선택적 메시지를 포함합니다.\n언어에 공백을 사용하거나 적절한 이름을 번역할 수 없는 등의 특별한 요구 사항이\n있을 때에만 선택적 메시지를 번역해야 합니다. $1",
"translate-page-description-hasoptional-open": "선택적 메시지 보기",
"translate-page-edit": "편집",
- "translate-ext-url": "<hr />웹 사이트: $1",
"translate-optional": "(선택 사항)",
"translate-ignored": "(무시됨)",
"translate-edit-title": "\"$1\" 편집하기",
"translate-edit-definition": "메시지 정의",
"translate-edit-translation": "번역",
"translate-edit-contribute": "기여",
- "translate-edit-no-information": "<em>이 메시지에 대한 설명문이 없습니다.\n만약 이 메시지가 어디에 어떻게 사용되는지 알고 있다면 설명문을 작성해 다른 번역자를 도와줄 수 있습니다.</em>",
+ "translate-edit-no-information": "이 메시지에 대한 설명문이 없습니다.\n만약 이 메시지가 어디에 어떻게 사용되는지 알고 있다면 설명문을 작성해 다른 번역자를 도와줄 수 있습니다.",
"translate-edit-information": "이 메시지에 대한 정보 ($1)",
"translate-edit-in-other-languages": "이 메시지의 다른 언어판",
"translate-edit-warnings": "불완전한 번역에 대한 경고",
@@ -67,8 +63,13 @@
"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-help": "여기서 특수 문서 이름, 특수 명령, 이름공간 이름을 번역할 수 있습니다.\n\n특수 문서와 특수 명령은 여러 개의 번역이 가능합니다.\n여러 개의 번역을 할 경우에는 쉼표(,)로 번역을 구별합니다.\n단, 이름공간은 오직 하나의 번역만 가능합니다.\n\n번역할 때 프로젝트 토론 이름공간인 <code>$1 talk</code>은 복잡할 수 있습니다.\n<code>$1</code>(은)는 프로젝트 사이트 이름(예를 들어 <code>{{ns:project_talk}}</code>)으로 바뀝니다.\n사이트 이름을 바꾸지 않고서 적절한 표현 방법을 구성할 수 없다면 [[Support]]에서 문의하세요.\n\n이 편집을 저장하려면 번역자 권한이 필요합니다.\n아래의 저장 버튼을 누르기 전까지는 바뀐 내용이 저장되지 않습니다.",
+ "translate-magic-help": "여기서 특수 문서 이름, 특수 명령, 이름공간 이름을 번역할 수 있습니다.\n\n특수 문서와 특수 명령은 여러 개의 번역이 가능합니다.\n여러 개의 번역을 할 경우에는 쉼표(,)로 번역을 구별합니다.\n단, 이름공간은 오직 하나의 번역만 가능합니다.\n\n번역할 때 프로젝트 토론 이름공간인 <code>$1 talk</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": "내보내기",
@@ -99,8 +100,8 @@
"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-fudforum-syntax": "이 프로젝트에는 <nowiki>$2</nowiki> 대신에 <nowiki>$1</nowiki>(을)를 사용하세요.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki>은(는) 잘못된 형식입니다.",
+ "translate-checks-fudforum-syntax": "이 프로젝트에는 <nowiki>$2</nowiki> 대신에 <nowiki>$1</nowiki>을(를) 사용하세요.",
"translate-pref-nonewsletter": "이메일 뉴스레터를 보내지 않음",
"translate-pref-editassistlang": "보조 언어:",
"prefs-translate": "번역 옵션",
@@ -113,6 +114,13 @@
"action-translate-import": "오프라인 번역을 가져올",
"right-translate-messagereview": "번역 검토하기",
"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": "미디어위키 이름공간의 사이트 메시지의 사용자 지정 부분입니다.",
"translate-rc-translation-filter": "번역 필터:",
"translate-rc-translation-filter-no": "모두 보기",
"translate-rc-translation-filter-only": "번역만 보기",
@@ -157,7 +165,7 @@
"translate-translations-including-no-param": "하위 문서 변수에 올바른 메시지 키를 입력해 주십시오.",
"translate-translations-history-short": "역",
"languagestats": "언어 통계",
- "languagestats-summary": "이 문서는 특정 언어에 대한 모든 메시지 그룹에 대한 번역 통계를 보여줍니니다.",
+ "languagestats-summary": "이 문서는 특정 언어에 대한 모든 메시지 그룹에 대한 번역 통계를 보여줍니다.",
"messagegroupstats-summary": "이 페이지는 메시지 그룹 통계를 보여줍니다.",
"languagestats-stats-for": "$1 ($2)에 대한 번역 통계",
"languagestats-recenttranslations": "최근 번역",
@@ -175,22 +183,24 @@
"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-fieldset": "보기 설정",
+ "translate-mgs-fieldset": "표시 환경 설정",
"translate-mgs-group": "메시지 그룹:",
- "translate-mgs-nocomplete": "번역이 완료된 언어는 보지 않기",
- "translate-mgs-noempty": "번역이 전혀 되지 않은 언어를 보지 않기",
+ "translate-mgs-nocomplete": "번역이 완료된 언어는 표시하지 않기",
+ "translate-mgs-noempty": "번역이 전혀 되지 않은 언어를 표시하지 않기",
"translate-mgs-submit": "통계 보기",
"translate-mgs-column-language": "언어",
- "translate-mgs-totals": "모든 언어",
+ "translate-mgs-totals": "$1개의 모든 {{PLURAL:$1|언어}}",
"translate-mgs-invalid-group": "지정한 $1 그룹이 존재하지 않습니다.",
"translate-mgs-nothing": "요청된 통계에 대해 보여줄 것이 없습니다.",
"supportedlanguages": "지원하는 언어",
"supportedlanguages-summary": "이 문서는 {{SITENAME}}에서 지원하는 모든 언어의 목록과 그 언어로 번역하는 번역자의 이름을 보여줍니다.\n번역자가 편집을 더 많이 할수록 이름이 크게 나타납니다.\n밑줄의 색깔은 번역자가 얼마나 최근에 활동했는지를 나타냅니다.",
"supportedlanguages-colorlegend": "색깔 범례: 마지막 번역을 한 날짜가 $1일 전.",
+ "supportedlanguages-sqlite-error": "SQLite는 지원되지 않습니다",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|번역자}}|번역자}}: $1",
"supportedlanguages-recenttranslations": "최근 번역",
"supportedlanguages-count": "총 {{PLURAL:$1|언어 수}}는 $1개입니다.",
@@ -211,13 +221,13 @@
"translate-manage-action-import": "가져오기",
"translate-manage-action-conflict": "퍼지 처리하여 가져오기",
"translate-manage-action-ignore": "무시",
- "translate-manage-action-fuzzy": "가져오기와 퍼지 번역",
+ "translate-manage-action-fuzzy": "번역을 가져와서 퍼지 처리",
"translate-manage-nochanges": "이 그룹에 대한 메시지 정의 바뀜이 없습니다.",
"translate-manage-nochanges-other": "이 언어에 대한 바뀜이 없습니다.\n그룹 자세한 정보 보기로 돌아가려면 다음 링크를 사용하세요.",
"translate-manage-inconsistent": "요청에서 일치하지 않음을 발견했습니다.\n바뀜을 확인하고 다시 시도하세요.\n자세한 정보: $1.",
"translate-manage-toolong": "최대 처리 시간이 $1{{PLURAL:$1|초}} 초과했습니다.\n처리를 계속하려면 양식을 다시 전송하세요.",
- "translate-manage-import-summary": "바깥 원본에서 새 판을 가져옴",
- "translate-manage-conflict-summary": "바깥 소스로부터 새 버전을 가져옵니다.\n확인하세요.",
+ "translate-manage-import-summary": "외부 원본에서 새 판을 가져옴",
+ "translate-manage-conflict-summary": "외부 소스로부터 새 버전을 가져옵니다.\n확인해 주십시오.",
"translate-manage-submit": "실행",
"translate-manage-intro-other": "다음은 $1로 된 번역 바뀜 목록입니다.\n바뀜을 검토하고 각 업데이트에 대해 수행할 작업을 선택하세요.\n바뀜을 무시하기로 선택했다면 이 작업만 일시적입니다.",
"translate-manage-import-ok": "가져옴: $1",
@@ -235,9 +245,7 @@
"translate-js-summary": "요약:",
"translate-js-save": "저장",
"translate-js-next": "저장하고 다음으로 넘어가기",
- "translate-js-nonext": "이 페이지의 마지막 메시지입니다.",
"translate-js-skip": "다음으로 넘어가기",
- "translate-js-save-failed": "저장에 실패했습니다. 이 오류를 신고해주시기 바랍니다.",
"translate-js-history": "번역 역사",
"translate-js-support": "질문하기",
"translate-js-support-title": "이 메시지를 정확히 번역할 만한 정보가 부족하다면 도움을 요청하세요.",
@@ -248,31 +256,19 @@
"translate-gs-speakers": "말한이",
"translate-gs-score": "점수",
"translate-gs-multiple": "여러",
- "translate-gs-count": "갯수",
+ "translate-gs-count": "개수",
"translate-gs-total": "합계",
"translate-gs-avgscore": "평균 점수",
"translate-documentation-language": "메시지 설명문",
"translate-searchprofile": "번역문",
"translate-searchprofile-tooltip": "모든 번역에서 검색",
+ "translate-searchprofile-note": "더 많은 검색 옵션은 [$1 번역 검색]을 통해 이용할 수 있습니다.",
"translate-search-languagefilter": "언어에 대한 필터:",
"translate-search-nofilter": "필터링하지 않음",
- "translate-messagereview-submit": "검토한 것으로 표시",
- "translate-messagereview-progress": "검토한 것으로 표시 중...",
- "translate-messagereview-failure": "검토한 것으로 표시하는 데 실패했습니다: $1",
- "translate-messagereview-done": "검토됨",
- "translate-messagereview-reviews": "{{PLURAL:$1|한 사용자|사용자 $1명}}에 의해 검토함",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|나|나를 포함한 사용자 $1명}}에 의해 검토함",
- "api-error-invalidrevision": "번역을 찾을 수 없습니다",
- "api-error-unknownmessage": "메시지를 찾을 수 없습니다",
- "api-error-fuzzymessage": "번역이 퍼지 처리되었습니다.",
- "api-error-owntranslation": "자신의 번역은 검토한 것으로 표시할 수 없습니다",
- "translate-messagereview-no-fuzzy": "퍼지 번역은 검토한 것으로 표시 수 없습니다.",
- "translate-messagereview-no-own": "자신의 번역은 검토한 것으로 표시할 수 없습니다.",
- "translate-messagereview-doit": "이 번역을 검토한 것으로 표시합니다.",
"log-name-translationreview": "번역 검토 기록",
"log-description-translationreview": "번역과 메시지 그룹에 대한 모든 검토 기록입니다.",
- "logentry-translationreview-message": "$1 사용자가 $3 번역을 {{GENDER:$2|검토했습니다}}",
- "logentry-translationreview-group": "$1 사용자가 $3의 $4 번역의 상태를 $6에서 $7로 {{GENDER:$2|바꾸었습니다}}",
+ "logentry-translationreview-message": "$1님이 $3 번역을 {{GENDER:$2|검토했습니다}}",
+ "logentry-translationreview-group": "$1님이 $3의 $4 번역의 상태를 $6에서 $7(으)로 {{GENDER:$2|바꾸었습니다}}",
"group-translate-sandboxed": "승인하지 않은 번역자",
"group-translate-sandboxed-member": "{{GENDER:$1|승인하지 않은 번역자}}",
"right-translate-sandboxmanage": "연습장 사용자 관리",
@@ -290,7 +286,6 @@
"translate-dynagroup-recent-desc": "이 메시지 그룹은 이 언어로의 모든 최근 번역을 보여줍니다.\n검토 작업에 아주 유용합니다.",
"translate-dynagroup-additions-label": "최근 추가",
"translate-dynagroup-additions-desc": "이 메시지 그룹은 새 메시지와 바뀐 메시지를 보여줍니다.",
- "translate-gethelp": "도움말",
"translate-msggroupselector-projects": "메시지 그룹",
"translate-msggroupselector-search-placeholder": "그룹 검색",
"translate-msggroupselector-search-all": "모두",
@@ -309,14 +304,17 @@
"tux-status-translated": "번역됨",
"tux-status-saving": "저장 중...",
"tux-status-unsaved": "저장하지 않음",
+ "tux-save-unknown-error": "알 수 없는 오류가 발생했습니다.",
"tux-editor-placeholder": "내 번역",
+ "tux-editor-editsummary-placeholder": "요약 (선택 사항)",
"tux-editor-paste-original-button-label": "원본 텍스트 붙여넣기",
"tux-editor-discard-changes-button-label": "바뀜 버리기",
"tux-editor-save-button-label": "번역 저장",
"tux-editor-skip-button-label": "다음으로 넘어가기",
"tux-editor-cancel-button-label": "취소",
"tux-editor-confirm-button-label": "번역 확인",
- "tux-editor-shortcut-info": "저장하려면 \"$1\"을 누르거나 다음 메시지로 넘어가려면 \"$2\"를 누르거나 다른 단축키를 보려면 \"$3\"을 누르세요",
+ "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": "제안",
@@ -356,7 +354,7 @@
"tux-empty-list-translated": "번역된 메시지가 없습니다",
"tux-empty-list-translated-guide": "번역을 도울 수 있습니다",
"tux-empty-list-translated-action": "번역",
- "tux-empty-no-messages-to-display": "보여줄 메시지가 없습니다.",
+ "tux-empty-no-messages-to-display": "표시할 메시지가 없습니다.",
"tux-empty-there-are-optional": "선택적 메시지가 목록에 보이지 않습니다",
"tux-empty-show-optional-messages": "선택적 메시지 보기",
"tux-empty-no-outdated-messages": "오래된 메시지가 없습니다",
@@ -371,9 +369,11 @@
"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": "삭제",
"tux-editor-message-tools-translations": "모든 번역",
+ "tux-editor-message-tools-linktothis": "이 메시지로 가는 링크",
"tux-editor-loading": "불러오는 중...",
"translate-search-more-languages-info": "{{PLURAL:$1|언어}} $1개 더 보기",
"translate-statsbar-tooltip": "$1% 번역됨, $2% 검토됨",
@@ -382,5 +382,5 @@
"translate-ulsdep-title": "구성 오류",
"translate-ulsdep-body": "번역 확장 기능은 [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector 일반 언어 선택기 확장 기능]을 필요로 합니다.",
"tux-session-expired": "로그인하고 있지 않습니다. 별도의 탭에서 로그인하세요. 대안으로, 저장하지 않은 번역을 복사하고, 로그인한 다음, 이 문서로 돌아와 다시 번역을 입력하세요.",
- "tux-nojs": "이 문서는 자바스크립트가 필요합니다."
+ "tux-nojs": "이 도구는 자바스크립트 없이 동작하지 않습니다. 자바스크립트를 사용하지 않아 동작하지 않거나 이 브라우저가 지원되지 않습니다."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/krl.json b/www/wiki/extensions/Translate/i18n/core/krl.json
index 378cfc7f..a2db066b 100644
--- a/www/wiki/extensions/Translate/i18n/core/krl.json
+++ b/www/wiki/extensions/Translate/i18n/core/krl.json
@@ -2,12 +2,14 @@
"@metadata": {
"authors": [
"Flrn",
- "Mashoi7"
+ "Mashoi7",
+ "Varvana"
]
},
"translate": "Kiännä",
"translate-taction-translate": "Kiännä",
"translate-page-navigation-legend": "Valličy",
+ "translate-documentation-language": "Viestin dokumentacija",
"tux-languageselector": "Kieli",
"tux-empty-list-translated-action": "Kiännä"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ksh.json b/www/wiki/extensions/Translate/i18n/core/ksh.json
index 4a58cdac..1a39b58b 100644
--- a/www/wiki/extensions/Translate/i18n/core/ksh.json
+++ b/www/wiki/extensions/Translate/i18n/core/ksh.json
@@ -7,11 +7,6 @@
},
"translate": "Övversäze",
"translate-desc": "[[Special:Translate|{{int:specialpage}}]] för et Översäze fum MediaWiki sing Mäldonge un Nohreeschte, un mih.",
- "translate-taskui-view": "Alle Täxte udder Nohreeschte aanzeije",
- "translate-taskui-untranslated": "Onövversaz Täxte udder Nohreeschte aanzeije",
- "translate-taskui-optional": "'Nid esu nüüdeje' Täxte udder Nohreeschte aanzeije.",
- "translate-taskui-acceptqueue": "Bloß di Täxte udder Nohreeschte aanzeije, di_sch och jähjelässe kann",
- "translate-taskui-reviewall": "Alle Övversäzonge jähjelässe",
"translate-taskui-export-to-file": "Em eije Fomaat äxpoteere",
"translate-taskui-export-as-po": "För et Övversäze ußerhallf äxpotteere",
"translate-taction-translate": "Övversäze",
@@ -33,6 +28,7 @@
"translate-page-navigation-legend": "Aanzahl",
"translate-page-showing": "De Nohreshte fon Nommer $1 aff, beß $2, fon ennßjesammp $3.",
"translate-page-showing-all": "{{PLURAL:$1|Eijn_Nohresch|$1 Nohreschte|Keijn_esu_e_Nohreschte}}.",
+ "translate-page-showing-none": "Nix för Aan_ze_zeije.",
"translate-page-paging-links": "[ $1 ] ↔ [ $2 ]",
"translate-next": "Näx Sigk",
"translate-prev": "Förrije Sigk",
@@ -40,7 +36,6 @@
"translate-page-description-hasoptional": "En heh dä Jropp sinn_er 'nit esu nüüdeje' Täxte un Nohreeschte.\nDi sullte bloß övversaz wähde, wann Ding Schprohch jät besönders bruch, esu jät wi käin Zwescheräum udder anders jeschrevve Nahme. $1",
"translate-page-description-hasoptional-open": "Donn de 'nit esu nüüdeje' Täxte udder Nohreeschte aanzeije.",
"translate-page-edit": "Änndere",
- "translate-ext-url": "<hr />Websaijt: $1",
"translate-optional": "(nit esu nüüdesch)",
"translate-ignored": "(övverjange)",
"translate-edit-title": "„$1“ ändere",
@@ -226,9 +221,7 @@
"translate-js-summary": "Koot Zosammejefaß:",
"translate-js-save": "Faßhalde",
"translate-js-next": "Faßhalde un op de nähkßte jonn",
- "translate-js-nonext": "Dat wor de läzde op heh dä Sigg.",
"translate-js-skip": "Jank op de nähkßte",
- "translate-js-save-failed": "Dat Afshpeishere es donävve jejange. Bes esu joot, un donn heh dä Fähler wigger jävve.",
"translate-js-history": "Dä Övversäzong ier Verjangeheit",
"translate-js-support": "Schtäll en Frohch",
"translate-js-support-title": "Frohch noh, wann De nit jenohch Aanjahbe häs, öm heh dä Täx udder di Nohreesch joohd un akeraht ze övversäze.",
@@ -247,19 +240,6 @@
"translate-searchprofile-tooltip": "Söhk en alle Övversäzonge",
"translate-search-languagefilter": "Donn en Schprohch ußwähle:",
"translate-search-nofilter": "Nä — all de Schprohche",
- "translate-messagereview-submit": "Jähjelässe!",
- "translate-messagereview-progress": "Als jähjejelässe makkehre&nbsp;…",
- "translate-messagereview-failure": "Et Makeere als jähjejelässe es donävve jejange: $1",
- "translate-messagereview-done": "Jähjejelässe",
- "translate-messagereview-reviews": "Jähjejelässe vun {{PLURAL:$1|einem|$1|keinem}} Metmaacher",
- "translate-messagereview-reviewswithyou": "Jähjejelässe {{PLURAL:$1|vun Dir alleins|vun $1 Metmaacher, och vun Der sellver|bes jäz vun keinem}}.",
- "api-error-invalidrevision": "En Övversäzong hät sesch nit fenge lohße",
- "api-error-unknownmessage": "Dä Täx udder di Nohreesch wohr nit ze fenge",
- "api-error-fuzzymessage": "Di Övversäzong es als övverhollt makkeet.",
- "api-error-owntranslation": "De eije Övversäzonge kam_mer nit jähjelässe.",
- "translate-messagereview-no-fuzzy": "Övverhollte Övversäzonge kam_mer nit jähjelässe.",
- "translate-messagereview-no-own": "Ding eije Övversäzonge kanns_De nit jähjelässe.",
- "translate-messagereview-doit": "Donn heh di Ovversäzong als jähjejelässe aannämme.",
"log-name-translationreview": "Logbooch vum Övversäzonge Pröhve",
"log-description-translationreview": "Dat Logbooh hät all de Prööfunge vun Övversäzunge un Jroppe vun Nohreeschte un Täxte.",
"logentry-translationreview-message": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Övversäzong vun „$3“ jähjejelässe.",
@@ -281,7 +261,6 @@
"translate-dynagroup-recent-desc": "Heh di Jropp vun Täxte un Nohreeschte hät all de neue Översäzonge in heh di Schprohch.\nDat es joht för et Jähjelässe.",
"translate-dynagroup-additions-label": "Köözlesch derbei jekumme",
"translate-dynagroup-additions-desc": "Di Jropp hät neue un veränderte Täxte un Nohreeschte.",
- "translate-gethelp": "Hölp",
"translate-msggroupselector-projects": "Nohreeschtejrop",
"translate-msggroupselector-search-placeholder": "Nohrechtejropp zem Söhke",
"translate-msggroupselector-search-all": "All",
@@ -301,14 +280,15 @@
"tux-status-saving": "Ben aam Afseschere{{int:ellipsis}}",
"tux-status-unsaved": "Nit jeseschert",
"tux-editor-placeholder": "Ding Övversäzong",
+ "tux-editor-editsummary-placeholder": "Zesammefaßong (kann fott blihve)",
"tux-editor-paste-original-button-label": "Der Quälltäx enfööje",
"tux-editor-discard-changes-button-label": "Donn de Änderonge verjäße",
"tux-editor-save-button-label": "Di Övversäzong seschere",
"tux-editor-skip-button-label": "Jangk op de nähkßte",
- "tux-editor-cancel-button-label": "Ophüre",
+ "tux-editor-cancel-button-label": "Ophühre",
"tux-editor-confirm-button-label": "De Övversäzong beschtääteje",
"tux-editor-proofread-button-label": "Als nohjelohrt makkeere",
- "tux-editor-shortcut-info": "Kleck op „$1“ zom Seschere udder op „$2“, öm bloß op de Nähkßte ze jonn, udder op „$3“, öm op ander Afköözonge ze kumme.",
+ "tux-editor-shortcut-info": "Kleck op „$1“ zom Seschere udder op „$2“, öm bloß op de Nähkßte ze jonn, op „$4“, öm en Zesammefaßong enzejävve, udder op „$3“, öm op ander Afköözonge ze kumme.",
"tux-editor-edit-desc": "Donn de Äklierong ändere",
"tux-editor-add-desc": "Donn en Äklierong derbei",
"tux-editor-suggestions-title": "Vörschlähsch",
diff --git a/www/wiki/extensions/Translate/i18n/core/ku-latn.json b/www/wiki/extensions/Translate/i18n/core/ku-latn.json
index d694a4bd..a9c77e9d 100644
--- a/www/wiki/extensions/Translate/i18n/core/ku-latn.json
+++ b/www/wiki/extensions/Translate/i18n/core/ku-latn.json
@@ -8,15 +8,11 @@
]
},
"translate": "Wergerîne",
- "translate-taskui-view": "Hemû peyaman nîşan bide",
- "translate-taskui-untranslated": "Mesajên newergerandî nîşan bide",
- "translate-taskui-acceptqueue": "Tenê peyamên ku ez dikarim wek nirxandî nîşan bidim",
- "translate-taskui-reviewall": "Hemû wergera binirxîne",
"translate-taction-translate": "Wergerîne",
"translate-taction-proofread": "Nirxandin",
"translate-taction-lstats": "Statîstîkên ziman",
"translate-taction-mstats": "Statîstîkên koma peyamê",
- "translate-taction-export": "Eksport bike",
+ "translate-taction-export": "Derxîne",
"translate-language-disabled": "Wergerandin bo vî zimanî hatiye astengkirin.",
"translate-page-settings-legend": "Eyar",
"translate-page-group": "Kom",
@@ -28,8 +24,7 @@
"translate-prev": "Rûpela berî",
"translate-page-description-legend": "Agahiyên di derbarê komê de",
"translate-page-edit": "biguherîne",
- "translate-ext-url": "<hr />Malper: $1",
- "translate-optional": "(girêdayî daxwazê)",
+ "translate-optional": "(ne pêwîst)",
"translate-edit-title": "Biguherîne \"$1\"",
"translate-edit-definition": "Peyama orjînal",
"translate-edit-translation": "Werger",
@@ -39,6 +34,7 @@
"translate-edit-tmmatch": "$1% lê tê",
"translate-edit-nopermission": "Bona tu karibî peyaman wergerînî mafên wergerandinê pêwist e.",
"translate-edit-askpermission": "Destûrê bistîne",
+ "translate-export-form-format": "Format",
"translate-magic-module": "Modul:",
"translate-magic-submit": "Here",
"translate-magic-cm-export": "Bişîne",
@@ -46,6 +42,7 @@
"translate-magic-cm-original": "Orjînal",
"translate-magic-cm-comment": "Şîrove:",
"translate-magic-cm-save": "Tomar bike",
+ "translate-magic-cm-savefailed": "Tomarkirin têkçû",
"translate-magic-notsaved": "Guherandina te nehate tomarkirin!",
"translate-magic-saved": "Guherandinên te hatin tomarkirin.",
"translate-pref-editassistlang": "Zimanên alîkar:",
@@ -70,6 +67,7 @@
"translate-statsf-count-users": "Wergêrên çalak",
"translate-statsf-count-registrations": "Bikarhênerên nû",
"translate-statsf-count-reviews": "Nirxandinên wergerê",
+ "translate-statsf-count-reviewers": "Nirxandêr",
"translate-statsf-submit": "Pêşdîtin",
"translate-sidebar-alltrans": "Bi zimanên din",
"translations": "Hemû werger",
@@ -116,10 +114,10 @@
"translate-manage-import-new": "Mesaja nû $1",
"translate-manage-import-deleted": "Peyama jêbirî $1",
"translate-manage-action-import": "Tevlî bike",
+ "translate-manage-action-ignore": "Paşguh bike",
"translate-import-load": "Dosyeyê bar bike",
"translate-js-summary": "Kurte:",
"translate-js-save": "Tomar bike",
- "translate-js-nonext": "Ev li ser vê rûpelê peyama dawî bû.",
"translate-js-skip": "Derbasî ya din bibe",
"translate-js-history": "Dîroka wergerê",
"translate-js-support": "Bipirse",
@@ -129,12 +127,8 @@
"translate-gs-speakers": "Axaftvan",
"translate-gs-count": "Hejmar",
"translate-gs-total": "Hemû",
+ "translate-documentation-language": "Alikariya wergerandinê",
"translate-searchprofile": "Werger",
- "translate-messagereview-submit": "Wek nirxandî nîşan bide",
- "translate-messagereview-done": "Nirxandî",
- "api-error-invalidrevision": "Werger nehat dîtin",
- "api-error-unknownmessage": "Peyam nehat dîtin",
- "translate-messagereview-doit": "Vê wergerê wek nirxandî nîşan bide",
"log-name-translationreview": "Têketina nirxandina wergeran",
"logentry-translationreview-message": "$1 wergera $3 {{GENDER:$2|nirxand}}",
"translate-dynagroup-recent-label": "Wergerên dawî",
@@ -211,6 +205,8 @@
"tux-editor-message-tools-delete": "Jê bibe",
"tux-editor-message-tools-translations": "Hemû werger",
"tux-editor-loading": "Tê barkirin...",
+ "translate-search-more-languages-info": "{{PLURAL:$1|Zimanekî din|$1 zimanên din}}",
"translate-statsbar-tooltip": "$1% wergerandî, $2% nirxandî",
- "translate-statsbar-tooltip-with-fuzzy": "$1% wergerandî, $2% nirxandî, $3% kevnbûyî"
+ "translate-statsbar-tooltip-with-fuzzy": "$1% wergerandî, $2% nirxandî, $3% kevnbûyî",
+ "translate-search-more-groups-info": "{{PLURAL:$1|Komeka din|$1 komên din}}"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/kum.json b/www/wiki/extensions/Translate/i18n/core/kum.json
new file mode 100644
index 00000000..b975a1c9
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/kum.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arsenekoumyk"
+ ]
+ },
+ "translate-documentation-language": "Мактупну маълюматы"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/kw.json b/www/wiki/extensions/Translate/i18n/core/kw.json
new file mode 100644
index 00000000..816e4926
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/kw.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nrowe"
+ ]
+ },
+ "translate-langstats-collapse": "diskara",
+ "translate-documentation-language": "Gweres ow treylya"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/ky.json b/www/wiki/extensions/Translate/i18n/core/ky.json
index 186de502..ffd970dc 100644
--- a/www/wiki/extensions/Translate/i18n/core/ky.json
+++ b/www/wiki/extensions/Translate/i18n/core/ky.json
@@ -56,8 +56,6 @@
"translate-js-save": "Сактоо",
"translate-gs-code": "Код",
"translate-searchprofile": "Котормолор",
- "translate-messagereview-submit": "Кабыл алуу",
- "translate-gethelp": "Жардам",
"translate-msggroupselector-search-all": "Баары",
"tux-languageselector": "Тил",
"tux-tab-all": "Баары",
diff --git a/www/wiki/extensions/Translate/i18n/core/la.json b/www/wiki/extensions/Translate/i18n/core/la.json
index 4b2f61c1..00a2c328 100644
--- a/www/wiki/extensions/Translate/i18n/core/la.json
+++ b/www/wiki/extensions/Translate/i18n/core/la.json
@@ -2,12 +2,14 @@
"@metadata": {
"authors": [
"SPQRobin",
- "UV"
+ "UV",
+ "Andrew Dalby"
]
},
"translate": "Traducere",
"translate-next": "Pagina proxima",
"translate-prev": "Pagina superior",
"translate-magic-cm-save": "Servare",
- "translate-sidebar-alltrans": "Linguis aliis"
+ "translate-sidebar-alltrans": "Linguis aliis",
+ "translate-documentation-language": "Ut facilius convertatur"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/lag.json b/www/wiki/extensions/Translate/i18n/core/lag.json
new file mode 100644
index 00000000..07cc4886
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/lag.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baba Tabita"
+ ]
+ },
+ "translate-statsf-scale-months": "Myeeri",
+ "tux-editor-close-tooltip": "Chuunga",
+ "tux-editor-message-tools-history": "Hɨstoríya",
+ "tux-editor-message-tools-delete": "Honola"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/lb.json b/www/wiki/extensions/Translate/i18n/core/lb.json
index 52c55005..ae6b025d 100644
--- a/www/wiki/extensions/Translate/i18n/core/lb.json
+++ b/www/wiki/extensions/Translate/i18n/core/lb.json
@@ -9,11 +9,6 @@
"translate": "Iwwersetzt",
"translate-extensionname": "Iwwersetzen",
"translate-desc": "[[Special:Translate|Spezialsäit]] fir d'Iwwersetzung vu MediaWiki-Systemmessagen a fir Aneres",
- "translate-taskui-view": "All Message weisen",
- "translate-taskui-untranslated": "Net iwwersate Message weisen",
- "translate-taskui-optional": "Optional Message weisen.",
- "translate-taskui-acceptqueue": "Nëmme Messagen déi ech als nogekuckt markéieren däerf",
- "translate-taskui-reviewall": "All Iwwersetzungen nokucken",
"translate-taskui-export-to-file": "Am native Format exportéieren",
"translate-taskui-export-as-po": "Exportéiere fir off-line z'iwwersetzen",
"translate-taction-translate": "Iwwersetzen",
@@ -35,13 +30,13 @@
"translate-page-navigation-legend": "Navigatioun",
"translate-page-showing": "D'Message vu(n) $1 bis $2 vun am Ganze(n) $3 gi gewisen.",
"translate-page-showing-all": "$1 {{PLURAL:$1|Message gëtt|Message gi}} gewisen",
+ "translate-page-showing-none": "Kee Message fir ze weisen",
"translate-next": "Nächst Säit",
"translate-prev": "Vireg Säit",
"translate-page-description-legend": "Informatiounen iwwer de Grupp",
"translate-page-description-hasoptional": "An dësem Groupe vu Message sinn optional Messagen.\nOptional Message sollen nëmmen iwwersat gi wann Är Sprooch speziell Ufuerderungen huet wéi zum Beispill datt Espacen net benotzt ginn oder eng Transliteratioun vu speziellen Nimm. $1",
"translate-page-description-hasoptional-open": "Optional Message weisen.",
"translate-page-edit": "änneren",
- "translate-ext-url": "<hr />Internet-Site: $1",
"translate-optional": "(optional)",
"translate-ignored": "(ignoréiert)",
"translate-edit-title": "\"$1\" änneren",
@@ -57,6 +52,10 @@
"translate-use-suggestion": "Déi aktuell Iwwersetzung duerch dëse Virschlag ersetzen.",
"translate-edit-nopermission": "Dir braucht eng Iwwersetzungsrechter fir Messagen z'iwwersetzen.",
"translate-edit-askpermission": "Autorisatioun kréien",
+ "exporttranslations": "Iwwersetzungen exportéieren",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Gitt w.e.g. e valabele Format an.",
+ "translate-export-not-supported": "Den Export vun Iwwersetzunge gëtt net ënnerstëtzt.",
"translate-magic-pagename": "Erweidert MediaWiki Iwwersetzung",
"translate-magic-help": "Dir kënnt d'Aliase vu Spezialsäiten, magesch Wierder an Nummraum Nimm iwwersetzen.\n\nSpezial Säit ''Aliasen'' a ''magesch Wierder'' kënne méi Iwwersetzungen hunn.\nIwwersetzunge gi mat engem Komma (,) getrennt.\nNummraim kënnen nëmmen eng Iwwersetzung hunn.\n\nD'Iwwersetzung vum Diskussiouns-Nummraum vum Projet <code>$1 Diskussioun</code> ka komplizéiert sinn.\n<code>$1</code> gëtt duerch den Numm vum Projet ersat ersat (zum Beispill <code>{{ns:project_talk}}</code>).\nWann et an Ärer Sprooch net méiglech ass fir e gëltegen Ausdrock ze maachen ouni den NUmm vum Site z'änneren, da kontaktéiert eis w.e.g op [[Support]].\n\nDir musst am Grupp vun den Iwwersetzer si fir Ännerungen ofspäicheren ze kënnen.\nÄnnerunge ginn net gespäichert bis Dir de Knäppchen hei ënnendrënner geklickt hutt.",
"translate-magic-module": "Modul:",
@@ -75,7 +74,7 @@
"translate-magic-namespace": "Nummraum Nimm",
"translate-magic-notsaved": "Är Ännerung gouf net gespäichert!",
"translate-magic-errors": "Verbessert w.e.g. {{PLURAL:$1|dëse|dës}} Feeler an den Iwwersetzungen:",
- "translate-magic-saved": "Är Ännerunge goufe gespäichert",
+ "translate-magic-saved": "Är Ännerunge goufe gespäichert.",
"translate-checks-parameters": "{{PLURAL:$2|Dëse Parameter gëtt|Dës Parameter ginn}} net benotzt:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Dëse Parameter ass|Dës Parameter sinn }} onbekannt:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Et gëtt eng ongerued Zuel vu {{PLURAL:$2|Klammere|Klammere}} benotzt:\n<strong><nowiki>$1</nowiki></strong>",
@@ -102,7 +101,14 @@
"right-translate-import": "Offline Iwwersetzungen importéieren",
"action-translate-import": "offline Iwwersetzungen importéieren",
"right-translate-messagereview": "Iwwersetzungen nokucken",
+ "action-translate-messagereview": "Iwwersetzungen nokucken",
"right-translate-groupreview": "De Workflow vun de Gruppe vu Messagen nokucken",
+ "translate-rcfilters-translations": "Iwwersetzungen",
+ "translate-rcfilters-translations-only-label": "Iwwersetzungen",
+ "translate-rcfilters-translations-only-desc": "Ännerungen op iwwersate Säiten.",
+ "translate-rcfilters-translations-filter-label": "Keng Iwwersetzungen",
+ "translate-rcfilters-translations-filter-desc": "All Ännerunge déi keng Iwwersetzunge sinn.",
+ "translate-rcfilters-translations-site-label": "Systemmessagen",
"translate-rc-translation-filter": "Iwwersetzunge filteren:",
"translate-rc-translation-filter-no": "Näischt maachen",
"translate-rc-translation-filter-only": "Nëmmen Iwwersetzunge weisen",
@@ -165,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",
@@ -175,18 +182,20 @@
"translate-mgs-noempty": "Déi Sprooche fir déi et keng Iwwersetzung gëtt net weisen",
"translate-mgs-submit": "Statistike weisen",
"translate-mgs-column-language": "Sprooch",
- "translate-mgs-totals": "All Sproochen zesummen",
+ "translate-mgs-totals": "All $1 {{PLURAL:$1|Sprooch|Sproochen}} zesummen",
"translate-mgs-invalid-group": "De spezifizéierte Grupp $1 gëtt et net.",
"translate-mgs-nothing": "Fir déi gefrote Statistike gëtt et näischt fir ze weisen.",
"supportedlanguages": "Ënnerstëtzt Sproochen",
"supportedlanguages-summary": "Op dëser Säit steet eng Lëscht vun alle Sproochen déi op {{SITENAME}} ënnerstëtzt ginn, zesumme mam Numm vun den Iwwersetzer déi un där Sprooch schaffen.\nDen Numm vum Iwwersetzer ass méi grouss desto méi Iwwersetzungen de Benotzer gemaach huet.\nD'Faarf mat där den Numm vum Benotzer ënnerstrach ass weist wéi rezent dee Benotzer hei aktiv war.",
"supportedlanguages-colorlegend": "Erklärung vun de Faarwen: Lescht Iwwersetzung viru(n) $1 Deeg.",
+ "supportedlanguages-sqlite-error": "SQLite gëtt net ënnerstëtzt",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Iwwersetzer}}}}: $1",
"supportedlanguages-recenttranslations": "rezent Iwwersetzungen",
"supportedlanguages-count": "{{PLURAL:$1|Eng Sprooch|$1 Sproochen}} am Ganzen.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|Ännerung|Ännerungen}} - lescht Ännerung viru(n) $3 {{PLURAL:$3|Dag|Deeg}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Quelltext vun der Iwwersetzungseenheet",
"translate-save": "Späicher ($1)",
- "translate-jssti-add": "Op d'Lëscht derbäisetzen",
+ "translate-jssti-add": "Op d'Lëscht dobäisetzen",
"managemessagegroups": "Gestioun vun de Gruppe vu Messagen",
"translate-smg-notallowed": "Dir däerft dës Aktioun net maachen.",
"translate-smg-nochanges": "Et gëtt keng Ännerunge fir ze verschaffen.",
@@ -225,9 +234,7 @@
"translate-js-summary": "Resumé:",
"translate-js-save": "Späicheren",
"translate-js-next": "Späicheren an den Nächsten opmaachen",
- "translate-js-nonext": "Dëst war de leschte Message op dëser Säit",
"translate-js-skip": "Op den Nächste goen",
- "translate-js-save-failed": "D'Späicheren huet net funktionéiert. Mellt dëse Feeler w.e.g.",
"translate-js-history": "Versioune vun der Iwwersetzung",
"translate-js-support": "Fro stellen",
"translate-js-support-title": "Frot no Hëllef wann net genuch Informatiounen do si fir de Message korrekt z'iwwersetzen",
@@ -246,19 +253,6 @@
"translate-searchprofile-tooltip": "An allen Iwwersetzunge sichen",
"translate-search-languagefilter": "Filter no der Sprooch:",
"translate-search-nofilter": "Kee Filter",
- "translate-messagereview-submit": "nogekuckt markéieren",
- "translate-messagereview-progress": "Als nogekuckt markéieren...",
- "translate-messagereview-failure": "Als nogekuckt markéieren huet net funktionéiert: $1",
- "translate-messagereview-done": "Nogekuckt",
- "translate-messagereview-reviews": "Nogekuckt vu(n) {{PLURAL:$1|engem|$1}} Benotzer",
- "translate-messagereview-reviewswithyou": "Nogekuckt vu(n) {{PLURAL:$1|Iech|$1 Benotzer, Iech ageschloss}}",
- "api-error-invalidrevision": "D'Iwwersetzung gouf net fonnt",
- "api-error-unknownmessage": "De Message gouf net fonnt",
- "api-error-fuzzymessage": "D'Iwwersetzung ass als 'fuzzy' markéiert",
- "api-error-owntranslation": "Dir kënnt Är eegen Iwwersetzungen net als nogekuckt markéieren.",
- "translate-messagereview-no-fuzzy": "'Fuzzy'-Iwwersetzunge kënnen net als nogekuckt markéiert ginn.",
- "translate-messagereview-no-own": "Dir kënnt Är eegen Iwwersetzungen net als nogekuckt markéieren.",
- "translate-messagereview-doit": "Dës Iwwersetzung als nogekuckt markéieren.",
"log-name-translationreview": "Logbuch vun den nogekuckten Iwwersetzungen",
"log-description-translationreview": "Logbuch vun allen nogekuckten Iwwersetzungen a Gruppe vu Messagen.",
"logentry-translationreview-message": "$1 {{GENDER:$2|huet}} d'Iwwersetzung $3 nogekuckt",
@@ -297,7 +291,9 @@
"tux-status-translated": "Iwwersat",
"tux-status-saving": "Späicheren...",
"tux-status-unsaved": "Net gespäichert",
+ "tux-save-unknown-error": "En onbekannte Feeler ass geschitt.",
"tux-editor-placeholder": "Är Iwwersetzung",
+ "tux-editor-editsummary-placeholder": "Resumé (fakultativ)",
"tux-editor-paste-original-button-label": "Quelltext drasetzen",
"tux-editor-discard-changes-button-label": "Ännerungen annuléieren",
"tux-editor-save-button-label": "Iwwersetzung späicheren",
@@ -305,9 +301,9 @@
"tux-editor-cancel-button-label": "Ofbriechen",
"tux-editor-confirm-button-label": "Iwwersetzung confirméieren",
"tux-editor-proofread-button-label": "Als nogekuckt markéieren",
- "tux-editor-shortcut-info": "Dréckt \"$1\" fir ze späicheren oder \"$2\" fir op den nächste Message ze goen oder \"$3\" fir aner Tasturkierzel.",
+ "tux-editor-shortcut-info": "Dréckt \"$1\" fir ze späicheren oder \"$2\" fir op den nächste Message ze goen oder \"$4\" fir e Resumé unzeginn oder \"$3\" fir aner Tasturkierzel.",
"tux-editor-edit-desc": "Dokumentatioun änneren",
- "tux-editor-add-desc": "Dokumentatioun derbäisetzen",
+ "tux-editor-add-desc": "Dokumentatioun dobäisetzen",
"tux-editor-suggestions-title": "Virschléi",
"tux-editor-in-other-languages": "An anere Sproochen",
"tux-editor-need-more-help": "Braucht Dir méi Hëllef?",
@@ -360,9 +356,11 @@
"tux-editor-close-tooltip": "Zoumaachen",
"tux-editor-expand-tooltip": "Opklappen",
"tux-editor-collapse-tooltip": "Zesummeklappen",
+ "tux-editor-message-tools-show-editor": "Am Wiki-Editeur weisen",
"tux-editor-message-tools-history": "Versiounen",
"tux-editor-message-tools-delete": "Läschen",
"tux-editor-message-tools-translations": "All Iwwersetzungen",
+ "tux-editor-message-tools-linktothis": "Link op dëse Message",
"tux-editor-loading": "Lueden...",
"translate-search-more-languages-info": "{{PLURAL:$1|Eng Sprooch|$1 Sprooche}} méi",
"translate-statsbar-tooltip": "$1% iwwersat, $2% nogekuckt",
@@ -371,5 +369,5 @@
"translate-ulsdep-title": "Astellungsfeeler",
"translate-ulsdep-body": "D'Iwwersetzungerweiderung hänkt vun der [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector Universeller Sproochauswiel-Erweiderung] of.",
"tux-session-expired": "Dir sidd net méi ageloggt. Loggt Iech w.e.g. an engem separaten Tab an. Alternativ kënnt Dir och eng Kopie vun den net-gespäicherten Iwwersetzunge maachen, Iech aloggen op dës Säit zréckkommen an Är Iwwersetzungen nees aginn.",
- "tux-nojs": "Dës Säit brauch JavaScript."
+ "tux-nojs": "Dësen Tool funktionéiert net ouni JavaScript. JavaScript ass ausgeschalt, funktionéiert net oder dëse Browser gëtt net ënnerstëtzt."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/lfn.json b/www/wiki/extensions/Translate/i18n/core/lfn.json
new file mode 100644
index 00000000..88f6ce2c
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/lfn.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cgboeree",
+ "Katxis",
+ "Robin van der Vliet",
+ "Mafcadio"
+ ]
+ },
+ "translate-page-language": "Lingua",
+ "translate-stats-users": "Traduores",
+ "translate-sidebar-alltrans": "En otra linguas",
+ "translate-translations-project": "Projeta:",
+ "translate-language": "Lingua",
+ "translate-mgs-column-language": "Lingua",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traduor}}|Traduores}}: $1",
+ "translate-documentation-language": "Documentos de mesajes",
+ "tux-editor-in-other-languages": "En otra linguas",
+ "tux-message-filter-advanced-button": "Xerca avansada"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/li.json b/www/wiki/extensions/Translate/i18n/core/li.json
index ac50e2da..bd816d92 100644
--- a/www/wiki/extensions/Translate/i18n/core/li.json
+++ b/www/wiki/extensions/Translate/i18n/core/li.json
@@ -7,12 +7,90 @@
]
},
"translate": "Vertale",
+ "translate-desc": "[[Special:Translate|Speciaal pagina]] veur 't euverzètte van MediaWiki en mieë",
+ "translate-taskui-export-to-file": "Veur oet in oearsprunkelike indeiling",
+ "translate-taskui-export-as-po": "Veur oet veur offline-euverzètte",
+ "translate-taction-translate": "Zèt euver",
+ "translate-taction-proofread": "Kiek nao",
+ "translate-taction-lstats": "Spraokstattestieke",
+ "translate-taction-mstats": "Berichgroepstattestieke",
+ "translate-taction-export": "Veur oet",
+ "translate-taction-disabled": "Dees hanjeling is oetgezatj op deze wiki.",
+ "translate-page-no-such-language": "De opgegaove spraokcode is óngeljig.",
+ "translate-page-no-such-group": "De opgegaove groep is óngeljig.",
+ "translate-page-disabled": "Euverzèttinge nao dees spraok zint in dees groep oetgezatj. Raeje:\n\n<em>$1</em>",
+ "translate-language-disabled": "Euverzètte nao dees spraok is oetgezatj.",
"translate-page-settings-legend": "Insjtellinge",
"translate-page-group": "Gróp",
"translate-page-language": "Taal",
"translate-page-limit": "Maximaal",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|berich|berichte}} de pagina",
"translate-submit": "Ophaole",
+ "translate-page-navigation-legend": "Navigatie",
+ "translate-page-showing": "De berichte $1 tot $2 van $3 waere getuind.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|berich weurt|berichte waere}} getuind.",
+ "translate-page-showing-none": "Gein berichte te tuine.",
"translate-next": "Volgende pazjena",
"translate-prev": "Veurige pazjena",
- "translate-optional": "(optioneel)"
+ "translate-page-description-legend": "Informasie euver de groep",
+ "translate-page-description-hasoptional-open": "Tuin keusvrie berichte.",
+ "translate-page-edit": "bewirk",
+ "translate-optional": "(optioneel)",
+ "translate-ignored": "(euvergeslage)",
+ "translate-edit-title": "Bewirk \"$1\"",
+ "translate-edit-definition": "Berichbepaoling",
+ "translate-edit-translation": "Euverzètting",
+ "translate-edit-contribute": "draag bie",
+ "translate-edit-in-other-languages": "Berich in anger spraoke",
+ "translate-edit-warnings": "Waorsjoewinge euver ónjuuste euverzèttinge",
+ "translate-edit-tmmatch-source": "Brónteks veur euverzètting: $1",
+ "translate-edit-tmmatch": "$1% euvereinkóms",
+ "translate-use-suggestion": "Vervang de hujige euverzètting door dit veurstèl.",
+ "translate-edit-nopermission": "Doe mós euverzètrechte höbbe veur berichte de kónne euverzètte.",
+ "translate-edit-askpermission": "Krieg toustumming",
+ "exporttranslations": "Veur euverzèttinge oet",
+ "translate-export-form-format": "Indeiling",
+ "translate-magic-cm-save": "Slaon op",
+ "translate-rcfilters-translations": "Euverzèttinge",
+ "translate-rcfilters-translations-only-label": "Euverzèttinge",
+ "translate-rcfilters-translations-only-desc": "Verangeringe aan euvergezatje pagina's.",
+ "translate-rcfilters-translations-filter-label": "Gein euverzèttinge",
+ "translate-rcfilters-translations-filter-desc": "Alle verangeringe die gein euverzèttinge zeen.",
+ "translate-rcfilters-translations-site-label": "Systeemtekste",
+ "translate-rcfilters-translations-site-desc": "Aanpassinge aan systeemtekste in de MediaWiki-naamruumde.",
+ "translate-rc-translation-filter": "Filter euverzèttinge:",
+ "translate-rc-translation-filter-no": "Dooch nieks",
+ "translate-rc-translation-filter-only": "Tuin allein euverzèttinge",
+ "translate-rc-translation-filter-filter": "Filter euverzèttinge d'roet",
+ "translate-rc-translation-filter-site": "Allein verangeringe aan plaatselike systeemtekste",
+ "translationstats": "Euverzèttingsstattestieke",
+ "translate-stats-edits": "Bewirkinge",
+ "translate-stats-users": "Euverzètters",
+ "translate-stats-registrations": "Aanmeljinge",
+ "translate-stats-reviews": "Prooflaezinge",
+ "translate-stats-reviewers": "Prooflaezers",
+ "translate-statsf-intro": "Doe kins via dit formulier einveljige stattestieke samestèlle.\nAlle waerd höbbe 'ne limiet aan de baove- en de óngerkantj.",
+ "translate-statsf-options": "Grafiekopsjes",
+ "translate-statsf-width": "Pixelbrèdje:",
+ "translate-statsf-height": "Pixelhuuegdje:",
+ "translate-statsf-days": "Tiedsdoer kwa daag:",
+ "translate-statsf-start": "Begindatum:",
+ "translate-statsf-scale": "Granulariteit:",
+ "translate-statsf-scale-months": "Maondj",
+ "translate-statsf-scale-weeks": "Waeke",
+ "translate-statsf-scale-days": "Daag",
+ "translate-statsf-scale-hours": "Oer",
+ "translate-statsf-count": "Einheid:",
+ "translate-statsf-count-edits": "Aantaal bewirkinge",
+ "translate-statsf-count-users": "Aktief euverzètters",
+ "translate-statsf-count-registrations": "Nuuj gebroekers",
+ "translate-statsf-count-reviews": "Proofgelaeze euverzèttinge",
+ "translate-statsf-count-reviewers": "Prooflaezers",
+ "translate-statsf-language": "Lies van spraokcodes gesjèdj door komma's:",
+ "translate-statsf-group": "Lies van groepscodes gesjèdj door komma's:",
+ "translate-statsf-submit": "Veurvertuining",
+ "translate-tag-page-desc": "Euverzètting van de wikipagina [[$2|$1]] vanoet $3 ($4).",
+ "translate-sidebar-alltrans": "In anger spraoke",
+ "translations": "Alle euverzèttinge",
+ "translate-documentation-language": "Besjeidbesjrieving"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/lij.json b/www/wiki/extensions/Translate/i18n/core/lij.json
index c5869191..945a12b2 100644
--- a/www/wiki/extensions/Translate/i18n/core/lij.json
+++ b/www/wiki/extensions/Translate/i18n/core/lij.json
@@ -4,5 +4,6 @@
"Giromin Cangiaxo"
]
},
+ "translate-js-support": "Fanni 'na domanda",
"translate-documentation-language": "Documentassion do messaggio"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/lki.json b/www/wiki/extensions/Translate/i18n/core/lki.json
index 6ca352b0..ca0f6f67 100644
--- a/www/wiki/extensions/Translate/i18n/core/lki.json
+++ b/www/wiki/extensions/Translate/i18n/core/lki.json
@@ -8,11 +8,6 @@
"translate": "چاوواشەکِردن زوون",
"translate-extensionname": "چاوواشەکِردن زوون",
"translate-desc": "[[Special:Translate|صفحهٔ ویژه‌ای]] برای ترجمهٔ مدیاویکی و فراتر از آن",
- "translate-taskui-view": "نمایش تمام پیغام‌ها",
- "translate-taskui-untranslated": "نمایش پیغام‌های ترجمه‌نشده",
- "translate-taskui-optional": "نمایش پیغام‌های اختیاری",
- "translate-taskui-acceptqueue": "تنها پیغام‌هایی که می‌توانم به عنوان بازبینی‌شده نشانه‌گذاری کنم",
- "translate-taskui-reviewall": "بررسی تمام ترجمه‌ها",
"translate-taskui-export-to-file": "برون‌بری در قالب بومی",
"translate-taskui-export-as-po": "برون‌بری برای ترجمهٔ برون‌خط",
"translate-taction-translate": "چاوواشەکِردن زوون",
@@ -26,7 +21,7 @@
"translate-page-disabled": "ترجمه این زبان در این گروه غیر فعال است.\nدلیل:\n\n<em>$1</em>",
"translate-language-disabled": "ترجمه به این زبان غیرفعال شده‌است.",
"translate-page-settings-legend": "تنظیمۀل",
- "translate-page-group": "گروه",
+ "translate-page-group": "داکووکە(گروو)",
"translate-page-language": "زوون",
"translate-page-limit": "تعداد",
"translate-page-limit-option": "$1 {{PLURAL:$1|پیغام|پیغام ها}} در هر صفحه",
@@ -43,7 +38,7 @@
"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-in-other-languages": "پەیام وە زوونەلێ ترآ",
"translate-edit-tmmatch-source": "متن منبع ترجمه: $1",
diff --git a/www/wiki/extensions/Translate/i18n/core/lld.json b/www/wiki/extensions/Translate/i18n/core/lld.json
new file mode 100644
index 00000000..5f1e5bff
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/lld.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Asenoner"
+ ]
+ },
+ "translate-documentation-language": "Documentazion di messajes"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/lmo.json b/www/wiki/extensions/Translate/i18n/core/lmo.json
index 9cf0e800..ce251cc7 100644
--- a/www/wiki/extensions/Translate/i18n/core/lmo.json
+++ b/www/wiki/extensions/Translate/i18n/core/lmo.json
@@ -25,7 +25,6 @@
"translate-stats-edits": "Mudifegh",
"translate-stats-users": "Tradütur",
"translate-statsf-submit": "Fà vidè prima",
- "translate-tag-category": "Paginn che se poden vultà",
"translate-tag-page-desc": "Tradüzión de la pagina wiki [[$2|$1]].",
"translate-sidebar-alltrans": "In alter lenguv",
"translations": "Tüt i tradüzión"
diff --git a/www/wiki/extensions/Translate/i18n/core/lrc.json b/www/wiki/extensions/Translate/i18n/core/lrc.json
index 54ba45fa..351dda6c 100644
--- a/www/wiki/extensions/Translate/i18n/core/lrc.json
+++ b/www/wiki/extensions/Translate/i18n/core/lrc.json
@@ -1,12 +1,11 @@
{
"@metadata": {
"authors": [
- "Mogoeilor"
+ "Mogoeilor",
+ "Beyronvan"
]
},
"translate": "والرن",
- "translate-taskui-view": "همه پيغومل نشون بيه",
- "translate-taskui-untranslated": "پيغوما نلرسه نه نشون بيه",
"translate-taction-translate": "والرن",
"translate-taction-proofread": "دواره دیئن",
"translate-taction-lstats": "آماريا زون",
@@ -74,7 +73,7 @@
"translate-gs-speakers": "گپ زننه",
"translate-gs-score": "امتياز",
"translate-gs-total": "همه",
- "translate-documentation-language": "سندسازی سی پیغوم",
+ "translate-documentation-language": "سٱنٱدسازی سی پاٛغوم",
"tux-edit": "ڤیرایئشت",
"tux-proofread-edit-label": "ڤیرایئشت",
"tux-editor-message-tools-history": "ڤیرگار"
diff --git a/www/wiki/extensions/Translate/i18n/core/lt.json b/www/wiki/extensions/Translate/i18n/core/lt.json
index d31bbfbf..e1509299 100644
--- a/www/wiki/extensions/Translate/i18n/core/lt.json
+++ b/www/wiki/extensions/Translate/i18n/core/lt.json
@@ -8,17 +8,13 @@
"Perkunas",
"Vpovilaitis",
"Hugo.arg",
- "Zygimantus"
+ "Zygimantus",
+ "Manvydasz"
]
},
"translate": "Vertimas",
"translate-extensionname": "Versti",
"translate-desc": "[[Special:Translate|Specialus puslapis]] MediaWiki vertimui ir už jos ribų",
- "translate-taskui-view": "Rodyti visus pranešimus",
- "translate-taskui-untranslated": "Rodyti neišverstus pranešimus",
- "translate-taskui-optional": "Rodyti pasirinktinius pranešimus",
- "translate-taskui-acceptqueue": "Tik pranešimus galiu pažymėti kaip peržiūrėta",
- "translate-taskui-reviewall": "Apžvelgti visus vertimus",
"translate-taskui-export-to-file": "Eksportuoti vietinėje formate",
"translate-taskui-export-as-po": "Eksportuoti atsijungusiam vertimui",
"translate-taction-translate": "Išversti",
@@ -29,7 +25,7 @@
"translate-taction-disabled": "Šis veiksmas yra išjungtas šiame wiki.",
"translate-page-no-such-language": "Buvo nurodytas klaidingas kalbos kodas",
"translate-page-no-such-group": "Nurodyta nekorektiška grupė.",
- "translate-page-disabled": "Vertimai į šią kalbą šioje grupėje buvo išjungtos.\nPriežastis:\n\n$1",
+ "translate-page-disabled": "Vertimai į šią kalbą šioje grupėje buvo išjungti.\nPriežastis:\n\n<em>$1</em>",
"translate-language-disabled": "Vertimai į šią kalbą yra išjungtas.",
"translate-page-settings-legend": "Nustatymai",
"translate-page-group": "Grupė",
@@ -47,24 +43,26 @@
"translate-page-description-hasoptional": "Šios pranešimų grupės yra pasirenkami pranešimai.\nPasirenkami pranešimai turėtų būti tik išversti, kai jūsų kalba turi specialių reikalavimų.\nkaip nenaudojant vietas arba tranliteruodami tikrinius vardus. $1",
"translate-page-description-hasoptional-open": "Rodyti pasirinktinius pranešimus.",
"translate-page-edit": "redaguoti",
- "translate-ext-url": "<hr />Interneto svetainė: $1",
"translate-optional": "(nebūtinas)",
"translate-ignored": "(ignoruojamas)",
"translate-edit-title": "Redaguoti \"$1\"",
"translate-edit-definition": "Pranešimo aprašymas",
"translate-edit-translation": "Vertimas",
"translate-edit-contribute": "papildyti",
- "translate-edit-no-information": "''Šis pranešimas dar neturi dokumentacijos. Jei žinote kur ar kaip šis pranešimas naudojamas, jūs galite padėti kitiems vertėjams pridėdami dokumentacijos į šį pranešimą.''",
+ "translate-edit-no-information": "<em>Šis pranešimas neturi dokumentacijos.\nJei žinote kur ar kaip šis pranešimas naudojamas, galite padėti kitiems vertėjams pridėdami dokumentacijos į šį pranešimą.</em>",
"translate-edit-information": "Informacija apie pranešimą ($1)",
"translate-edit-in-other-languages": "Pranešimas kitomis kalbomis",
- "translate-edit-committed": "Dabartinis vertimo programinė įranga",
"translate-edit-warnings": "Įspėjimai apie nepilnus vertimus",
- "translate-edit-tmsugs": "Pasiūlymai iš vertimo atminčių ir automatinis vertimas",
"translate-edit-tmmatch-source": "Vertimo šaltinio tekstas: $1",
"translate-edit-tmmatch": "$1% atitinka",
"translate-use-suggestion": "Pakeisti dabartinį vertimą su šiuo pasiūlymu.",
- "translate-edit-nopermission": "Jums reikia leidimo išversti pranešimus",
+ "translate-edit-nopermission": "Jums reikia vertimo teisių, kad galėtumėte versti pranešimus.",
"translate-edit-askpermission": "Gauti leidimą",
+ "exporttranslations": "Eksportuoti vertimus",
+ "translate-export-form-format": "Formatas",
+ "translate-export-invalid-format": "Prašome nurodyti galiojantį formatą.",
+ "translate-export-not-supported": "Vertimų eksportavimas nepalaikomas.",
+ "translate-export-format-notsupported": "Nurodytas eksportavimo formatas yra nepalaikomas pranešimų grupės.",
"translate-magic-pagename": "MediaWiki išplėtimų vertimas",
"translate-magic-help": "Jūs galite versti specialių puslapių pseudonimus, magiškus žodžius ir vardų sričių pavadinimus.\n\nSpecialiojo puslapio pavadinimo ir magiško žodžio vertimai gali būti keli.\nVertimai yra atskiriami kableliu (,).\nVardų srities pavadinimas gali turėti tik vieną vertimą.\n\nVardų sričių vertimuose <code>$1 aptarimas</code> yra specialus. <code>$1</code> yra pakeičiamas svetainės pavadinimu (pavyzdžiui <code>{{ns:project_talk}}</code>).\nJei nėra įmanoma jūsų kalboje formuoti teisingą raiškumą be keisdami svetainės vardą, praneškite mums [[Support|palaikyme]].\n\nJūs turite priklausyti vertėjų grupei, kad galėtumėte įrašyti pakeitimus.\nPakeitimai nebus įrašyti iki Jūs nuspausite išsaugojimo mygtuką apačioje.",
"translate-magic-module": "Modulis:",
@@ -83,8 +81,12 @@
"translate-magic-namespace": "Vardų srities pavadinimai",
"translate-magic-notsaved": "Jūsų redagavimas yra neišsaugotas!",
"translate-magic-errors": "Praįome ištaisyti {{PLURAL:$1|klaidą|klaidas}} vertimuose:",
- "translate-magic-saved": "Jūsų keitimai buvo sėkmingai išsaugoti.",
+ "translate-magic-saved": "Jūsų pakeitimai buvo išsaugoti.",
"translate-checks-parameters": "{{PLURAL:$2|Šis $2 parametras nepanaudotas|Šie $2 parametrai nepanaudoti|Šie $2 parametrų nepanaudoti}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Šis parametras yra nežinomas|Šie parametrai yra nežinomi}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Ši nuoroda yra problematiška|$2 nuorodos yra problematiškos}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Šios nuorodos|šių $2 nuorodų}} trūksta:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-xhtml": "Prašome pakeisti {{PLURAL:$2|šią žymę teisinga žyme|šias žymes teisingomis žymėmis}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "Aprašymas naudoja <nowiki>{{PLURAL:}}</nowiki>, bet vertimas ne.",
"translate-pref-nonewsletter": "Nesiųskite man el. pašto naujienlaiškus",
"translate-pref-editassistlang": "Asistentinės kalbos:",
@@ -95,7 +97,13 @@
"right-translate-import": "Importuoti neprisijungusius vertimus",
"action-translate-import": "importuoti atsijungusius vertimus",
"right-translate-messagereview": "Peržiūrėti vertimus",
+ "action-translate-messagereview": "apžvelgti vertimus",
"right-translate-groupreview": "Keisti pranešimų grupių darbo eigos būseną",
+ "translate-rcfilters-translations": "Vertimai",
+ "translate-rcfilters-translations-only-label": "Vertimai",
+ "translate-rcfilters-translations-only-desc": "Keitimai išverstuose puslapiuose.",
+ "translate-rcfilters-translations-filter-label": "Ne vertimai",
+ "translate-rcfilters-translations-filter-desc": "Visi keitimai, kurie nėra vertimai.",
"translate-rc-translation-filter": "Perkošti vertimus:",
"translate-rc-translation-filter-no": "Nieko nedaryti",
"translate-rc-translation-filter-only": "Rodyti tik vertimus",
@@ -126,8 +134,7 @@
"translate-statsf-language": "Atskirti kableliais kalbų kodų sarašas:",
"translate-statsf-group": "Atskirti kableliais grupių kodų sąrašas:",
"translate-statsf-submit": "Peržiūra",
- "translate-tag-category": "Išverčiami puslapiai",
- "translate-tag-page-desc": "Wiki puslapio vertimas [[$2|$1]].",
+ "translate-tag-page-desc": "Viki puslapio [[$2|$1]] vertimas iš $3 ($4).",
"translate-sidebar-alltrans": "Kitomis kalbomis",
"translations": "Visi vertimai",
"translations-summary": "Įveskite pranešimo pavadinimą žemiau, norėdami parodyti visus esamus vertimus.",
@@ -140,8 +147,10 @@
"translate-translations-history-short": "val.",
"languagestats": "Kalbos statistikos",
"languagestats-summary": "Šis puslapis rodo vertimo statistikas visiems pranešimo grupėms vertimui.",
+ "messagegroupstats-summary": "Šis puslapis rodo pranešimų grupės statistiką.",
"languagestats-stats-for": "Vertimo statistikos $1 ($2).",
"languagestats-recenttranslations": "nauji vertimai",
+ "translate-langstats-incomplete": "Dalis statistikos šiame puslapyje nebaigta. Prašome įkelti iš naujo, kad gautumėte daugiau statistikos.",
"translate-langstats-expand": "išskleisti",
"translate-langstats-collapse": "suskleisti",
"translate-langstats-expandall": "Išskleisti visus",
@@ -165,10 +174,12 @@
"translate-mgs-noempty": "Nerodyti kalbų kurios neturi jokių vertimų",
"translate-mgs-submit": "Rodyti statistiką",
"translate-mgs-column-language": "Kalba",
- "translate-mgs-totals": "Visos kalbos kartu",
+ "translate-mgs-totals": "Visos $1 {{PLURAL:$1|kalbos}} kartu",
"translate-mgs-invalid-group": "Nurodytai grupei $1 neegzistuoja.",
+ "translate-mgs-nothing": "Prašomos statistikos nėra.",
"supportedlanguages": "Palaikomos kalbos",
- "supportedlanguages-translators": "{{PLURAL:$2|Vertėjas|Vertėjai|Vertėjų}}: $1",
+ "supportedlanguages-colorlegend": "Legenda spalvai: Paskutinis vertimas prieš $1 dienas.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Vertėjas|Vertėja}}|Vertėjai}}: $1",
"supportedlanguages-recenttranslations": "Nauji vertimai",
"supportedlanguages-count": "Iš viso $1 {{PLURAL:$1|kalba|kalbos|kalbų}}.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|keitimas|keitimai|keitimų}} - paskutinis keitimas yra prieš $3 {{PLURAL:$3|dieną|dienas|dienų}}",
@@ -187,19 +198,22 @@
"translate-manage-action-conflict": "Importuoti ir naujinti",
"translate-manage-action-ignore": "Ignoruoti",
"translate-manage-action-fuzzy": "Importuoti ir naujinti vertimus",
- "translate-manage-fuzzy-summary": "Pranešimo apibrėžimas pasikeitė",
+ "translate-manage-import-summary": "Importuojama nauja versite iš išorinio šaltinio",
+ "translate-manage-conflict-summary": "Importuojama nauja versite iš išorinio šaltinio.\nPrašome patikrinti.",
"translate-manage-submit": "Vykdyti",
+ "translate-manage-import-ok": "Importuota: $1",
"translate-manage-import-done": "Importavimas užbaigtas!",
"importtranslations": "Importuoti vertimus",
"translate-import-from-local": "Vietinio failo įkėlimas:",
"translate-import-load": "Įkrauti failą",
- "translate-import-err-ul-failed": "Failo įkėlimas buvo nesėkmingas",
+ "translate-import-err-dl-failed": "Nepavyko gauti failo:\n$1",
+ "translate-import-err-ul-failed": "Failo įkėlimas nepavyko",
+ "translate-import-err-invalid-title": "Pateiktas failo pavadinimas <nowiki>$1</nowiki> buvo negalimas.",
+ "translate-import-err-stale-group": "Pranešimų grupė, kuriai priklauso šis failas, neegzistuoja.",
"translate-js-summary": "Santrauka:",
"translate-js-save": "Išsaugoti",
"translate-js-next": "Išsaugoti ir atidaryti kitą",
- "translate-js-nonext": "Tai buvo paskutinė žinutė šiame puslapyje.",
"translate-js-skip": "Praleisti",
- "translate-js-save-failed": "Išsaugojimas nepavyko. Praneškite apie šią klaidą.",
"translate-js-history": "Vertimo istorija",
"translate-js-support": "Užduoti klausimą",
"translate-js-support-title": "Paprašyk pagalbos, jei nėra pakankamai informacijos, kad verstų šį pranešimą teisingai.",
@@ -216,21 +230,11 @@
"translate-documentation-language": "Pranešimo dokumentacija",
"translate-searchprofile": "Vertimai",
"translate-searchprofile-tooltip": "Ieškoti iš visų vertimų",
+ "translate-searchprofile-note": "Daugiau paieškos galimybių prieinama su [$1 vertimų paieška].",
"translate-search-languagefilter": "Perkošti pagal kalbą:",
"translate-search-nofilter": "Nėra filtravimo",
- "translate-messagereview-submit": "Žymė peržiūrėta",
- "translate-messagereview-progress": "Žymėjama kaip peržiūrėta...",
- "translate-messagereview-failure": "Žymėjimas kaip peržiūrėta nepavyko: $1",
- "translate-messagereview-done": "Apžvelgta",
- "translate-messagereview-reviews": "Peržiūrėjo {{PLURAL:$1|vienas naudotojas|$1 naudotojai|$1 naudotojų}}",
- "translate-messagereview-reviewswithyou": "Peržiūrėjo(-ote) {{PLURAL:$1|jūs|$1 vartotojai įskaitant jūs}}",
- "api-error-invalidrevision": "Vertimas nerastas",
- "api-error-unknownmessage": "Pranešimas nerastas",
- "api-error-fuzzymessage": "Vertimas yra pažymėta kaip apytikslė",
- "api-error-owntranslation": "Jūs negalite savo vertimus pažymėti kaip apžvelgtą.",
- "translate-messagereview-no-own": "Jūs negalite savo vertimus pažymėti kaip apžvelgtą.",
- "translate-messagereview-doit": "Pažymėkite šį vertimą kaip apžvelgtą.",
"log-name-translationreview": "Vertimo peržiūrėjimo žurnalas",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|peržiūrėjo}} vertimą $3",
"group-translate-sandboxed": "Nepatvirtinti vertėjai",
"group-translate-sandboxed-member": "{{GENDER:$1|nepatvirtintas vertėjas}}",
"right-translate-sandboxmanage": "Valdyti smėlio dėžės naudotojus",
@@ -243,7 +247,6 @@
"translate-stats-workflow": "Būsena",
"translate-dynagroup-recent-label": "Nauji vertimai",
"translate-dynagroup-additions-label": "Naujausi papildymai",
- "translate-gethelp": "Pagalba",
"translate-msggroupselector-projects": "Pranešimo grupė",
"translate-msggroupselector-search-placeholder": "Ieškoti grupes",
"translate-msggroupselector-search-all": "Visi",
@@ -261,13 +264,16 @@
"tux-status-translated": "Išversta",
"tux-status-saving": "Išsaugoma....",
"tux-status-unsaved": "Neišsaugota",
+ "tux-save-unknown-error": "Įvyko nežinoma klaida.",
"tux-editor-placeholder": "Jūsų vertimas",
+ "tux-editor-editsummary-placeholder": "Neprivaloma santrauka",
"tux-editor-paste-original-button-label": "Įklijuoti kodo tekstą",
"tux-editor-discard-changes-button-label": "Atsisakyti pakeitimų",
"tux-editor-save-button-label": "Išsaugoti vertimą",
"tux-editor-skip-button-label": "Pereiti prie kito",
"tux-editor-cancel-button-label": "Atšaukti",
"tux-editor-confirm-button-label": "Patvirtinti vertimą",
+ "tux-editor-proofread-button-label": "Pažymėti kaip apžvelgta",
"tux-editor-edit-desc": "Redaguoti dokumentaciją",
"tux-editor-add-desc": "Pridėti dokumentaciją",
"tux-editor-suggestions-title": "Pasiūlymai",
@@ -278,6 +284,7 @@
"tux-warnings-more": "{{PLURAL:$1|$1 daugiau}}",
"tux-warnings-hide": "slėpti",
"tux-editor-save-failed": "Vertimo išsaugojimas nepavyko: $1",
+ "tux-editor-n-uses": "panaudota $1 {{PLURAL:$1|kartą|kartus}}",
"tux-editor-message-desc-more": "Rodyti daugiau",
"tux-editor-message-desc-less": "Rodyti mažiau",
"tux-editor-clear-translated": "Slėpti išverstus",
@@ -293,16 +300,20 @@
"tux-editor-doc-editor-placeholder": "Pranešimo dokumentacija",
"tux-editor-doc-editor-save": "Išsaugoti dokumentaciją",
"tux-editor-doc-editor-cancel": "Atšaukti",
+ "tux-messagetable-more-messages": "dar $1 {{PLURAL:$1|pranešimas|pranešimai}}",
"tux-messagetable-loading-messages": "Įkraunami {{PLURAL:$1|pranešimas|pranešimai}}...",
"tux-message-filter-placeholder": "Filtrų sąrašas",
+ "tux-message-filter-result": "Rastas $1 {{PLURAL:$1|rezultatas|rezultatai}} užklausai „$2“",
"tux-message-filter-advanced-button": "Išplėstinė paieška",
"tux-message-filter-optional-messages-label": "Pasirenkami pranešimai",
"tux-proofread-translated-by-self": "Išvertėte jūs",
"tux-empty-list-all": "Ši pranešimo grupė yra tuščia",
+ "tux-empty-list-all-guide": "Pasirinkti kitą pranešimų grupę vertimui",
"tux-empty-list-translated": "Nėra išverstų pranešimų",
"tux-empty-list-translated-guide": "Jūs galite padėti versti",
"tux-empty-list-translated-action": "Išversti",
"tux-empty-no-messages-to-display": "Nėra ko pranešimų rodyti.",
+ "tux-empty-there-are-optional": "Yra neprivalomų pranešimų, kurie nerodomi sąraše",
"tux-empty-show-optional-messages": "Rodyti pasirinktinius pranešimus",
"tux-empty-no-outdated-messages": "Nėra pasenusių pranešimų",
"tux-empty-nothing-to-proofread": "Nėra, ko apžvelgti.",
@@ -316,9 +327,15 @@
"tux-editor-close-tooltip": "Uždaryti",
"tux-editor-expand-tooltip": "Išplėsti",
"tux-editor-collapse-tooltip": "Suskleisti",
+ "tux-editor-message-tools-show-editor": "Rodyti viki redaktoriuje",
"tux-editor-message-tools-history": "Istorija",
+ "tux-editor-message-tools-delete": "Ištrinti",
"tux-editor-message-tools-translations": "Visi vertimai",
"tux-editor-loading": "Įkraunama...",
+ "translate-search-more-languages-info": "dar $1 {{PLURAL:$1|kalba|kalbos}}",
"translate-statsbar-tooltip": "$1% išversti, $2% apžvelgti",
- "translate-statsbar-tooltip-with-fuzzy": "$1% išversti, $2% apžvelgti, $3% pasenę"
+ "translate-statsbar-tooltip-with-fuzzy": "$1% išversti, $2% apžvelgti, $3% pasenę",
+ "translate-search-more-groups-info": "dar $1 {{PLURAL:$1|grupė|grupės}}",
+ "translate-ulsdep-title": "Konfigūravimo klaida",
+ "tux-nojs": "Šiam puslapiui reikia JavaScript."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ltg.json b/www/wiki/extensions/Translate/i18n/core/ltg.json
index ac0069c8..a67da2f4 100644
--- a/www/wiki/extensions/Translate/i18n/core/ltg.json
+++ b/www/wiki/extensions/Translate/i18n/core/ltg.json
@@ -13,7 +13,6 @@
"translate-next": "Cyta puslopa",
"translate-page-description-legend": "Informaceja ap grupu",
"translate-page-edit": "pataiseit",
- "translate-ext-url": "<hr />Teiklavīta: $1",
"translate-edit-title": "Pataiseit \"$1\"",
"translate-magic-submit": "Paruodeit",
"translate-magic-cm-save": "Izglobuot",
diff --git a/www/wiki/extensions/Translate/i18n/core/lus.json b/www/wiki/extensions/Translate/i18n/core/lus.json
index 39b24c79..32997dff 100644
--- a/www/wiki/extensions/Translate/i18n/core/lus.json
+++ b/www/wiki/extensions/Translate/i18n/core/lus.json
@@ -6,11 +6,6 @@
},
"translate": "Lehlinna",
"translate-desc": "MediaWiki leh a bâk lehlinna [[Special:Translate|Phek vohbik]]",
- "translate-taskui-view": "Thuthawn awm zawng zawng",
- "translate-taskui-untranslated": "Thuthawn lehlin loh zawng",
- "translate-taskui-optional": "Thuthawn duh-thlan zawng",
- "translate-taskui-acceptqueue": "Ka pawm theih thuthawnho zawng",
- "translate-taskui-reviewall": "Lehlin zawng zawng ennawn vek rawh",
"translate-taskui-export-to-file": "Pianken ruangama thawnchhuahna",
"translate-taskui-export-as-po": "Rinpawna lehlin nan thawnchhuak rawh",
"translate-taction-translate": "Lehlinna",
@@ -35,7 +30,6 @@
"translate-page-description-hasoptional": "He pawl hian thuthawn duh-thlan (lehlin kher ngai lo) a nei a.\nHeng thuthawn duh-thlante hi i ţawngin mamawh bîk, entirnan hming roman hawrawpa dah, karawl hman thiang lo, tih angte a neih chauhvin lehlin tùr a ni ang. $1",
"translate-page-description-hasoptional-open": "Thuthawn duh-thlan pholanna.",
"translate-page-edit": "siamṭhatna",
- "translate-ext-url": "<hr />Hmunpui: $1",
"translate-optional": "(duh-thlan)",
"translate-ignored": "(ngaihthah)",
"translate-edit-title": "$1 siamţha rawh",
@@ -45,9 +39,7 @@
"translate-edit-no-information": "''He thuthawn hian sawifiahna mumal a la nei lo.''\n''He thuthawn hmanna hmun leh hmanphung hi i hriat chuan sawifiah la, letlingtute nasa takin i pui ang.''",
"translate-edit-information": "Thuthawn chungchang ($1)",
"translate-edit-in-other-languages": "Thuthawn ţawng dangin",
- "translate-edit-committed": "Khawlthluaka lehlin mék",
"translate-edit-warnings": "Lehlin famkim lo vaukhanna",
- "translate-edit-tmsugs": "Leh tawh aţanga rawtna",
"translate-edit-tmmatch-source": "Lehlinna thu hnar: $1",
"translate-edit-tmmatch": "$1% inmil",
"translate-use-suggestion": "Tuna lehlinna awm hi he rawtna hian thlâk rawh",
@@ -109,7 +101,6 @@
"translate-statsf-count-reviews": "Lehlin ennawnna",
"translate-statsf-count-reviewers": "Ennawntute",
"translate-statsf-submit": "Enchhinna",
- "translate-tag-category": "Phêk lehlin theih",
"translate-tag-page-desc": "Wiki phêk [[$2|$1]] lehlinna.",
"translate-sidebar-alltrans": "Ţawng dangin",
"translations": "Lehlin zawng zawng",
@@ -168,16 +159,13 @@
"translate-manage-action-ignore": "Ngaihthahna",
"translate-manage-action-fuzzy": "Châwkluh leh lehlin chiang lo (phé)",
"translate-manage-nochanges-other": "He ţawnga tihdanglam thar a awm lo.\nHläwm chanchin inziahna phêka lêt tùrin a hnuaia zawmnaah khuan kal rawh.",
- "translate-manage-fuzzy-summary": "A hrilhfiahna thlâk a ni tawh",
"translate-manage-submit": "Déng raw pip!",
"translate-manage-import-done": "A zo ta vek mai!",
"translate-import-err-warnings": "Taksa dik lo.\nI khawih danglamin ththn ziahna i nuaibo lo tih tichiang ang che.\nChanchim kim: $1",
"translate-js-summary": "Laktawi:",
"translate-js-save": "Dahţhatna",
"translate-js-next": "Dahţha la a dawt hawng nghâl rawh",
- "translate-js-nonext": "Hei hi hemi phêka thuthawn hnuhnüng ber a ni.",
"translate-js-skip": "Kalkân rawh",
- "translate-js-save-failed": "Dahţhat a hlawhchham. Khawngaihin hei hi hriattir rawh.",
"translate-js-history": "Lehlinna chanchin",
"translate-js-support": "Zawhna zawhna",
"translate-js-support-title": "Thuthawn lehlin dik a harsat chuan zawhna zawh hreh loh tùr.",
@@ -196,22 +184,8 @@
"translate-searchprofile-tooltip": "Lehlinna zawng zawnga zawnna",
"translate-search-languagefilter": "Ţawng azira thlitfimna:",
"translate-search-nofilter": "Thlitfimna awm lo",
- "translate-messagereview-submit": "Pawmna",
- "translate-messagereview-progress": "Pawm mék...",
- "translate-messagereview-failure": "Pawm... hlawhchham: $1",
- "translate-messagereview-done": "Pawm a ni ta",
- "translate-messagereview-reviews": "Hmangtu {{PLURAL:$1|1|$1}} pawm",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|Nangma pawm|Nangmah tiamin hmangtu $1-in an pawm }}",
- "api-error-invalidrevision": "Lehlin hmuh a ni lo",
- "api-error-unknownmessage": "Thuthawn hmuh a ni lo",
- "api-error-fuzzymessage": "Lehlin chiang lova ngaih a ni",
- "api-error-owntranslation": "Nangma lehlin nangmahin i pawm thei",
- "translate-messagereview-no-fuzzy": "Lehlin chiang lo (fuzzy) pawm theih loh.",
- "translate-messagereview-no-own": "Nangma lehlin i pawm thiang lo.",
- "translate-messagereview-doit": "He lehlin hi a dikah pawm rawh.",
"log-name-translationreview": "Lehlin ennawn chhinchhiahna",
"translate-workflowstatus": "Dinhmun: $1",
"translate-workflow-set-doing": "Tinung mék...",
- "translate-dynagroup-recent-label": "Lehlin tharte",
- "translate-gethelp": "Ţanpuina"
+ "translate-dynagroup-recent-label": "Lehlin tharte"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/lv.json b/www/wiki/extensions/Translate/i18n/core/lv.json
index baf67bba..b1a5643a 100644
--- a/www/wiki/extensions/Translate/i18n/core/lv.json
+++ b/www/wiki/extensions/Translate/i18n/core/lv.json
@@ -10,18 +10,15 @@
},
"translate": "Tulkošana",
"translate-desc": "[[Special:Translate|Īpašā lapa]] MediaWiki un citu projektu tulkošanai",
- "translate-taskui-view": "Rādīt visus ziņojumus",
- "translate-taskui-untranslated": "Rādīt neiztulkotos ziņojumus",
- "translate-taskui-optional": "Rādīt papildu ziņojumus",
- "translate-taskui-reviewall": "Pārskatīt visus tulkojumus",
"translate-taction-translate": "Tulkot",
+ "translate-taction-proofread": "Pārskatīt",
"translate-taction-lstats": "Valodas statistika",
"translate-taction-mstats": "Ziņojumu grupas statistika",
"translate-taction-export": "Eksportēt",
"translate-taction-disabled": "Šī darbība ir atspējota šajā wiki.",
"translate-page-no-such-language": "Norādītā valoda bija nederīga.",
"translate-page-no-such-group": "Norādītā grupa bija nederīga.",
- "translate-page-settings-legend": "Uzstādījumi",
+ "translate-page-settings-legend": "Iestatījumi",
"translate-page-group": "Grupa",
"translate-page-language": "Valoda",
"translate-page-limit": "Ierobežojums",
@@ -29,10 +26,13 @@
"translate-submit": "Atlasīt",
"translate-page-navigation-legend": "Navigācija",
"translate-page-showing": "Rāda ziņojumus no $1 līdz $2 no $3.",
+ "translate-page-showing-all": "Rāda $1 {{PLURAL:$1|ziņojumus|ziņojumu|ziņojumus}}.",
"translate-next": "Nākamā lapa",
"translate-prev": "Iepriekšējā lapa",
"translate-page-description-legend": "Informācija par grupu",
"translate-page-edit": "labot",
+ "translate-optional": "(neobligāts)",
+ "translate-ignored": "(ignorēts)",
"translate-edit-title": "Labot \"$1\"",
"translate-edit-translation": "Tulkojums",
"translate-edit-information": "Informācija par ziņojumu ($1)",
@@ -42,15 +42,20 @@
"translate-edit-tmmatch": "$1% atbilstība",
"translate-edit-nopermission": "Jums ir nepieciešamas tulkošanas tiesības, lai tulkotu ziņojumus.",
"translate-edit-askpermission": "Saņemt atļauju",
+ "exporttranslations": "Eksportēt tulkojumus",
+ "translate-export-form-format": "Formāts",
+ "translate-export-invalid-format": "Lūdzu norādi derīgu formātu.",
"translate-magic-pagename": "Paplašinātā MediaWiki tulkošana",
"translate-magic-module": "Modulis:",
"translate-magic-submit": "Atlasīt",
"translate-magic-cm-export": "Eksportēt",
"translate-magic-nothing-to-export": "Nav nekā, ko eksportēt.",
+ "translate-magic-cm-original": "Oriģināls",
"translate-magic-cm-comment": "Komentārs:",
"translate-magic-cm-save": "Saglabāt",
"translate-magic-cm-savefailed": "Neizdevās saglabāt",
"translate-magic-words": "Burvju vārdi",
+ "translate-magic-namespace": "Vārdtelpu nosaukumi",
"translate-magic-notsaved": "Jūsu labojums netika saglabāts!",
"translate-pref-nonewsletter": "Nevēlos pa e-pastu saņemt lapas jaunumus",
"translate-pref-editassistlang": "Palīgvalodas:",
@@ -59,10 +64,19 @@
"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",
+ "translate-rcfilters-translations-filter-label": "Ne tulkojumi",
+ "translate-rcfilters-translations-filter-desc": "Visas izmaiņas, kas nav tulkojumi",
+ "translate-rcfilters-translations-site-label": "Sistēmas paziņojumi",
+ "translate-rcfilters-translations-site-desc": "Sistēmas paziņojumu MediaWiki vārdtelpā pielāgotās vērtības.",
"translate-rc-translation-filter": "Filtrēt tulkojumus:",
"translate-rc-translation-filter-no": "Nedarīt neko",
"translate-rc-translation-filter-only": "Rādīt tikai tulkojumus",
"translate-rc-translation-filter-filter": "Atfiltrēt tulkojumus",
+ "translate-rc-translation-filter-site": "Tikai izmaiņas sistēmas paziņojumos",
"translationstats": "Tulkošanas statistika",
"translate-stats-edits": "Labojumi",
"translate-stats-users": "Tulkotāji",
@@ -79,11 +93,12 @@
"translate-statsf-count-edits": "Izmaiņu skaits",
"translate-statsf-count-users": "Aktīvie tulkotāji",
"translate-statsf-count-registrations": "Jauni lietotāji",
- "translate-tag-category": "Tulkojamās lapas",
"translate-sidebar-alltrans": "Citās valodās",
"translations": "Visi tulkojumi",
"translate-translations-fieldset-title": "Ziņojums",
+ "translate-translations-messagename": "Nosaukums:",
"translate-translations-project": "Projekts:",
+ "translate-translations-history-short": "v",
"languagestats": "Valodas statistika",
"languagestats-summary": "Šī lapa parāda tulkojumu statistiku visām ziņojumu grupām konkrētai valodai.",
"languagestats-stats-for": "Tulkojuma statistika $1 ($2).",
@@ -108,22 +123,28 @@
"translate-mgs-group": "Ziņojumu grupa:",
"translate-mgs-submit": "Rādīt statistiku",
"translate-mgs-column-language": "Valoda",
- "translate-mgs-totals": "Visas valodas kopā",
+ "translate-mgs-totals": "Visas $1 {{PLURAL:$1|valodas|valoda|valodas}} kopā",
"supportedlanguages": "Atbalstītās valodas",
- "supportedlanguages-translators": "{{PLURAL:$2|Tulkotāji|Tulkotājs|Tulkotāji}}: $1",
+ "supportedlanguages-sqlite-error": "SQLite nav atbaltīts",
+ "supportedlanguages-translators": "{{PLURAL:$2|Tulkotāji|{{GENDER:$3|Tulkotājs|Tulkotāja}}|Tulkotāji}}: $1",
"supportedlanguages-recenttranslations": "pēdējie tulkojumi",
"translate-save": "Saglabāt ($1)",
"translate-jssti-add": "Pievienot sarakstam",
+ "translate-smg-right": "Ienākošās izmaiņas",
"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.",
"translate-js-summary": "Kopsavilkums:",
"translate-js-save": "Saglabāt",
"translate-js-next": "Saglabāt un atvērt nākamo",
- "translate-js-nonext": "Šī bija pēdējā ziņa šajā lapā.",
"translate-js-skip": "Pāriet uz nākamo",
"translate-js-history": "Tulkošanas vēsture",
"translate-js-support": "Uzdot jautājumu",
+ "translate-js-support-unsaved-warning": "Tev ir nesaglabāti tulkojumi.",
"translate-gs-pos": "Vieta",
"translate-gs-code": "Kods",
"translate-gs-continent": "Kontinents",
@@ -131,10 +152,16 @@
"translate-gs-count": "Skaits",
"translate-gs-total": "Kopā",
"translate-documentation-language": "Paziņojuma dokumentācija",
+ "translate-searchprofile": "Tulkojumi",
"translate-search-languagefilter": "Filtrēt pēc valodas:",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|pārskatīja}} $3 tulkojumu",
+ "group-translate-sandboxed": "Neapstiprinātie tulkotāji",
+ "group-translate-sandboxed-member": "{{GENDER:$1|neapstiprināts tulkotājs|neapstiprināta tulkotāja}}",
"translate-workflow-state-": "(nav uzstādīts)",
"translate-stats-workflow": "Statuss",
- "translate-gethelp": "Palīdzība",
+ "translate-dynagroup-recent-label": "Neseni tulkojumi",
+ "translate-dynagroup-recent-desc": "Šī ziņojumu grupa parāda visus nesenos tulkojumus šajā valodā.\nTā ir visnoderīgākā pārskatīšanas uzdevumiem.",
+ "translate-dynagroup-additions-label": "Nesen pievienots",
"translate-msggroupselector-projects": "Ziņojumu grupa",
"translate-msggroupselector-search-placeholder": "Meklēt grupas",
"translate-msggroupselector-search-all": "Visas",
@@ -153,13 +180,16 @@
"tux-status-translated": "Iztulkots",
"tux-status-saving": "Saglabā...",
"tux-status-unsaved": "Nesaglabāts",
+ "tux-save-unknown-error": "Nezināma kļūda.",
"tux-editor-placeholder": "Jūsu tulkojums",
+ "tux-editor-editsummary-placeholder": "Neobligāts kopsavilkums",
"tux-editor-paste-original-button-label": "Iekopēt izejas tekstu",
"tux-editor-discard-changes-button-label": "Atmest izmaiņas",
"tux-editor-save-button-label": "Saglabāt tulkojumu",
"tux-editor-skip-button-label": "Pāriet uz nākamo",
"tux-editor-cancel-button-label": "Atcelt",
"tux-editor-confirm-button-label": "Apstiprināt tulkojumu",
+ "tux-editor-proofread-button-label": "Atzīmēt kā pārskatītu",
"tux-editor-edit-desc": "Labot dokumentāciju",
"tux-editor-add-desc": "Pievienot dokumentāciju",
"tux-editor-suggestions-title": "Ieteikumi",
@@ -175,10 +205,14 @@
"tux-editor-clear-translated": "Paslēpt iztulkoto",
"tux-editor-proofreading-mode": "Pārlasīt",
"tux-editor-translate-mode": "Saraksts",
+ "tux-editor-proofreading-hide-own-translations": "Paslēpt tavus tulkojumus",
+ "tux-editor-proofreading-show-own-translations": "Parādīt tavus tulkojumus",
+ "tux-proofread-action-tooltip": "Atzīmēt kā pārskatītu",
"tux-proofread-edit-label": "Labot",
"tux-editor-page-mode": "Lapa",
"tux-editor-outdated-warning": "Šis tulkojums, iespējams, ir jāatjaunina.",
"tux-editor-outdated-warning-diff-link": "Parādīt atšķirības",
+ "tux-editor-doc-editor-placeholder": "Paziņojuma dokumentācija",
"tux-editor-doc-editor-save": "Saglabāt dokumentāciju",
"tux-editor-doc-editor-cancel": "Atcelt",
"tux-messagetable-loading-messages": "Ielādē {{PLURAL:$1|ziņojumus|ziņojumu|ziņojumus}}...",
@@ -187,11 +221,13 @@
"tux-message-filter-optional-messages-label": "Papildu ziņas",
"tux-empty-list-translated-action": "Tulkot",
"tux-empty-no-messages-to-display": "Nav ziņu, ko parādīt.",
+ "tux-empty-list-other": "Nav nekā tulkojama",
"tux-empty-list-other-link": "Rādīt visus ziņojumus",
"tux-editor-close-tooltip": "Aizvērt",
"tux-editor-expand-tooltip": "Izvērst",
"tux-editor-collapse-tooltip": "Sakļaut",
"tux-editor-message-tools-history": "Vēsture",
+ "tux-editor-message-tools-delete": "Dzēst",
"tux-editor-message-tools-translations": "Visi tulkojumi",
"tux-editor-loading": "Ielādē...",
"translate-ulsdep-title": "Konfigurācijas kļūda"
diff --git a/www/wiki/extensions/Translate/i18n/core/lzh.json b/www/wiki/extensions/Translate/i18n/core/lzh.json
index df270d2b..7f0728fc 100644
--- a/www/wiki/extensions/Translate/i18n/core/lzh.json
+++ b/www/wiki/extensions/Translate/i18n/core/lzh.json
@@ -2,16 +2,13 @@
"@metadata": {
"authors": [
"Yanteng3",
- "Jason924tw"
+ "Jason924tw",
+ "Davidzdh",
+ "Itsmine"
]
},
"translate": "譯",
"translate-desc": "譯MediaWiki訊之[[Special:Translate|特查]]",
- "translate-taskui-view": "示全之訊",
- "translate-taskui-untranslated": "示未譯之訊",
- "translate-taskui-optional": "示選之訊",
- "translate-taskui-acceptqueue": "示吾能檢校之訊",
- "translate-taskui-reviewall": "檢校全之譯",
"translate-taskui-export-to-file": "出匯以原格式",
"translate-taskui-export-as-po": "出匯以離之譯",
"translate-taction-translate": "譯",
@@ -41,7 +38,6 @@
"translate-edit-contribute": "功績",
"translate-edit-information": "述該訊息($1)",
"translate-edit-in-other-languages": "他語之訊",
- "translate-edit-committed": "今譯",
"translate-edit-warnings": "未譯之警",
"translate-edit-tmmatch": "$1%符",
"translate-edit-nopermission": "汝須獲權方可譯訊。",
@@ -72,7 +68,7 @@
"translate-statsf-count-registrations": "新簿",
"translate-statsf-count-reviews": "校譯",
"translate-statsf-submit": "草覽",
- "translate-sidebar-alltrans": "他語之譯",
+ "translate-sidebar-alltrans": "他山",
"translations": "全譯",
"translate-translations-fieldset-title": "訊",
"translate-translations-messagename": "名:",
@@ -103,7 +99,6 @@
"translate-save": "存 ($1)",
"translate-manage-import-deleted": "已刪訊 $1",
"translate-manage-action-import": "入匯",
- "translate-manage-fuzzy-summary": "訊已易",
"translate-import-load": "載檔",
"translate-js-save": "存",
"translate-js-skip": "次譯",
@@ -111,12 +106,6 @@
"translate-documentation-language": "訊之檔",
"translate-searchprofile": "譯",
"translate-searchprofile-tooltip": "尋譯",
- "translate-messagereview-submit": "記為已校",
- "translate-messagereview-progress": "記為已校之……",
- "translate-messagereview-done": "已校",
- "api-error-unknownmessage": "訊無尋",
- "api-error-owntranslation": "汝不可記己譯為已校",
- "translate-messagereview-no-own": "汝不可記己之譯為已校",
"log-name-translationreview": "校譯之誌",
"translate-dynagroup-recent-label": "近譯",
"translate-msggroupselector-projects": "訊息組",
@@ -173,6 +162,7 @@
"tux-editor-collapse-tooltip": "摺",
"tux-editor-message-tools-history": "誌",
"tux-editor-loading": "載之……",
+ "translate-search-more-languages-info": "尚有{{PLURAL:$1|語文|語文}}$1",
"translate-statsbar-tooltip": "已譯$1%,已檢校$2%",
"translate-statsbar-tooltip-with-fuzzy": "$1%已翻,$2%檢校,$3%過時"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/lzz.json b/www/wiki/extensions/Translate/i18n/core/lzz.json
index 631c738a..dc230498 100644
--- a/www/wiki/extensions/Translate/i18n/core/lzz.json
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/i18n/core/mai.json b/www/wiki/extensions/Translate/i18n/core/mai.json
index efe8d3ad..53d7b3d3 100644
--- a/www/wiki/extensions/Translate/i18n/core/mai.json
+++ b/www/wiki/extensions/Translate/i18n/core/mai.json
@@ -5,6 +5,7 @@
"Tulsi Bhagat"
]
},
- "languagestats-recenttranslations": "लग में भेल अनुवाद",
- "translate-documentation-language": "सूचना दस्तावेज़ीकरण"
+ "languagestats-recenttranslations": "सन्निकट अनुवाद",
+ "translate-languagestats-overall": "सम्पूर्ण सन्देश-समूह एक साथ",
+ "translate-documentation-language": "सूचना दस्तावेजीकरण"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/map-bms.json b/www/wiki/extensions/Translate/i18n/core/map-bms.json
index f527a90d..39f0a4e6 100644
--- a/www/wiki/extensions/Translate/i18n/core/map-bms.json
+++ b/www/wiki/extensions/Translate/i18n/core/map-bms.json
@@ -6,11 +6,6 @@
},
"translate": "Terjemahna",
"translate-desc": "[[Special:Translate|Kaca astamiwa]] kanggo mertalna MediaWiki lan liyane",
- "translate-taskui-view": "Tidokna kabeh layang",
- "translate-taskui-untranslated": "Tidokna kabeh layang sing durung diterjemahna",
- "translate-taskui-optional": "Tidokna layang opsional",
- "translate-taskui-acceptqueue": "Mung pesen sing teyeng ditandhani inyong direview",
- "translate-taskui-reviewall": "Ulas kabeh terjemahan",
"translate-taskui-export-to-file": "Ekspor nang format asli",
"translate-taskui-export-as-po": "Ekspor kanggo terjemahan offline",
"translate-taction-translate": "Terjemahna",
@@ -42,8 +37,6 @@
"translate-edit-no-information": "\"Pesen kiye ora duwe dokumentasi.\"\n\"Angger Rika weruh nang endi utawa kepriwe pesen kiye digunakna, Rika teyeng nulungi penerjemah liyane mawa nambahna dokumentasi ming pesen kiye.\"",
"translate-edit-information": "Informasi bab pesen ($1)",
"translate-edit-in-other-languages": "Pesen nang basa-basa liyane",
- "translate-edit-committed": "Pertalan sekiya nang piranti alus",
- "translate-edit-tmsugs": "Saran sekang mèmori terjemahan lan terjemahan mesin",
"translate-edit-tmmatch-source": "Tèks sumber pertalan: $1",
"translate-edit-tmmatch": "$1% cocog",
"translate-use-suggestion": "Ganti terjemahan sekiye nganggo saran kiye.",
diff --git a/www/wiki/extensions/Translate/i18n/core/mg.json b/www/wiki/extensions/Translate/i18n/core/mg.json
index 7c7c890f..6339c07d 100644
--- a/www/wiki/extensions/Translate/i18n/core/mg.json
+++ b/www/wiki/extensions/Translate/i18n/core/mg.json
@@ -4,8 +4,6 @@
"Jagwar"
]
},
- "translate-taskui-view": "Aseho avokoa ny hafatra",
- "translate-taskui-optional": "Aseho ny hafatra tsy voatery",
"translate-page-showing": "Aseho ny hafatra avy amin'i $1 hatramin'i $2 amin'ny $3",
"translate-page-description-hasoptional-open": "Aseho ny hafatra tsy voatery",
"right-translate": "Manova ny interface fandikana",
diff --git a/www/wiki/extensions/Translate/i18n/core/min.json b/www/wiki/extensions/Translate/i18n/core/min.json
index f74c08bd..6c5c0d0c 100644
--- a/www/wiki/extensions/Translate/i18n/core/min.json
+++ b/www/wiki/extensions/Translate/i18n/core/min.json
@@ -2,10 +2,10 @@
"@metadata": {
"authors": [
"Iwan Novirion",
- "Naval Scene"
+ "Naval Scene",
+ "Muhraz"
]
},
- "translate-edit-tmsugs": "Saran dari memori tajamahan",
"translate-statsf-start": "Tanggal mulai:",
"translate-statsf-scale": "Granularitas:",
"translate-statsf-scale-months": "Bulan",
@@ -18,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/www/wiki/extensions/Translate/i18n/core/mk.json b/www/wiki/extensions/Translate/i18n/core/mk.json
index 770296ca..14601937 100644
--- a/www/wiki/extensions/Translate/i18n/core/mk.json
+++ b/www/wiki/extensions/Translate/i18n/core/mk.json
@@ -5,17 +5,14 @@
"Brest",
"Brest2008",
"Dario",
- "Милан Јелисавчић"
+ "Милан Јелисавчић",
+ "Vlad5250"
]
},
"translate": "Преведување",
"translate-extensionname": "Преведување",
"translate-desc": "[[Special:Translate|Службена страница]] за преведување на МедијаВики и други пораки",
- "translate-taskui-view": "Сите пораки",
- "translate-taskui-untranslated": "Непреведени пораки",
- "translate-taskui-optional": "Незадолжителни пораки",
- "translate-taskui-acceptqueue": "Само пораки што можам да ги означувам како проверени",
- "translate-taskui-reviewall": "Проверка на сите пораки",
+ "translate-fuzzybot-desc": "Ова е службена системска сметка што се користи од додатокот [https://www.mediawiki.org/wiki/Extension:Translate Преведување] на МедијаВики намете за одржување на преводи.\nОваа сметка е дел од основниот програм и не е во сопственост на ниеден корисник.",
"translate-taskui-export-to-file": "Извези во матичен формат",
"translate-taskui-export-as-po": "Извези за вонмрежно преведување",
"translate-taction-translate": "Преведи",
@@ -34,7 +31,7 @@
"translate-page-limit": "Највеќе до",
"translate-page-limit-option": "$1 {{PLURAL:$1|порака|пораки}} по страница",
"translate-submit": "Филтрирај",
- "translate-page-navigation-legend": "Навигација",
+ "translate-page-navigation-legend": "Прегледник",
"translate-page-showing": "Прикажани се пораки од $1 до $2 од вкупно $3",
"translate-page-showing-all": "Приказ на $1 {{PLURAL:$1|порака|пораки}}.",
"translate-page-showing-none": "Нема пораки за прикажување",
@@ -45,7 +42,6 @@
"translate-page-description-hasoptional": "Оваа група содржи незадолжителни пораки.\nНезадолжителните пораки треба да се преведуваат само кога вашиот јазик има посебни потреби како траслитерација на имиња или неупотреба на празни места. $1",
"translate-page-description-hasoptional-open": "Прикажи незадолжителни пораки.",
"translate-page-edit": "уреди",
- "translate-ext-url": "<hr />Мреж. место: $1",
"translate-optional": "(незадолжително)",
"translate-ignored": "(игнорирано)",
"translate-edit-title": "Уреди „$1“",
@@ -55,16 +51,19 @@
"translate-edit-no-information": "<em>Оваа порака нема документација.\nАко знаете каде или како се користи поракава, тогаш помогнете им на другите преведувачи додавајќи ѝ документација.</em>",
"translate-edit-information": "Информации за пораката ($1)",
"translate-edit-in-other-languages": "Пораката на други јазици",
- "translate-edit-committed": "Тековен превод во програмската опрема",
"translate-edit-warnings": "Предупредувања за нецелосни преводи",
- "translate-edit-tmsugs": "Предлози од претходни преводи",
"translate-edit-tmmatch-source": "Изворен текст за преводот: $1",
"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-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-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": "Извоз",
@@ -76,12 +75,12 @@
"translate-magic-cm-save": "Зачувај",
"translate-magic-cm-updatedusing": "Подновено со помош на [[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]",
"translate-magic-cm-savefailed": "Неуспешно зачувување",
- "translate-magic-special": "Алијаси на службени страници",
+ "translate-magic-special": "Истозначници на службени страници",
"translate-magic-words": "Волшебни зборови",
"translate-magic-namespace": "Називи на именски простори",
"translate-magic-notsaved": "Вашето уредување не беше зачувано!",
"translate-magic-errors": "Поправете {{PLURAL:$1|ја следнава грешка|ги следниве грешки}} во преводот:",
- "translate-magic-saved": "Промените се успешно зачувани.",
+ "translate-magic-saved": "Промените се зачувани.",
"translate-checks-parameters": "{{PLURAL:$2|Следниов параметар не се користи|Следниве параметри се користат}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Следниов параметар е непознат|Следниве параметри се непознати}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Непарен број на загради, {{PLURAL:$2|заграда|загради}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -103,12 +102,22 @@
"translate-pref-editassistlang-help": "Список на јазични кодови одделени со запирка.\nПреводите на пораките на овие јазици се прикажуваат кога преведувате.\nСписокот на јазици зададен по основно зависи од вашиот јазик.",
"translate-pref-editassistlang-bad": "Погрешен јазичен код на списокот:\n<nowiki>$1</nowiki>.",
"right-translate": "Уредување со користење на посредникот за преведување",
+ "action-translate": "уредување со посредникот за преведување",
"right-translate-manage": "Раководење со групи пораки",
- "action-translate-manage": "рСаководење со групи пораки",
+ "action-translate-manage": "раководење со групи пораки",
"right-translate-import": "Увезување на вонмрежни преводи (од сметач)",
"action-translate-import": "увоз на вонмрежни преводи",
"right-translate-messagereview": "Проверка на преводи",
+ "action-translate-messagereview": "проверка на преводи",
"right-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-rc-translation-filter": "Филтрирање на преводи:",
"translate-rc-translation-filter-no": "Не прави ништо",
"translate-rc-translation-filter-only": "Прикажи само преводи",
@@ -120,7 +129,7 @@
"translate-stats-registrations": "Регистрации",
"translate-stats-reviews": "Оценки",
"translate-stats-reviewers": "Оценувачи",
- "translate-statsf-intro": "Со овој образец можете да создадете едноставен статистички преглед. Сите вредности имаат максимални и минимални граници.",
+ "translate-statsf-intro": "Со овој образец можете да создадете едноставен статистички преглед. Сите вредности имаат горни и долни граници.",
"translate-statsf-options": "Нагодувања за графиконот",
"translate-statsf-width": "Ширина во пиксели:",
"translate-statsf-height": "Висина во пиксели:",
@@ -140,7 +149,6 @@
"translate-statsf-language": "Список на јазични кодови, одвоени со запирка:",
"translate-statsf-group": "Список на групни кодови, одвоени со запирка:",
"translate-statsf-submit": "Преглед",
- "translate-tag-category": "Преводливи страници",
"translate-tag-page-desc": "Превод на викистраницата [[$2|$1]] од $3 ($4).",
"translate-sidebar-alltrans": "На други јазици",
"translations": "Сите преводи",
@@ -172,17 +180,18 @@
"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-fieldset": "Нагодувања на приказот",
"translate-mgs-group": "Група пораки:",
- "translate-mgs-nocomplete": "Не прикажувај јазици со потполн превод",
- "translate-mgs-noempty": "Не прикажувај јазици без никакви преводи",
+ "translate-mgs-nocomplete": "Не прикажувај јазици со наполно завршен превод",
+ "translate-mgs-noempty": "Не прикажувај јазици што немаат почнато со преведување",
"translate-mgs-submit": "Статистики",
"translate-mgs-column-language": "Јазик",
- "translate-mgs-totals": "Сите јазици заедно",
+ "translate-mgs-totals": "{{PLURAL:$1|Сиот јазик|Сите $1 јазици заедно}}",
"translate-mgs-invalid-group": "Наведената група $1 не постои.",
"translate-mgs-nothing": "Нема што да се прикаже за побараните статистики.",
"supportedlanguages": "Поддржани јазици",
@@ -190,10 +199,12 @@
"supportedlanguages-colorlegend": "Легенда за бојата: Последен превод извршен пред $1 дена.",
"supportedlanguages-portallink": "[$1] $2 - $3",
"supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite не е поддржан",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Преведувач}}|Преведувач}}: $1",
"supportedlanguages-recenttranslations": "скорешни преводи",
"supportedlanguages-count": "Вкупно $1 {{PLURAL:$1|јазик|јазици}}.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|уредување|уредувања}} - последното пред $3 {{PLURAL:$3|ден|дена}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Изворен текст на преводната единица",
"translate-save": "Зачувај ($1)",
"translate-jssti-add": "Додај во список",
"managemessagegroups": "Раководење со групи на пораки",
@@ -203,7 +214,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",
@@ -214,10 +225,9 @@
"translate-manage-nochanges": "Нема промени во дефинициите на пораките за оваа група.",
"translate-manage-nochanges-other": "Нема за овој јазик.\nУпотребете ја врската подолу за да се вратите на прегледот на подробности за групата.",
"translate-manage-inconsistent": "Откриена е недоследност во барањето.\nПроверете дали има промени и обидете се повторно.\nПодробности : $1.",
- "translate-manage-toolong": "Пречекорено е максималното време за обработка од {{PLURAL:$1|една секунда|$1 секунди}}.\nПоднесете го образецот одново за да продолжите со обработката.",
+ "translate-manage-toolong": "Пречекорен е временскиот рок за обработка од {{PLURAL:$1|една секунда|$1 секунди}}.\nПоднесете го образецот одново за да продолжите со обработката.",
"translate-manage-import-summary": "Увезување на нова верзија од надворешен извор",
"translate-manage-conflict-summary": "Увезување на нова верзија од надворешен извор.\nПроверете.",
- "translate-manage-fuzzy-summary": "Формулацијата на пораката е променета",
"translate-manage-submit": "Изврши",
"translate-manage-intro-other": "Еве список на промени во преводите на јазикот $1.\nПрегледајте ги пораките и изберете го дејството што сакате да го направите за секоја поднова.\nАко изберете да ги занемарите промените, ова дејство ќе биде само привремено.",
"translate-manage-import-ok": "Увезена: $1",
@@ -235,9 +245,7 @@
"translate-js-summary": "Опис:",
"translate-js-save": "Зачувај",
"translate-js-next": "Зачувај и отвори следна",
- "translate-js-nonext": "Ова беше последната порака на страницава.",
"translate-js-skip": "Прејди на следно",
- "translate-js-save-failed": "Зачувувањето не успеа. Ве молиме пријавете ја оваа грешка.",
"translate-js-history": "Минати преводи",
"translate-js-support": "Постави прашање",
"translate-js-support-title": "Побарајте помош ако немате доволно информации за да направите точен превод на пораката.",
@@ -254,23 +262,9 @@
"translate-documentation-language": "документација на пораки",
"translate-searchprofile": "Преводи",
"translate-searchprofile-tooltip": "Пребарување по сите преводи",
+ "translate-searchprofile-note": "Повеќе можности за пребарување ќе најдете на [$1 пребарувачот на преводи].",
"translate-search-languagefilter": "Филтрирај по јазик:",
"translate-search-nofilter": "Без филтрирање",
- "translate-messagereview-submit": "Означи како проверено",
- "translate-messagereview-progress": "Означувам како проверено...",
- "translate-messagereview-failure": "Означувањето како проверено не успеа: $1",
- "translate-messagereview-done": "Проверено",
- "translate-messagereview-reviews": "Проверено од {{PLURAL:$1|еден корисник|$1 корисници}}",
- "translate-messagereview-reviewswithyou": "Проверено од {{PLURAL:$1|вас|$1 корисници, вклучувајќи ве и вас}}",
- "api-error-invalidrevision": "Преводот не е пронајден",
- "api-error-unknownmessage": "Пораката не е пронајдена",
- "api-error-fuzzymessage": "Преводот е обележан како застарен",
- "api-error-owntranslation": "Не можете да означувате Ваши сопствени преводи како проверени.",
- "translate-messagereview-no-fuzzy": "Застарените преводи не можат да се означуваат како проверени",
- "translate-messagereview-no-own": "Не можете да означувате Ваши сопствени преводи како проверени.",
- "translate-messagereview-doit": "Означи го преводов како проверен.",
- "group-translate-proofr.css": "/* Тука поставениот CSS ќе се применува само врз проверувачите на преводи */",
- "group-translate-proofr.js": "/* Тука поставениот JS ќе се применува само врз проверувачите на преводи */",
"log-name-translationreview": "Дневник на проверки на преводи",
"log-description-translationreview": "Дневник на сите проверки на преводи и групи пораки",
"logentry-translationreview-message": "$1 {{GENDER:$2|го провери}} преводот $3",
@@ -292,7 +286,6 @@
"translate-dynagroup-recent-desc": "Оваа група пораки ги прикажува сите скорешни преводи на овој јазик.\nОва е најкорисно при вршењето на прегледи.",
"translate-dynagroup-additions-label": "Неодамна додадени",
"translate-dynagroup-additions-desc": "Оваа група пораки прикажува нови и изменети пораки",
- "translate-gethelp": "Помош",
"translate-msggroupselector-projects": "Група пораки",
"translate-msggroupselector-search-placeholder": "Пребарајте групи",
"translate-msggroupselector-search-all": "Сите",
@@ -311,14 +304,17 @@
"tux-status-translated": "Преведено",
"tux-status-saving": "Зачувувам...",
"tux-status-unsaved": "Незачувано",
+ "tux-save-unknown-error": "Се појави непозната грешка.",
"tux-editor-placeholder": "Ваш превод",
+ "tux-editor-editsummary-placeholder": "Опис (по желба)",
"tux-editor-paste-original-button-label": "Вметни изворен текст",
"tux-editor-discard-changes-button-label": "Отфрли промени",
"tux-editor-save-button-label": "Зачувај превод",
"tux-editor-skip-button-label": "Прејди на следно",
"tux-editor-cancel-button-label": "Откажи",
"tux-editor-confirm-button-label": "Потврди превод",
- "tux-editor-shortcut-info": "Стиснете на „$1“ за да зачувате, „$2“ за да прејдете на следната порака, или пак „$3“ за други кратенки.",
+ "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": "Предлози",
@@ -343,12 +339,12 @@
"tux-editor-outdated-warning": "На преводов може да му треба поднова.",
"tux-editor-outdated-warning-diff-link": "Прик. разлики",
"tux-editor-doc-editor-placeholder": "Документација на пораката",
- "tux-editor-doc-editor-save": "Зачувај",
+ "tux-editor-doc-editor-save": "Зачувај документација",
"tux-editor-doc-editor-cancel": "Откажи",
"tux-messagetable-more-messages": "уште {{PLURAL:$1|една порака|$1 пораки}}",
"tux-messagetable-loading-messages": "{{PLURAL:$1|Ја вчитувам пораката|Ги вчитувам пораките}}...",
"tux-message-filter-placeholder": "Филтрирај список",
- "tux-message-filter-result": "Пронајдов $1 {{PLURAL:$1|резултат|резултати}} за „$2“",
+ "tux-message-filter-result": "Пронајдов $1 {{PLURAL:$1|ставка|ставки}} за „$2“",
"tux-message-filter-advanced-button": "Напредно пребарување",
"tux-message-filter-optional-messages-label": "Незадолжителни пораки",
"tux-proofread-translated-by-self": "Преведено од Вас",
@@ -373,9 +369,11 @@
"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": "Избриши",
"tux-editor-message-tools-translations": "Сите преводи",
+ "tux-editor-message-tools-linktothis": "Врска до поракава",
"tux-editor-loading": "Вчитувам...",
"translate-search-more-languages-info": "уште {{PLURAL:$1|еден јазик|$1 јазици}}",
"translate-statsbar-tooltip": "$1% преведени, $2% проверени",
@@ -384,5 +382,5 @@
"translate-ulsdep-title": "Грешка во поставеноста",
"translate-ulsdep-body": "Додатокот за превод е зависен од додатокот „[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector Универзален јазичен избирач]“.",
"tux-session-expired": "Повеќе не сте најавени. Најавете се во друго јазиче. Можете и некаде да ги прекопирате незачуваните преводи, па да се најавите и да се навратите на страницава, и потоа внесете ги преводите повторно.",
- "tux-nojs": "Оваа страница бара JavaScript."
+ "tux-nojs": "Оваа алатка не работи без JavaScript. JavaScript е исклучен, не работи или прелистувачот не е поддржан."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ml.json b/www/wiki/extensions/Translate/i18n/core/ml.json
index 7e90a6f8..d0d7d340 100644
--- a/www/wiki/extensions/Translate/i18n/core/ml.json
+++ b/www/wiki/extensions/Translate/i18n/core/ml.json
@@ -11,11 +11,6 @@
},
"translate": "വിവർത്തനം ചെയ്യുക",
"translate-desc": "മീഡിയവിക്കിയും മറ്റുള്ളവയും തർജ്ജമ ചെയ്യാനുള്ള [[Special:Translate|പ്രത്യേക താൾ]]",
- "translate-taskui-view": "എല്ലാ സന്ദേശങ്ങളും പ്രദർശിപ്പിക്കുക",
- "translate-taskui-untranslated": "പരിഭാഷപ്പെടുത്താത്ത സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുക",
- "translate-taskui-optional": "ഐച്ഛിക സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുക",
- "translate-taskui-acceptqueue": "സംശോധനം ചെയ്തതെന്ന് എനിക്ക് അടയാളപ്പെടുത്താവുന്ന സന്ദേശങ്ങൾ മാത്രം",
- "translate-taskui-reviewall": "എല്ലാ പരിഭാഷകളും സംശോധനം ചെയ്യുക",
"translate-taskui-export-to-file": "സഹജമായ ഫോർമാറ്റിൽ കയറ്റുമതി ചെയ്യുക",
"translate-taskui-export-as-po": "ഓഫ്-ലൈൻ പരിഭാഷയ്ക്കായി കയറ്റുമതി ചെയ്യുക",
"translate-taction-translate": "പരിഭാഷപ്പെടുത്തുക",
@@ -44,7 +39,6 @@
"translate-page-description-hasoptional": "ഈ സന്ദേശഗണത്തിൽ ഐച്ഛിക സന്ദേശങ്ങളുണ്ട്.\nതാങ്കളുടെ ഭാഷയ്ക്ക് പ്രത്യേക ആവശ്യങ്ങളുള്ളപ്പോൾ, അതായത് ഇട നൽകിയെഴുതേണ്ടി വരികയോ സാമാന്യനാമങ്ങൾ ലിപിമാറ്റം ചെയ്യേണ്ടി വരുമ്പഴോ മറ്റോ മാത്രമേ ഐച്ഛിക സന്ദേശങ്ങൾ പരിഭാഷപ്പെടുത്തേണ്ടതുള്ളു. $1",
"translate-page-description-hasoptional-open": "ഐച്ഛിക സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുക.",
"translate-page-edit": "തിരുത്തുക",
- "translate-ext-url": "<hr />വെബ്സൈറ്റ്: $1",
"translate-optional": "(നിർബന്ധമില്ല)",
"translate-ignored": "(അവഗണിച്ചിരിക്കുന്നു)",
"translate-edit-title": "\"$1\" തിരുത്തുക",
@@ -54,9 +48,7 @@
"translate-edit-no-information": "''ഈ സന്ദേശത്തിനു ഡോക്കുമെന്റേഷൻ ഇല്ല.\nഈ സന്ദേശം എങ്ങനെയാണു ഉപയോഗിക്കപ്പെടുന്നത് എന്ന് താങ്കൾക്ക് അറിയാമെങ്കിൽ, അതിനെകുറിച്ചുള്ള ഡോക്കുമെന്റേഷൻ ചേർത്ത് താങ്കൾക്ക് മറ്റുള്ള പരിഭാഷകർക്കു സഹായമേകാം.''",
"translate-edit-information": "സന്ദേശത്തെക്കുറിച്ചുള്ള വിശദീകരണം ($1)",
"translate-edit-in-other-languages": "സന്ദേശം മറ്റു ഭാഷകളിൽ",
- "translate-edit-committed": "സന്ദേശത്തിന്റെ നിലവിലുള്ള പരിഭാഷ",
"translate-edit-warnings": "അപൂർണ്ണമായ പരിഭാഷയെക്കുറിച്ചുള്ള മുന്നറിയിപ്പ്",
- "translate-edit-tmsugs": "ഓർത്തുവെച്ച പരിഭാഷപ്പെടുത്തലുകളിൽ നിന്നുള്ള സൂചനകൾ",
"translate-edit-tmmatch-source": "പരിഭാഷയുടെ മൂലരൂപം: $1",
"translate-edit-tmmatch": "$1% പൊരുത്തപ്പെടുന്നു",
"translate-use-suggestion": "ഇപ്പോഴുള്ള പരിഭാഷയ്ക്ക് പകരം ഈ നിർദ്ദേശം ഉപയോഗിയ്ക്കുക.",
@@ -92,6 +84,7 @@
"translate-pref-nonewsletter": "ഇമെയിൽ വാർത്താപത്രികകൾ എനിക്ക് അയയ്ക്കേണ്ടതില്ല",
"translate-pref-editassistlang": "സഹായ ഭാഷകൾ:",
"prefs-translate": "പരിഭാഷാ ഐച്ഛികങ്ങൾ",
+ "translate-pref-editassistlang-help": "അല്പവിരാമം ഉപയോഗിച്ച് വേർപെടുത്തിയിരിക്കുന്ന ഭാഷാ കോഡുകളുടെ പട്ടിക. \nതാങ്കൾ പരിഭാഷപ്പെടുത്തുമ്പോൾ ഈ ഭാഷകളിലെ പരിഭാഷകൾ കാണിക്കുന്നതാണ്. \nസ്വതേ നൽകുന്ന പട്ടിക താങ്കളുടെ ഭാഷയെ ആശ്രയിച്ചുള്ളതായിരിക്കും",
"translate-pref-editassistlang-bad": "പട്ടികയിലെ അസാധുവായ ഭാഷ കോഡ്:\n<nowiki>$1</nowiki>.",
"right-translate": "പരിഭാഷയ്ക്കുള്ള സമ്പർക്കമുഖമുപയോഗിച്ച് തിരുത്തുക",
"right-translate-manage": "സന്ദേശ സഞ്ചയങ്ങളുടെ കൈകാര്യം",
@@ -99,7 +92,16 @@
"right-translate-import": "ഓഫ്‌ലൈൻ പരിഭാഷകൾ ഇറക്കുമതി ചെയ്യുക",
"action-translate-import": "ഓഫ്‌ലൈനായിട്ടുള്ള പരിഭാഷകൾ കയറ്റുമതി ചെയ്യുക",
"right-translate-messagereview": "പരിഭാഷകൾ സംശോധനം ചെയ്യുക",
+ "action-translate-messagereview": "പരിഭാഷകൾ സംശോധനം ചെയ്യുക",
"right-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-rc-translation-filter": "പരിഭാഷകൾ അരിച്ചെടുക്കുക:",
"translate-rc-translation-filter-no": "ഒന്നും ചെയ്യേണ്ടതില്ല",
"translate-rc-translation-filter-only": "പരിഭാഷകൾ മാത്രം പ്രദർശിപ്പിക്കുക",
@@ -131,8 +133,7 @@
"translate-statsf-language": "അല്പവിരാമത്താൽ വിഭജിക്കപ്പെട്ടിട്ടുള്ള ഭാഷാകോഡുകളുടെ പട്ടിക",
"translate-statsf-group": "കോഡ് ഗണങ്ങളുടെ അല്പവിരാമചിഹ്നത്താൽ വിഭജിക്കപ്പെട്ട പട്ടിക",
"translate-statsf-submit": "എങ്ങനെയുണ്ടെന്ന് കാണുക",
- "translate-tag-category": "പരിഭാഷപ്പെടുത്താവുന്ന താളുകൾ",
- "translate-tag-page-desc": "[[$2|$1]] എന്ന വിക്കി താളിന്റെ തർജ്ജമ.",
+ "translate-tag-page-desc": "$3 ($4) ഭാഷയിലെ [[$2|$1]] എന്ന വിക്കി താളിന്റെ തർജ്ജമ.",
"translate-sidebar-alltrans": "ഇതര ഭാഷകളിൽ",
"translations": "എല്ലാ തർജ്ജമകളും",
"translations-summary": "ലഭ്യമായ എല്ലാ പരിഭാഷകളും പ്രദർശിക്കപ്പെടാൻ താഴെ സന്ദേശത്തിന്റെ പേര് നൽകുക.",
@@ -184,7 +185,6 @@
"translate-manage-import-deleted": "മായ്ക്കപ്പെട്ട സന്ദേശം $1",
"translate-manage-action-import": "ഇറക്കുമതി ചെയ്യുക",
"translate-manage-action-ignore": "അവഗണിക്കുക",
- "translate-manage-fuzzy-summary": "സന്ദേശ നിർവചനം മാറിയിരിക്കുന്നു",
"translate-manage-submit": "നടപ്പിലാക്കുക",
"translate-manage-import-ok": "$1 എന്ന താളിന്റെ പുതിയ പതിപ്പ് ഇറക്കുമതി ചെയ്തിരിക്കുന്നു.",
"translate-manage-import-done": "എല്ലാം ചെയ്തു!",
@@ -195,7 +195,6 @@
"translate-js-summary": "ചുരുക്കം:",
"translate-js-save": "സേവ് ചെയ്യുക",
"translate-js-next": "സേവ് ചെയ്യുക, അടുത്തത് തുറക്കുക",
- "translate-js-nonext": "ഇത് ഈ താളിലെ അവസാന സന്ദേശമാണ്.",
"translate-js-skip": "അടുത്തതിലേയ്ക്ക് പോവുക",
"translate-js-history": "പരിഭാഷയുടെ നാൾവഴി",
"translate-js-support": "ചോദ്യം ചോദിക്കുക",
@@ -213,17 +212,6 @@
"translate-searchprofile": "പരിഭാഷകൾ",
"translate-searchprofile-tooltip": "എല്ലാ പരിഭാഷകളിൽ നിന്നും തിരയുക",
"translate-search-languagefilter": "ഭാഷയനുസരിച്ച് എടുക്കുക:",
- "translate-messagereview-submit": "സ്വീകരിക്കുക",
- "translate-messagereview-progress": "സ്വീകരിക്കുന്നു...",
- "translate-messagereview-failure": "സ്വീകരിക്കുന്നു... പരാജയപ്പെട്ടു: $1",
- "translate-messagereview-done": "സ്വീകരിച്ചവ",
- "translate-messagereview-reviews": "{{PLURAL:$1|ഒരു ഉപയോക്താവ്|$1 ഉപയോക്താക്കൾ}} സംശോധനം ചെയ്തിരിക്കുന്നു",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|നിങ്ങൾ|നിങ്ങളടക്കം $1 ഉപയോക്താക്കൾ}} സംശോധനം ചെയ്തിരിക്കുന്നു",
- "api-error-invalidrevision": "പരിഭാഷ കണ്ടെത്താനായില്ല",
- "api-error-unknownmessage": "സന്ദേശം കണ്ടെത്താനായില്ല",
- "api-error-owntranslation": "താങ്കൾക്ക് താങ്കളുടെ തന്നെ പരിഭാഷകൾ സ്വീകരിക്കാനാവില്ല",
- "translate-messagereview-no-own": "താങ്കൾക്ക് താങ്കളുടെ തന്നെ പരിഭാഷകൾ സ്വീകരിക്കാനാവില്ല",
- "translate-messagereview-doit": "തർജ്ജമ ശരിയാണെന്നു രേഖപ്പെടുത്തുക",
"log-name-translationreview": "പരിഭാഷാ സംശോധന രേഖ",
"translate-workflow-state-": "(സജ്ജീകരിച്ചിട്ടില്ല)",
"translate-workflowstatus": "സ്ഥിതി : $1",
@@ -233,7 +221,6 @@
"translate-dynagroup-recent-label": "സമീപകാല പരിഭാഷകൾ",
"translate-dynagroup-additions-label": "സമീപകാലത്ത് ചേർത്തവ",
"translate-dynagroup-additions-desc": "പുതിയതും മാറ്റം വന്നതുമായ ആയ സന്ദേശങ്ങൾ കാണിക്കുന്നു",
- "translate-gethelp": "സഹായം",
"translate-msggroupselector-projects": "സന്ദേശഗണങ്ങൾ",
"translate-msggroupselector-search-placeholder": "സന്ദേശഗണങ്ങൾ തിരയുക",
"translate-msggroupselector-search-all": "എല്ലാം",
diff --git a/www/wiki/extensions/Translate/i18n/core/mni.json b/www/wiki/extensions/Translate/i18n/core/mni.json
new file mode 100644
index 00000000..eaf43345
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/mni.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Awangba Mangang"
+ ]
+ },
+ "translate-documentation-language": "Documentationda paojel thao"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/mnw.json b/www/wiki/extensions/Translate/i18n/core/mnw.json
new file mode 100644
index 00000000..b31a268e
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/mnw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Htawmonzel"
+ ]
+ },
+ "translate-documentation-language": "Message documentation"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/mo.json b/www/wiki/extensions/Translate/i18n/core/mo.json
index 8b3cb16e..eabc9137 100644
--- a/www/wiki/extensions/Translate/i18n/core/mo.json
+++ b/www/wiki/extensions/Translate/i18n/core/mo.json
@@ -1,11 +1,14 @@
{
"@metadata": {
"authors": [
- "Node ue"
+ "Node ue",
+ "Cybernenea11"
]
},
"translate": "Традуче",
"translate-desc": "[[Special:Translate|Паӂинэ спечиалэ]] пентру традучеря програмулуй МедияВики, дар ну нумай",
+ "translate-taction-translate": "Традучере",
+ "translate-taction-proofread": "Верификаре",
"translate-page-no-such-language": "Лимба спечификатэ есте инкоректэ.",
"translate-page-no-such-group": "Групул спечификат есте инвалид.",
"translate-page-disabled": "Посибилитатя де а традуче ачест груп ын ачастэ лимбэ а фост дезактиватэ.\nМотив:\n\n<em>$1</em>",
@@ -21,22 +24,40 @@
"translate-next": "Паӂина урмэтоаре",
"translate-prev": "Паӂина антериоарэ",
"translate-page-description-legend": "Информаций деспре груп",
- "translate-page-edit": "едитязэ",
+ "translate-page-edit": "редактаре",
"translate-optional": "(опционал)",
"translate-ignored": "(игнорат)",
- "translate-edit-title": "Едитязэ «$1»",
+ "translate-edit-title": "Редактаць «$1»",
"translate-edit-definition": "Дефиниция месажулуй",
"translate-edit-contribute": "контрибуе",
- "translate-edit-no-information": "''Ачест месаж ну аре документацие.\nДакэ штий унде сау кум есте фолосит, ый поць ажута пе чеилалць традукэторь прин адэугаря документацией сале.''",
- "translate-edit-information": "Информаций деспре месажул «$2» ($1)",
- "translate-edit-in-other-languages": "Месажул «$1» ын алте лимбь",
+ "translate-edit-no-information": "<em>Ачест месаж ну аре документацие.\nДакэ штиць унде сау кум есте фолосит, ый путець ажута пе чейлалць традукэторь прин адэугаря документацией сале.</em>",
+ "translate-edit-information": "Информаций деспре месаж ($1)",
+ "translate-edit-in-other-languages": "Месажул ын алте лимбь",
"translate-magic-submit": "Адуче",
"translate-magic-cm-current": "актуал",
"translate-magic-cm-original": "Ориӂинал",
"translate-magic-cm-comment": "Коментариу:",
"translate-magic-cm-save": "Салвязэ",
"translate-stats-users": "Традукэторь",
+ "translate-untranslated": "Де традус",
+ "translate-ls-column-group": "Груп де месаже",
+ "translate-mgs-group": "Груп де месаже:",
"translate-js-next": "Салвязэ ши мерӂь май департе",
- "translate-js-nonext": "Ачеста есте ултимул месаж де пе ачастэ паӂинэ.",
- "translate-js-skip": "Сарь май департе"
+ "translate-js-skip": "Урмэторул месаж",
+ "translate-documentation-language": "Документация месажулуй",
+ "tux-languageselector": "Традучець ын",
+ "tux-tab-all": "Тоате",
+ "tux-tab-untranslated": "Де традус",
+ "tux-tab-outdated": "Ынвеките",
+ "tux-tab-translated": "Традусе",
+ "tux-tab-unproofread": "Де верификат",
+ "tux-edit": "Редактаре",
+ "tux-status-proofread": "Верификат",
+ "tux-status-translated": "Традус",
+ "tux-editor-placeholder": "Традучеря думнявоастрэ",
+ "tux-editor-skip-button-label": "Урмэторул месаж",
+ "tux-editor-proofreading-mode": "Верификаре",
+ "tux-editor-translate-mode": "Листэ",
+ "tux-editor-page-mode": "Паӂинэ",
+ "tux-message-filter-placeholder": "Филтраря листей"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/mr.json b/www/wiki/extensions/Translate/i18n/core/mr.json
index 5b6f30aa..15bc29c2 100644
--- a/www/wiki/extensions/Translate/i18n/core/mr.json
+++ b/www/wiki/extensions/Translate/i18n/core/mr.json
@@ -13,11 +13,6 @@
"translate": "भाषांतर करा",
"translate-extensionname": "भाषांतर करा",
"translate-desc": "मिडीयाविकि आणि इतर भाषांतरे करण्याकरिता [[Special:Translate|विशेष पान]]",
- "translate-taskui-view": "सर्व संदेश दाखवा",
- "translate-taskui-untranslated": "अभाषांतरीत संदेश दाखवा",
- "translate-taskui-optional": "ऐच्छिक संदेश दाखवा",
- "translate-taskui-acceptqueue": "फक्त संदेश ज्यास मी 'परिक्षण केले'(रिव्ह्यूड)अशी खूण करू शकतो",
- "translate-taskui-reviewall": "सर्व भाषांतरांचे परिक्षण करा",
"translate-taskui-export-to-file": "मुळ प्रारूपात निर्यात करा",
"translate-taskui-export-as-po": "विना-जाल भाषांतरासाठी निर्यात करा",
"translate-taction-translate": "भाषांतर करा",
@@ -46,7 +41,6 @@
"translate-page-description-hasoptional": "या संदेश गटात ऐच्छिक संदेश आहेत.\nजेंव्हा आपल्या भाषेची विशेष गरज असेल तेंव्हाच ऐच्छिक संदेशांचे भाषांतर करावे\nजसे(शब्दात) रिकामी जागा न वापरणे किंवा विशेषनाम. $1",
"translate-page-description-hasoptional-open": "ऐच्छिक संदेश दाखवा",
"translate-page-edit": "संपादन करा",
- "translate-ext-url": "<hr />वेबसाइट: $1",
"translate-optional": "(वैकल्पिक)",
"translate-ignored": "(दुर्लक्षित)",
"translate-edit-title": "\"$1\"चे संपादन",
@@ -56,14 +50,13 @@
"translate-edit-no-information": "<em>या संदेशाकरिता कोणतेही नोंदीकरण(डॉक्यूमेंटेशन) नाही. हा संदेश कुठे आणि कसा वापरला आहे हे तुम्हाला ठाऊक असेल तर, या पानाचे नोंदीकरण(डॉक्यूमेंटेशन) करून तुम्ही इतर भाषांतरकारांना मदत करू शकता.</em>",
"translate-edit-information": "($1) या संदेशाबद्दल माहिती",
"translate-edit-in-other-languages": "इतर भाषांमधील संदेश",
- "translate-edit-committed": "संकेतन प्रणालीमधील सध्याचे भाषांतरण",
"translate-edit-warnings": "अर्धवट भाषांतरांसाठीचे इशारे",
- "translate-edit-tmsugs": "भाषांतर स्मृती मधून व यांत्रिक भाषांतरामधून सुचवण्या",
"translate-edit-tmmatch-source": "स्रोत मजकूराचे भाषांतर: $1",
"translate-edit-tmmatch": "$1% जुळते",
"translate-use-suggestion": "सध्याचे भाषांतराऐवजी ही सुचवणी टाका.",
"translate-edit-nopermission": "आपणास भाषांतरासाठी 'भाषांतर अधिकार' हवेत.",
"translate-edit-askpermission": "परवानगी घ्या",
+ "exporttranslations": "भाषांतरे निर्यात करा",
"translate-magic-pagename": "वाढीव मीडियाविकि भाषांतर",
"translate-magic-module": "नियामक:",
"translate-magic-submit": "ओढा",
@@ -140,7 +133,6 @@
"translate-statsf-language": "भाषा संकेतांची स्वल्पविरामाने वेगळी केलेली यादी:",
"translate-statsf-group": "गट संकेतांची स्वल्पविरामाने वेगळी केलेली यादी:",
"translate-statsf-submit": "झलक",
- "translate-tag-category": "भाषांतरासाठीची पाने",
"translate-tag-page-desc": "विकिपान [[$2|$1]] चे भाषांतर.",
"translate-sidebar-alltrans": "इतर भाषांत",
"translations": "सर्व भाषांतरे",
@@ -213,7 +205,6 @@
"translate-manage-toolong": "$1 चा जास्तीत जास्त प्रक्रिया काल{{PLURAL:$1|सेकंद}} पार झाला. कृपया, प्रक्रिया सुरू ठेवण्यास, या फॉर्मला पुन्हा सादर करा.",
"translate-manage-import-summary": "बाह्य स्रोतांतुन एक नविन आवृत्ती आयात करीत आहे",
"translate-manage-conflict-summary": "बाह्य स्रोतांतुन एक नविन आवृत्ती आयात करीत आहे.\nकृपया तपासा.",
- "translate-manage-fuzzy-summary": "संदेश व्यख्या बदलली आहे",
"translate-manage-submit": "क्रियान्वयन",
"translate-manage-intro-other": "खाली $1 भाषेतील झालेल्या भाषांतरबदलांची यादी आहे.कृपया या बदलांचे पुनर्विलोकन करा व प्रत्येक अद्यतनासाठी आपण घेऊ इच्छिणारी क्रिया निवडा.\nजर आपण झालेले बदल टाळू इच्छित असाल तर ही क्रिया तात्पुरत्या स्वरुपाची आहे.",
"translate-manage-import-ok": "आयात केले:$1",
@@ -228,9 +219,7 @@
"translate-js-summary": "सारांश:",
"translate-js-save": "जतन करा",
"translate-js-next": "जतन करुन मजकूर उघडा",
- "translate-js-nonext": "हा या पानावरील शेवटचा संदेश होता.",
"translate-js-skip": "पुढच्यावर सरका",
- "translate-js-save-failed": "जतन करणे अयशस्वी.या त्रूटीचा अहवाल पाठवा.",
"translate-js-history": "भाषांतर इतिहास",
"translate-js-support": "प्रश्न विचारा",
"translate-js-support-title": "जर या संदेशाच्या भाषांतरासाठी योग्य व पुरेशी माहिती येथे नसल्यास, मदतीची हाक द्या.",
@@ -246,31 +235,18 @@
"translate-searchprofile-tooltip": "सर्व भाषांतरात शोधा",
"translate-search-languagefilter": "भाषेनुसार गाळा:",
"translate-search-nofilter": "गाळणी नको",
- "translate-messagereview-submit": "पुनर्विलोकित खूण करा",
- "translate-messagereview-progress": "पुनर्विलोकित म्हणून खूण करीत आहे...",
- "translate-messagereview-failure": "पुनर्विलोकित खूण करणे अयशस्वी:$1",
- "translate-messagereview-done": "पुनरावलोकित",
- "translate-messagereview-reviews": "{{PLURAL:$1|एका सदस्याने|$1 सदस्यांनी}} पुनरावलोकित",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|आपल्याद्वारे|$1 सदस्यांद्वारे(आपल्यासह)}}पुनरावलोकित",
- "api-error-invalidrevision": "भाषांतर सापडले नाही",
- "api-error-unknownmessage": "संदेश सापडला नाही",
- "api-error-fuzzymessage": "भाषांतरावर fuzzy म्हणून खूण केलेली आहे",
- "api-error-owntranslation": "आपण आपल्याच भाषांतरांवर पुनरावलोकित म्हणून खूण करु शकत नाही.",
- "translate-messagereview-no-fuzzy": "Fuzzy भाषांतरांवर पुनरावलोकित म्हणून खूण करु शकत नाही.",
- "translate-messagereview-no-own": "आपण आपल्याच भाषांतरांवर पुनरावलोकित म्हणून खूण करु शकत नाही.",
- "translate-messagereview-doit": "या भाषांतरावर पुनरावलोकित म्हणून खूण करा.",
"log-name-translationreview": "भाषांतर पुनरावलोकन नोंदी",
"log-description-translationreview": "भाषांतरे व संदेश गटातील सर्व पुनरावलोककांच्या नोंदी.",
"logentry-translationreview-message": "$1 ने $3 भाषांतर {{GENDER:$2|पुनर्विलोकित केले}}",
"group-translate-sandboxed": "अन-अनुमोदित भाषांतरकार",
"group-translate-sandboxed-member": "{{GENDER:$1|अन-अनुमोदित भाषांतरकार}}",
+ "translate-workflowstatus": "स्थिती:$1",
"translate-stats-workflow": "स्थिति",
"translate-workflowgroup-label": "कार्यओघ स्थिती",
"translate-dynagroup-recent-label": "अलीकडील भाषांतरे",
"translate-dynagroup-recent-desc": "हा संदेशगट या भाषेतील सर्व अलिकडील भाषांतरे दाखवितो.\n\nपुनर्विलोकन कार्यासाठी अधिक उपयोगी.",
"translate-dynagroup-additions-label": "अलीकडेच जोडलेले",
"translate-dynagroup-additions-desc": "या संदेशगटात नविन व बदललेले संदेश आहेत.",
- "translate-gethelp": "साहाय्य",
"translate-msggroupselector-projects": "संदेश गट",
"translate-msggroupselector-search-placeholder": "गट शोधा",
"translate-msggroupselector-search-all": "सर्व",
@@ -289,6 +265,7 @@
"tux-status-translated": "भाषांतरीत",
"tux-status-saving": "जतन करीत आहे...",
"tux-status-unsaved": "जतन न केलेले",
+ "tux-save-unknown-error": "एक अज्ञात त्रुटी उद्भवली.",
"tux-editor-placeholder": "आपली भाषांतरे",
"tux-editor-paste-original-button-label": "स्रोत मजकूर डकवा",
"tux-editor-discard-changes-button-label": "बदल हटवा",
@@ -296,7 +273,7 @@
"tux-editor-skip-button-label": "पुढच्यावर सरका",
"tux-editor-cancel-button-label": "रद्द करा",
"tux-editor-confirm-button-label": "भाषांतर निश्चिती",
- "tux-editor-shortcut-info": "जतन करण्यास \"$1\" टिचका किंवा पुढिल संदेशावर सरकण्यासाठी \"$2\" टिचका",
+ "tux-editor-shortcut-info": "जतन करण्यास \"$1\" टिचका किंवा पुढिल संदेशावर सरकण्यासाठी \"$2\" टिचका किंवा सारांश पुरविण्यासाठी \"$4\" टिचका किंवा इतर लघुपथासाठी \"$3\" टिचका.",
"tux-editor-edit-desc": "दस्ताऐवजीकरण संपादा",
"tux-editor-add-desc": "दस्ताऐवजीकरण जोडा",
"tux-editor-suggestions-title": "सूचना",
diff --git a/www/wiki/extensions/Translate/i18n/core/ms.json b/www/wiki/extensions/Translate/i18n/core/ms.json
index 637c92b1..7906bc51 100644
--- a/www/wiki/extensions/Translate/i18n/core/ms.json
+++ b/www/wiki/extensions/Translate/i18n/core/ms.json
@@ -10,11 +10,6 @@
},
"translate": "Terjemah",
"translate-desc": "[[Special:Translate|Laman khas]] untuk menterjemah MediaWiki dan lain-lain",
- "translate-taskui-view": "Tunjukkan semua mesej",
- "translate-taskui-untranslated": "Tunjukkan mesej yang belum diterjemahkan",
- "translate-taskui-optional": "Tunjukkan mesej tidak wajib.",
- "translate-taskui-acceptqueue": "Hanya mesej yang boleh saya tandai sebagai disemak",
- "translate-taskui-reviewall": "Semak semua terjemahan",
"translate-taskui-export-to-file": "Eksport dalam format natif",
"translate-taskui-export-as-po": "Eksport untuk penterjemahan luar talian",
"translate-taction-translate": "Terjemah",
@@ -44,7 +39,6 @@
"translate-page-description-hasoptional": "Kumpulan mesej ini mengandungi mesej tidak wajib.\nMesej tidak wajib hanya wajar diterjemahkan jika bahasa anda mempunyai keperluan tertentu\nseperti tidak menggunakan jarak atau mengalih huruf kata nama khas. $1",
"translate-page-description-hasoptional-open": "Tunjukkan mesej tidak wajib.",
"translate-page-edit": "sunting",
- "translate-ext-url": "<hr />Tapak web: $1",
"translate-optional": "(tidak wajib)",
"translate-ignored": "(tidak diendahkan)",
"translate-edit-title": "Sunting \"$1\"",
@@ -54,9 +48,7 @@
"translate-edit-no-information": "<em>Pesanan ini tidak mempunyai pendokumenan. Jika anda tahu di mana atau bagaimana pesanan ini digunakan, anda boleh membantu para penterjemah dengan menambahkan pendokumenan kepada pesanan ini.</em>",
"translate-edit-information": "Maklumat mesej ($1)",
"translate-edit-in-other-languages": "Mesej dalam bahasa lain",
- "translate-edit-committed": "Penterjemahan terkini di dalam perisian",
"translate-edit-warnings": "Amaran penterjemahan tak lengkap",
- "translate-edit-tmsugs": "Cadangan dari sistem ingatan penterjemahan",
"translate-edit-tmmatch-source": "Teks sumber terjemahan: $1",
"translate-edit-tmmatch": "$1% berpadan",
"translate-use-suggestion": "Ganti terjemahan semasa dengan cadangan ini.",
@@ -139,7 +131,6 @@
"translate-statsf-language": "Senarai kod bahasa yang diasingkan dengan tanda koma:",
"translate-statsf-group": "Senarai kod kumpulan yang diasingkan dengan tanda koma:",
"translate-statsf-submit": "Pralihat",
- "translate-tag-category": "Laman yang boleh diterjemah",
"translate-tag-page-desc": "Terjemahan laman wiki [[$2|$1]].",
"translate-sidebar-alltrans": "Dalam bahasa lain",
"translations": "Semua terjemahan",
@@ -159,8 +150,8 @@
"translate-langstats-incomplete": "Sesetengah statistik di laman ini belum lengkap. Sila muatkan semula untuk mendapatkan lebih banyak statistik.",
"translate-langstats-expand": "kembangkan",
"translate-langstats-collapse": "lipat",
- "translate-langstats-expandall": "kembangkan semua",
- "translate-langstats-collapseall": "lipat semua",
+ "translate-langstats-expandall": "tunjukkan semua",
+ "translate-langstats-collapseall": "sorokkan semua",
"translate-language-code": "Kod bahasa",
"translate-language-code-field-name": "Kod bahasa:",
"translate-suppress-complete": "Sorokkan kumpulan mesej yang diterjemah sepenuhnya",
@@ -215,7 +206,6 @@
"translate-manage-toolong": "Tempoh pemprosesan maksimum $1 saat dilampaui.\nSila serahkan semula borang itu untuk terus memproses.",
"translate-manage-import-summary": "Mengimport versi baru dari sumber luaran",
"translate-manage-conflict-summary": "Mengimport versi baru dari sumber luaran.\nSila semak.",
- "translate-manage-fuzzy-summary": "Takrifan mesej telah diubah",
"translate-manage-submit": "Laksanakan",
"translate-manage-intro-other": "Berikut ialah senarai perubahan dalam bahasa $1.\nSila semak perubahan dan pilih tindakan yang anda hendak lakukan untuk setiap kemaskini.\nJika anda memilih untuk mengabaikan perubahan, maka tindakan ini hanya sementara.",
"translate-manage-import-ok": "Diimport: $1",
@@ -233,9 +223,7 @@
"translate-js-summary": "Ringkasan:",
"translate-js-save": "Simpan",
"translate-js-next": "Simpan dan buka yang seterusnya",
- "translate-js-nonext": "Inilah mesej terakhir di laman ini.",
"translate-js-skip": "Langkau ke mesej seterusnya",
- "translate-js-save-failed": "Gagal disimpan. Sila laporkan ralat ini.",
"translate-js-history": "Sejarah penterjemahan",
"translate-js-support": "Tanyakan soalan",
"translate-js-support-title": "Minta tolong kalau tak cukup maklumat untuk menterjemahkan mesej ini dengan betul.",
@@ -254,19 +242,6 @@
"translate-searchprofile-tooltip": "Cari dari semua terjemahan",
"translate-search-languagefilter": "Tapis mengikut bahasa:",
"translate-search-nofilter": "Jangan tapis",
- "translate-messagereview-submit": "Tanda sebagai disemak",
- "translate-messagereview-progress": "Menanda sebagai disemak...",
- "translate-messagereview-failure": "Gagal menanda sebagai disemak: $1",
- "translate-messagereview-done": "Disemak",
- "translate-messagereview-reviews": "Disemak oleh {{PLURAL:$1|seorang|$1 orang}} pengguna",
- "translate-messagereview-reviewswithyou": "Disemak oleh {{PLURAL:$1|anda|$1 orang pengguna, termasuk anda}}",
- "api-error-invalidrevision": "Terjemahan tidak dijumpai",
- "api-error-unknownmessage": "Mesej tidak dijumpai",
- "api-error-fuzzymessage": "Terjemahan ditandai sebagai kabur",
- "api-error-owntranslation": "Anda tidak boleh menanda terjemahan sendiri sebagai disemak.",
- "translate-messagereview-no-fuzzy": "Terjemahan kabur tidak boleh ditanda sebagai disemak.",
- "translate-messagereview-no-own": "Anda tidak boleh menanda terjemahan sendiri sebagai disemak.",
- "translate-messagereview-doit": "Tanda terjemahan ini sebagai disemak.",
"log-name-translationreview": "Log semakan terjemahan",
"log-description-translationreview": "Log bagi semua kajian semula pada terjemahan dan kumpulan mesej.",
"logentry-translationreview-message": "$1 telah {{GENDER:$2|menyemak}} terjemahan $3",
@@ -288,7 +263,6 @@
"translate-dynagroup-recent-desc": "Kumpulan mesej ini menunjukkan semua terjemahan terkini ke dalam bahasa ini.\nPaling berguna dengan tugas menyemak.",
"translate-dynagroup-additions-label": "Penambahan terbaru",
"translate-dynagroup-additions-desc": "Kumpulan mesej ini memaparkan mesej-mesej yang baru dan diubah.",
- "translate-gethelp": "Bantuan",
"translate-msggroupselector-projects": "Kumpulan mesej",
"translate-msggroupselector-search-placeholder": "Cari dalam kumpulan",
"translate-msggroupselector-search-all": "Semua",
diff --git a/www/wiki/extensions/Translate/i18n/core/mt.json b/www/wiki/extensions/Translate/i18n/core/mt.json
index cbf445e7..2054a0e8 100644
--- a/www/wiki/extensions/Translate/i18n/core/mt.json
+++ b/www/wiki/extensions/Translate/i18n/core/mt.json
@@ -8,7 +8,6 @@
},
"translate": "Traduzzjoni",
"translate-desc": "[[Special:Translate|Paġna speċjali]] biex tittraduċi lil MediaWiki u mhux biss",
- "translate-taskui-view": "Uri l-messaġġi kollha",
"translate-taskui-export-to-file": "Esporta fil-format nattiv",
"translate-taskui-export-as-po": "Esporta għal traduzzjoni off-line",
"translate-taction-lstats": "Statistiki tal-lingwa",
@@ -31,7 +30,6 @@
"translate-prev": "Paġna preċedenti",
"translate-page-description-legend": "Informazzjoni dwar il-grupp",
"translate-page-edit": "editja",
- "translate-ext-url": "<hr />Sit elettroniku: $1",
"translate-optional": "(opzjonali)",
"translate-ignored": "(injorat)",
"translate-edit-title": "Modifika ta' \"$1\"",
@@ -41,9 +39,7 @@
"translate-edit-no-information": "''Dan il-messaġġ m'għandu l-ebda dokumentazzjoni.''\n''Jekk taf fejn jew kif jiġi wżat dan il-messaġġ, tista' tgħin lit-tradutturi l-oħra billi żżid id-dokumentazzjoni ma' dan il-messaġġ.''",
"translate-edit-information": "Informazzjoni dwar il-messaġġ ($1)",
"translate-edit-in-other-languages": "Il-messaġġ f'lingwi oħra",
- "translate-edit-committed": "Traduzzjoni attwali fis-software",
"translate-edit-warnings": "Twissijiet dwar traduzzjonijiet mhux kompluti",
- "translate-edit-tmsugs": "Suġġerimenti mill-memorja tat-traduzzjonijiet",
"translate-use-suggestion": "Biddel it-traduzzjoni attwali ma' din is-suġġeriment.",
"translate-edit-nopermission": "Għandek bżonn l-awtorizzazzjoni sabiex tittraduċi messaġġi.",
"translate-edit-askpermission": "Itlob l-awtorizzazzjoni",
@@ -108,7 +104,6 @@
"translate-statsf-language": "Lista tal-kodiċi tal-lingwi separati permezz ta' virgola:",
"translate-statsf-group": "Lista tal-kodiċi tal-lingwi separati permezz ta' virgola:",
"translate-statsf-submit": "Dehra proviżorja",
- "translate-tag-category": "Paġni traduċibbli",
"translate-tag-page-desc": "Traduzzjoni tal-paġna wiki [[$2|$1]].",
"translate-sidebar-alltrans": "F'lingwi oħrajn",
"translations": "It-traduzzjonijiet kollha",
@@ -164,9 +159,7 @@
"translate-import-err-invalid-title": "L-isem tal-fajl <nowiki>$1</nowiki> mhuwiex validu.",
"translate-import-err-no-such-file": "Il-fajl <nowiki>$1</nowiki> ma jeżistix jew ma ġiex imtella fuq livell lokali.",
"translate-js-next": "Salvaha u għaddi għal li jmiss",
- "translate-js-nonext": "Dan kien l-aħħar messaġġ f'din il-paġna.",
"translate-js-skip": "Li jmiss",
- "translate-js-save-failed": "L-issejvjar tal-paġna falla. Jekk jogħġbok irraporta dan l-iżball.",
"translate-js-history": "Kronoloġija",
"translate-js-support": "Staqsi mistoqsija",
"translate-gs-pos": "Poż.",
@@ -183,11 +176,6 @@
"translate-searchprofile-tooltip": "Tfittxija minn kull traduzzjoni",
"translate-search-languagefilter": "Filtru skont il-lingwa:",
"translate-search-nofilter": "L-ebda filtru",
- "translate-messagereview-submit": "Aċċetta",
- "api-error-owntranslation": "Ma tistax taċċetta t-traduzzjonijiet tiegħek",
- "translate-messagereview-no-fuzzy": "Traduzzjonijiet li għandhom bżonn l-aġġornament ma jistgħux jiġu aċċettati.",
- "translate-messagereview-no-own": "Ma tistax taċċetta t-traduzzjonijiet tiegħek.",
- "translate-messagereview-doit": "Aċċetta din it-traduzzjoni bħala traduzzjoni tajba.",
"translate-workflowstatus": "Stat: $1",
"tux-empty-list-all-guide": "Agħżel gruppi ta' messaġġi ieħor biex tittraduċi",
"tux-empty-list-other-guide": "Tista' tgħin tirrevedi traduzzjonijiet eżistenti",
diff --git a/www/wiki/extensions/Translate/i18n/core/mui.json b/www/wiki/extensions/Translate/i18n/core/mui.json
new file mode 100644
index 00000000..39164bf7
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/mui.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jawadywn"
+ ]
+ },
+ "translate-documentation-language": "Pencatetan pesen"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/mwl.json b/www/wiki/extensions/Translate/i18n/core/mwl.json
new file mode 100644
index 00000000..aac2ecf3
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/mwl.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "MokaAkashiyaPT",
+ "Athena in Wonderland"
+ ]
+ },
+ "translate-taction-export": "Sportar",
+ "translate-edit-translation": "Traduçon",
+ "translate-magic-cm-export": "Sportar",
+ "languagestats": "Statísticas de la lhéngua",
+ "supportedlanguages": "Lhénguas sustentadas",
+ "translate-import-load": "Cargar fexeiro",
+ "translate-documentation-language": "Decumentaçon de la mensaige",
+ "translate-searchprofile": "Traduçones",
+ "tux-editor-edit-desc": "Eiditar la decumentaçon",
+ "tux-editor-add-desc": "Poner decumentaçon",
+ "tux-editor-doc-editor-placeholder": "Decumentaçon de la mensaige",
+ "tux-editor-doc-editor-save": "Grabar decumentaçon"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/my.json b/www/wiki/extensions/Translate/i18n/core/my.json
index 3e1002ef..861c22c2 100644
--- a/www/wiki/extensions/Translate/i18n/core/my.json
+++ b/www/wiki/extensions/Translate/i18n/core/my.json
@@ -2,20 +2,283 @@
"@metadata": {
"authors": [
"Erikoo",
- "Ninjastrikers"
+ "Ninjastrikers",
+ "Dr Lotus Black"
]
},
"translate": "ဘာသာပြန်ပါ",
+ "translate-extensionname": "ဘာသာပြန်ပါ",
+ "translate-taction-translate": "ဘာသာပြန်ရန်",
+ "translate-taction-proofread": "ပြန်လည်ဆန်းစစ်",
+ "translate-taction-lstats": "ဘာသာစကား စာရင်းအင်း",
+ "translate-taction-mstats": "မက်ဆေ့အုပ်စု စာရင်းအင်း",
+ "translate-taction-export": "တင်ပို့ရန်",
+ "translate-taction-disabled": "ဤဝီကီတွင် ဤလုပ်ဆောင်ချက်ကို ပိတ်ထားသည်။",
+ "translate-page-disabled": "ဤအုပ်စုရှိ ဤဘာသာစကားသို့ ဘာသာပြန်ခြင်းကို ပိတ်ထားပါသည်။ အကြောင်းရင်းမှာ:\n\n<em>$1</em>",
+ "translate-language-disabled": "ဤဘာသာစကားသို့ ဘာသာပြန်ခြင်းကို ပိတ်ထားသည်။",
+ "translate-page-settings-legend": "အပြင်အဆင်များ",
"translate-page-group": "အုပ်စု",
- "translate-page-language": "ဘာသာ",
+ "translate-page-language": "ဘာသာစကား",
"translate-page-limit": "ကန့်သတ်ချက်",
"translate-page-limit-option": "တစ်မျက်နှာလျှင် {{PLURAL:$1|စာလုံး|စာလုံးပေါင်း}} $1",
"translate-submit": "ရှာဖွေပါ",
"translate-page-navigation-legend": "အ​ညွှန်း​",
"translate-page-showing-all": "{{PLURAL:$1|စာလုံး|စာလုံးပေါင်း}} $1 လုံး ရှာဖွေတွေ့ရှိသည်။",
+ "translate-page-showing-none": "ဖေါ်ပြရန် စကားလုံး မရှိပါ",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "နောက်စာမျက်နှာ",
"translate-prev": "ပြီးခဲ့သော စာမျက်နှာ",
- "translate-page-edit": "ပြင်ရန်",
+ "translate-page-description-legend": "ဤအုပ်စုအကြောင်း သတင်းအချက်အလက်",
+ "translate-page-edit": "ပြင်ဆင်ရန်",
+ "translate-optional": "(ထည့်လိုကထည့်နိုင်)",
+ "translate-ignored": "(လျစ်လျူရှု)",
+ "translate-edit-title": "\"$1\" ကိုပြင်ဆင်ရန်",
+ "translate-edit-definition": "မက်ဆေ့ အဓိပ္ပာယ်သတ်မှတ်ချက်",
+ "translate-edit-translation": "ဘာသာပြန်ခြင်း",
+ "translate-edit-contribute": "ပံ့ပိုးရန်",
+ "translate-edit-information": "မက်ဆေ့အကြောင်း သတင်းအချက်အလက် ($1)",
+ "translate-edit-in-other-languages": "အခြားဘာသာစကားများရှိ မက်ဆေ့",
+ "translate-edit-warnings": "မပြီးမြောက်သော ဘာသာပြန်များအတွက် သတိပေးချက်များ",
+ "translate-edit-tmmatch": "$1% ကိုက်ညီ",
+ "translate-use-suggestion": "ဤအကြံပြုချက်ဖြင့် လက်ရှိဘာသာပြန်ကို အစားထိုးရန်။",
+ "translate-edit-nopermission": "မက်ဆေ့များကို ဘာသာပြန်ရန် ဘာသာပြန် အခွင့်အရေးများ လိုအပ်ပါသည်။",
+ "translate-edit-askpermission": "ခွင့်ပြုချက် ရယူရန်",
+ "exporttranslations": "ဘာသာပြန်များကို တင်ပို့ရန်",
+ "translate-export-form-format": "ဖောမတ်",
+ "translate-magic-module": "မော်ဂျူး:",
+ "translate-magic-cm-export": "တင်ပို့ရန်",
+ "translate-magic-nothing-to-export": "တင်ပို့ရန် ဘာမျှမရှိပါ။",
+ "translate-magic-cm-current": "လက်ရှိ",
+ "translate-magic-cm-original": "မူရင်း",
+ "translate-magic-cm-comment": "မှတ်ချက်:",
+ "translate-magic-cm-save": "သိမ်းရန်",
+ "translate-magic-cm-savefailed": "သိမ်းဆည်းရာ မအောင်မြင်ခဲ့",
+ "translate-magic-namespace": "အမည်ညွှန်း အမည်များ",
+ "translate-magic-notsaved": "သင့်တည်းဖြတ်မှုကို မသိမ်းဆည်းခဲ့ရပါ",
+ "translate-magic-saved": "သင်၏ ပြောင်းလဲမှုများသည် သိမ်းဆည်းပြီးဖြစ်သည်။",
+ "translate-pref-nonewsletter": "ကျွန်ုပ်ထံ အီးမေးလ်သတင်းလွှာ မပို့ပါနှင့်",
+ "translate-pref-editassistlang": "အထောက်အကူ ဘာသာစကားများ:",
+ "prefs-translate": "ဘာသာပြန် ရွေးချယ်စရာများ",
+ "right-translate-manage": "မက်ဆေ့အုပ်စုများကို စီမံရန်",
+ "action-translate-manage": "မက်ဆေ့အုပ်စုများကို စီမံရန်",
+ "right-translate-import": "အော့ဖ်လိုင်းဘာသာပြန်များကို တင်သွင်းရန်",
+ "action-translate-import": "အော့ဖ်လိုင်းဘာသာပြန်များကို တင်သွင်းရန်",
+ "right-translate-messagereview": "ဘာသာပြန်များကို ပြန်လည်ဆန်းစစ်ရန်",
+ "action-translate-messagereview": "ဘာသာပြန်များကို ပြန်လည်ဆန်းစစ်ရန်",
+ "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-rc-translation-filter": "ဘာသာပြန်များ စိစစ်ရန်:",
+ "translate-rc-translation-filter-no": "ဘာတစ်ခုမှ မလုပ်ဆောင်ရန်",
+ "translate-rc-translation-filter-only": "ဘာသာပြန်များကိုသာ ပြရန်",
+ "translationstats": "ဘာသာပြန်မှု စာရင်းအင်း",
+ "translate-stats-edits": "တည်းဖြတ်မှုများ",
+ "translate-stats-users": "ဘာသာပြန်သူများ",
+ "translate-stats-registrations": "မှတ်ပုံတင်ခြင်း",
+ "translate-stats-reviews": "ပြန်လည်ဆန်းစစ်မှုများ",
+ "translate-stats-reviewers": "ပြန်လည်ဆန်းစစ်သူများ",
+ "translate-statsf-intro": "ဤပုံစံဖြင့် ရိုးရှင်းသော စာရင်းအင်းကို ထုတ်ပြန်နိုင်သည်။ တန်ဖိုးအားလုံးတွင် အပေါ်အောက် ကန့်သတ်ချက်များရှိသည်။",
+ "translate-statsf-options": "ဇယား ရွေးချယ်စရာများ",
+ "translate-statsf-days": "ရက်အားဖြင့် အချိန်ကာလ:",
+ "translate-statsf-start": "စတင်သည့် ရက်စွဲ:",
+ "translate-statsf-scale": "အသေးစိတ်ကျမှု:",
+ "translate-statsf-scale-months": "လ",
+ "translate-statsf-scale-weeks": "အပတ်",
+ "translate-statsf-scale-days": "ရက်",
+ "translate-statsf-scale-hours": "နာရီ",
+ "translate-statsf-count": "အတိုင်းအတာ:",
+ "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-submit": "ကြိုတင်အစမ်းကြည့်ရှုရန်",
+ "translate-tag-page-desc": "$3 ($4) မှ [[$2|$1]] သို့ ဝီကီစာမျက်နှာ ဘာသာပြန်မှု",
+ "translate-sidebar-alltrans": "အခြား ဘာသာစကားများဖြင့်",
+ "translations": "ဘာသာပြန်မှုအားလုံး",
+ "translations-summary": "ရရှိနိုင်သော ဘာသာပြန်များအားလုံးကို ပြသရန် မက်ဆေ့အမည်ကို အောက်တွင် ရိုက်ထည့်ပါ။",
+ "translate-translations-no-message": "\"$1\" သည် ဘာသာပြန်နိုင်သော မက်ဆေ့မဟုတ်ပါ",
+ "translate-translations-none": "\"$1\" အတွက် ဘာသာပြန်များ မရှိပါ",
+ "translate-translations-count": "ဘာသာပြန်မှု {{PLURAL:$1|ခု|$1 ခု}} တွေ့ရှိခဲ့သည်။",
+ "translate-translations-fieldset-title": "မက်ဆေ့",
+ "translate-translations-messagename": "အမည်:",
+ "translate-translations-project": "ပရောဂျက်:",
+ "translate-translations-history-short": "ရာ",
+ "languagestats": "ဘာသာစကား စာရင်းအင်း",
+ "languagestats-summary": "ဤစာမျက်နှာသည် ဘာသာစကားတစ်ခုအတွက် မက်ဆေ့အုပ်စုအားလုံး၏ ဘာသာပြန်စာရင်းအင်းကို ပြသပေးသည်။",
+ "messagegroupstats-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-languagestats-overall": "မက်ဆေ့အုပ်စုအားလုံး အတူတကွ",
+ "translate-ls-submit": "စာရင်းအင်း ပြရန်",
+ "translate-ls-column-group": "မက်ဆေ့အုပ်စု",
+ "translate-mgs-pagename": "မက်ဆေ့အုပ်စု စာရင်းအင်း",
+ "translate-mgs-fieldset": "ရွေးချယ်စရာများ ပြသရန်",
+ "translate-mgs-group": "မက်ဆေ့အုပ်စု:",
+ "translate-mgs-nocomplete": "ပြီးမြောက်အောင် ဘာသာပြန်ထားသော ဘာသာစကားများကို မပြရန်",
+ "translate-mgs-noempty": "မည်သည့် ဘာသာပြန်ထားမှမရှိသော ဘာသာစကားများကို မပြရန်",
+ "translate-mgs-submit": "စာရင်းအင်း ပြရန်",
+ "translate-mgs-column-language": "ဘာသာစကား",
+ "translate-mgs-totals": "{{PLURAL:$1|ဘာသာစကား|ဘာသာစကားများ}} $1 အားလုံး အတူတကွ",
+ "translate-mgs-nothing": "တောင်းဆိုထားသော စာရင်းအင်းအတွက် ပြစရာမရှိပါ။",
+ "supportedlanguages": "ထောက်ပံ့ထားသော ဘာသာစကားများ",
+ "supportedlanguages-summary": "ဤစာမျက်နှာသည် {{SITENAME}} မှ ထောက်ပံ့ထားသည့် ဘာသာစကားအားလုံး၏ စာရင်းကို ပြသထားပြီး ယင်းဘာသာစကားတွင် လုပ်ဆောင်နေသော ဘာသာပြန်သူများ၏ အမည်များကို ဖော်ပြထားသည်။ တည်းဖြတ်မှုပိုများသော ဘာသာပြန်သူများကို ပိုကြီးသောနာမည်ဖြင့် ဖော်ပြထားပြီး အောက်ခြေမျဉ်းသည် ဘာသာပြန်သူက ဤနေရာတွင် လတ်တလော မည်မျှတက်ကြွစွာ ပါဝင်ခဲ့သည်ကို ဖော်ပြသည်။",
+ "supportedlanguages-colorlegend": "အရောင်အတွက် မှတ်စု: $1 ရက်အကြာက နောက်ဆုံး ဘာသာပြန်မှု",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|ဘာသာပြန်သူ}}|ဘာသာပြန်သူများ}}: $1",
+ "supportedlanguages-recenttranslations": "လတ်တလော ဘာသာပြန်များ",
+ "supportedlanguages-count": "စုစုပေါင်း {{PLURAL:$1|ဘာသာစကား|ဘာသာစကားများ}} $1",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}} - နောက်ဆုံးတည်းဖြတ်မှု $3 {{PLURAL:$3|ရက်|ရက်}} အကြာက",
+ "translate-save": "သိမ်းရန် ($1)",
+ "translate-jssti-add": "စာရင်းသို့ ပေါင်းထည့်ရန်",
+ "managemessagegroups": "မက်ဆေ့အုပ်စု စီမံခန့်ခွဲရေး",
+ "translate-smg-nochanges": "အစီစဉ်တကျလုပ်ဆောင်ရန် ပြောင်းလဲမှုများ မရှိပါ။",
+ "translate-smg-submit": "အစီစဉ်တကျဆောင်ရွက်မှုအတွက် ပြောင်းလဲမှုများ ထည့်သွင်းရန်",
+ "translate-smg-more": "ဤပြောင်းလဲမှုများကို ထည့်သွင်းပြီးပါက အစီစဉ်တကျလုပ်ဆောင်ရန် ပြောင်းလဲမှုများ ပိုများလာပါမည်။",
+ "translate-smg-left": "ဝီကီထဲရှိ မက်ဆေ့အကြောင်းအရာ",
+ "translate-smg-right": "ဝင်လာသော ပြောင်းလဲမှုများ",
+ "translate-manage-import-diff": "မက်ဆေ့ $1 | လုပ်ဆောင်ချက်များ: $2",
+ "translate-manage-import-new": "မက်ဆေ့ အသစ် $1",
+ "translate-manage-import-deleted": "ဖျက်ထားသော မက်ဆေ့ $1",
+ "translate-manage-action-import": "တင်သွင်းရန်",
+ "translate-manage-action-ignore": "လျစ်လျူရှု",
+ "importtranslations": "ဘာသာပြန်များကို တင်သွင်းရန်",
+ "translate-js-summary": "အကျဉ်းချုပ်:",
+ "translate-js-save": "သိမ်းရန်",
+ "translate-js-skip": "နောက်တစ်ခုသို့ ကျော်သွားရန်",
+ "translate-js-history": "ဘာသာပြန်မှု ရာဇဝင်",
+ "translate-js-support": "မေးခွန်းမေးရန်",
+ "translate-js-support-title": "ဤမက်ဆေ့ကို မှန်ကန်စွာဘာသာပြန်ရန် သတင်းအချက်အလက် မရှိပါက အကူအညီတောင်းခံရန်။",
+ "translate-js-support-unsaved-warning": "သင့်တွင် မသိမ်းရသေးသော ဘာသာပြန်များ ရှိသည်။",
+ "translate-gs-pos": "နေရာ",
+ "translate-gs-code": "ကုဒ်",
+ "translate-gs-continent": "တိုက်",
+ "translate-gs-speakers": "စကားပြောသူများ",
"translate-gs-score": "ရမှတ်",
- "translate-documentation-language": "စာလွှာ စာရွက်စာတမ်း"
+ "translate-gs-multiple": "၁ ခုထက်ပို",
+ "translate-gs-count": "အရေအတွက်",
+ "translate-gs-total": "စုစုပေါင်း",
+ "translate-gs-avgscore": "ပျမ်းမျှရမှတ်",
+ "translate-documentation-language": "စာလွှာ စာရွက်စာတမ်း",
+ "translate-searchprofile": "ဘာသာပြန်များ",
+ "translate-searchprofile-tooltip": "ဘာသာပြန်များအားလုံးမှ ရှာရန်",
+ "translate-searchprofile-note": "[$1 ဘာသာပြန် ရှာဖွေမှု]နှင့် ရှာဖွေမှု ရွေးချယ်စရာများ ပိုမိုရရှိနိုင်ပါသည်။",
+ "translate-search-languagefilter": "ဘာသာစကားအလိုက် စိစစ်ရန်:",
+ "translate-search-nofilter": "စိစစ်မှု မရှိ",
+ "log-name-translationreview": "ဘာသာပြန် ပြန်လည်ဆန်းစစ်မှု မှတ်တမ်း",
+ "log-description-translationreview": "ဘာသာပြန်များနှင့် မက်ဆေ့အုပ်စုများ၏ ပြန်လည်ဆန်းစစ်မှုများ မှတ်တမ်း",
+ "logentry-translationreview-message": "$1 က ဘာသာပြန် $3 ကို {{GENDER:$2|ပြန်လည်ဆန်းစစ်ခဲ့သည်}}",
+ "translate-stats-workflow": "အခြေနေ",
+ "translate-dynagroup-recent-label": "လတ်တလော ဘာသာပြန်များ",
+ "translate-dynagroup-additions-label": "လတ်တလော ပေါင်းထည့်မှုများ",
+ "translate-msggroupselector-projects": "မက်ဆေ့အုပ်စု",
+ "translate-msggroupselector-search-placeholder": "အုပ်စုများ ရှာဖွေရန်",
+ "translate-msggroupselector-search-all": "အားလုံး",
+ "translate-msggroupselector-search-recent": "မကြာမီက",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|အုပ်စုခွဲ|အုပ်စုခွဲများ}} $1 ခု",
+ "tux-languageselector": "ဘာသာပြန်ရန်မှာ",
+ "tux-tab-all": "အားလုံး",
+ "tux-tab-untranslated": "ဘာသာမပြန်ထားသော",
+ "tux-tab-outdated": "ခေတ်နောက်ကျနေသော",
+ "tux-tab-translated": "ဘာသာပြန်ထားသော",
+ "tux-tab-unproofread": "ပြန်လည်မဆန်းစစ်ရသော",
+ "tux-edit": "ပြင်ဆင်",
+ "tux-status-optional": "ထည့်လိုပါက",
+ "tux-status-fuzzy": "ခေတ်နောက်ကျနေသော",
+ "tux-status-proofread": "ပြန်လည်ဆန်းစစ်ပြီး",
+ "tux-status-translated": "ဘာသာပြန်ထားသော",
+ "tux-status-saving": "သိမ်းဆည်းနေသည်...",
+ "tux-status-unsaved": "မသိမ်းရသေးပါ",
+ "tux-save-unknown-error": "အကြောင်းရင်းမသိရှိရသော အမှားတစ်ခု ဖြစ်ပေါ်နေသည်။",
+ "tux-editor-placeholder": "သင်၏ ဘာသာပြန်",
+ "tux-editor-editsummary-placeholder": "ထည့်လိုကထည့်နိုင်သော အကျဉ်းချုပ်",
+ "tux-editor-paste-original-button-label": "ရင်းမြစ်စာသားကို မိတ္တူပွားရန်",
+ "tux-editor-discard-changes-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-edit-desc": "စာရွက်စာတမ်း ပြင်ဆင်ရန်",
+ "tux-editor-add-desc": "စာရွက်စာတမ်း ပေါင်းထည့်ရန်",
+ "tux-editor-suggestions-title": "အကြံပေးမှုများ",
+ "tux-editor-in-other-languages": "အခြား ဘာသာစကားများဖြင့်",
+ "tux-editor-need-more-help": "ထပ်ပြီး အကူအညီ လိုသေးလား?",
+ "tux-editor-ask-help": "အချက်အလက် ပိုမိုမေးမြန်းရန်",
+ "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-less": "နည်းနည်းကြည့်ရှုရန်",
+ "tux-editor-clear-translated": "ဘာသာပြန်ပြီးသားကို ဝှက်ရန်",
+ "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-editor-page-mode": "စာမျက်နှာ",
+ "tux-editor-outdated-warning": "ဤဘာသာပြန်သည် မွမ်းမံရန် လိုအပ်နိုင်သည်။",
+ "tux-editor-outdated-warning-diff-link": "ကွဲပြားမှုများကို ပြရန်",
+ "tux-editor-doc-editor-placeholder": "စာလွှာ စာရွက်စာတမ်း",
+ "tux-editor-doc-editor-save": "စာရွက်စာတမ်း သိမ်းရန်",
+ "tux-editor-doc-editor-cancel": "မလုပ်တော့ပါ",
+ "tux-messagetable-more-messages": "ပို၍ $1 {{PLURAL:$1|မက်ဆေ့|မက်ဆေ့များ}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|မက်ဆေ့|မက်ဆေ့များ}}ကို ခေါ်ယူနေသည်...",
+ "tux-message-filter-placeholder": "စိစစ် စာရင်း",
+ "tux-message-filter-result": "\"$2\" အတွက် $1 {{PLURAL:$1|ရလဒ်|ရလဒ်များ}} တွေ့ရှိခဲ့သည်",
+ "tux-message-filter-advanced-button": "အဆင့်မြင့် ရှာဖွေခြင်း",
+ "tux-proofread-translated-by-self": "သင် ဘာသာပြန်ထားသည်",
+ "tux-empty-list-all": "ဤမက်ဆေ့အုပ်စုသည် ဗလာဖြစ်နေသည်",
+ "tux-empty-list-translated": "ဘာသာပြန်ထားသော မက်ဆေ့များမရှိပါ",
+ "tux-empty-list-translated-guide": "ဘာသာပြန်ခြင်းကို ကူညီနိုင်ပါသည်",
+ "tux-empty-list-translated-action": "ဘာသာပြန်ရန်",
+ "tux-empty-no-messages-to-display": "ပြသပေးရန် မက်ဆေ့များမရှိပါ",
+ "tux-empty-no-outdated-messages": "ခေတ်နောက်ကျသော မက်ဆေ့များမရှိပါ",
+ "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-list-other": "ဘာသာပြန်ရန် ဘာတစ်ခုမှမရှိပါ",
+ "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-message-tools-show-editor": "ဝီကီအယ်ဒီတာတွင် ပြရန်",
+ "tux-editor-message-tools-history": "ရာဇဝင်",
+ "tux-editor-message-tools-delete": "ဖျက်ရန်",
+ "tux-editor-message-tools-translations": "ဘာသာပြန်များအားလုံး",
+ "tux-editor-message-tools-linktothis": "ဤမက်ဆေ့သို့ လင့်ခ်ချိတ်ရန်",
+ "tux-editor-loading": "ဝန်ဆွဲတင်နေသည်...",
+ "translate-search-more-languages-info": "နောက်ထပ် {{PLURAL:$1|ဘာသာစကား|ဘာသာစကားများ}} $1 ခု",
+ "translate-statsbar-tooltip": "$1% ဘာသာပြန်ပြီး၊ $2% ပြန်လည်ဆန်းစစ်ပြီး",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% ဘာသာပြန်ပြီး၊ $2% ပြန်လည်ဆန်းစစ်ပြီး၊ $3% ခေတ်နောက်ကျနေ",
+ "translate-search-more-groups-info": "ပို၍ $1 {{PLURAL:$1|အုပ်စု|အုပ်စုများ}}",
+ "tux-session-expired": "သင်သည် အကောင့်ထဲသို့ မဝင်ထားတော့ပါ။ သီးခြား tab တစ်ခုမှ အကောင့်ထဲသို့ ဝင်ပါ။ တနည်းအားဖြင့် မသိမ်းရသေးသော ဘာသာပြန်များကို မိတ္တူတစ်ခုကူးထားပြီး ဤစာမျက်နှာသို့ ပြန်လာကာ သင်၏ဘာသာပြန်များကို ထပ်မံရိုက်ထည့်ပါ။"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/myv.json b/www/wiki/extensions/Translate/i18n/core/myv.json
index 6b07ce64..e9264f59 100644
--- a/www/wiki/extensions/Translate/i18n/core/myv.json
+++ b/www/wiki/extensions/Translate/i18n/core/myv.json
@@ -48,7 +48,6 @@
"translate-statsf-language": "Ботпулосо явонь списка, косо келень кодт:",
"translate-statsf-group": "Ботпулосо явонь списка, косо куронь кодт:",
"translate-statsf-submit": "Васнянь неевтезэ",
- "translate-tag-category": "Ютавтомкс лопат",
"translate-tag-page-desc": "\"[[$2|$1]]\" вики лопась ютавтозь «$3 ($4)» лопасто.",
"translate-sidebar-alltrans": "Лия кельсэ",
"translations": "Весе йутавтовкст",
@@ -64,5 +63,6 @@
"translate-untranslated": "Апак ютавто",
"translate-percentage-fuzzy": "Таштамозь",
"translate-manage-action-import": "Совавтомс",
- "translate-manage-submit": "Топавтомс"
+ "translate-manage-submit": "Топавтомс",
+ "translate-documentation-language": "Пачтямнеде документация"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/nah.json b/www/wiki/extensions/Translate/i18n/core/nah.json
index 2c7b0dd0..d7b6c601 100644
--- a/www/wiki/extensions/Translate/i18n/core/nah.json
+++ b/www/wiki/extensions/Translate/i18n/core/nah.json
@@ -4,18 +4,19 @@
"Fluence",
"Ricardo gs",
"Teòtlalili",
- "Taresi"
+ "Taresi",
+ "Akapochtli"
]
},
"translate": "Tictlahtōlcuepāz",
"translate-page-group": "Olōlli",
- "translate-page-language": "Tlâtòlli",
- "translate-page-navigation-legend": "Nènemòwalistli",
+ "translate-page-language": "Tlahtolli",
+ "translate-page-navigation-legend": "Panoliztli",
"translate-page-showing": "Tiquintta tlahcuilōltzin īhuīcpa $1 oc $2 īmpan $3.",
"translate-page-showing-all": "{{PLURAL:$1|Tiquintta|Tiquintta}} $1 tlahcuilōltzin.",
"translate-page-showing-none": "Ahtlein ic tlatta.",
"translate-next": "Niman zāzanilli",
- "translate-prev": "Achto zāzanilli",
+ "translate-prev": "Achto tlahcuilolamatl",
"translate-page-description-legend": "Olōltechopa",
"translate-page-edit": "xicpatla",
"translate-edit-contribute": "titlapalēhuīz",
@@ -33,8 +34,10 @@
"translate-statsf-scale-days": "Tōnalli",
"translate-statsf-submit": "Achtochīhualiztli",
"translate-tag-page-desc": "Huiquizāzanilli ītlahtōlcuepaliz [[$2|$1]].",
- "translate-sidebar-alltrans": "Occēquīntīn tlahtōlco",
+ "translate-sidebar-alltrans": "Itech occequintin tlahtoltin",
"translations": "Mochi tlahtōlcuepaliztli",
"translate-translations-none": "Ayāc tlahtōlcuepaliztli ic \"$1\"",
- "translate-translations-fieldset-title": "Tītlantlahtōlli"
+ "translate-translations-fieldset-title": "Tlahtoltitlaniliztli",
+ "tux-editor-cancel-button-label": "Moxitiniz",
+ "tux-editor-doc-editor-cancel": "Moxitiniz"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/nan.json b/www/wiki/extensions/Translate/i18n/core/nan.json
index dce0a2fc..c6c40a5a 100644
--- a/www/wiki/extensions/Translate/i18n/core/nan.json
+++ b/www/wiki/extensions/Translate/i18n/core/nan.json
@@ -6,5 +6,6 @@
]
},
"translate-magic-module": "Module:",
+ "translate-rcfilters-translations": "Hoan-e̍k",
"translate-documentation-language": "訊息說明書"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/nb.json b/www/wiki/extensions/Translate/i18n/core/nb.json
index 09da3334..d757a70a 100644
--- a/www/wiki/extensions/Translate/i18n/core/nb.json
+++ b/www/wiki/extensions/Translate/i18n/core/nb.json
@@ -8,16 +8,14 @@
"Nghtwlkr",
"Njardarlogar",
"Simny",
- "Danmichaelo"
+ "Danmichaelo",
+ "Kingu",
+ "Jon Harald Søby"
]
},
"translate": "Oversett",
"translate-desc": "[[Special:Translate|Spesialside]] for oversettelse av MediaWiki og annet",
- "translate-taskui-view": "Vis alle meldinger",
- "translate-taskui-untranslated": "Vis uoversatte meldinger",
- "translate-taskui-optional": "Vis valgfrie meldinger",
- "translate-taskui-acceptqueue": "Kun meldinger jeg kan godkjenne",
- "translate-taskui-reviewall": "Revider alle oversettelser",
+ "translate-fuzzybot-desc": "Dette er en spesiell systemkonto som brukes av MediaWikis [https://www.mediawiki.org/wiki/Extension:Translate Translate-utvidelse] for å vedlikeholde oversettelser.\n\nKontoen er del av programvaren, og eies ikke av noen bruker.",
"translate-taskui-export-to-file": "Eksporter i opprinnelig format",
"translate-taskui-export-as-po": "Eksporter for frakoblet oversettelse",
"translate-taction-translate": "Oversett",
@@ -46,7 +44,6 @@
"translate-page-description-hasoptional": "Denne meldingsgruppen inneholder valgfrie meldinger.\nValgfrie meldinger bør kun oversettes om språket ditt har spesielle behov, som at det ikke bruker mellomrom eller man må transkribere egennavn. $1",
"translate-page-description-hasoptional-open": "Vis valgfrie meldinger.",
"translate-page-edit": "rediger",
- "translate-ext-url": "<hr />Nettsted: $1",
"translate-optional": "(valgfri)",
"translate-ignored": "(ignorert)",
"translate-edit-title": "Rediger «$1»",
@@ -56,14 +53,17 @@
"translate-edit-no-information": "<em>Denne meldingen har ingen dokumentasjon.\nOm du vet hvor eller hvordan denne meldingen brukes kan du hjelpe andre oversettere ved å legge inn dokumentasjon på denne meldingen.</em>",
"translate-edit-information": "Informasjon om meldingen ($1)",
"translate-edit-in-other-languages": "Meldingen på andre språk",
- "translate-edit-committed": "Nåværende oversettelse i programvaren",
"translate-edit-warnings": "Advarsler om ufullstendige oversettelser",
- "translate-edit-tmsugs": "Forslag fra oversettelsesminnet og maskinoversettelser",
"translate-edit-tmmatch-source": "Kildetekst for oversettelse: $1",
"translate-edit-tmmatch": "samsvarer $1 %",
- "translate-use-suggestion": "Erstatt nåværende oversettelse med dette forslaget.",
+ "translate-use-suggestion": "Erstatt gjeldende oversettelse med dette forslaget.",
"translate-edit-nopermission": "Du må ha oversetterrettigheter for å oversette beskjeder.",
"translate-edit-askpermission": "Få tillatelse",
+ "exporttranslations": "Eksporter oversettelser",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Oppgi et gyldig format.",
+ "translate-export-not-supported": "Eksportering av oversettelser støttes ikke.",
+ "translate-export-format-notsupported": "Det oppgitte eksporteringsformatet støttes ikke av meldingsgruppen.",
"translate-magic-pagename": "Utvidet MediaWiki-oversettelse",
"translate-magic-help": "Du kan oversette spesialsidealias, magiske ord og navneromnavn.\n\nSpesialsidealias og magiske ord kan ha flere oversettelser.\nOversettelsene er adskilt med komma (,).\nNavnerom kan kun ha én oversettelse.\n\nI navneromoversettelsene er <code>$1 talk</code> spesiell. <code>$1</code> erstattes med nettstedsnavnet (for eksempel <code>{{ns:project_talk}}</code>).\nOm det ikke er mulig å få til et gyldig uttrykk på ditt språk uten å endre nettstedsnavnet, fortell oss det på [[Support]].\n\nDu må være i oversettergruppen for å lagre endringer.\nEndringer lagres ikke før du klikker på lagre-knappen nedenfor.",
"translate-magic-module": "Modul:",
@@ -71,7 +71,7 @@
"translate-magic-cm-export": "Eksporter",
"translate-magic-nothing-to-export": "Det er ingenting å eksportere.",
"translate-magic-cm-to-be": "Framtidig",
- "translate-magic-cm-current": "Nåværende",
+ "translate-magic-cm-current": "Gjeldende",
"translate-magic-cm-original": "Opprinnelig",
"translate-magic-cm-comment": "Kommentar:",
"translate-magic-cm-save": "Lagre",
@@ -109,7 +109,16 @@
"right-translate-import": "Importer frakoblede oversettelser",
"action-translate-import": "importer frakoblede oversettelser",
"right-translate-messagereview": "Revidere oversettelser",
+ "action-translate-messagereview": "gå gjennom oversettelser",
"right-translate-groupreview": "Endre arbeidsflytstatusen til meldingsgrupper",
+ "action-translate-groupreview": "endre arbeidsflytstatusen til meldingsgrupper",
+ "translate-rcfilters-translations": "Oversettelser",
+ "translate-rcfilters-translations-only-label": "Oversettelser",
+ "translate-rcfilters-translations-only-desc": "Endringer til oversatte sider.",
+ "translate-rcfilters-translations-filter-label": "Ikke oversettelser",
+ "translate-rcfilters-translations-filter-desc": "Alle endringer som ikke er oversettelser.",
+ "translate-rcfilters-translations-site-label": "Systembeskjeder",
+ "translate-rcfilters-translations-site-desc": "Tilpassinger av systembeskjedene i MediaWiki-navnerommet.",
"translate-rc-translation-filter": "Filtrer oversettelser:",
"translate-rc-translation-filter-no": "Ikke gjør noe",
"translate-rc-translation-filter-only": "Vis bare oversettelser",
@@ -141,8 +150,7 @@
"translate-statsf-language": "Kommaseparert liste over språkkoder:",
"translate-statsf-group": "Kommaseparert liste over gruppekoder:",
"translate-statsf-submit": "Forhåndsvisning",
- "translate-tag-category": "Sider som kan oversettes",
- "translate-tag-page-desc": "Oversettelse av wikisiden [[$2|$1]].",
+ "translate-tag-page-desc": "Oversettelse av wikisiden [[$2|$1]] fra $3 ($4).",
"translate-sidebar-alltrans": "På andre språk",
"translations": "Alle oversettelser",
"translations-summary": "Skriv inn et meldingsnavn nedenfor for å vise alle tilgjengelige oversettelser.",
@@ -183,16 +191,17 @@
"translate-mgs-noempty": "Ikke vis språk som ikke har noen oversettelser",
"translate-mgs-submit": "Vis statistikk",
"translate-mgs-column-language": "Språk",
- "translate-mgs-totals": "Alle språk sammen",
+ "translate-mgs-totals": "Alle {{PLURAL:$1|språk}} sammen",
"translate-mgs-invalid-group": "Den angitte gruppen $1 finnes ikke.",
"translate-mgs-nothing": "Ingen av den ønskede statistikken kan vises.",
"supportedlanguages": "Støttede språk",
"supportedlanguages-summary": "Denne siden viser en liste over alle språk som støttes av {{SITENAME}}, sammen med navnene på oversetterne som jobber med det språket. Jo større en oversetters brukernavn er, jo flere bidrag har oversetteren. Fargen på understrekingen er en indikator på hvor lenge oversetteren har vært aktiv her.",
"supportedlanguages-colorlegend": "Fargeforklaring: Siste oversettelse for $1 dager siden.",
- "supportedlanguages-translators": "{{PLURAL:$2|Oversetter|Oversettere}}: $1",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Oversetter}}|Oversettere}}: $1",
"supportedlanguages-recenttranslations": "siste oversettelser",
"supportedlanguages-count": "$1 {{PLURAL:$1|språk}} totalt.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|redigering|redigeringer}} – siste redigering for $3 {{PLURAL:$3|dag|dager}} siden",
+ "abusefilter-edit-builder-vars-translate-source-text": "Kildeteksten til oversettelsesenheten",
"translate-save": "Lagre ($1)",
"translate-jssti-add": "Legg til i listen",
"managemessagegroups": "Meldingsgruppehåndtering",
@@ -216,7 +225,6 @@
"translate-manage-toolong": "Den maksimale behandlingstiden på {{PLURAL:$1|ett sekund|$1 sekund}} ble overskredet.\nVennligst send skjemaet på nytt for å fortsette behandlingen.",
"translate-manage-import-summary": "Importerer en ny versjon fra en ekstern kilde",
"translate-manage-conflict-summary": "Importerer en ny versjon fra en ekstern kilde.\nVennligst sjekk.",
- "translate-manage-fuzzy-summary": "Meldingsdefinisjonen har blitt endret",
"translate-manage-submit": "Utfør",
"translate-manage-intro-other": "Nedenfor er en liste over endringer i oversettelsen til språket $1.\nGå gjennom endringene og velg hva du vil gjøre med hver oppdatering.\nOm du velger å ignorere endringene vil denne handlingen kun være midlertidig.",
"translate-manage-import-ok": "Importert: $1",
@@ -234,9 +242,7 @@
"translate-js-summary": "Forklaring:",
"translate-js-save": "Lagre",
"translate-js-next": "Lagre og åpne neste",
- "translate-js-nonext": "Dette var den siste meldingen på siden.",
"translate-js-skip": "Hopp over til neste",
- "translate-js-save-failed": "Lagring mislyktes. Rapporter denne feilen.",
"translate-js-history": "Oversettelseshistorikk",
"translate-js-support": "Still spørsmål",
"translate-js-support-title": "Be om hjelp hvis det ikke er nok informasjon til å oversette denne meldingen korrekt.",
@@ -253,25 +259,13 @@
"translate-documentation-language": "Meldingsdokumentasjon",
"translate-searchprofile": "Oversettelser",
"translate-searchprofile-tooltip": "Søk i alle oversettelser",
+ "translate-searchprofile-note": "Flere søkealternativer er tilgjengelig med [$1 oversettelsessøk].",
"translate-search-languagefilter": "Filtrer etter språk:",
"translate-search-nofilter": "Ingen filtrering",
- "translate-messagereview-submit": "Godkjenn",
- "translate-messagereview-progress": "Godkjenner …",
- "translate-messagereview-failure": "Godkjenner … mislyktes: $1",
- "translate-messagereview-done": "Godkjent",
- "translate-messagereview-reviews": "Godkjent av {{PLURAL:$1|én bruker|$1 brukere}}",
- "translate-messagereview-reviewswithyou": "Godkjent av {{PLURAL:$1|deg|$1 brukere inkludert deg}}",
- "api-error-invalidrevision": "Oversettelsen ble ikke funnet",
- "api-error-unknownmessage": "Meldingen ble ikke funnet",
- "api-error-fuzzymessage": "Oversettelsen er merket som foreldet",
- "api-error-owntranslation": "Du kan ikke godkjenne dine egne oversettelser",
- "translate-messagereview-no-fuzzy": "Foreldede oversettelser kan ikke godkjennes.",
- "translate-messagereview-no-own": "Du kan ikke godkjenne dine egne oversettelser.",
- "translate-messagereview-doit": "Godkjenn denne oversettelsen.",
"log-name-translationreview": "Logg for oversettelsesrevidering",
"log-description-translationreview": "Logg over alle revideringer av oversettelser og meldingsgrupper.",
"logentry-translationreview-message": "$1 {{GENDER:$2|godtok}} oversettelsen $3",
- "logentry-translationreview-group": "$1 {{GENDER:$2|endret}} statusen på $4 oversettelser av $3 fra $6 til $7",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|endret}} statusen på oversettelser til $4 av $3 fra $6 til $7",
"group-translate-sandboxed": "Ikke-godtatte oversettere",
"group-translate-sandboxed-member": "{{GENDER:$1|ikke-godkjent oversetter}}",
"right-translate-sandboxmanage": "Behandle sandkassebrukere",
@@ -289,7 +283,6 @@
"translate-dynagroup-recent-desc": "Denne meldingsgruppen viser alle nylige oversettelser til dette språket.\nMest nyttig for korrekturlesningsoppgaver.",
"translate-dynagroup-additions-label": "Nylige tillegg",
"translate-dynagroup-additions-desc": "Denne meldingsgruppen viser nye og endrede meldinger.",
- "translate-gethelp": "Hjelp",
"translate-msggroupselector-projects": "Meldingsgruppe",
"translate-msggroupselector-search-placeholder": "Søk grupper",
"translate-msggroupselector-search-all": "Alle",
@@ -297,9 +290,9 @@
"translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|undergruppe|undergrupper}}",
"tux-languageselector": "Oversett til",
"tux-tab-all": "Alle",
- "tux-tab-untranslated": "Uoversatt",
- "tux-tab-outdated": "Utdatert",
- "tux-tab-translated": "Oversatt",
+ "tux-tab-untranslated": "Uoversatte",
+ "tux-tab-outdated": "Utdaterte",
+ "tux-tab-translated": "Oversatte",
"tux-tab-unproofread": "Ikke korrekturlest",
"tux-edit": "Rediger",
"tux-status-optional": "Valgfri",
@@ -308,14 +301,17 @@
"tux-status-translated": "Oversatt",
"tux-status-saving": "Lagrer...",
"tux-status-unsaved": "Ikke lagret",
+ "tux-save-unknown-error": "Ukjent feil oppsto.",
"tux-editor-placeholder": "Din oversettelse",
+ "tux-editor-editsummary-placeholder": "Valgfri forklaring",
"tux-editor-paste-original-button-label": "Lim inn kildetekst",
"tux-editor-discard-changes-button-label": "Se bort i fra endringer",
"tux-editor-save-button-label": "Lagre oversettelse",
"tux-editor-skip-button-label": "Hopp over til neste",
"tux-editor-cancel-button-label": "Avbryt",
"tux-editor-confirm-button-label": "Bekreft oversettelse",
- "tux-editor-shortcut-info": "Trykk på «$1» for å lagre eller «$2» for å hoppe videre til neste beskjed eller «$3» for andre snarveier.",
+ "tux-editor-proofread-button-label": "Merk som gjennomgått",
+ "tux-editor-shortcut-info": "Trykk på «$1» forå lagre, «$2» for å hoppe videre til neste beskjed, «$4» for å oppgi en forklaring eller «$3» for andre snarveier.",
"tux-editor-edit-desc": "Rediger dokumentasjon",
"tux-editor-add-desc": "Legg til dokumentasjon",
"tux-editor-suggestions-title": "Forslag",
@@ -327,7 +323,7 @@
"tux-warnings-hide": "skjul",
"tux-editor-save-failed": "Lagring av oversettelsen feilet: $1",
"tux-editor-n-uses": "brukt $1 {{PLURAL:$1|gang|ganger}}",
- "tux-editor-message-desc-more": "Vis flere",
+ "tux-editor-message-desc-more": "Vis mer",
"tux-editor-message-desc-less": "Vis mindre",
"tux-editor-clear-translated": "Skjul oversatte",
"tux-editor-proofreading-mode": "Korrekturles",
@@ -370,13 +366,18 @@
"tux-editor-close-tooltip": "Lukk",
"tux-editor-expand-tooltip": "Utvid",
"tux-editor-collapse-tooltip": "Skjul",
+ "tux-editor-message-tools-show-editor": "Vis i wikieditoren",
"tux-editor-message-tools-history": "Historikk",
+ "tux-editor-message-tools-delete": "Slett",
"tux-editor-message-tools-translations": "Alle oversettelser",
+ "tux-editor-message-tools-linktothis": "Lenke til denne beskjeden",
"tux-editor-loading": "Laster...",
"translate-search-more-languages-info": "$1 flere {{PLURAL:$1|språk}}",
"translate-statsbar-tooltip": "$1% oversatt, $2% korrekturlest",
"translate-statsbar-tooltip-with-fuzzy": "$1% oversatt, $2% korrekturlest, $3% utdatert",
"translate-search-more-groups-info": "$1 {{PLURAL:$1|gruppe|grupper}} til",
"translate-ulsdep-title": "Konfigrasjonsfeil",
- "translate-ulsdep-body": "Oversettelsesutvidelsen er avhengig av [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector utvidelsen Universal Language Selector]."
+ "translate-ulsdep-body": "Oversettelsesutvidelsen er avhengig av [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector utvidelsen Universal Language Selector].",
+ "tux-session-expired": "Du er ikke lenger logget inn. Logg inn i en annen fane, eller kopier ulagrede oversettelser, logg inn og kom tilbake til denne siden og lim inn oversettelsen(e).",
+ "tux-nojs": "Dette verktøyet virker ikke uten JavaScript. JavaScript er slått av eller virket ikke, eller nettleseren din støttes ikke."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/nds.json b/www/wiki/extensions/Translate/i18n/core/nds.json
index 5b328393..60e5e164 100644
--- a/www/wiki/extensions/Translate/i18n/core/nds.json
+++ b/www/wiki/extensions/Translate/i18n/core/nds.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Joachim Mos",
- "Slomox"
+ "Slomox",
+ "Servien"
]
},
"translate": "Översetten",
@@ -14,7 +15,6 @@
"translate-prev": "Vörige Siet",
"translate-page-description-legend": "Informatschoon över de Köppel",
"translate-page-edit": "ännern",
- "translate-ext-url": "<hr />Websied: $1",
"translate-optional": "(optschoonal)",
"translate-edit-title": "Ännern \"$1\"",
"translate-edit-translation": "Översetten",
@@ -27,5 +27,6 @@
"translate-magic-special": "Spezialsieden-Alternativnaams",
"translate-language-code": "Spraak-Code",
"translate-language-code-field-name": "Spraak-Code:",
+ "tux-warnings-hide": "versteken",
"tux-proofread-edit-label": "Ännern"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ne.json b/www/wiki/extensions/Translate/i18n/core/ne.json
index e1a0125b..a33a5508 100644
--- a/www/wiki/extensions/Translate/i18n/core/ne.json
+++ b/www/wiki/extensions/Translate/i18n/core/ne.json
@@ -8,11 +8,12 @@
"Krish Dulal",
"बिप्लब आनन्द",
"NehalDaveND",
- "राम प्रसाद जोशी"
+ "राम प्रसाद जोशी",
+ "पर्वत सुबेदी"
]
},
"translate": "अनुवाद गर्ने",
- "translate-desc": "मीडियाविकि तथा अन्यको अनुवादको निम्ति [[Special:Translate|विशेष पृष्ठ]]",
+ "translate-desc": "मिडियाविकी तथा अन्यको अनुवादको निम्ति [[Special:Translate|विशेष पृष्ठ]]",
"translate-taction-translate": "अनुवाद गर्ने",
"translate-taction-proofread": "समीक्षा",
"translate-taction-lstats": "भाषा तथ्यांक",
@@ -24,17 +25,16 @@
"translate-page-group": "समूह",
"translate-page-language": "भाषा",
"translate-page-limit": "सीमा",
- "translate-page-limit-option": "प्रति पृष्ठ $1 {{PLURAL:$1|सन्देश|सन्देशहरु}}",
+ "translate-page-limit-option": "प्रति पृष्ठ $1 {{PLURAL:$1|सन्देश|सन्देशहरू}}",
"translate-submit": "छाँटेर हेर्ने",
"translate-page-navigation-legend": "अन्वेषण",
- "translate-page-showing": "$3 मध्येका $1 देखि $2 सम्म सन्देशहरु देखाइँदै",
- "translate-page-showing-all": "$1 {{PLURAL:$1|सन्देश|सन्देशहरु}} देखाइँदै।",
+ "translate-page-showing": "$3 मध्येका $1 देखि $2 सम्म सन्देशहरू देखाइँदै",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|सन्देश|सन्देशहरू}} देखाइँदै।",
"translate-page-showing-none": "देखाउनु पर्ने सन्देश छैन।",
"translate-next": "अर्को पृष्ठ",
"translate-prev": "अघिल्लो पृष्ठ",
"translate-page-description-legend": "समूह बारेको जानकारी",
"translate-page-edit": "सम्पादन गर्ने",
- "translate-ext-url": "<hr />वेवसाइट: $1",
"translate-optional": "(वैकल्पिक)",
"translate-ignored": "(अनदेखा गरिएको)",
"translate-edit-title": "\"$1\" सम्पादन गर्ने",
@@ -44,20 +44,18 @@
"translate-edit-no-information": "''यो सन्देशको दस्तावेजीकरण (documentation) छैन''\n''यदि तपाईं यो सन्देश कहाँ अथवा कसरी प्रयोग गरिन्छ भन्ने कुरा जान्नु हुन्छ भने तपाईंले यसको दस्तावेजीकरण थप गरी अरु अनुवादकहरूलाई सहयोग दिन सक्नुहुन्छ।''",
"translate-edit-information": "($1) सन्देशको बारेमा जानकारी",
"translate-edit-in-other-languages": "सन्देश अरु भाषाहरूमा",
- "translate-edit-committed": "सफ्टवेयरमा वर्तमान अनुवाद",
"translate-edit-warnings": "चेतावनी अपूर्ण अनुवादको बारेमा",
- "translate-edit-tmsugs": "अनुवाद स्मृतिबाट सुझावहरू",
"translate-edit-tmmatch": "$1% मेल",
- "translate-use-suggestion": "यस सुझाउलाई अनुवादको कोठामा हाल्नुहोस्। यसले वर्तमान सामग्री(शव्दहरु)को स्थान लिनेछ।",
- "translate-magic-pagename": "विस्तारित मीडियाविकि अनुवाद",
+ "translate-use-suggestion": "यस सुझाउलाई अनुवादको कोठामा हाल्नुहोस् । यसले वर्तमान सामग्री(शब्दहरू)को स्थान लिनेछ।",
+ "translate-magic-pagename": "विस्तारित मिडियाविकी अनुवाद",
"translate-magic-submit": "हेर्ने",
"translate-magic-cm-export": "निर्यात गर्ने",
"translate-magic-cm-current": "वर्तमान",
"translate-magic-cm-original": "मूल",
"translate-magic-cm-comment": "टिप्पणी:",
- "translate-magic-cm-save": "संग्रह गर्ने",
+ "translate-magic-cm-save": "सङ्ग्रह गर्ने",
"translate-magic-cm-savefailed": "संग्रह विफल भयो",
- "translate-magic-words": "जादुई शव्दहरु",
+ "translate-magic-words": "जादुई शब्दहरू",
"translate-magic-notsaved": "तपाईंको सम्पादन संग्रह गरिएको थिएन!",
"translate-magic-saved": "तपाईंका परिवर्तनहरू सफलता पूर्वक संग्रह भए।",
"translate-checks-parameters-unknown": "निम्न {{PLURAL:$2|पैरामीटर अज्ञात हो|पैरामीटरहरु अज्ञात हुन्}} :\n<strong><nowiki>$1</nowiki></strong>",
@@ -65,7 +63,7 @@
"translate-stats-edits": "सम्पादनहरू",
"translate-stats-users": "अनुवादकहरू",
"translate-stats-registrations": "पंजीकरण",
- "translate-statsf-options": "ग्राफ विकल्पहरु",
+ "translate-statsf-options": "ग्राफ विकल्पहरू",
"translate-statsf-width": "चौड़ाई पिक्सलमा:",
"translate-statsf-height": "उचाई पिक्सलमा:",
"translate-statsf-days": "समयावधि दिनमा:",
@@ -80,22 +78,21 @@
"translate-statsf-count-users": "सक्रिय अनुवादकहरू",
"translate-statsf-count-registrations": "नयाँ प्रयोगकर्ताहरू",
"translate-statsf-submit": "पूर्वावलोकन",
- "translate-tag-category": "अनुवाद गर्नुपर्ने पृष्ठहरू",
"translate-tag-page-desc": "विकि पृष्ठ [[$2|$1]]को अनुवाद।",
"translate-sidebar-alltrans": "अरु भाषामा",
- "translations": "सबै अनुवादहरु",
- "translations-summary": "सबै उपलब्ध अनुवादहरु हेर्न तल सन्देशको नाम दिनुहोस्।",
+ "translations": "सबै अनुवादहरू",
+ "translations-summary": "सबै उपलब्ध अनुवादहरू हेर्न तल सन्देशको नाम दिनुहोस् ।",
"translate-translations-no-message": "\"$1\" अनुवाद योग्य सन्देश होइन",
- "translate-translations-none": "\"$1\"को लागि अनुवादहरु छैनन्।",
- "translate-translations-count": "{{PLURAL:$1|एउटा अनुवाद|$1 अनुवादहरु}} पाइयो।",
+ "translate-translations-none": "\"$1\"को लागि अनुवादहरू छैनन्।",
+ "translate-translations-count": "{{PLURAL:$1|एउटा अनुवाद|$1 अनुवादहरू}} पाइयो।",
"translate-translations-fieldset-title": "सन्देश",
"translate-translations-messagename": "नाम:",
"translate-translations-project": "परियोजना:",
"translate-translations-history-short": "हि",
"languagestats": "भाषा तथ्यांक",
- "languagestats-summary": "यस पृष्ठमा भाषाको निम्ति सबै सन्देश समूहहरुका लागि अनुवाद तथ्यांक प्रदर्शित गरिन्छ।",
+ "languagestats-summary": "यस पृष्ठमा भाषाको निम्ति सबै सन्देश समूहहरूका लागि अनुवाद तथ्याङ्क प्रदर्शित गरिन्छ।",
"languagestats-stats-for": "$1 ($2)को लागि अनुवाद तथ्यांक।",
- "languagestats-recenttranslations": "भर्खरैका अनुवादहरु",
+ "languagestats-recenttranslations": "भर्खरैका अनुवादहरू",
"translate-langstats-expand": "फैलाउनु",
"translate-langstats-collapse": "खुम्च्याउने",
"translate-langstats-expandall": "सबै फैलाउ",
@@ -103,24 +100,24 @@
"translate-language-code": "भाषा कोड",
"translate-language-code-field-name": "भाषा कोड:",
"translate-language": "भाषा",
- "translate-total": "सन्देशहरु",
+ "translate-total": "सन्देशहरू",
"translate-untranslated": "अनुवाद नगरिएका",
"translate-percentage-complete": "सकिएका",
"translate-percentage-fuzzy": "पुराना (काम नलाग्ने)",
+ "translate-percentage-proofread": "समीक्षा गरियो",
"translate-ls-column-group": "सन्देश समूह",
"translate-mgs-group": "सन्देश समूहः",
"translate-mgs-column-language": "भाषा",
- "supportedlanguages-recenttranslations": "भर्खरैका अनुवादहरु",
+ "supportedlanguages-recenttranslations": "भर्खरैका अनुवादहरू",
"translate-manage-action-import": "आयात गर्नु",
"translate-manage-action-ignore": "उपेक्षा",
"translate-js-summary": "सारांश :",
- "translate-js-save": "संग्रह गर्ने",
+ "translate-js-save": "सङ्ग्रह गर्ने",
"translate-gs-code": "कोड",
"translate-gs-speakers": "वक्ताहरु",
"translate-documentation-language": "सन्देश दस्तावेज",
"translate-searchprofile": "अनुवाद",
"translate-workflow-set-doing": "सेटिङ्हरु...",
- "translate-gethelp": "सहायता",
"translate-msggroupselector-search-all": "सबै",
"tux-tab-all": "सबै",
"tux-tab-outdated": "पुराना",
@@ -136,7 +133,7 @@
"tux-editor-cancel-button-label": "रद्द गर्ने",
"tux-warnings-hide": "लुकाउनुहोस्",
"tux-editor-proofreading-mode": "समीक्षा",
- "tux-editor-translate-mode": "सूचीहरु",
+ "tux-editor-translate-mode": "सूचीहरू",
"tux-proofread-edit-label": "सम्पादन",
"tux-editor-page-mode": "पृष्ठ",
"tux-editor-doc-editor-cancel": "रद्द गर्नु",
diff --git a/www/wiki/extensions/Translate/i18n/core/nl.json b/www/wiki/extensions/Translate/i18n/core/nl.json
index 926efb1a..7e26feae 100644
--- a/www/wiki/extensions/Translate/i18n/core/nl.json
+++ b/www/wiki/extensions/Translate/i18n/core/nl.json
@@ -13,16 +13,14 @@
"Wiki13",
"Mar(c)",
"Southparkfan",
- "Sjoerddebruin"
+ "Sjoerddebruin",
+ "Mainframe98",
+ "Elroy"
]
},
"translate": "Vertalen",
"translate-desc": "[[Special:Translate|Speciale pagina]] voor het vertalen van MediaWiki en meer",
- "translate-taskui-view": "Alle berichten weergeven",
- "translate-taskui-untranslated": "Onvertaalde berichten weergeven",
- "translate-taskui-optional": "Optionele berichten weergeven",
- "translate-taskui-acceptqueue": "Alleen berichten die ik als gecontroleerd kan markeren",
- "translate-taskui-reviewall": "Alle vertalingen controleren",
+ "translate-fuzzybot-desc": "Dit is een speciaal systeemaccount gebruikt door de MediaWiki [https://www.mediawiki.org/wiki/Extension:Translate Translate uitbreiding] om vertalingen te beheren.\nDit account is onderdeel van de MediaWiki software en is niet in gebruik door een gebruiker.",
"translate-taskui-export-to-file": "Exporteren in de oorspronkelijke indeling",
"translate-taskui-export-as-po": "Exporteren voor offline vertaling",
"translate-taction-translate": "Vertalen",
@@ -31,10 +29,10 @@
"translate-taction-mstats": "Berichtengroepstatistieken",
"translate-taction-export": "Exporteren",
"translate-taction-disabled": "Deze handeling is uitgeschakeld op deze wiki.",
- "translate-page-no-such-language": "Er is een ongeldige taalcode opgegeven",
+ "translate-page-no-such-language": "De opgegeven taalcode is ongeldig.",
"translate-page-no-such-group": "De opgegeven groep bestaat niet.",
- "translate-page-disabled": "Vertalingen in deze taal voor deze groep zijn uitgeschakeld. Reden:\n\n<em>$1</em>",
- "translate-language-disabled": "Vertalen in deze taal is uitgeschakeld.",
+ "translate-page-disabled": "Vertalingen naar deze taal zijn in deze groep uitgeschakeld. Reden:\n\n<em>$1</em>",
+ "translate-language-disabled": "Vertalen naar deze taal is uitgeschakeld.",
"translate-page-settings-legend": "Instellingen",
"translate-page-group": "Groep",
"translate-page-language": "Taal",
@@ -44,30 +42,35 @@
"translate-page-navigation-legend": "Navigatie",
"translate-page-showing": "De berichten $1 tot $2 van $3 worden weergegeven.",
"translate-page-showing-all": "Er {{PLURAL:$1|wordt 1 bericht|worden $1 berichten}} weergegeven.",
+ "translate-page-showing-none": "Er zijn geen berichten in deze selectie.",
"translate-next": "Volgende pagina",
"translate-prev": "Vorige pagina",
"translate-page-description-legend": "Informatie over de groep",
"translate-page-description-hasoptional": "Deze berichtengroep bevat optionele berichten.\nOptionele berichten hoeven alleen vertaald te worden als uw taal bijzondere eigenschappen heeft, zoals dat deze geen spaties gebruikt of dat eigennamen in de taal getranslitereerd worden. $1",
"translate-page-description-hasoptional-open": "Optionele berichten weergeven.",
"translate-page-edit": "bewerken",
- "translate-ext-url": "<hr />Website: $1",
"translate-optional": "(optioneel)",
"translate-ignored": "(genegeerd)",
"translate-edit-title": "\"$1\" bewerken",
"translate-edit-definition": "Berichtdefinitie",
"translate-edit-translation": "Vertaling",
"translate-edit-contribute": "bijdragen",
- "translate-edit-no-information": "<em>Dit bericht heeft geen documentatie.\nAls u weet waar dit bericht wordt gebruikt, dan kunt u andere gebruikers helpen door documentatie voor dit bericht toe te voegen.</em>",
+ "translate-edit-no-information": "<em>Dit bericht heeft geen documentatie.\nAls u weet waar of hoe dit bericht wordt gebruikt, dan kunt u andere gebruikers helpen door documentatie voor dit bericht toe te voegen.</em>",
"translate-edit-information": "Informatie over bericht ($1)",
"translate-edit-in-other-languages": "Bericht in andere talen",
"translate-edit-warnings": "Waarschuwingen over onjuiste vertalingen",
"translate-edit-tmmatch-source": "Brontekst voor vertaling: $1",
"translate-edit-tmmatch": "$1% overeenkomst",
"translate-use-suggestion": "Huidige vertaling door deze suggestie vervangen.",
- "translate-edit-nopermission": "U hebt vertaalrechten nodig om te kunnen vertalen.",
+ "translate-edit-nopermission": "U hebt vertaalrechten nodig om berichten te kunnen vertalen.",
"translate-edit-askpermission": "Vertaalrechten aanvragen",
+ "exporttranslations": "Vertalingen exporteren",
+ "translate-export-form-format": "Indeling",
+ "translate-export-invalid-format": "Voer een geldig formaat in.",
+ "translate-export-not-supported": "Het exporteren van vertalingen wordt niet ondersteund.",
+ "translate-export-format-notsupported": "De opgegeven exporteerindeling wordt niet ondersteund door de berichtengroep.",
"translate-magic-pagename": "Uitgebreide MediaWiki-vertaling",
- "translate-magic-help": "U kunt alternatieven voor speciale pagina's, magische woorden en naamruimtebenamingen vertalen.\n\nAlternatieven voor speciale pagina's en magische woorden kunnen meerdere vertalingen hebben.\nScheid vertalingen met een komma (,).\nNaamruimtebenamingen kunnen slechts één vertaling hebben.\n\nHet vertalen van naamruimte voor projectoverleg <code>$1 talk</code> kan lastig zijn.\n<code>$1</code> wordt vervangen door de projectsitenaam (bijvoorbeeld <code>{{ns:project_talk}}</code>).\nAls het in uw taal niet mogelijk is een geldige uitdrukking te vormen zonder de sitenaam te wijzigen, neem dan contact op met ons op via de [[Support|pagina voor ondersteuning]].\n\nU moet vertaler zijn om wijzigingen op te kunnen slaan.\nWijzigingen worden niet bewaard totdat u op \"Pagina opslaan\" hebt geklikt.",
+ "translate-magic-help": "U kunt aliassen voor speciale pagina's, magische woorden en naamruimtebenamingen vertalen.\n\nAliassen voor speciale pagina's en magische woorden kunnen meerdere vertalingen hebben.\nScheid vertalingen met een komma (,).\nNaamruimtebenamingen kunnen slechts één vertaling hebben.\n\nHet vertalen van naamruimte voor projectoverleg <code>$1 talk</code> kan lastig zijn.\n<code>$1</code> wordt vervangen door de projectsitenaam (bijvoorbeeld <code>{{ns:project_talk}}</code>).\nAls het in uw taal niet mogelijk is een geldige uitdrukking te vormen zonder de sitenaam te wijzigen, neem dan contact met ons op via [[Support]].\n\nU moet vertaler zijn om wijzigingen te kunnen opslaan.\nWijzigingen worden niet bewaard totdat u hieronder op \"Pagina opslaan\" hebt geklikt.",
"translate-magic-module": "Module:",
"translate-magic-submit": "Ophalen",
"translate-magic-cm-export": "Exporteren",
@@ -79,7 +82,7 @@
"translate-magic-cm-save": "Opslaan",
"translate-magic-cm-updatedusing": "Bijgewerkt via [[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]",
"translate-magic-cm-savefailed": "Opslaan mislukt",
- "translate-magic-special": "Alternatieven speciale pagina's",
+ "translate-magic-special": "Aliassen voor speciale pagina's",
"translate-magic-words": "Magische woorden",
"translate-magic-namespace": "Naamruimtebenamingen",
"translate-magic-notsaved": "Uw bewerking is niet opgeslagen!",
@@ -88,12 +91,12 @@
"translate-checks-parameters": "De volgende {{PLURAL:$2|parameter wordt|parameters worden}} niet gebruikt:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "De volgende {{PLURAL:$2|parameter is|parameters zijn}} onbekend:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Er wordt een oneven {{PLURAL:$2|aantal haakjes|aantal haakjes}} gebruikt:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-links": "De volgende {{PLURAL:$2|koppeling is|koppelingen zijn}} problematisch:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "De volgende {{PLURAL:$2|koppeling is|$2 koppelingen zijn}} problematisch:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "De volgende {{PLURAL:$2|koppeling ontbreekt|$2 koppelingen ontbreken}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Vervang {{PLURAL:$2|het volgende label|de volgende labels}} door de juiste:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "De definitie bevat <nowiki>{{PLURAL:}}</nowiki>, maar de vertaling niet.",
- "translate-checks-plural-forms": "Via <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|is één vorm|zijn $1 vormen}} opgegeven, maar {{PLURAL:$2|slechts één vorm wordt|$2 worden}} ondersteund (exclusief de vormen 0= en 1=).",
- "translate-checks-plural-dupe": "Er zijn duplicaatvormen aan het einde van <nowiki>{{PLURAL:}}</nowiki> aangetroffen. <nowiki>{{PLURAL:$1|hersenen|hersenen}}</nowiki> moet genoteerd worden als <nowiki>{{PLURAL:$1|hersenen}}</nowiki>.",
+ "translate-checks-plural-forms": "Via <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|is één vorm|zijn $1 vormen}} opgegeven, maar {{PLURAL:$2|slechts één vorm wordt|$2 vormen worden}} ondersteund (exclusief de vormen 0= en 1=).",
+ "translate-checks-plural-dupe": "Aan het einde van <nowiki>{{PLURAL:}}</nowiki> staat dezelfde vorm dubbel. <nowiki>{{PLURAL:$1|hersenen|hersenen}}</nowiki> moet genoteerd worden als <nowiki>{{PLURAL:$1|hersenen}}</nowiki>.",
"translate-checks-pagename": "Afwijkende naamruimte vergeleken met de brontekst",
"translate-checks-format": "Deze vertaling wijkt af van het bronbericht of heeft een ongeldige opmaak: $1",
"translate-checks-escape": "De volgende escapes zijn waarschijnlijk per ongeluk toegepast: <strong>$1</strong>",
@@ -106,12 +109,22 @@
"translate-pref-editassistlang-help": "Kommagescheiden lijst van taalcodes.\nDe vertaling van berichten in deze talen worden weergegeven tijdens het vertalen.\nDe standaardlijst van hulptalen is taalafhankelijk.",
"translate-pref-editassistlang-bad": "Er staat een ongeldige taalcode in de lijst:\n<nowiki>$1</nowiki>.",
"right-translate": "Bewerken via de vertaalinterface",
+ "action-translate": "te bewerken via de vertaalinterface",
"right-translate-manage": "Berichtengroepen beheren",
"action-translate-manage": "berichtengroepen te beheren",
"right-translate-import": "Vertalingen van buiten het systeem importeren",
"action-translate-import": "vertalingen van buiten het systeem te importeren",
"right-translate-messagereview": "Vertalingen accepteren",
+ "action-translate-messagereview": "vertalingen te controleren",
"right-translate-groupreview": "Workflowstatus van berichtengroepen wijzigen",
+ "action-translate-groupreview": "de workflowstatus van berichtengroepen te wijzigen",
+ "translate-rcfilters-translations": "Vertalingen",
+ "translate-rcfilters-translations-only-label": "Vertalingen",
+ "translate-rcfilters-translations-only-desc": "Wijzigingen aan vertaalde pagina's.",
+ "translate-rcfilters-translations-filter-label": "Geen vertalingen",
+ "translate-rcfilters-translations-filter-desc": "Alle wijzigingen die geen vertaling zijn.",
+ "translate-rcfilters-translations-site-label": "Systeemteksten",
+ "translate-rcfilters-translations-site-desc": "Aanpassingen aan systeemteksten in de MediaWiki naamruimte.",
"translate-rc-translation-filter": "Vertalingen filteren:",
"translate-rc-translation-filter-no": "Niets doen",
"translate-rc-translation-filter-only": "Alleen vertalingen weergeven",
@@ -143,7 +156,7 @@
"translate-statsf-language": "Kommagescheiden lijst van taalcodes:",
"translate-statsf-group": "Kommagescheiden lijst van groepscodes:",
"translate-statsf-submit": "Voorvertoning",
- "translate-tag-page-desc": "Vertaling van de wikipagina [[$2|$1]] van $3 ($4).",
+ "translate-tag-page-desc": "Vertaling van de wikipagina [[$2|$1]] uit $3 ($4).",
"translate-sidebar-alltrans": "In andere talen",
"translations": "Alle vertalingen",
"translations-summary": "Voer de naam van een bericht in om alle beschikbare vertalingen weer te geven.",
@@ -174,6 +187,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",
@@ -184,16 +198,18 @@
"translate-mgs-noempty": "Talen zonder vertalingen verbergen",
"translate-mgs-submit": "Statistieken weergeven",
"translate-mgs-column-language": "Taal",
- "translate-mgs-totals": "Alle talen samen",
+ "translate-mgs-totals": "Alle $1 {{PLURAL:$1|taal|talen}} samen",
"translate-mgs-invalid-group": "De opgegeven groep \"$1\" bestaat niet.",
"translate-mgs-nothing": "Er is niets weer te geven voor de opgegeven statistieken.",
"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.",
- "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|bewerking|bewerkingen}} - laatste bewerking {{PLURAL:$3|gisteren|$3 dagen}} geleden",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|bewerking|bewerkingen}} - laatste bewerking {{PLURAL:$3|gisteren|$3 dagen geleden}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Brontekst van de vertalingseenheid",
"translate-save": "Opslaan ($1)",
"translate-jssti-add": "Aan lijst toevoegen",
"managemessagegroups": "Berichtengroepen beheren",
@@ -234,9 +250,7 @@
"translate-js-summary": "Samenvatting:",
"translate-js-save": "Opslaan",
"translate-js-next": "Opslaan en volgende",
- "translate-js-nonext": "Dit was het laatste bericht op deze pagina.",
"translate-js-skip": "Overslaan en volgende",
- "translate-js-save-failed": "Opslaan is mislukt. Maak melding van deze fout.",
"translate-js-history": "Vertaalgeschiedenis",
"translate-js-support": "Vraag stellen",
"translate-js-support-title": "Vraag om hulp als er niet voldoende informatie is om dit bericht juist te vertalen.",
@@ -253,21 +267,9 @@
"translate-documentation-language": "Berichtbeschrijving",
"translate-searchprofile": "Vertalingen",
"translate-searchprofile-tooltip": "In vertalingen zoeken",
+ "translate-searchprofile-note": "Meer zoekopties zijn beschikbaar met de [$1 vertalingszoekfuntie].",
"translate-search-languagefilter": "Taalfilter:",
"translate-search-nofilter": "Niet filteren",
- "translate-messagereview-submit": "Als gecontroleerd markeren",
- "translate-messagereview-progress": "Bezig met als gecontroleerd markeren...",
- "translate-messagereview-failure": "Als gecontroleerd markeren mislukt: $1",
- "translate-messagereview-done": "Als gecontroleerd gemarkeerd",
- "translate-messagereview-reviews": "Gecontroleerd door {{PLURAL:$1|één gebruiker|$1 gebruikers}}",
- "translate-messagereview-reviewswithyou": "Gecontroleerd door {{PLURAL:$1|u|$1 gebruikers, inclusief uzelf}}",
- "api-error-invalidrevision": "De vertaling is niet gevonden.",
- "api-error-unknownmessage": "Het bericht is niet aangetroffen.",
- "api-error-fuzzymessage": "De vertaling is gemarkeerd als verouderd.",
- "api-error-owntranslation": "U kunt uw eigen vertalingen niet als gecontroleerd markeren.",
- "translate-messagereview-no-fuzzy": "U kunt verouderde vertalingen niet als gecontroleerd markeren.",
- "translate-messagereview-no-own": "U kunt uw eigen vertalingen niet als gecontroleerd markeren.",
- "translate-messagereview-doit": "Deze vertaling als correct gecontroleerd markeren.",
"log-name-translationreview": "Logboek vertalingencontrole",
"log-description-translationreview": "Logboek met alle controles van vertalingen en berichtengroepen.",
"logentry-translationreview-message": "$1 {{GENDER:$2|heeft}} de vertaling $3 als gecontroleerd gemarkeerd",
@@ -289,7 +291,6 @@
"translate-dynagroup-recent-desc": "Deze berichtengroep geeft alle recente wijzigingen weer in deze taal.\nDit is vooral nuttig voor de controletaken.",
"translate-dynagroup-additions-label": "Recente toevoegingen",
"translate-dynagroup-additions-desc": "In deze berichtengroep worden nieuwe en gewijzigde berichten weergegeven.",
- "translate-gethelp": "Hulp",
"translate-msggroupselector-projects": "Berichtengroep",
"translate-msggroupselector-search-placeholder": "Groepen zoeken",
"translate-msggroupselector-search-all": "Alle",
@@ -308,14 +309,17 @@
"tux-status-translated": "Vertaald",
"tux-status-saving": "Opslaan...",
"tux-status-unsaved": "Niet-opgeslagen",
+ "tux-save-unknown-error": "Er is een onbekende fout opgetreden.",
"tux-editor-placeholder": "Uw vertaling",
+ "tux-editor-editsummary-placeholder": "Optionele bewerkingssamenvatting",
"tux-editor-paste-original-button-label": "Brontekst invoegen",
"tux-editor-discard-changes-button-label": "Wijzigingen negeren",
"tux-editor-save-button-label": "Vertaling opslaan",
"tux-editor-skip-button-label": "Overslaan en volgende",
"tux-editor-cancel-button-label": "Annuleren",
"tux-editor-confirm-button-label": "Vertaling bevestigen",
- "tux-editor-shortcut-info": "Druk op \"$1\" om op te slaan of druk op \"$2\" om naar het volgende bericht te gaan of \"$3\" voor andere snelkoppelingen.",
+ "tux-editor-proofread-button-label": "Als gecontroleerd markeren",
+ "tux-editor-shortcut-info": "Druk op \"$1\" om te bevestingen en naar het volgende bericht te gaan, druk op \"$2\" over te slaan, druk op \"$4\" om een bewerkingssamenvatting op te geven of houdt \"$3\" ingedrukt andere snelkoppelingen te zien.",
"tux-editor-edit-desc": "Documentatie bewerken",
"tux-editor-add-desc": "Documentatie toevoegen",
"tux-editor-suggestions-title": "Suggesties",
@@ -370,9 +374,11 @@
"tux-editor-close-tooltip": "Sluiten",
"tux-editor-expand-tooltip": "Uitvouwen",
"tux-editor-collapse-tooltip": "Samenvouwen",
+ "tux-editor-message-tools-show-editor": "In wiki-editor weergeven",
"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",
@@ -380,5 +386,6 @@
"translate-search-more-groups-info": "nog $1 groep{{PLURAL:$1||en}}",
"translate-ulsdep-title": "Fout in de instellingen",
"translate-ulsdep-body": "De uitbreiding Translate is afhankelijk van de [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector uitbreiding Universal Language Selector].",
- "tux-nojs": "Deze pagina vereist JavaScript."
+ "tux-session-expired": "U bent niet langer aangemeld. Meld u opnieuw aan in een ander tabblad. U kunt ook een kopie maken van uw onvertaalde vertalingen, uzelf opnieuw aanmelden, terugkeren naar deze pagina en uw vertalingen opnieuw invoeren.",
+ "tux-nojs": "Dit hulpmiddel vereist JavaScript. JavaScript is uitgeschakeld of werkt niet, of deze browser wordt niet ondersteund."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/nn.json b/www/wiki/extensions/Translate/i18n/core/nn.json
index 6981de8d..8b21354a 100644
--- a/www/wiki/extensions/Translate/i18n/core/nn.json
+++ b/www/wiki/extensions/Translate/i18n/core/nn.json
@@ -14,11 +14,6 @@
},
"translate": "Set om",
"translate-desc": "[[Special:Translate|Spesialside]] for omsetjing av MediaWiki og meir",
- "translate-taskui-view": "Vis alle meldingar",
- "translate-taskui-untranslated": "Vis uomsette meldingar",
- "translate-taskui-optional": "Vis valfrie meldingar",
- "translate-taskui-acceptqueue": "Berre meldingar eg kan merkja som vurderte",
- "translate-taskui-reviewall": "Sjå igjennom alle omsetjingane",
"translate-taskui-export-to-file": "Eksporter i opphavleg format",
"translate-taskui-export-as-po": "Eksporter for fråkopla omsetjing",
"translate-taction-translate": "Set om",
@@ -48,24 +43,21 @@
"translate-page-description-hasoptional": "Meldingsgruppa har valfrie meldingar.\nValfrie meldingar skal ein berre setja om når språket ditt har særskilde krav, til dømes at det ikkje nyttar mellomrom eller at det transkriberer eigennamn. $1",
"translate-page-description-hasoptional-open": "Vis valfrie meldingar.",
"translate-page-edit": "endre",
- "translate-ext-url": "<hr />Nettstad: $1",
"translate-optional": "(valfri)",
"translate-ignored": "(ignorert)",
"translate-edit-title": "Endra «$1»",
"translate-edit-definition": "Melding som skal setjast om",
"translate-edit-translation": "Omsetjing",
"translate-edit-contribute": "bidra",
- "translate-edit-no-information": "''Denne meldinga har ikkje dokumentasjon. Om du veit kvar eller korleis denne meldinga vert nytta, kan du hjelpe andre omsetjarar ved å legge inn dokumentasjon til denne meldinga.''",
+ "translate-edit-no-information": "<em>Denne meldinga har ingen dokumentasjon.\nOm du veit kvar eller korleis denne meldinga vert nytta, kan du hjelpe andre omsetjarar ved å legge inn dokumentasjon til denne meldinga.</em>",
"translate-edit-information": "Informasjon om meldinga ($1)",
"translate-edit-in-other-languages": "Meldinga på andre språk",
- "translate-edit-committed": "Noverande omsetjing i programvaren",
"translate-edit-warnings": "Åtvaringar om ufullstendige omsetjingar",
- "translate-edit-tmsugs": "Framlegg frå omsetjingsminnet",
"translate-edit-tmmatch-source": "Kjeldetekst for omsetjing: $1",
"translate-edit-tmmatch": "$1% samsvar",
"translate-use-suggestion": "Byt ut den gjeldande omsetjinga med dette framlegget.",
- "translate-edit-nopermission": "Du treng løyve for å setja om meldingar",
- "translate-edit-askpermission": "Bed om løyve",
+ "translate-edit-nopermission": "Du treng omsetjingsrettar for å setja om meldingar.",
+ "translate-edit-askpermission": "Få løyve",
"translate-magic-pagename": "Utvida MediaWiki-omsetjing",
"translate-magic-help": "Du kan setja om tilleggsnamn på spesialsidenamn, magiske ord og namna på namnerom.\n\nTilleggsnamn på spesialsidenamn og magiske ord kan ha fleire omsetjingar.\nOmsetjingane vert fråskilde med komma (,).\nNamnerom kan berre ha éi omsetjing.\n\nI namneromomsetjingane kan <code>$1 talk</code> vera innfløkt. <code>$1</code> vert erstatta med namnet på nettstaden (til dømes <code>{{ns:project_talk}}</code>).\nOm det ikkje er mogeleg å få til eit gildt uttrykk på ditt språk her utan å endra sidenamnet, lat oss få vita på [[Support]].\n\nDu må vera ein omsetjar for å lagra endringar.\nEndringar vert ikkje lagra før du klikkar på lagreknappen nedanfor.",
"translate-magic-module": "Modul:",
@@ -112,6 +104,13 @@
"action-translate-import": "importera fråkopla omsetjingar",
"right-translate-messagereview": "Sjå igjennom omsetjingar",
"right-translate-groupreview": "Endra stoda på arbeidsflyten til meldingsgrupper",
+ "translate-rcfilters-translations": "Omsetjingar",
+ "translate-rcfilters-translations-only-label": "Omsetjingar",
+ "translate-rcfilters-translations-only-desc": "Endringar på omsette sider.",
+ "translate-rcfilters-translations-filter-label": "Ikkje omsetjingar",
+ "translate-rcfilters-translations-filter-desc": "Alle endringar som ikkje er omsetjingar.",
+ "translate-rcfilters-translations-site-label": "Systemmeldingar",
+ "translate-rcfilters-translations-site-desc": "Tilpassing av systemmeldingane i MediaWiki-namnerommet.",
"translate-rc-translation-filter": "Filtrer omsetjingar:",
"translate-rc-translation-filter-no": "Ikkje gjer noko",
"translate-rc-translation-filter-only": "Vis berre omsetjingar",
@@ -143,8 +142,7 @@
"translate-statsf-language": "Liste over språkkodar fråskilde med komma:",
"translate-statsf-group": "Liste over gruppekodar fråskilde med komma:",
"translate-statsf-submit": "Førehandsvis",
- "translate-tag-category": "Sider som kan setjast om",
- "translate-tag-page-desc": "Omsetjing av wikisida [[$2|$1]].",
+ "translate-tag-page-desc": "Omsetjing av wikisida [[$2|$1]] frå $3 ($4).",
"translate-sidebar-alltrans": "På andre språk",
"translations": "Alle omsetjingar",
"translations-summary": "Skriv inn eit meldingsnamn nedanfor for å visa alle tilgjengelege omsetjingar.",
@@ -158,6 +156,7 @@
"translate-translations-history-short": "h",
"languagestats": "Språkstatistikk",
"languagestats-summary": "Sida viser omsetjingsstatistikk for alle meldingsgruppene for eit språk.",
+ "messagegroupstats-summary": "Denne sida viser statistikk for meldingsgrupper.",
"languagestats-stats-for": "Omsetjingsstatistikk for $1 ($2).",
"languagestats-recenttranslations": "siste omsetjingane",
"translate-langstats-incomplete": "Somt av statistikken på sida er uheil. Last sida på nytt for å få meir statistikk.",
@@ -174,6 +173,7 @@
"translate-untranslated": "Uomsett",
"translate-percentage-complete": "Ferdiggjort",
"translate-percentage-fuzzy": "Utdatert",
+ "translate-percentage-proofread": "Vurdert",
"translate-languagestats-overall": "Alle meldingsgruppene samla",
"translate-ls-submit": "Vis statistikk",
"translate-ls-column-group": "Meldingsgruppe",
@@ -210,7 +210,6 @@
"translate-manage-action-conflict": "Importer og merk for oppdatering («fuzzy»)",
"translate-manage-action-ignore": "Ignorer",
"translate-manage-import-summary": "Importerer ein ny versjon frå ei ekstern kjelde",
- "translate-manage-fuzzy-summary": "Meldingsdefinisjonen har vorte endra",
"translate-manage-submit": "Utfør",
"translate-manage-import-ok": "Importert ny versjon av sida $1",
"translate-manage-import-done": "Alt klart!",
@@ -224,9 +223,7 @@
"translate-js-summary": "Samandrag:",
"translate-js-save": "Lagra",
"translate-js-next": "Lagra og opna neste",
- "translate-js-nonext": "Dette var den siste meldinga på sida.",
"translate-js-skip": "Hopp over til neste",
- "translate-js-save-failed": "Lagringa gjekk ikkje gjennom. Rapporter denne feilen.",
"translate-js-history": "Omsetjingshistorikk",
"translate-js-support": "Still spørsmål",
"translate-js-support-title": "Spør etter hjelp om det ikkje er nok informasjon til å setja om meldinga rett.",
@@ -243,21 +240,9 @@
"translate-documentation-language": "Meldingsdokumentasjon",
"translate-searchprofile": "Omsetjingar",
"translate-searchprofile-tooltip": "Søk i alle omsetjingar",
+ "translate-searchprofile-note": "Fleire søkjealternativ er tilgjengelege med [$1 omsetjingssøk].",
"translate-search-languagefilter": "Filtrer etter språk:",
"translate-search-nofilter": "Inga filtrering",
- "translate-messagereview-submit": "Merk som vurdert",
- "translate-messagereview-progress": "Merkjer som vurdert...",
- "translate-messagereview-failure": "Mislukkast i å merkja som vurdert: $1",
- "translate-messagereview-done": "Vurdert",
- "translate-messagereview-reviews": "Vurdert av {{PLURAL:$1|éin brukar|$1 brukarar}}",
- "translate-messagereview-reviewswithyou": "Vurdert av {{PLURAL:$1|deg|$1 brukarar inkludert deg}}",
- "api-error-invalidrevision": "Omsetjinga vart ikkje funnen",
- "api-error-unknownmessage": "Meldinga vart ikkje funnen",
- "api-error-fuzzymessage": "Omsetjinga er merkt som utdatert",
- "api-error-owntranslation": "Du kan ikkje merkja eigne omsetjingar som vurderte",
- "translate-messagereview-no-fuzzy": "Utdaterte omsetjingar kan ikkje merkjast som vurderte.",
- "translate-messagereview-no-own": "Du kan ikkje merkja eigne omsetjingar som vurderte.",
- "translate-messagereview-doit": "Merk omsetjinga som vurdert.",
"log-name-translationreview": "Logg over omsetjingsgjennomgåing",
"log-description-translationreview": "Logg over alle gjennomgåingar av omsetjingar og meldingsgrupper.",
"logentry-translationreview-message": "$1 {{GENDER:$2|vurderte}} omsetjinga $3",
@@ -268,7 +253,7 @@
"translate-stats-workflow": "Stode",
"translate-workflowgroup-label": "Arbeidsflytsstoder",
"translate-dynagroup-recent-label": "Nylege omsetjingar",
- "translate-gethelp": "Hjelp",
+ "translate-dynagroup-recent-desc": "Denne meldingsgruppa viser alle nylege omsetjingar til dette språket.\nHo er mest nyttig for korrekturlesing.",
"translate-msggroupselector-projects": "Meldingsgruppe",
"translate-msggroupselector-search-placeholder": "Søk etter grupper",
"translate-msggroupselector-search-all": "Alle",
@@ -288,6 +273,7 @@
"tux-status-saving": "Lagrar …",
"tux-status-unsaved": "Ulagra",
"tux-editor-placeholder": "Omsetjinga di",
+ "tux-editor-editsummary-placeholder": "Valfritt samandrag",
"tux-editor-paste-original-button-label": "Lim inn kjeldetekst",
"tux-editor-discard-changes-button-label": "Sjå bort frå endringar",
"tux-editor-save-button-label": "Lagra omsetjing",
@@ -348,8 +334,10 @@
"tux-editor-close-tooltip": "Lat att",
"tux-editor-expand-tooltip": "Vid ut",
"tux-editor-collapse-tooltip": "Slå saman.",
+ "tux-editor-message-tools-show-editor": "Vis i wiki-tekstendraren",
"tux-editor-message-tools-history": "Historikk",
"tux-editor-message-tools-translations": "Alle omsetjingar",
+ "tux-editor-message-tools-linktothis": "Lenkje til denne meldinga",
"tux-editor-loading": "Lastar …",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|språk}} til",
"translate-statsbar-tooltip": "$1% omsett, $2% vurdert",
diff --git a/www/wiki/extensions/Translate/i18n/core/nqo.json b/www/wiki/extensions/Translate/i18n/core/nqo.json
new file mode 100644
index 00000000..0b2fd594
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/nqo.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lanciné.kounfantoh.fofana",
+ "Youssoufkadialy"
+ ]
+ },
+ "translate": "ߘߟߊߡߌ߬ߘߊ߬",
+ "translate-extensionname": "ߘߟߊߡߌ߬ߘߊ߬",
+ "translate-js-save": "ߊ߬ ߟߊߞߎ߲߬ߘߎ߬",
+ "translate-js-next": "ߊ߬ ߟߊߞߎ߲߬ߘߎ߬ ߞߊ߬ ߟߊߕߎ߲߰ߕߊ ߘߊߦߟߍ߬",
+ "translate-js-skip": "ߌ ߜߊ߲߫ ߣߌ߲߬ ߞߎ߲߬ߠߊ߫",
+ "translate-js-support": "ߢߌ߬ߣߌ߲߬ߞߊ߬ߟߌ ߞߍ߫",
+ "translate-documentation-language": "ߗߋߛߓߍ ߘߐ߬ߛߙߋ߬ߦߊ߬ߟߌ"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/nys.json b/www/wiki/extensions/Translate/i18n/core/nys.json
new file mode 100644
index 00000000..1123c6d4
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/nys.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gnangarra"
+ ]
+ },
+ "translate-documentation-language": "Boorna wangkiny"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/oc.json b/www/wiki/extensions/Translate/i18n/core/oc.json
index d5f54c91..4d7a7100 100644
--- a/www/wiki/extensions/Translate/i18n/core/oc.json
+++ b/www/wiki/extensions/Translate/i18n/core/oc.json
@@ -8,12 +8,8 @@
]
},
"translate": "Traduire",
+ "translate-extensionname": "Traduire",
"translate-desc": "[[Special:Translate|Pagina especiala]] per traduire MediaWiki e quitament mai encara.",
- "translate-taskui-view": "Afichar totes los messatges",
- "translate-taskui-untranslated": "Afichar los messatges pas traduches",
- "translate-taskui-optional": "Afichar los messatges facultatius",
- "translate-taskui-acceptqueue": "Unicament los messatges que pòdi marcar coma relegits",
- "translate-taskui-reviewall": "Repassar totas las traduccions",
"translate-taskui-export-to-file": "Exportar al format natiu",
"translate-taskui-export-as-po": "Exportar per una traduccion fòra linha",
"translate-taction-translate": "Traduire",
@@ -22,7 +18,7 @@
"translate-taction-mstats": "Estatisticas de grop de messatges",
"translate-taction-export": "Exportar",
"translate-taction-disabled": "Aquesta accion es desactivada sus aqueste wiki.",
- "translate-page-no-such-language": "Un còde de lengatge invalid es estat indicat",
+ "translate-page-no-such-language": "Un còdi de lengatge invalid es estat indicat",
"translate-page-no-such-group": "Lo grop especificat es invalid.",
"translate-page-disabled": "Las traduccions dins aquesta lenga dins aqueste grop son estadas desactivadas. Motiu :\n\n<em>$1</em>",
"translate-language-disabled": "La traduccion dins aquesta lenga es desactivada.",
@@ -35,34 +31,40 @@
"translate-page-navigation-legend": "Navigacion",
"translate-page-showing": "Visualizacion dels messatges de $1 a $2 sus $3.",
"translate-page-showing-all": "Visualizacion {{PLURAL:$1|d'$1 messatge|de $1 messatges}}.",
+ "translate-page-showing-none": "Cap de messatge de visualizar.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "Pagina seguenta",
"translate-prev": "Pagina precedenta",
"translate-page-description-legend": "Entresenha a prepaus del grop",
- "translate-page-description-hasoptional": "Aqueste grop de messatges conten los messatges facultatius.\nLos messatges facultatius deurián pas èsser traduches que quand vòstra lenga a d'exigéncias particularas\ncoma d'utilizar pas d'espacis o de transformar de noms pròpris. $1",
+ "translate-page-description-hasoptional": "Aqueste grop de messatges conten los messatges facultatius.\nLos messatges facultatius deurián pas èsser traduits que quand vòstra lenga a d'exigéncias particularas\ncoma d'utilizar pas d'espacis o de transformar de noms pròpris. $1",
"translate-page-description-hasoptional-open": "Afichar los messatges facultatius",
"translate-page-edit": "modificar",
- "translate-ext-url": "<hr />Site web : $1",
"translate-optional": "(opcional)",
"translate-ignored": "(ignorat)",
"translate-edit-title": "Modificar « $1 »",
"translate-edit-definition": "Definicion del messatge",
"translate-edit-translation": "Traduccion",
"translate-edit-contribute": "contribuir",
- "translate-edit-no-information": "Actualament, aqueste messatge es pas documentat. Se sabètz ont o cossí aqueste messatge es utilizat, podètz ajudar los autres traductors en documentant aqueste messatge.",
+ "translate-edit-no-information": "<em>Aqueste messatge es pas documentat.\nSe sabètz ont o cossí aqueste messatge es utilizat, podètz ajudar los autres traductors en creant sa documentacion.</em>",
"translate-edit-information": "Entresenhas a prepaus del messatge ($1)",
"translate-edit-in-other-languages": "Messatge dins d'autras lengas",
"translate-edit-warnings": "Avertiments que concernisson las traduccions incompletas",
"translate-edit-tmmatch-source": "Tèxte font de la traduccion : $1",
"translate-edit-tmmatch": "$1 % de correspondéncia",
"translate-use-suggestion": "Remplaçar la traduccion actuala per aquesta suggestion.",
- "translate-edit-nopermission": "Vos cal obténer los dreches de traduccion per traduire los messatges.",
+ "translate-edit-nopermission": "Vos cal obténer los dreits de traduccion per traduire los messatges.",
"translate-edit-askpermission": "Obténer la permission",
+ "exporttranslations": "Exportar de traduccions",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Provesissètz un format valid.",
+ "translate-export-not-supported": "L’exportacion de traduccions es pas presa en carga.",
+ "translate-export-format-notsupported": "Lo format d’exportacion especificat es pas pres en carga pel grop de messatges.",
"translate-magic-pagename": "Traduccion de MediaWiki espandida",
"translate-magic-help": "Podètz traduire los aliasses de paginas especialas, los mots magics, e los noms d'espacis de noms.\n\nLos aliasses de paginas especialas e los mots magics pòdon aver mantuna traduccion.\nLas traduccions son separadas per una virgula (,).\nLos espacis de noms pòdon pas aver qu'una traduccion.\n\nTraduire l'espaci de noms de dicussion del projècte, <code>$1 talk</code> pòt èsser complicat.\n<code>$1</code> es remplaçat pel nom del site (per exemple <code>{{ns:project_talk}}</code>).\nS'es pas possible d'obténer una expression valida dins vòstra lenga sens cambiar lo nom del site, contactatz un desvolopaire sus [[Support]]..\n\nVos cal aparténer al grop dels traductors per enregistrar los cambiaments.\nLos cambiaments seràn pas enregistrats tant qu'auretz pas clicat sul boton « enregistrar » aval.",
"translate-magic-module": "Modul :",
"translate-magic-submit": "Anar",
"translate-magic-cm-export": "Exportar",
- "translate-magic-nothing-to-export": "I a pas res d'exportar",
+ "translate-magic-nothing-to-export": "I a pas res a exportar",
"translate-magic-cm-to-be": "Desven",
"translate-magic-cm-current": "Actual",
"translate-magic-cm-original": "Original",
@@ -75,7 +77,7 @@
"translate-magic-namespace": "Intitolat dels espacis de nomenatge",
"translate-magic-notsaved": "Vòstra modificacion es pas estada salvada !",
"translate-magic-errors": "Corregissètz {{PLURAL:$1|l'error seguenta|las errors seguentas}} dins las traduccions :",
- "translate-magic-saved": "Vòstra modificacion es estada salvada amb succès.",
+ "translate-magic-saved": "Vòstras modificacions son estadas enregistradas.",
"translate-checks-parameters": "{{PLURAL:$2|Lo paramètre seguent es pas utilizat|Los paramètres seguents son pas utilizats}} : <strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Lo paramètre seguent es desconegut|Los paramètres seguents son desconeguts}} : <strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "I a un nombre impar de {{PLURAL:$2|parentèsis|parentèsis}} : <strong><nowiki>$1</nowiki></strong>",
@@ -84,7 +86,7 @@
"translate-checks-xhtml": "Sètz convidat(ada) a corregir {{PLURAL:$2|la balisa seguenta|las balisas seguentas}} : <strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "La definicion utiliza <nowiki>{{PLURAL:}}</nowiki> mas pas la traduccion",
"translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> a recebut {{PLURAL:$1|una forma|$1 formas}} mas {{PLURAL:$2|una sola es suportada|solas $2 son suportadas}} (fòra las formas 0= e 1=).",
- "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> a de formas duplicadas al final. <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> deuriá èsser escrich atal : <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> a de formas duplicadas al final. <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> deuriá èsser escrit atal : <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
"translate-checks-pagename": "Nom d’espaci modificat dempuèi la definicion",
"translate-checks-format": "Aquesta traduccion seguís pas la definicion o a una sintaxi invalida : $1",
"translate-checks-escape": "Los escapaments seguents pòdon èsser accidentals : <strong>$1</strong>",
@@ -94,19 +96,28 @@
"translate-pref-nonewsletter": "Me mandetz pas la letra d’informacion per corrièr",
"translate-pref-editassistlang": "Assistent de lengas :",
"prefs-translate": "Opcions de traduccion",
- "translate-pref-editassistlang-help": "Una virgulas a separat una lista de còde lenga.\nLa traduccion d’un messatge dins aquelas lengas es afichada quand sètz a traduire.\nLa lista per defaut de las lengas varia en foncion de vòstra lenga.",
- "translate-pref-editassistlang-bad": "Còde lenga invalid dins la lista :\n<nowiki>$1</nowiki>.",
+ "translate-pref-editassistlang-help": "Una virgulas a separat una lista de còdi lenga.\nLa traduccion d’un messatge dins aquelas lengas es afichada quand sètz a traduire.\nLa lista per defaut de las lengas varia en foncion de vòstra lenga.",
+ "translate-pref-editassistlang-bad": "Còdi lenga invalid dins la lista :\n<nowiki>$1</nowiki>.",
"right-translate": "Modificar en utilizant l'interfàcia de traduccion",
"right-translate-manage": "Gerir los gropes de messatge",
"action-translate-manage": "gerir los gropes de messatges",
"right-translate-import": "Importar las traduccions fòra linha",
"action-translate-import": "importar las traduccions fòra linha",
"right-translate-messagereview": "Examinar las traduccions",
+ "action-translate-messagereview": "repassar las traduccions",
"right-translate-groupreview": "Modificar l'estat de flux de trabalh dels gropes de messatge",
+ "action-translate-groupreview": "modificar l'estat del flux de trabalh pels gropes de messatges",
+ "translate-rcfilters-translations": "Traduccions",
+ "translate-rcfilters-translations-only-label": "Traduccions",
+ "translate-rcfilters-translations-only-desc": "Cambiaments a las paginas traduitas.",
+ "translate-rcfilters-translations-filter-label": "Pas traduits",
+ "translate-rcfilters-translations-filter-desc": "Totes los cambiaments que son pas de traduccions.",
+ "translate-rcfilters-translations-site-label": "Messatges del sistèma",
+ "translate-rcfilters-translations-site-desc": "Adaptacion dels messatges del sistèma dins l'espaci de noms MediaWiki.",
"translate-rc-translation-filter": "Filtrar las traduccions :",
"translate-rc-translation-filter-no": "Far pas res",
"translate-rc-translation-filter-only": "Afichar unicament las traduccions",
- "translate-rc-translation-filter-filter": "Eliminar las traduccions",
+ "translate-rc-translation-filter-filter": "Exclure las traduccions",
"translate-rc-translation-filter-site": "Solament los cambiaments de messatges del site",
"translationstats": "Estatisticas de traduccion",
"translate-stats-edits": "Edicions",
@@ -131,8 +142,8 @@
"translate-statsf-count-registrations": "Utilizaires novèls",
"translate-statsf-count-reviews": "Relecturas de traduccion",
"translate-statsf-count-reviewers": "Relectors",
- "translate-statsf-language": "Lista de còdes de lengas, separats per de virgulas :",
- "translate-statsf-group": "Lista de còdes de gropes, separats per de virgulas :",
+ "translate-statsf-language": "Lista de còdis de lengas, separats per de virgulas :",
+ "translate-statsf-group": "Lista de còdis de gropes, separats per de virgulas :",
"translate-statsf-submit": "Previsualizar",
"translate-tag-page-desc": "Traduccion de la pagina wiki [[$2|$1]] dempuèi $3 ($4).",
"translate-sidebar-alltrans": "Dins las autras lengas",
@@ -148,33 +159,53 @@
"translate-translations-history-short": "h",
"languagestats": "Estatisticas de lenga",
"languagestats-summary": "Aquesta pagina aficha las estatisticas de traduccion per totes los gropes de messatges per una lenga.",
+ "messagegroupstats-summary": "Aquesta pagina aficha las estatisticas de grop de messatges.",
"languagestats-stats-for": "Estatisticas de traduccion per $1 ($2).",
"languagestats-recenttranslations": "traduccions recentas",
+ "translate-langstats-incomplete": "Qualques unas de las estatisticas d'aquela pagina son incompletas. Recargatz-la per n'obténer mai.",
"translate-langstats-expand": "Desvolopar",
"translate-langstats-collapse": "Replegar",
"translate-langstats-expandall": "Desvolopar tot",
"translate-langstats-collapseall": "Replegar tot",
- "translate-language-code": "Còde de lenga",
- "translate-language-code-field-name": "Còde de lenga :",
- "translate-suppress-complete": "Suprimir los gropes de messatges traduches completament",
- "translate-ls-noempty": "Suprimir los gropes de messatges pas traduches completament",
+ "translate-language-code": "Còdi de lenga",
+ "translate-language-code-field-name": "Còdi de lenga :",
+ "translate-suppress-complete": "Suprimir los gropes de messatges traduits completament",
+ "translate-ls-noempty": "Suprimir los gropes de messatges pas traduits completament",
"translate-language": "Lenga :",
"translate-total": "Messatges",
- "translate-untranslated": "Pas traduches",
+ "translate-untranslated": "Pas traduits",
"translate-percentage-complete": "Acabament",
"translate-percentage-fuzzy": "Depassats",
+ "translate-languagestats-overall": "Totes los gropes de messatges ensemble",
"translate-ls-submit": "Afichar las estatisticas",
"translate-ls-column-group": "Grop de messatges",
+ "translate-mgs-pagename": "Estatisticas del grop de messatges",
"translate-mgs-fieldset": "Afichar las preferéncias",
"translate-mgs-group": "Grop de messatges :",
+ "translate-mgs-nocomplete": "Afichar pas las lengas qu'an acabat lor traduccion",
+ "translate-mgs-noempty": "Afichar pas las lengas qu’an pas cap de traduccion",
"translate-mgs-submit": "Afichar las estatisticas",
"translate-mgs-column-language": "Lenga",
- "translate-mgs-totals": "Totas las lengas ensemble",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|lenga|lengas}} al total",
+ "translate-mgs-invalid-group": "Lo grop especificat «$1» existís pas.",
+ "translate-mgs-nothing": "Res a afichar per las estatisticas demandadas.",
"supportedlanguages": "Lengas presas en carga",
+ "supportedlanguages-colorlegend": "Legenda per la color: Darrièra traduccion i a $1 jorns.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traductor|Traductritz}}|Traductors}} : $1",
"supportedlanguages-recenttranslations": "traduccions recentas",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|lenga|lengas}} al total.",
+ "supportedlanguages-activity": "$1 : $2 modificacion{{PLURAL:$2||s}} - Darrièra modificacion i a $3 jorn{{PLURAL:$3||s}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Tèxte font de l'unitat de traduccion",
"translate-save": "Publicar ($1)",
"translate-jssti-add": "Apondre a la lista",
+ "managemessagegroups": "Gestion del grop de messatges",
+ "translate-smg-notallowed": "Sètz pas autorizat a efectuar aquesta accion.",
+ "translate-smg-nochanges": "I a pas cap de cambiament a tractar.",
+ "translate-smg-submit": "Sometre las modificacions per tractament",
+ "translate-smg-left": "Contengut del messatge dins lo wiki",
+ "translate-smg-right": "Modificacions en cors de transferiment",
"translate-manage-import-diff": "Messatge $1 | Accions : $2",
"translate-manage-import-new": "Messatge novèl $1",
"translate-manage-import-deleted": "Messatge suprimit $1",
@@ -196,21 +227,22 @@
"translate-import-from-local": "Importar un fichièr local :",
"translate-import-load": "Cargar lo fichièr",
"translate-import-err-dl-failed": "Impossible d'accedir al fichièr :\n$1",
- "translate-import-err-ul-failed": "Lo telecargament del fichièr a pas capitat",
+ "translate-import-err-ul-failed": "Lo telecargament del fichièr a fracassat",
"translate-import-err-invalid-title": "Lo nom del fichièr provesit <nowiki>$1</nowiki> es invalid.",
"translate-import-err-no-such-file": "Lo fichièr <nowiki>$1</nowiki> existís pas o es pas importat localament.",
+ "translate-import-err-stale-group": "Lo grop de messatges qu'aquel fichièr i aperten existís pas.",
"translate-import-err-no-headers": "Lo fichièr es pas un fichièr ''Gettext'' plan format dins lo format esperat per l’extension ''Translate'' :\nes impossible de determinar lo grop e la lenga dempuèi las entèstas del fichièr.",
"translate-import-err-warnings": "Lo fichièr es pas format coma cal.\nAsseguratz-vos que vòstra aisina de traduccion suprimís pas los camps « msgctxt ».\nDetalhs : $1",
"translate-js-summary": "Resumit :",
"translate-js-save": "Enregistrar",
"translate-js-next": "Salvar e dobrir lo seguent",
- "translate-js-nonext": "Èra lo darrièr messatge d'aquesta pagina.",
"translate-js-skip": "Anar al seguent",
- "translate-js-save-failed": "L'enregistrament a fracassat. Senhalatz aquela error.",
"translate-js-history": "Istoric de traduccion",
"translate-js-support": "Pausar una question",
+ "translate-js-support-title": "Demandatz d'ajuda se trobatz que i a pas pro d'informacions per tradusir corrèctament aquel messatge.",
+ "translate-js-support-unsaved-warning": "Avètz de traduccions pas enregistradas.",
"translate-gs-pos": "Pos.",
- "translate-gs-code": "Còde",
+ "translate-gs-code": "Còdi",
"translate-gs-continent": "Continent",
"translate-gs-speakers": "Locutors",
"translate-gs-score": "Marca",
@@ -221,43 +253,58 @@
"translate-documentation-language": "Documentacion del messatge",
"translate-searchprofile": "Traduccions",
"translate-searchprofile-tooltip": "Recercar dins totas las traduccions",
+ "translate-searchprofile-note": "Mai d'opcions de recèrca disponiblas amb la [$1 recèrca de traduccions].",
"translate-search-languagefilter": "Filtrar per lenga :",
"translate-search-nofilter": "Pas cap de filtratge",
- "translate-messagereview-submit": "Marcar coma relegit",
- "translate-messagereview-progress": "En cors de marcatge coma relegit...",
- "translate-messagereview-failure": "Fracàs del marcatge coma relegit : $1",
- "translate-messagereview-done": "Relegit",
- "translate-messagereview-reviews": "Relegit per {{PLURAL:$1| un utilizaire| $1 utilizaires}}",
- "translate-messagereview-reviewswithyou": "Relegit per {{PLURAL:$1|vos|$1 utilizaires, vos inclús}}",
+ "log-name-translationreview": "Jornal de relectura de las traduccions",
+ "log-description-translationreview": "Jornal de totas las relecturas de las traduccions e dels gropes de messatge.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|a repassat}} la traduccion $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|a modificat}} l’estat de las traduccions $4 de $3 de $6 a $7",
+ "group-translate-sandboxed": "Traduccions pas aprovadas",
+ "group-translate-sandboxed-member": "{{GENDER:$1|traductor pas aprovat|traductritz pas aprovada}}",
+ "right-translate-sandboxmanage": "Gerir los utilizaires limitats al nauc de sabla",
+ "action-translate-sandboxmanage": "gerir los utilizaires limitats al nauc de sabla",
+ "right-translate-sandboxaction": "Executar d'accions sus lista blanca pels utilizaires pas enregistrats.",
+ "action-translate-sandboxaction": "executar d'accions sus lista blanca pels utilizaires pas enregistrats.",
"translate-workflow-state-": "(desactivat)",
"translate-workflowstatus": "Estatut: $1",
"translate-workflow-set-doing": "Activacion...",
+ "translate-workflow-autocreated-summary": "Creacion automatica de la pagina per l'estat del flux de trabalh $1",
"translate-stats-workflow": "Estatut",
- "translate-dynagroup-recent-desc": "Aqueste grop de messatges fa veire totas las traduccions recentas fachas dins aquesta lenga.\nEs utilizat mai que mai pels prètzfaches de relectura.",
+ "translate-workflowgroup-label": "Estats dels fluxes de trabalh",
+ "translate-dynagroup-recent-label": "Traduccions recentas",
+ "translate-dynagroup-recent-desc": "Aqueste grop de messatges fa veire totas las traduccions recentas faitas dins aquesta lenga.\nEs utilizat mai que mai pels prètzfaits de relectura.",
+ "translate-dynagroup-additions-label": "Apondons recents",
"translate-dynagroup-additions-desc": "Aqueste grop de messages aficha los messatges novèls e modificats.",
- "translate-gethelp": "Ajuda",
"translate-msggroupselector-projects": "Grop de messatges",
"translate-msggroupselector-search-placeholder": "Recercar de gropes",
"translate-msggroupselector-search-all": "Totes",
"translate-msggroupselector-search-recent": "Recent",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|sosprojècte|sosprojèctes}}",
"tux-languageselector": "Traduire en",
"tux-tab-all": "Totes",
- "tux-tab-untranslated": "Pas traduch",
+ "tux-tab-untranslated": "Pas traduit",
"tux-tab-outdated": "Obsolèt",
- "tux-tab-translated": "Traduch",
+ "tux-tab-translated": "Traduit",
+ "tux-tab-unproofread": "Pas verificat",
"tux-edit": "Modificar",
"tux-status-optional": "Facultatiu",
"tux-status-fuzzy": "Obsolèt",
"tux-status-proofread": "Corregit",
- "tux-status-translated": "Traduch",
+ "tux-status-translated": "Traduit",
"tux-status-saving": "Enregistrament en cors…",
"tux-status-unsaved": "Pas enregistrada",
+ "tux-save-unknown-error": "Una error desconeguda s'es produita.",
"tux-editor-placeholder": "Vòstra traduccion",
+ "tux-editor-editsummary-placeholder": "Resumit opcional",
"tux-editor-paste-original-button-label": "Pegar lo tèxte font",
"tux-editor-discard-changes-button-label": "Anullar las modificacions",
"tux-editor-save-button-label": "Enregistrar la traduccion",
"tux-editor-skip-button-label": "Anar al seguent",
- "tux-editor-shortcut-info": "Quichatz sus « $1 » per enregistrar o « $2 » per passar al messatge seguent o « $3 » per d'autres acorchis.",
+ "tux-editor-cancel-button-label": "Anullar",
+ "tux-editor-confirm-button-label": "Confirmar la traduccion",
+ "tux-editor-proofread-button-label": "Marcar coma relegit",
+ "tux-editor-shortcut-info": "Quichatz sus « $1 » per enregistrar o « $2 » per passar al messatge seguent o « $4 » per provesir un resumit o « $3 » per d'autres acorchis.",
"tux-editor-edit-desc": "Modificar la documentacion",
"tux-editor-add-desc": "Apondre una documentacion",
"tux-editor-suggestions-title": "Suggestions",
@@ -268,22 +315,59 @@
"tux-warnings-more": "{{PLURAL:$1|$1 de mai}}",
"tux-warnings-hide": "amagar",
"tux-editor-save-failed": "Fracàs de l'enregistrament de la traduccion : $1",
+ "tux-editor-n-uses": "utilitzat $1 {{PLURAL:$1|còp|còps}}",
"tux-editor-message-desc-more": "Veire mai",
"tux-editor-message-desc-less": "Afichar mens",
"tux-editor-clear-translated": "Amagar la traduccion",
+ "tux-editor-proofreading-mode": "Repassar",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Amagar vòstras traduccions",
+ "tux-editor-proofreading-show-own-translations": "Afichar vòstras traduccions",
+ "tux-proofread-action-tooltip": "Marcar coma relegit",
+ "tux-proofread-edit-label": "Modificar",
+ "tux-editor-page-mode": "Pagina",
"tux-editor-outdated-warning": "Aquesta traduccion pòt necessitar una mesa a jorn.",
"tux-editor-outdated-warning-diff-link": "Afichar las diferéncias",
+ "tux-editor-doc-editor-placeholder": "Documentacion del messatge",
"tux-editor-doc-editor-save": "Enregistrar la documentacion",
"tux-editor-doc-editor-cancel": "Anullar",
"tux-messagetable-more-messages": "$1 {{PLURAL:$1|messatge|messatges}} mai",
"tux-messagetable-loading-messages": "Cargament {{PLURAL:$1|del messatge|dels messatges}}…",
+ "tux-message-filter-placeholder": "Filtrar la lista",
+ "tux-message-filter-result": "{{PLURAL:$1|0=Cap de resultat pas trobat|1=Un resultat trobat|$1 resultats trobats}} per « $2 »",
"tux-message-filter-advanced-button": "Recèrca avançada",
+ "tux-message-filter-optional-messages-label": "Messatges opcionals",
+ "tux-proofread-translated-by-self": "Tradusit per vos",
"tux-empty-list-all": "Aqueste grop de messatges es void",
"tux-empty-list-all-guide": "Seleccionar un grop de messatge diferent de traduire",
"tux-translate-page-no-such-group": "<strong>Lo grop indicat existís pas.</strong> Seleccionatz un autre grop de messatges.",
+ "tux-empty-list-translated": "Cap de messatge pas tradusit",
"tux-empty-list-translated-guide": "Podètz ajudar a traduire",
+ "tux-empty-list-translated-action": "Traduire",
+ "tux-empty-no-messages-to-display": "Pas cap de messatge d'afichar.",
+ "tux-empty-there-are-optional": "I a de messatges opcionals qu'apareisson pas dins la lista",
+ "tux-empty-show-optional-messages": "Afichar los messatges facultatius",
+ "tux-empty-no-outdated-messages": "I a pas de messatges desuets",
+ "tux-empty-nothing-to-proofread": "Pas res a repassar",
+ "tux-empty-you-can-help-providing": "Podètz ajudar en aportant de traduccions novèlas",
+ "tux-empty-nothing-new-to-proofread": "Res de nòu a repassar",
+ "tux-empty-you-can-review-already-proofread": "Podètz repassar las traduccions ja relegidas per d’autres.",
"tux-empty-list-other": "Pas res a traduire",
"tux-empty-list-other-guide": "Podètz ajudar a repassar las traduccions existentas",
"tux-empty-list-other-action": "Repassar las traduccions",
- "tux-empty-list-other-link": "Afichar totes los messatges"
+ "tux-empty-list-other-link": "Afichar totes los messatges",
+ "tux-editor-close-tooltip": "Tampar",
+ "tux-editor-expand-tooltip": "Desvolopar",
+ "tux-editor-collapse-tooltip": "Replegar",
+ "tux-editor-message-tools-show-editor": "Afichar dins l'editor wiki",
+ "tux-editor-message-tools-history": "Istoric",
+ "tux-editor-message-tools-delete": "Suprimir",
+ "tux-editor-message-tools-translations": "Totas las traduccions",
+ "tux-editor-message-tools-linktothis": "Ligam cap a aqueste messatge",
+ "tux-editor-loading": "Cargament en cors...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|lenga|lengas}} mai",
+ "translate-statsbar-tooltip": "$1% tradusit, $2% repassat",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% tradusit, $2% repassat, $3% desuet",
+ "translate-search-more-groups-info": "$1 grop{{PLURAL:$1||es}} mai",
+ "translate-ulsdep-title": "Error de configuracion"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/or.json b/www/wiki/extensions/Translate/i18n/core/or.json
index f37b4b88..5fbc9b56 100644
--- a/www/wiki/extensions/Translate/i18n/core/or.json
+++ b/www/wiki/extensions/Translate/i18n/core/or.json
@@ -10,11 +10,6 @@
},
"translate": "ଅନୁବାଦ",
"translate-desc": "[[Special:Translate|ବିଶେଷ ପୃଷ୍ଠା]] ମିଡ଼ିଆଉଇକି ଓ ବାକିସବୁ ଅନୁବାଦ କରିବା ନିମନ୍ତେ ବିଶେଷ ପୃଷ୍ଠା",
- "translate-taskui-view": "ସମସ୍ତ ଛବି ଦେଖିବେ",
- "translate-taskui-untranslated": "ଅନୁବାଦ ହୋଇନଥିବା ମେସେଜସମୂହ ଦେଖାନ୍ତୁ",
- "translate-taskui-optional": "ବିକଳ୍ପ ମେସେଜସମୂହ ଦେଖାନ୍ତୁ",
- "translate-taskui-acceptqueue": "ମୁଁ ସମୀକ୍ଷା ସରିଛି ବୋଲି ବାଛିପାରୁଥିବା ମେସେଜସମୂହ",
- "translate-taskui-reviewall": "ସମସ୍ତ ଅନୁବାଦକୁ ଅବଲୋକନ କରିବେ",
"translate-taskui-export-to-file": "ମୂଳ ସଜାଣିକୁ ବ୍ଯବ‌ହାର କରିବେ",
"translate-taskui-export-as-po": "ଅଫ-ଲାଇନ ଅନୁବାଦ ବ୍ୟବ‌ହାର କରିବେ",
"translate-taction-translate": "ଅନୁବାଦ କରନ୍ତୁ",
@@ -36,12 +31,12 @@
"translate-page-navigation-legend": "ଦିଗବାରେଣି (ନାଭିଗେସନ)",
"translate-page-showing": "$3ଭିତରୁ $1 ଠାରୁ $2 ଯାଏଁ ମେସେଜମାନ ଦେଖାଉଛୁ ।",
"translate-page-showing-all": "$1 ଗୋଟି {{PLURAL:$1|ମେସେଜ}} ଦେଖାଇବେ ।",
+ "translate-page-showing-none": "ଦେଖାଇବା ପାଇଁ ମେସେଜଟିଏ ନାହିଁ ।",
"translate-next": "ପର ପୃଷ୍ଠା",
"translate-prev": "ଆଗ ପୃଷ୍ଠା",
"translate-page-description-legend": "ଏହି ସମୂହ ବାବଦରେ ସୂଚନା",
"translate-page-description-hasoptional-open": "ବିକଳ୍ପ ମେସେଜସମୂହ ଦେଖାନ୍ତୁ ।",
"translate-page-edit": "ଏହାକୁ ବଦଳାନ୍ତୁ",
- "translate-ext-url": "<hr />ୱେବସାଇଟ: $1",
"translate-optional": "(ଇଚ୍ଛାଧୀନ)",
"translate-ignored": "(ଏଡ଼ାଇଯାନ୍ତୁ)",
"translate-edit-title": "ବଦଳ \"$1\"",
@@ -76,7 +71,7 @@
"translate-magic-saved": "ଆପଣଙ୍କ ସମ୍ପାଦନା ସଫଳ ଭାବେ ସାଇତାଗଲା ।",
"translate-checks-parameters": "ଏହି {{PLURAL:$2|ପାରାମିଟର|ପାରାମିଟରମାନ}} ବ୍ୟ‌ବ‌ହାର ହୋଇନାହିଁ:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "ଏହି {{PLURAL:$2|ପାରାମିଟର ଟି|ପାରାମିଟରମାନ}} ଅଜଣା:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-balance": "ଏଠାରେ ଥିବା {{PLURAL:$2|ପେରେନ୍ଥେସ|ପେରେନ୍ଥେସମାନ}}ଙ୍କ ସଙ୍ଖ୍ୟା ଜଣାନାହିଁ:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-balance": "ଏଠାରେ ଅସମ ସଂଖ୍ୟକ {{PLURAL:$2|ପେରେନ୍ଥେସ|ପେରେନ୍ଥେସସବୁ}} ରହିଛି:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "ଏହି {{PLURAL:$2|ଲିଙ୍କଟି|$2 lଲିଙ୍କମାନ}} ଅସୁବିଧାଜନକ: <strong><nowiki>$1</nowiki></strong>",
"translate-pref-nonewsletter": "ମୋତେ ଇ-ମେଲ ନିଉଜଲେଟର ପଠାଇବେ ନାହିଁ",
"prefs-translate": "ଅନୁବାଦ ବିକଳ୍ପସବୁ",
diff --git a/www/wiki/extensions/Translate/i18n/core/pa.json b/www/wiki/extensions/Translate/i18n/core/pa.json
index b0180062..7ca90367 100644
--- a/www/wiki/extensions/Translate/i18n/core/pa.json
+++ b/www/wiki/extensions/Translate/i18n/core/pa.json
@@ -8,11 +8,6 @@
},
"translate": "ਤਰਜਮਾ ਕਰੋ",
"translate-desc": "ਮੀਡੀਆਵਿਕੀ ਅਤੇ ਹੋਰਾਂ ਦੇ ਅਨੁਵਾਦ ਲਈ [[Special:Translate|ਖ਼ਾਸ ਸਫ਼ਾ]]",
- "translate-taskui-view": "ਸਾਰੇ ਸੁਨੇਹੇ ਵਿਖਾਓ",
- "translate-taskui-untranslated": "ਬਿਨਾਂ ਤਰਜਮੇ ਵਾਲ਼ੇ ਸੁਨੇਹੇ ਵਿਖਾਉ",
- "translate-taskui-optional": "ਚੋਣਵੇਂ ਸੁਨੇਹੇ ਵਿਖਾਓ",
- "translate-taskui-acceptqueue": "ਸਿਰਫ਼ ਉਹ ਸੁਨੇਹੇ ਜਿਨ੍ਹਾਂ ਨੂੰ ਮੈਂ \"ਪਰਖਿਆ ਗਿਆ\" ਨੱਥੀ ਕਰ ਸਕਾਂ",
- "translate-taskui-reviewall": "ਸਾਰੇ ਤਰਜਮੇ ਪਰਖੋ",
"translate-taskui-export-to-file": "ਦੇਸੀ ਰੂਪ ਵਿਚ ਮੰਗਾਓ",
"translate-taskui-export-as-po": "ਆਫ਼-ਲਾਈਨ ਅਨੁਵਾਦ ਲਈ ਮੰਗਾਓ",
"translate-taction-translate": "ਤਰਜਮਾ ਕਰੋ",
@@ -40,7 +35,6 @@
"translate-page-description-legend": "ਇਸ ਟੋਲੀ ਬਾਰੇ ਜਾਣਕਾਰੀ",
"translate-page-description-hasoptional-open": "ਚੋਣਵੇਂ ਸੁਨੇਹੇ ਵਿਖਾਓ।",
"translate-page-edit": "ਸੋਧੋ",
- "translate-ext-url": "<hr />ਵੈੱਬਸਾਈਟ: $1",
"translate-optional": "(ਚੋਣਵਾਂ)",
"translate-ignored": "(ਅਣਡਿੱਠਾ)",
"translate-edit-title": "\"$1\" ਸੋਧੋ",
@@ -49,9 +43,7 @@
"translate-edit-contribute": "ਯੋਗਦਾਨ ਪਾਓ",
"translate-edit-information": "($1) ਸੁਨੇਹੇ ਬਾਬਤ ਜਾਣਕਾਰੀ",
"translate-edit-in-other-languages": "ਹੋਰ ਭਾਸ਼ਾਵਾਂ ਵਿਚ ਸੁਨੇਹਾ",
- "translate-edit-committed": "ਸਾਫ਼ਟਵੇਅਰ ਵਿਚ ਮੌਜੂਦਾ ਤਰਜਮਾ",
"translate-edit-warnings": "ਊਣੇ ਤਰਜਮਿਆਂ ਬਾਰੇ ਚਿਤਾਵਨੀ",
- "translate-edit-tmsugs": "ਤਰਜਮਾਈ ਯਾਦਦਾਸ਼ਤ ਅਤੇ ਮਸ਼ੀਨੀ ਤਰਜਮੇ ਵੱਲੋਂ ਸਲਾਹਾਂ",
"translate-edit-tmmatch-source": "ਅਨੁਵਾਦ ਦੀ ਸਰੋਤ ਲਿਖਤ:$1",
"translate-edit-tmmatch": "$1% ਮੇਲ",
"translate-use-suggestion": "ਮੌਜੂਦਾ ਤਰਜਮੇ ਦੀ ਥਾਂ ਇਹ ਸਲਾਹ ਲਿਆਉ",
@@ -94,7 +86,6 @@
"translate-statsf-count-reviews": "ਤਰਜਮਾਕਾਰੀ ਦੀਆਂ ਪਰਖਾਂ",
"translate-statsf-count-reviewers": "ਪਾਰਖੂ",
"translate-statsf-submit": "ਝਲਕ",
- "translate-tag-category": "ਉਲਥਾਯੋਗ ਸਫ਼ੇ",
"translate-sidebar-alltrans": "ਹੋਰ ਬੋਲੀਆਂ ਵਿੱਚ ਪੜ੍ਹੋ",
"translations": "ਸਾਰੇ ਤਰਜਮੇ",
"translate-translations-fieldset-title": "ਸੁਨੇਹਾ",
@@ -147,9 +138,7 @@
"translate-js-summary": "ਸਾਰ:",
"translate-js-save": "ਸੰਭਾਲੋ",
"translate-js-next": "ਸੰਭਾਲੋ ਤੇ ਅਗਲਾ ਖੋਲ੍ਹੋ",
- "translate-js-nonext": "ਇਹ ਇਸ ਸਫ਼ੇ ਉੱਤੇ ਆਖਰੀ ਸੁਨੇਹਾ ਸੀ।",
"translate-js-skip": "ਛੱਡ ਕੇ ਅੱਗੇ ਜਾਉ",
- "translate-js-save-failed": "ਸੰਭਾਲਣ ਲਈ ਫੇਲ੍ਹ। ਇਹ ਗਲਤੀ ਬਾਰੇ ਰਿਪੋਰਟ ਦਿਉ ਜੀ।",
"translate-js-history": "ਤਰਜਮਾਕਾਰੀ ਦਾ ਅਤੀਤ",
"translate-js-support": "ਸੁਆਲ ਪੁੱਛੋ",
"translate-js-support-unsaved-warning": "ਤੁਹਾਡੇ ਕੋਲ ਅਣ-ਸਾਂਭੇ ਤਰਜਮੇ ਹਨ।",
@@ -164,13 +153,6 @@
"translate-gs-avgscore": "ਔਸਤ ਸਕੋਰ",
"translate-documentation-language": "ਸੁਨੇਹਾ ਦਸਤਾਵੇਜ਼",
"translate-searchprofile": "ਤਰਜਮੇ",
- "translate-messagereview-submit": "ਪਰਖਿਆ ਹੋਇਆ ਵਜੋਂ ਨੱਥੀ ਕਰੋ",
- "translate-messagereview-progress": "ਪਰਖਿਆ ਹੋਇਆ ਵਜੋਂ ਨੱਥੀ ਹੋ ਰਿਹਾ ਹੈ...",
- "translate-messagereview-done": "ਪਰਖਿਆ ਗਿਆ",
- "api-error-invalidrevision": "ਤਰਜਮਾ ਨਹੀਂ ਲੱਭਾ",
- "api-error-unknownmessage": "ਸੁਨੇਹਾ ਨਹੀਂ ਲੱਭਾ",
- "api-error-owntranslation": "ਤੁਸੀਂ ਆਪਣੇ ਖ਼ੁਦ ਦੇ ਅਨੁਵਾਦ ਨੂੰ ਪਰਖਿਆ ਗਿਆ ਵਜੋਂ ਨੱਥੀ ਨਹੀਂ ਕਰ ਸਕਦੇ",
- "translate-messagereview-doit": "ਇਸ ਤਰਜਮੇ ਨੂੰ ਪਰਖੇ ਹੋਏ ਵਜੋਂ ਨਿਸ਼ਾਨਦੇਹ ਕਰੋ।",
"log-name-translationreview": "ਤਰਜਮਾਈ ਪਰਖਾਂ ਦਾ ਇੰਦਰਾਜ",
"log-description-translationreview": "ਸਾਰੇ ਅਨੁਵਾਦਾਂ ਅਤੇ ਸੁਨੇਹਾ ਸਮੂਹਾਂ ਦੀਆਂ ਪਰਖਾਂ ਦਾ ਇੰਦਰਾਜ",
"logentry-translationreview-message": "$1 ਨੇ ਅਨੁਵਾਦ $3 {{GENDER:$2|ਪਰਖਿਆ}}",
diff --git a/www/wiki/extensions/Translate/i18n/core/pam.json b/www/wiki/extensions/Translate/i18n/core/pam.json
index b709e37e..f5a2b1d8 100644
--- a/www/wiki/extensions/Translate/i18n/core/pam.json
+++ b/www/wiki/extensions/Translate/i18n/core/pam.json
@@ -9,6 +9,5 @@
"translate-magic-cm-savefailed": "↓Bigu ya ing pamanyikap",
"translate-rc-translation-filter-no": "↓Ala kang gagawan",
"translate-stats-users": "↓Talalikas",
- "translate-js-save": "↓Isikap",
- "translate-messagereview-submit": "↓Tanggapan"
+ "translate-js-save": "↓Isikap"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/pdc.json b/www/wiki/extensions/Translate/i18n/core/pdc.json
index 55f17da6..7a9d6218 100644
--- a/www/wiki/extensions/Translate/i18n/core/pdc.json
+++ b/www/wiki/extensions/Translate/i18n/core/pdc.json
@@ -14,7 +14,6 @@
"translate-next": "neegschtes Blatt",
"translate-prev": "letscht Blatt",
"translate-page-edit": "ennere",
- "translate-ext-url": "<hr />Gewebb: $1",
"translate-edit-title": "„$1“ ennere",
"translate-edit-translation": "Iwwersetzing",
"translate-edit-in-other-languages": "Meldinge in annere Schprooche",
diff --git a/www/wiki/extensions/Translate/i18n/core/pfl.json b/www/wiki/extensions/Translate/i18n/core/pfl.json
index 24a3e93f..6985e1f7 100644
--- a/www/wiki/extensions/Translate/i18n/core/pfl.json
+++ b/www/wiki/extensions/Translate/i18n/core/pfl.json
@@ -8,11 +8,6 @@
},
"translate": "Iwasedze",
"translate-desc": "[[Special:Translate|Schbezialsaid]] fas iwasedze vun MediaWiki un waidares",
- "translate-taskui-view": "Alli Nochrischde zaische",
- "translate-taskui-untranslated": "Ned iwasedzde Nochrischde zaische",
- "translate-taskui-optional": "Alli obzionali Nochrischde zaische",
- "translate-taskui-acceptqueue": "Bloß des zaische, wu isch a oivaschdone soi kend",
- "translate-taskui-reviewall": "Alli Iwasedzunge iwabriefe",
"translate-taskui-export-to-file": "Gebs im aischene Foamad aus",
"translate-taskui-export-as-po": "Fa ä Offline-Iwasedzung ausgewe",
"translate-taction-translate": "Iwasedze",
@@ -40,7 +35,6 @@
"translate-page-description-hasoptional": "Die Nochrischdegrubb hod obzionali Nochrischde.\nObzionali Nochrischde deedn awa bessa bloß iwasedz werre, wonns inde Schbrooch dodvoa ä Bedirfnis hot\nwie kä Leazaische zu bnudze oda Aischenoame zu umschraiwe. $1",
"translate-page-description-hasoptional-open": "Obzionali Nochrischde zaische",
"translate-page-edit": "bearwaide",
- "translate-ext-url": "<hr />Websaid: $1",
"translate-optional": "(uff Wunsch)",
"translate-ignored": "(ignoriead)",
"translate-edit-title": "„$1“ bearwaide",
@@ -50,9 +44,7 @@
"translate-edit-no-information": "''Fa die Nochrischd hods kä Unalaache.''\n''Wonn driwwa was wisse duschd, konschd de onare baide Erwed helfe, wonnen saache duschd, worums do gehd.''",
"translate-edit-information": "Auskinfd iwa die Nochrischd ($1)",
"translate-edit-in-other-languages": "Nochrischd in onare Schbrooche",
- "translate-edit-committed": "Deazaidischi Iwasedzung",
"translate-edit-warnings": "Waanung iwa mongelhafde Iwasedzunge",
- "translate-edit-tmsugs": "Voaschleesch ausm Iwasedzungsschbaischa",
"translate-edit-tmmatch-source": "Qwelltegsch vunde Iwasedzung: $1",
"translate-edit-tmmatch": "$1 % Iwaoischdimmung",
"translate-use-suggestion": "Iwasedzung duaschn Voaschlach easedze.",
@@ -133,7 +125,6 @@
"translate-statsf-language": "Komma gdrenndi Lischd vun Schboochcode:",
"translate-statsf-group": "Komma gdrenndi Lischd vun Grubbecode:",
"translate-statsf-submit": "Voaschau",
- "translate-tag-category": "Iwasedzdi Saide",
"translate-tag-page-desc": "Iwasedzung vunde Wikisaid [[$2|$1]].",
"translate-sidebar-alltrans": "In oanare Schbrooche",
"translations": "All Iwasedzunge",
@@ -204,7 +195,6 @@
"translate-manage-toolong": "Die maximale Va'awaidungszaid vun $1 {{PLURAL:$1|Sekund|Sekunde}} isch abgloffe.\nSchiggs Foamula nomol ab, ums foadsedze zu kenne.",
"translate-manage-import-summary": "Naiji Ausgab vunea Qwell nufflaade",
"translate-manage-conflict-summary": "Naiji Ausgab isch vunea Qwell nuffglaade worr.\nIwabriefs bidde.",
- "translate-manage-fuzzy-summary": "Die Feschdleschung vunde Nochrischde hodsisch g'änad",
"translate-manage-import-done": "Alles erledischd!",
"importtranslations": "Iwasedzunge roihole",
"translate-import-from-local": "Dadai do nufflaade:",
@@ -219,9 +209,7 @@
"translate-js-summary": "Zommefassung:",
"translate-js-save": "Schbaischare",
"translate-js-next": "Schbaischare unde negschd effne",
- "translate-js-nonext": "Des isch die ledschd Nochrischd ufde Said gwesd.",
"translate-js-skip": "Waida zum negschde",
- "translate-js-save-failed": "S'Schbaischare isch ned gonge. Meld bidde de Fehla.",
"translate-js-history": "Iwasedzungsgschischd",
"translate-js-support": "Frooch",
"translate-js-support-title": "Froch noch Hilf, woans ned gnischnd Auskinfd hod, um die Nochrischd rischdisch iwasedze zu kenne.",
@@ -240,19 +228,6 @@
"translate-searchprofile-tooltip": "In alle Iwasedzunge suche",
"translate-search-languagefilter": "Noch Schbrooche fildare:",
"translate-search-nofilter": "Alli Schbrooche",
- "translate-messagereview-submit": "Zuschdimme",
- "translate-messagereview-progress": "Schdimm zu …",
- "translate-messagereview-failure": "Zuschdimmung … gschaidad: $1",
- "translate-messagereview-done": "Zugschdimmd",
- "translate-messagereview-reviews": "Zuschdimmung vun {{PLURAL:$1|äm Benudza|$1 Benudza}}",
- "translate-messagereview-reviewswithyou": "Zuschdimmung vun {{PLURAL:$1|äm Benudza|$1 Benudza}}, oinschließlisch vun dir",
- "api-error-invalidrevision": "Kä Iwasedzung gfunne worre",
- "api-error-unknownmessage": "Kä Nochrischd gfunne worre.",
- "api-error-fuzzymessage": "Die Iwasedzung isch nemme agduell",
- "api-error-owntranslation": "Doi aischini Iwasedzunge konschd ned agzebdiere.",
- "translate-messagereview-no-fuzzy": "Va'aldede Iwasedsedzunge kennen ned agzebdiad werre.",
- "translate-messagereview-no-own": "Doi aischini Iwasedzunge konschd ned agzebdiere.",
- "translate-messagereview-doit": "Die Iwasedzung als rischdisch agzebdiere.",
"log-name-translationreview": "Iwasedzungs-Iwabligg-Logbuch",
"log-description-translationreview": "Logbuch fa alli Iwabriefunge vun Iwasedzunge und Nochrischdegrubbe.",
"logentry-translationreview-message": "$1 {{GENDER:$2|hod}} die Iwasedzung $3 iwabrifd",
@@ -264,6 +239,5 @@
"translate-workflowgroup-label": "Awaidsschridd-Zuschdond",
"translate-workflowgroup-desc": "Die Nochrischdegrubb zaischde Zuschdoand zum Schaffnsflus baide Iwasedzunge.\nDe Zuschdoand wead iwa die Oischdellunge <code lang=\"en\">$wgTranslateWorkflowStates</code> oagbassd.",
"translate-dynagroup-recent-label": "Jingschdi Iwasedzunge",
- "translate-dynagroup-recent-desc": "Die Nochrischdegrubb zaischd alli geschewerdische Iwasedzunge inde Sbrooch oa.\nOam Beschde ischse fa Uffgawe vum Gescheleese.",
- "translate-gethelp": "Hilf"
+ "translate-dynagroup-recent-desc": "Die Nochrischdegrubb zaischd alli geschewerdische Iwasedzunge inde Sbrooch oa.\nOam Beschde ischse fa Uffgawe vum Gescheleese."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/pl.json b/www/wiki/extensions/Translate/i18n/core/pl.json
index 59429abd..1176d0c2 100644
--- a/www/wiki/extensions/Translate/i18n/core/pl.json
+++ b/www/wiki/extensions/Translate/i18n/core/pl.json
@@ -26,17 +26,16 @@
"Woytecr",
"Wpedzich",
"Žekřil71pl",
- "The Polish"
+ "The Polish",
+ "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-taskui-view": "Pokaż wszystkie komunikaty",
- "translate-taskui-untranslated": "Pokaż nieprzetłumaczone komunikaty",
- "translate-taskui-optional": "Pokaż opcjonalne wiadomości",
- "translate-taskui-acceptqueue": "Tylko te komunikaty, które mogę oznaczyć jako przejrzane",
- "translate-taskui-reviewall": "Sprawdź wszystkie tłumaczenia",
+ "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",
@@ -58,13 +57,13 @@
"translate-page-navigation-legend": "Nawigacja",
"translate-page-showing": "Wyświetlone komunikaty od $1 do $2 z $3.",
"translate-page-showing-all": "Wyświetlono $1 {{PLURAL:$1|komunikat|komunikaty|komunikatów}}.",
+ "translate-page-showing-none": "Brak komunikatów do wyświetlenia.",
"translate-next": "Następna strona",
"translate-prev": "Poprzednia strona",
"translate-page-description-legend": "Informacje na temat grupy",
"translate-page-description-hasoptional": "Ta grupa zawiera również opcjonalne komunikaty.\nPowinny one być tłumaczone tylko wtedy, gdy język docelowy wymaga pisania bez odstępów między wyrazami lub transliteracji nazw własnych. $1",
"translate-page-description-hasoptional-open": "Pokaż komunikaty opcjonalne.",
"translate-page-edit": "edytuj",
- "translate-ext-url": "<hr />Strona internetowa: $1",
"translate-optional": "(dodatkowe)",
"translate-ignored": "(zignorowane)",
"translate-edit-title": "Edycja „$1“",
@@ -80,6 +79,11 @@
"translate-use-suggestion": "Zastąp obecne tłumaczenie tą propozycją.",
"translate-edit-nopermission": "Nie masz uprawnień tłumacza do tłumaczenia komunikatów.",
"translate-edit-askpermission": "Uzyskaj uprawnienie",
+ "exporttranslations": "Eksport tłumaczeń",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Proszę podać poprawny format.",
+ "translate-export-not-supported": "Eksport tłumaczeń nie jest obsługiwany.",
+ "translate-export-format-notsupported": "Określony format eksportu nie jest obsługiwany przez tę grupę komunikatów.",
"translate-magic-pagename": "Rozszerzone tłumaczenie MediaWiki",
"translate-magic-help": "Istnieje możliwość tłumaczenia aliasów stron specjalnych, magicznych słów i nazw poszczególnych przestrzeni nazw.\n\nAliasy stron specjalnych i magiczne słowa mogą mieć wiele tłumaczeń.\nTłumaczenia rozdziela się przecinkiem (,).\nPrzestrzenie nazw mogą mieć tylko jedno tłumaczenie.\n\nTłumaczenie nazw przestrzeni nazw <code>Dyskusja $1</code> zawierających strony dyskusji może być bardziej złożone.\n<code>$1</code> zamieniane jest na nazwę serwisu – na przykład <code>{{ns:project_talk}}</code>.\nJeśli w danym języku niemożliwe jest sformułowanie prawidłowego wpisu bez zmiany nazwy serwisu, należy nas zawiadomić przez [[Support]].\n\nZapisanie zmian jest możliwe tylko przez członków grupy tłumaczy.\nZmiany nie są zapisywane, dopóki użytkownik nie naciśnie umieszczonego poniżej przycisku „Zapisz”.",
"translate-magic-module": "Moduł:",
@@ -107,7 +111,7 @@
"translate-checks-xhtml": "Zastąp {{PLURAL:$2|następujący znacznik prawidłowym|następujące znaczniki prawidłowymi}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "Tekst źródłowy wykorzystuje funkcję <nowiki>{{PLURAL:}}</nowiki>, lecz w tłumaczeniu nie została ona użyta.",
"translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> posiada {{PLURAL:$1|jedną formę|$1 formy|$1 form}} ale {{PLURAL:$2|tylko jedna forma jest obsługiwana|$2 formy są obsługiwane|$2 form jest obsługiwanych}} (z wyłączeniem form 0= i 1= ).",
- "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> posiada w końcu formy wielokrotne. <nowiki>{{PLURAL:$1|ojca|ojców|ojców}}</nowiki> powinien być pisany jako <nowiki>{{PLURAL:$1|ojca|ojców}}</nowiki>.",
+ "translate-checks-plural-dupe": "W <nowiki>{{PLURAL:}}</nowiki> podano pod koniec powtarzające się formy. <nowiki>{{PLURAL:$1|ojca|ojców|ojców}}</nowiki> powinno zapisać się jako <nowiki>{{PLURAL:$1|ojca|ojców}}</nowiki>.",
"translate-checks-pagename": "Przestrzeń nazw różni się od tekstu źródłowego",
"translate-checks-format": "To tłumaczenie jest niezgodne z tekstem źródłowym lub ma nieprawidłową składnię: $1",
"translate-checks-escape": "Następujące sekwencje mogą być niezamierzone: <strong>$1</strong>",
@@ -120,12 +124,22 @@
"translate-pref-editassistlang-help": "Lista kodów językowych rozdzielonych przecinkami.\nKomunikat w tych językach będzie widoczny podczas wykonywania tłumaczenia.\nDomyślna lista języków zależy od Twojego języka.",
"translate-pref-editassistlang-bad": "Na liście jest błędny kod języka –\n<nowiki>$1</nowiki>.",
"right-translate": "Edycja z użyciem interfejsu tłumaczeń",
+ "action-translate": "edytowania za pośrednictwem interfejsu tłumaczeń",
"right-translate-manage": "Zarządzanie grupami komunikatów",
"action-translate-manage": "zarządzania grupami komunikatów",
"right-translate-import": "Importowanie tłumaczeń wykonanych offline",
"action-translate-import": "importowanie tłumaczeń wykonanych offline",
"right-translate-messagereview": "Przeglądanie tłumaczeń",
+ "action-translate-messagereview": "przeglądanie tłumaczeń",
"right-translate-groupreview": "Zmiana status przepływu pracy dla grup komunikatów",
+ "action-translate-groupreview": "zmieniania statusu opracowania grup komunikatów",
+ "translate-rcfilters-translations": "Tłumaczenia",
+ "translate-rcfilters-translations-only-label": "Tłumaczenia",
+ "translate-rcfilters-translations-only-desc": "Zmiany na tłumaczonych stronach.",
+ "translate-rcfilters-translations-filter-label": "Bez tłumaczeń",
+ "translate-rcfilters-translations-filter-desc": "Wszystkie zmiany, które nie są tłumaczeniami.",
+ "translate-rcfilters-translations-site-label": "Komunikaty tej strony",
+ "translate-rcfilters-translations-site-desc": "Zmiany w komunikatach strony znajdujących się w przestrzeni nazw MediaWiki.",
"translate-rc-translation-filter": "Filtr tłumaczeń:",
"translate-rc-translation-filter-no": "nie filtruj",
"translate-rc-translation-filter-only": "pokaż tylko tłumaczenia",
@@ -141,19 +155,19 @@
"translate-statsf-options": "Opcje wykresu",
"translate-statsf-width": "Szerokość w pikselach",
"translate-statsf-height": "Wysokość w pikselach",
- "translate-statsf-days": "Data początkowa",
+ "translate-statsf-days": "Okres czasu w dniach:",
"translate-statsf-start": "Data początkowa:",
- "translate-statsf-scale": "Precyzja",
+ "translate-statsf-scale": "Podział:",
"translate-statsf-scale-months": "miesiące",
"translate-statsf-scale-weeks": "tygodnie",
"translate-statsf-scale-days": "dni",
"translate-statsf-scale-hours": "godziny",
- "translate-statsf-count": "Jednostka",
+ "translate-statsf-count": "Pomiar:",
"translate-statsf-count-edits": "liczba edycji",
"translate-statsf-count-users": "aktywni tłumacze",
"translate-statsf-count-registrations": "nowi użytkownicy",
- "translate-statsf-count-reviews": "Sprawdzenia tłumaczeń",
- "translate-statsf-count-reviewers": "Sprawdzający",
+ "translate-statsf-count-reviews": "sprawdzenia tłumaczeń",
+ "translate-statsf-count-reviewers": "sprawdzający",
"translate-statsf-language": "Kody języków rozdzielone przecinkami:",
"translate-statsf-group": "Kody grup rozdzielone przecinkami:",
"translate-statsf-submit": "Podgląd",
@@ -170,7 +184,7 @@
"translate-translations-including-no-param": "Podaj prawidłową nazwę strony w parametrze podstrony",
"translate-translations-history-short": "h",
"languagestats": "Statystyka językowa",
- "languagestats-summary": "Strona pokazuje statystykę tłumaczenia dla wszystkich grup komunikatów we wskazanym języku.",
+ "languagestats-summary": "Strona pokazuje statystyki tłumaczeń dla wszystkich grup komunikatów we wskazanym języku.",
"messagegroupstats-summary": "Ta strona pokazuje statystyki grupy komunikatów.",
"languagestats-stats-for": "Statystyki tłumaczenia na język $1 ($2).",
"languagestats-recenttranslations": "ostatnie tłumaczenia",
@@ -188,26 +202,29 @@
"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",
"translate-mgs-pagename": "Statystyki grupy komunikatów",
"translate-mgs-fieldset": "Preferencje wyświetlania",
"translate-mgs-group": "Grupa komunikatów",
- "translate-mgs-nocomplete": "Nie wyświetlaj języków dla których tłumaczenia zostały ukończone",
+ "translate-mgs-nocomplete": "Nie wyświetlaj języków, dla których tłumaczenia zostały ukończone",
"translate-mgs-noempty": "Nie wyświetlaj języków, dla których nie rozpoczęto tłumaczenia",
"translate-mgs-submit": "Pokaż statystyki",
"translate-mgs-column-language": "Język",
- "translate-mgs-totals": "Wszystkie języki razem",
+ "translate-mgs-totals": "Razem {{PLURAL:$1|we wszystkich $1 językach|w jednym języku}}",
"translate-mgs-invalid-group": "Nie istnieje grupa „$1“.",
"translate-mgs-nothing": "Brak czegokolwiek do wyświetlenia dla żądanych statystyk.",
"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}}.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edycja|edycje|edycji}} – ostatnia zmiana $3 {{PLURAL:$3|dzień|dni}} temu",
+ "abusefilter-edit-builder-vars-translate-source-text": "Tekst źródłowy jednostki tłumaczeniowej",
"translate-save": "Zapisz ($1)",
"translate-jssti-add": "Dodaj do listy",
"managemessagegroups": "Zarządzanie grupami komunikatów",
@@ -248,9 +265,7 @@
"translate-js-summary": "Podsumowanie:",
"translate-js-save": "Zapisz",
"translate-js-next": "Zapisz i otwórz następny",
- "translate-js-nonext": "To był ostatni komunikat na tej stronie.",
"translate-js-skip": "Przejdź do następnego",
- "translate-js-save-failed": "Zapisywanie nie powiodło się. Powiadom o wystąpieniu błędu.",
"translate-js-history": "Historia tłumaczeń",
"translate-js-support": "Zadaj pytanie",
"translate-js-support-title": "Poproś o pomoc, jeśli brak jest wystarczających informacji, aby przetłumaczyć ten komunikat właściwie.",
@@ -267,23 +282,11 @@
"translate-documentation-language": "opis komunikatu",
"translate-searchprofile": "Tłumaczenia",
"translate-searchprofile-tooltip": "Szukaj we wszystkich tłumaczeniach",
+ "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",
- "translate-messagereview-submit": "Oznacz jako przejrzane",
- "translate-messagereview-progress": "Oznaczanie jako przejrzane...",
- "translate-messagereview-failure": "Oznaczanie jako przejrzane nie powiodło się: $1",
- "translate-messagereview-done": "Przejrzano",
- "translate-messagereview-reviews": "Przejrzane przez {{PLURAL:$1|jednego użytkownika|$1 użytkowników}}",
- "translate-messagereview-reviewswithyou": "Przejrzane przez {{PLURAL:$1|Ciebie|$1 użytkowników, między innymi przez Ciebie}}",
- "api-error-invalidrevision": "nie można odnaleźć tłumaczenia",
- "api-error-unknownmessage": "nie można odnaleźć komunikatu",
- "api-error-fuzzymessage": "tłumaczenie oznaczone zostało jako niepewne",
- "api-error-owntranslation": "Nie możesz oznaczyć własnych tłumaczeń jako przejrzane",
- "translate-messagereview-no-fuzzy": "Tłumaczenia rozmyte nie mogą być oznaczone jako przejrzane.",
- "translate-messagereview-no-own": "Nie możesz oznaczyć własnych tłumaczeń jako przejrzane.",
- "translate-messagereview-doit": "Oznacz to tłumaczenie jako przejrzane.",
- "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",
@@ -303,7 +306,6 @@
"translate-dynagroup-recent-desc": "Ta grupa komunikatów zawiera wszystkie ostatnie tłumaczenia na ten język.\nJest najbardziej użyteczna do zadań przeglądania.",
"translate-dynagroup-additions-label": "Ostatnio dodane",
"translate-dynagroup-additions-desc": "Ta grupa komunikatów wyświetla nowe i zmienione komunikaty.",
- "translate-gethelp": "Pomoc",
"translate-msggroupselector-projects": "Grupa komunikatów",
"translate-msggroupselector-search-placeholder": "Szukaj grup",
"translate-msggroupselector-search-all": "Wszystko",
@@ -322,7 +324,9 @@
"tux-status-translated": "Przetłumaczony",
"tux-status-saving": "Zapisywanie...",
"tux-status-unsaved": "Niezapisane",
+ "tux-save-unknown-error": "Wystąpił nieznany błąd.",
"tux-editor-placeholder": "Twoje tłumaczenie",
+ "tux-editor-editsummary-placeholder": "Opcjonalne podsumowanie",
"tux-editor-paste-original-button-label": "Wklej tekst źródłowy",
"tux-editor-discard-changes-button-label": "Porzuć zmiany",
"tux-editor-save-button-label": "Zapisz tłumaczenie",
@@ -330,7 +334,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 \"$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",
@@ -359,15 +363,15 @@
"tux-editor-doc-editor-cancel": "Anuluj",
"tux-messagetable-more-messages": "$1 {{PLURAL:$1|kolejny komunikat|kolejne komunikaty|kolejnych komunikatów}}",
"tux-messagetable-loading-messages": "Ładowanie {{PLURAL:$1|komunikatu|komunikatów}}...",
- "tux-message-filter-placeholder": "Lista filtrów",
+ "tux-message-filter-placeholder": "Filtruj listę",
"tux-message-filter-result": "Znaleziono $1 {{PLURAL:$1|wynik|wyników}}, dla \"$2\"",
"tux-message-filter-advanced-button": "Zaawansowane wyszukiwanie",
"tux-message-filter-optional-messages-label": "Komunikaty opcjonalne",
- "tux-proofread-translated-by-self": "Przetłumaczone przez ciebie",
+ "tux-proofread-translated-by-self": "Przetłumaczone przez Ciebie",
"tux-empty-list-all": "Ta grupa komunikatów jest pusta",
"tux-empty-list-all-guide": "Wybierz inną grupę komunikatów do przetłumaczenia",
"tux-translate-page-no-such-group": "<strong>Ta grupa nie istnieje.</strong> Wybierz inną grupę komunikatów.",
- "tux-empty-list-translated": "Brak przetłumaczonych wiadomości",
+ "tux-empty-list-translated": "Brak przetłumaczonych komunikatów",
"tux-empty-list-translated-guide": "Możesz pomóc tłumaczyć",
"tux-empty-list-translated-action": "Przetłumacz",
"tux-empty-no-messages-to-display": "Nie ma komunikatów do wyświetlenia.",
@@ -385,9 +389,11 @@
"tux-editor-close-tooltip": "Zamknij",
"tux-editor-expand-tooltip": "Rozwiń",
"tux-editor-collapse-tooltip": "Zwiń",
+ "tux-editor-message-tools-show-editor": "Pokaż w zwykłym edytorze wiki",
"tux-editor-message-tools-history": "Historia",
"tux-editor-message-tools-delete": "Usuń",
"tux-editor-message-tools-translations": "Wszystkie tłumaczenia",
+ "tux-editor-message-tools-linktothis": "Link do tego komunikatu",
"tux-editor-loading": "Ładowanie...",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|język|języków}} więcej",
"translate-statsbar-tooltip": "$1% przetłumaczono, $2% przejrzano",
@@ -395,6 +401,6 @@
"translate-search-more-groups-info": "$1 więcej {{PLURAL:$1|grupa|grup}}",
"translate-ulsdep-title": "Błąd konfiguracji",
"translate-ulsdep-body": "Rozszerzenie tłumaczeń jest zależne od [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector rozszerzenia Uniwersalny Selektor Języka].",
- "tux-session-expired": "Nie jesteś już zalogowany. Zaloguj się w osobnej karcie. Alternatywnie, możesz wykonać kopię niezapisanych tłumaczeń, zalogować się i powrócić do tej strony.",
- "tux-nojs": "Ta strona wymaga włączonej obsługi JavaScriptu."
+ "tux-session-expired": "Nie jesteś już zalogowany. Zaloguj się w osobnej karcie. Alternatywnie, możesz wykonać kopię niezapisanych tłumaczeń, zalogować się i powrócić do tej strony, a następnie ponownie wprowadzić tłumaczenia.",
+ "tux-nojs": "To narzędzie nie działa, jeżeli nie działa obsługa JavaScript. Jest u ciebie wyłączona, nie działa lub ta przeglądarka nie jest wspierana."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/pms.json b/www/wiki/extensions/Translate/i18n/core/pms.json
index 264f696f..0274a99e 100644
--- a/www/wiki/extensions/Translate/i18n/core/pms.json
+++ b/www/wiki/extensions/Translate/i18n/core/pms.json
@@ -8,11 +8,6 @@
},
"translate": "Viragi",
"translate-desc": "[[Special:Translate|Pàgina special]] për le tradussion ëd MediaWiki e ancor ëd pì",
- "translate-taskui-view": "Smon-e tùit ij mëssagi",
- "translate-taskui-untranslated": "Smon-e ij mëssagi nen voltà",
- "translate-taskui-optional": "Smon-e ij mëssagi opsionaj.",
- "translate-taskui-acceptqueue": "Mach ij mëssagi che i peuss aceté",
- "translate-taskui-reviewall": "Revision-a tute le tradussion",
"translate-taskui-export-to-file": "Esporté an formà nativ",
"translate-taskui-export-as-po": "Esporté da le tradussion fòra linia",
"translate-taction-translate": "Volté",
@@ -41,7 +36,6 @@
"translate-page-description-hasoptional": "Sta partìa ëd mëssagi a conten ij mëssagi opsionaj.\nIj Mëssagi opsionaj a dovrìo mach esse voltà quand che soa lenga a l'ha dj'esigense speciaj com ëd nen dovré dë spassi o an trasliteré dij nòm pròpi. $1",
"translate-page-description-hasoptional-open": "Smon-e ij mëssagi opsionaj.",
"translate-page-edit": "modifiché",
- "translate-ext-url": "<hr />Sit an sl'aragnà: $1",
"translate-optional": "(opsional)",
"translate-ignored": "(ignorà)",
"translate-edit-title": "Modìfica \"$1\"",
@@ -51,9 +45,7 @@
"translate-edit-no-information": "''Ës mëssagi a l'ha gnun-a documentassion.\nS'a sa andoa o coma 's mëssagi a l'é dovrà, a peul giuté d'àutri tradutor an giontant dla documentassion a cost mëssagi.''",
"translate-edit-information": "Anformassion an sël mëssagi ($1)",
"translate-edit-in-other-languages": "Mëssagi an d'àutre lenghe",
- "translate-edit-committed": "Tradussion corenta ant ël programa",
"translate-edit-warnings": "Avertensa an sle tradussion incomplete",
- "translate-edit-tmsugs": "Sugeriment da le tradussion an memòria",
"translate-edit-tmmatch-source": "Test sorgiss dla tradussion: $1",
"translate-edit-tmmatch": "corëspondensa ëd $1%",
"translate-use-suggestion": "Rampiassé la tradussion corenta con cost sugeriment.",
@@ -136,7 +128,6 @@
"translate-statsf-language": "Lista dij còdes ëd le lenghe separà da 'd vìrgole:",
"translate-statsf-group": "Lista ëd còdes ëd partìe separà da 'd vìrgole:",
"translate-statsf-submit": "Preuva",
- "translate-tag-category": "Pàgine voltàbij",
"translate-tag-page-desc": "Tradussion dla pàgina wiki [[$2|$1]].",
"translate-sidebar-alltrans": "Ant j'àutre lenghe",
"translations": "Tute le tradussion",
@@ -209,7 +200,6 @@
"translate-manage-toolong": "Passà ël temp màssim ëd tratament ëd $1 {{PLURAL:$1|second|second}}.\nPër piasì, ch'a spedissa torna ël formolari për continué ël process.",
"translate-manage-import-summary": "Amportassion ëd na neuva version da na sorgiss esterna",
"translate-manage-conflict-summary": "Amportassion ëd na neuva version da na sorgiss esterna.\nPër piasì, ch'a controla.",
- "translate-manage-fuzzy-summary": "La definission dël mëssagi a l'é cangià",
"translate-manage-submit": "Fé andé",
"translate-manage-intro-other": "Sota a-i é na lista ëd cangiament ëd le tradussion ant la lenga $1.\nPër piasì, ch'a revision-a ij cangiament e ch'a serna n'assion ch'a veul fé për minca tradussion.\nS'a sern d'ignoré ij cangiament, a saran coatà durant l'esportassion ch'a-i ven.",
"translate-manage-import-ok": "Amportà na neuva version ëd la pàgina $1.",
@@ -227,9 +217,7 @@
"translate-js-summary": "Resumé:",
"translate-js-save": "Salva",
"translate-js-next": "Salvé e duverté col apress",
- "translate-js-nonext": "Cost a l'era l'ùltim mëssagi dzora a sta pàgina-sì.",
"translate-js-skip": "Sàuta a col ch'a ven",
- "translate-js-save-failed": "Salvatagi falì. Për piasì arpòrta sto eror-sì.",
"translate-js-history": "Stòria dël viragi",
"translate-js-support": "Ciama",
"translate-js-support-title": "Ch'a ciama d'agiut s'a-i é pa basta d'anformassion për volté bin cost mëssagi.",
@@ -248,19 +236,6 @@
"translate-searchprofile-tooltip": "Sërché an tute le tradussion",
"translate-search-languagefilter": "Filtra për lenga:",
"translate-search-nofilter": "Filtra pa",
- "translate-messagereview-submit": "Aceté",
- "translate-messagereview-progress": "An cors d'acetassion...",
- "translate-messagereview-failure": "Acetassion... falìa: $1",
- "translate-messagereview-done": "Acetà",
- "translate-messagereview-reviews": "Acetà da {{PLURAL:$1|un utent|$1 utent}}",
- "translate-messagereview-reviewswithyou": "Acetà da {{PLURAL:$1|ti|$1 utent comprèis ti}}",
- "api-error-invalidrevision": "Tradussion pa trovà",
- "api-error-unknownmessage": "Mëssagi pa trovà",
- "api-error-fuzzymessage": "La tradussion a l'é marcà com tërbol",
- "api-error-owntranslation": "It peule pa aceté toe pròpie tradussion",
- "translate-messagereview-no-fuzzy": "Lë tradussion tërboj a peulo pa esse acetà.",
- "translate-messagereview-no-own": "It peule pa aceté toe pròpie tradussion.",
- "translate-messagereview-doit": "Aceta sta tradussion com na tradussion giusta.",
"log-name-translationreview": "Registr dle revision ëd tradussion",
"log-description-translationreview": "Registr ëd tute le revision a le tradussion e a le partìe ëd mëssagi.",
"logentry-translationreview-message": "$1 {{GENDER:$2|a l'ha acetà}} la tradussion $3",
@@ -275,7 +250,6 @@
"translate-dynagroup-recent-desc": "Sta partìa ëd mëssagi a smon tute le tradussion recente an costa lenga.\nA ven dzortut a taj con ij travaj ëd revision.",
"translate-dynagroup-additions-label": "Gionte recente",
"translate-dynagroup-additions-desc": "Costa partìa ëd mëssagi a smon dij mëssagi neuv e modificà.",
- "translate-gethelp": "Agiut",
"translate-msggroupselector-projects": "Partìa ëd mëssagi",
"translate-msggroupselector-search-placeholder": "Sërché le partìe",
"translate-msggroupselector-search-all": "Tùit",
diff --git a/www/wiki/extensions/Translate/i18n/core/pnb.json b/www/wiki/extensions/Translate/i18n/core/pnb.json
index 93dd48af..598fb352 100644
--- a/www/wiki/extensions/Translate/i18n/core/pnb.json
+++ b/www/wiki/extensions/Translate/i18n/core/pnb.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Khalid Mahmood"
+ "Khalid Mahmood",
+ "Abbas dhothar"
]
},
"translate": "ترجمعہ",
@@ -13,5 +14,5 @@
"translate-page-showing-none": "وکھانے آسطے کوئی سنیعا نئیں۔",
"translate-next": "اگلا صفحہ",
"translate-page-description-legend": "ٹولی دے بارے چ معلومات",
- "translate-documentation-language": "سنیعہ لکھت"
+ "translate-documentation-language": "سنیہہ دستاویز"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ps.json b/www/wiki/extensions/Translate/i18n/core/ps.json
index f3adfbcc..2288f99b 100644
--- a/www/wiki/extensions/Translate/i18n/core/ps.json
+++ b/www/wiki/extensions/Translate/i18n/core/ps.json
@@ -2,14 +2,12 @@
"@metadata": {
"authors": [
"Ahmed-Najib-Biabani-Ibrahimkhel",
- "Waldir"
+ "Waldir",
+ "Baloch Khan",
+ "Amjad Khan"
]
},
"translate": "ژباړل",
- "translate-taskui-view": "ټول پيغامونه ښکاره کول",
- "translate-taskui-untranslated": "ناژباړلي پيغامونه ښکاره کول",
- "translate-taskui-optional": "اختياري پيغامونه ښکاره کول",
- "translate-taskui-reviewall": "ټولې ژباړې بياکتل",
"translate-taction-translate": "ژباړل",
"translate-taction-proofread": "بياکتنه",
"translate-taction-lstats": "د ژبې شمار",
@@ -35,7 +33,6 @@
"translate-page-description-legend": "د ډلې په اړه مالومات",
"translate-page-description-hasoptional-open": "اختياري پيغامونه ښکاره کول.",
"translate-page-edit": "سمول",
- "translate-ext-url": "<hr />وېبځی: $1",
"translate-optional": "(اختياري)",
"translate-ignored": "(بابېزه گڼل شوی)",
"translate-edit-title": "\"$1\" سمول",
@@ -44,10 +41,10 @@
"translate-edit-contribute": "ونډه اخيستل",
"translate-edit-information": "د پيغام په اړه مالومات ($1)",
"translate-edit-in-other-languages": "پيغام په نورو ژبو کې",
- "translate-edit-committed": "په ساوترې کې اوسنۍ ژباړه",
"translate-edit-warnings": "د نابشپړه ژباړو په اړه گواښنې",
"translate-edit-tmmatch-source": "د ژباړې د سرچينې متن: $1",
"translate-edit-askpermission": "پرېښه اخيستل",
+ "translate-export-form-format": "بڼه",
"translate-magic-help": "تاسې د ځانگړو مخونو مستعار نومونه، کوډگر وييونه او د نوم-تشيال نومونه ژباړلی شی.\n\nد ځانگړو مخونو مستعار نومونه او کوډگر وييونه گڼ شمېر ژباړې لري.\nژباړې د کامې (,) په کارېدلو سره يو له بل نه بېلې شوي.\nنوم-تشيالونه يواځې يوه ژباړه لرلی شي.\n\nد پروژې د خبرو اترو نوم-تشيال په ژباړو کې <code>$1 talk</code> کېدای شي پېچلی شي. <code>$1</code> د پروژې وېبځي په نوم ځايناستل کېږي (د بېلگې په توگه <code>{{ns:project_talk}}</code>).\nکه چېرته دا ستاسې په ژبه کې شونی نه وي چې د وېبځي د نوم بدلون نه پرته يوه سمه اصطلاح رامېنځ ته شي، نو لطفاً د يوه پروگرامر سره په [[ملاتړ]] کې اړيکه ونيسۍ.\n\nد بدلونونو د خوندي کولو لپاره پکار ده چې تاسې د ژباړنانو په ډله کې اوسۍ.\nبدلونونه به تر هغه وخت پورې نه خوندي کېږي څو چې تاسې لاندې د خوندي کولو تڼۍ نه وي کېښکاږلې.",
"translate-magic-module": "رغبېلگه:",
"translate-magic-submit": "راغونډول",
@@ -68,6 +65,8 @@
"right-translate-import": "بې ليکې ژباړې راوستل",
"action-translate-import": "بې ليکې ژباړې راوستل",
"right-translate-messagereview": "ژباړې بياکتل",
+ "translate-rcfilters-translations-filter-label": "ژباړې نه",
+ "translate-rcfilters-translations-filter-desc": "ټول هغه بدلونونه کوم چې ژباړې نه دي.",
"translate-rc-translation-filter": "ژباړې چاڼول:",
"translate-rc-translation-filter-no": "هېڅ مه کوئ",
"translate-rc-translation-filter-only": "يوازې ژباړې ښکاره کول",
@@ -96,7 +95,6 @@
"translate-statsf-count-reviews": "د ژباړو بياکتنې",
"translate-statsf-count-reviewers": "مخکتونکي",
"translate-statsf-submit": "مخليدنه",
- "translate-tag-category": "د ژباړې وړ مخونه",
"translate-sidebar-alltrans": "په نورو ژبو کې",
"translations": "ټولې ژباړې",
"translate-translations-no-message": "\"$1\" يو ژباړل وړ پيغام نه دی",
@@ -134,8 +132,10 @@
"supportedlanguages-recenttranslations": "تازه ژباړې",
"supportedlanguages-count": "ټولټال $1 {{PLURAL:$1|ژبه|ژبې}}.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|سمون|سمونونه}} - وروستی سمون $3 {{PLURAL:$3|ورځ|ورځې}} دمخه",
+ "abusefilter-edit-builder-vars-translate-source-text": "د ژباړې يوون د سرچينې متن",
"translate-save": "خوندي کول ($1)",
"translate-jssti-add": "لړليک کې گډول",
+ "managemessagegroups": "د پیغام ګروپ مدیریت",
"translate-manage-import-new": "نوی پيغام $1",
"translate-manage-import-deleted": "ړنگ شوی پيغام $1",
"translate-manage-action-import": "رالېږدول",
@@ -146,7 +146,6 @@
"translate-import-err-invalid-title": "د ورکړل شوې دوتنې نوم <nowiki>$1</nowiki> ناسم و.",
"translate-js-summary": "لنډيز:",
"translate-js-save": "خوندي کول",
- "translate-js-nonext": "په دې مخ دا وروستی پيغام وو",
"translate-js-skip": "بل ته ورتېرېدل",
"translate-js-history": "د ژباړې پېښليک",
"translate-js-support": "پوښتنه پوښتل",
@@ -159,13 +158,6 @@
"translate-searchprofile": "ژباړې",
"translate-searchprofile-tooltip": "په ټولو ژباړو کې پلټل",
"translate-search-languagefilter": "چاڼگر د ژبې له مخې:",
- "translate-messagereview-submit": "بياکتل شوی په نښه کول",
- "translate-messagereview-progress": "بياکتل شوي په توگه په نښه کېږي...",
- "translate-messagereview-done": "بياکتل شوی",
- "translate-messagereview-reviews": "د {{PLURAL:$1|يوه کارن|$1 کارنانو}} لخوا بياکتل شوی",
- "api-error-invalidrevision": "ژباړه و نه موندل شوه",
- "api-error-unknownmessage": "پيغام و نه موندل شو",
- "translate-messagereview-doit": "دا ژباړه د بياکتل شوي په توگه په نښه کول.",
"log-name-translationreview": "د ژباړې د بياکتنې يادښت",
"logentry-translationreview-message": "$1 د $3 د ژباړو {{GENDER:$2|بياکتنه وکړه}}",
"group-translate-sandboxed": "ناتاييد شوي ژباړونکي",
@@ -175,7 +167,6 @@
"translate-stats-workflow": "دريځ",
"translate-dynagroup-recent-label": "تازه ژباړې",
"translate-dynagroup-additions-label": "تازه ورگډېدنې",
- "translate-gethelp": "لارښود",
"translate-msggroupselector-projects": "پيغام ډله",
"translate-msggroupselector-search-placeholder": "ډلې پلټل",
"translate-msggroupselector-search-all": "ټول",
@@ -191,6 +182,7 @@
"tux-status-saving": "خوندي کېږي...",
"tux-status-unsaved": "ناخوندي",
"tux-editor-placeholder": "ستاسې ژباړه",
+ "tux-editor-editsummary-placeholder": "اختياري لنډيز",
"tux-editor-paste-original-button-label": "د سرچينې متن لېښل",
"tux-editor-discard-changes-button-label": "بدلونونه غورځول",
"tux-editor-save-button-label": "ژباړه خوندي کول",
diff --git a/www/wiki/extensions/Translate/i18n/core/pt-br.json b/www/wiki/extensions/Translate/i18n/core/pt-br.json
index 01df47b5..fce9af3c 100644
--- a/www/wiki/extensions/Translate/i18n/core/pt-br.json
+++ b/www/wiki/extensions/Translate/i18n/core/pt-br.json
@@ -14,25 +14,24 @@
"Caio1478",
"Fabsouza1",
"He7d3r",
- "Eduardo Addad de Oliveira"
+ "Eduardo Addad de Oliveira",
+ "Felipe L. Ewald",
+ "TheEduGobi"
]
},
"translate": "Traduzir",
+ "translate-extensionname": "Traduzir",
"translate-desc": "[[Special:Translate|Página especial]] para traduzir o MediaWiki e mais",
- "translate-taskui-view": "Exibir todas as mensagens",
- "translate-taskui-untranslated": "Exibir mensagens ainda não traduzidas",
- "translate-taskui-optional": "Exibir mensagens opcionais",
- "translate-taskui-acceptqueue": "Apenas as mensagens que eu posso marcar como revisadas",
- "translate-taskui-reviewall": "Revisar todas as traduções",
+ "translate-fuzzybot-desc": "Esta é uma conta de sistema especial utilizada pela extensão de [https://www.mediawiki.org/wiki/Extension:Translate/pt-br Tradução] do MediaWiki, para manter as traduções.\nEsta conta faz parte do programa MediaWiki e não pertence a nenhum usuário.",
"translate-taskui-export-to-file": "Exportar no formato nativo",
"translate-taskui-export-as-po": "Exportar para tradução off-line",
- "translate-taction-translate": "Traduções",
+ "translate-taction-translate": "Traduzir",
"translate-taction-proofread": "Revisar",
"translate-taction-lstats": "Estatísticas de idiomas",
- "translate-taction-mstats": "Estatísticas por grupo de mensagens",
+ "translate-taction-mstats": "Estatísticas do grupo de mensagens",
"translate-taction-export": "Exportar",
"translate-taction-disabled": "Esta ação está desativada neste wiki.",
- "translate-page-no-such-language": "O idioma especificado é inválido",
+ "translate-page-no-such-language": "O idioma especificado é inválido.",
"translate-page-no-such-group": "O grupo especificado é inválido.",
"translate-page-disabled": "As traduções para este idioma, neste grupo, foram desabilitadas.\nMotivo:\n\n<em>$1</em>",
"translate-language-disabled": "As traduções para este idioma estão desativadas.",
@@ -41,18 +40,18 @@
"translate-page-language": "Idioma",
"translate-page-limit": "Limite",
"translate-page-limit-option": "$1 {{PLURAL:$1|mensagem|mensagens}} por página",
- "translate-submit": "Mostrar",
+ "translate-submit": "Obter",
"translate-page-navigation-legend": "Navegação",
"translate-page-showing": "Mostrando as mensagens de $1 a $2 de $3.",
"translate-page-showing-all": "Exibindo $1 {{PLURAL:$1|mensagem|mensagens}}.",
"translate-page-showing-none": "Não há mensagens a serem exibidas.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "Próxima página",
"translate-prev": "Página anterior",
"translate-page-description-legend": "Informação sobre o grupo",
"translate-page-description-hasoptional": "Este grupo de mensagens possui mensagens opcionais.\nAs mensagens opcionais deverão ser traduzidas apenas quando o seu idioma possuir características especiais\ntais como não usar espaços ou transliterar nomes próprios. $1",
"translate-page-description-hasoptional-open": "Exibir mensagens opcionais.",
"translate-page-edit": "editar",
- "translate-ext-url": "<hr />Website: $1",
"translate-optional": "(opcional)",
"translate-ignored": "(ignorada)",
"translate-edit-title": "Editar \"$1\"",
@@ -62,18 +61,21 @@
"translate-edit-no-information": "<em>Esta mensagem ainda não foi documentada.\nCaso você saiba onde ou como ela é utilizada, poderá ajudar outros tradutores adicionando informações sobre esta mensagem.</em>",
"translate-edit-information": "Informações sobre a mensagem ($1)",
"translate-edit-in-other-languages": "Esta mensagem em outros idiomas",
- "translate-edit-committed": "Tradução disponível no software",
"translate-edit-warnings": "Avisos sobre traduções incompletas",
- "translate-edit-tmsugs": "Sugestões da memória de traduções e de traduções mecânicas",
"translate-edit-tmmatch-source": "Texto de origem da tradução: $1",
"translate-edit-tmmatch": "$1% coincidente",
"translate-use-suggestion": "Substituir a tradução atual por esta sugestão.",
"translate-edit-nopermission": "Você precisa ter direitos de tradução para traduzir mensagens.",
"translate-edit-askpermission": "Obter permissão",
+ "exporttranslations": "Exportar traduções",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Por favor, especifique um formato válido.",
+ "translate-export-not-supported": "A exportação de tradução não é suportada.",
+ "translate-export-format-notsupported": "O formato de exportação especificado não é suportado pelo grupo de mensagens.",
"translate-magic-pagename": "Tradução avançada do MediaWiki",
"translate-magic-help": "Você pode traduzir nomes alternativos de páginas especiais, palavras mágicas e espaços nominais.\n\nOs nomes alternativos de páginas especiais e palavras mágicas podem receber múltiplas traduções.\nAs traduções são separadas por vírgulas (,).\nNomes de espaços nominais podem receber apenas uma tradução.\n\nAs traduções de espaços nominais de discussão de projeto <code>$1 talk</code> podem ser complexas.\n<code>$1</code> é substituído pelo nome do site (por exemplo, <code>{{ns:project_talk}}</code>).\nSe no seu idioma não é possível formar expressões válidas sem alterar o nome do site, contate-nos em [[Support]].\n\nÉ necessário pertencer ao grupo de tradutores para conseguir salvar as alterações.\nAs alterações não serão salvas até que você clique no botão de salvar ao final do formulário.",
"translate-magic-module": "Módulo:",
- "translate-magic-submit": "Mostrar",
+ "translate-magic-submit": "Obter",
"translate-magic-cm-export": "Exportar",
"translate-magic-nothing-to-export": "Não há o que exportar.",
"translate-magic-cm-to-be": "Alterações",
@@ -88,11 +90,11 @@
"translate-magic-namespace": "Nomes de espaços nominais",
"translate-magic-notsaved": "Sua edição não foi salva!",
"translate-magic-errors": "Corrija, na tradução, {{PLURAL:$1|o erro a seguir|os erros a seguir}}:",
- "translate-magic-saved": "Suas alterações foram salvas com êxito.",
+ "translate-magic-saved": "Suas alterações foram salvas.",
"translate-checks-parameters": "{{PLURAL:$2|O parâmetro|Os parâmetros}} a seguir não {{PLURAL:$2|é usado|são usados}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|O parâmetro|Os parâmetros}} a seguir {{PLURAL:$2|é desconhecido|são desconhecidos}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Há {{PLURAL:$2|um parênteses irregular|$2 parênteses irregulares}}: <strong><nowiki>$1</nowiki></strong>",
- "translate-checks-links": "{{PLURAL:$2|O link a seguir é|Os $2 links a seguir são}} problemáticos:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|O link a seguir é problemático|Os $2 links a seguir são problemáticos}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "{{PLURAL:$2|O seguinte link está|Os $2 seguintes links estão}} faltando:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Corrija {{PLURAL:$2|a seguinte tag pela correta|as seguintes tags}}:\n<strong>$1</strong>",
"translate-checks-plural": "A definição usa <nowiki>{{PLURAL:}}</nowiki>, mas a tradução não.",
@@ -110,12 +112,22 @@
"translate-pref-editassistlang-help": "Liste os idiomas, separados por vírgulas.\nQuando você estiver traduzindo, as traduções nos idiomas aqui definidos também serão exibidas.\nOs idiomas padrão deste recurso variam de acordo com a língua de sua interface.",
"translate-pref-editassistlang-bad": "A listagem possui códigos de idioma inválidos:\n<nowiki>$1</nowiki>.",
"right-translate": "Editar usando a interface de tradução",
+ "action-translate": "editar usando a interface de tradução",
"right-translate-manage": "Gerenciar grupos de mensagens",
"action-translate-manage": "gerenciar grupos de mensagens",
"right-translate-import": "Importar traduções offline",
"action-translate-import": "importar traduções off-line",
"right-translate-messagereview": "Revisar traduções",
+ "action-translate-messagereview": "revisar traduções",
"right-translate-groupreview": "Alterar estado do fluxo de trabalho de grupos de mensagens",
+ "action-translate-groupreview": "alterar o estado do fluxo de trabalho dos grupos de mensagens",
+ "translate-rcfilters-translations": "Traduções",
+ "translate-rcfilters-translations-only-label": "Traduções",
+ "translate-rcfilters-translations-only-desc": "Alterações para páginas traduzidas.",
+ "translate-rcfilters-translations-filter-label": "Não traduções",
+ "translate-rcfilters-translations-filter-desc": "Todas as alterações que não são de traduções.",
+ "translate-rcfilters-translations-site-label": "Mensagens de sistema",
+ "translate-rcfilters-translations-site-desc": "Personalizações das mensagens de sistema no espaço nominal MediaWiki.",
"translate-rc-translation-filter": "Filtrar traduções:",
"translate-rc-translation-filter-no": "Não filtrar",
"translate-rc-translation-filter-only": "Mostrar somente traduções",
@@ -125,7 +137,7 @@
"translate-stats-edits": "Edições",
"translate-stats-users": "Tradutores",
"translate-stats-registrations": "Registros",
- "translate-stats-reviews": "Revisões",
+ "translate-stats-reviews": "Análises",
"translate-stats-reviewers": "Revisores",
"translate-statsf-intro": "É possível gerar estatísticas simples a partir deste formulário.\nTodos os valores têm limites máximos e mínimos.",
"translate-statsf-options": "Opções do gráfico",
@@ -147,9 +159,8 @@
"translate-statsf-language": "Códigos de idiomas, separados por vírgulas:",
"translate-statsf-group": "Códigos de grupos, separados por vírgulas:",
"translate-statsf-submit": "Visualizar",
- "translate-tag-category": "Páginas traduzíveis",
- "translate-tag-page-desc": "Tradução da página wiki [[$2|$1]].",
- "translate-sidebar-alltrans": "Em outras línguas",
+ "translate-tag-page-desc": "Tradução da página wiki [[$2|$1]] de $3 ($4).",
+ "translate-sidebar-alltrans": "Em outros idiomas",
"translations": "Todas as traduções",
"translations-summary": "Insira abaixo o nome de uma mensagem para mostrar todas as traduções disponíveis.",
"translate-translations-no-message": "\"$1\" não é uma mensagem traduzível",
@@ -170,7 +181,7 @@
"translate-langstats-collapse": "recolher",
"translate-langstats-expandall": "expandir todas",
"translate-langstats-collapseall": "recolher todas",
- "translate-language-code": "Configurações de idioma",
+ "translate-language-code": "Código do idioma",
"translate-language-code-field-name": "Código do idioma:",
"translate-suppress-complete": "Omitir grupos de mensagens completamente traduzidos",
"translate-ls-noempty": "Omitir os grupos de mensagens sem tradução iniciada",
@@ -179,6 +190,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",
@@ -187,18 +199,22 @@
"translate-mgs-group": "Grupo de mensagens:",
"translate-mgs-nocomplete": "Ocultar idiomas com traduções completas",
"translate-mgs-noempty": "Ocultar idiomas sem traduções",
- "translate-mgs-submit": "Ver estatísticas",
+ "translate-mgs-submit": "Mostrar estatísticas",
"translate-mgs-column-language": "Idioma",
- "translate-mgs-totals": "Soma de todos os idiomas",
+ "translate-mgs-totals": "{{PLURAL:$1|A língua em conjunto|Todas as $1 línguas em conjunto}}",
"translate-mgs-invalid-group": "O grupo especificado ($1) não existe.",
"translate-mgs-nothing": "Sem dados para as estatísticas solicitadas.",
"supportedlanguages": "Idiomas suportados",
- "supportedlanguages-summary": "Esta página apresenta uma lista de todas as línguas suportadas por {{SITENAME}},\njunto dos respectivos nomes dos tradutores de cada idioma.\nQuanto maior for exibido um nome, com mais traduções a pessoa terá contribuído.\nA cor do sublinhado é um indicativo de atividades recentes do usuário.",
+ "supportedlanguages-summary": "Esta página apresenta uma lista de todas os idiomas suportados por {{SITENAME}},\njunto dos respectivos nomes dos tradutores de cada idioma.\nQuanto maior for exibido um nome, com mais traduções a pessoa terá contribuído.\nA cor do sublinhado é um indicativo de atividades recentes do usuário.",
"supportedlanguages-colorlegend": "Legenda: última tradução $1 dias atrás.",
- "supportedlanguages-translators": "{{PLURAL:$2|Tradutor|Tradutores}}: $1",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "O SQLite não é suportado",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tradutor|Tradutora}}|Tradutores}}: $1",
"supportedlanguages-recenttranslations": "traduções recentes",
"supportedlanguages-count": "$1 {{PLURAL:$1|idioma|idiomas}} ao todo.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edição|edições}} - a última edição foi há $3 {{PLURAL:$3|dia|dias}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texto original da unidade de tradução",
"translate-save": "Salvar ($1)",
"translate-jssti-add": "Adicionar à lista",
"managemessagegroups": "Gerenciamento de grupos de mensagens",
@@ -222,7 +238,6 @@
"translate-manage-toolong": "Foi excedido o tempo máximo de $1 {{PLURAL:$1|segundo|segundos}} de processamento.\nReenvie o formulário para continuar processando.",
"translate-manage-import-summary": "Importando uma nova versão a partir de fonte externa",
"translate-manage-conflict-summary": "Importando uma nova versão a partir de fonte externa.\nVerifique-a, por favor.",
- "translate-manage-fuzzy-summary": "A definição da mensagem sofreu alterações",
"translate-manage-submit": "Executar",
"translate-manage-intro-other": "Abaixo está a lista de mudanças de tradução no idioma $1.\nPor favor, revise essas mudanças e escolha uma ação para cada atualização.\nSe optar por ignorar as alterações, esta ação é apenas temporária.",
"translate-manage-import-ok": "Importado: $1",
@@ -231,7 +246,7 @@
"translate-import-from-local": "Enviar arquivo local:",
"translate-import-load": "Enviar arquivo",
"translate-import-err-dl-failed": "Não foi possível obter o arquivo:\n$1",
- "translate-import-err-ul-failed": "O envio do arquivo não foi bem sucedido",
+ "translate-import-err-ul-failed": "O upload do arquivo falhou",
"translate-import-err-invalid-title": "Foi fornecido um nome inválido para o arquivo <nowiki>$1</nowiki>.",
"translate-import-err-no-such-file": "O arquivo <nowiki>$1</nowiki> não existe ou não foi enviado.",
"translate-import-err-stale-group": "O grupo de mensagens a que este arquivo pertence não existe.",
@@ -240,13 +255,11 @@
"translate-js-summary": "Sumário:",
"translate-js-save": "Salvar",
"translate-js-next": "Salvar e abrir a próxima",
- "translate-js-nonext": "Esta foi a última mensagem nesta página.",
"translate-js-skip": "Pular para próxima",
- "translate-js-save-failed": "Falha ao salvar. Relate-nos este erro.",
"translate-js-history": "Histórico de traduções",
"translate-js-support": "Fazer uma pergunta",
"translate-js-support-title": "Peça ajuda se não existir informação suficiente para traduzir esta mensagem de forma correta.",
- "translate-js-support-unsaved-warning": "Há traduções que ainda não foram salvas.",
+ "translate-js-support-unsaved-warning": "Você possui traduções não salvas.",
"translate-gs-pos": "Lugar",
"translate-gs-code": "Código",
"translate-gs-continent": "Continente",
@@ -256,26 +269,12 @@
"translate-gs-count": "Contagem",
"translate-gs-total": "Total",
"translate-gs-avgscore": "Pont. média",
- "translate-documentation-language": "documentação da mensagem",
+ "translate-documentation-language": "Documentação da mensagem",
"translate-searchprofile": "Traduções",
"translate-searchprofile-tooltip": "Pesquisar todas as traduções",
+ "translate-searchprofile-note": "Mais opções de pesquisa estão disponíveis com a [$1 pesquisa de tradução].",
"translate-search-languagefilter": "Filtrar por idioma:",
"translate-search-nofilter": "Não filtrar",
- "translate-messagereview-submit": "Marcar como revisada",
- "translate-messagereview-progress": "Marcando como revisada...",
- "translate-messagereview-failure": "Falha ao marcar como revisado: $1",
- "translate-messagereview-done": "Revisada",
- "translate-messagereview-reviews": "Revisada por {{PLURAL:$1|um usuário|$1 usuários}}",
- "translate-messagereview-reviewswithyou": "Revisada por {{PLURAL:$1|você|$1 usuários, incluindo você}}",
- "api-error-invalidrevision": "A tradução não foi encontrada",
- "api-error-unknownmessage": "A mensagem não foi encontrada",
- "api-error-fuzzymessage": "A tradução está sinalizada como obsoleta",
- "api-error-owntranslation": "Você não pode revisar suas próprias traduções",
- "translate-messagereview-no-fuzzy": "Traduções obsoletas não podem ser revisadas.",
- "translate-messagereview-no-own": "Você não pode marcar suas próprias traduções como revisadas.",
- "translate-messagereview-doit": "Marcar esta tradução como revisada.",
- "group-translate-proofr.css": "/* O CSS colocado aqui afetará apenas os revisores de traduções */",
- "group-translate-proofr.js": "/* O JavaScript colocado aqui afetará apenas os revisores de traduções */",
"log-name-translationreview": "Registro de revisão de traduções",
"log-description-translationreview": "Registro de todas as revisões feitas em traduções e grupos de traduções.",
"logentry-translationreview-message": "$1 {{GENDER:$2|revisou}} a tradução $3",
@@ -285,45 +284,47 @@
"right-translate-sandboxmanage": "Gerenciar usuários em área restrita",
"action-translate-sandboxmanage": "gerenciar usuários em área restrita",
"right-translate-sandboxaction": "Executar ações da lista de permissões para usuários da área de testes",
- "action-translate-sandboxaction": "Executar ações da lista de permissões para usuários da área de testes",
- "translate-workflow-state-": "(indefinido)",
+ "action-translate-sandboxaction": "executar ações da lista de permissões para usuários da área de testes",
+ "translate-workflow-state-": "(indefinida)",
"translate-workflowstatus": "Status: $1",
"translate-workflow-set-doing": "Definindo...",
"translate-workflow-autocreated-summary": "Criação automática de página para o status de fluxo de trabalho $1",
- "translate-stats-workflow": "Status",
+ "translate-stats-workflow": "Estado",
"translate-workflowgroup-label": "Status do fluxo de trabalho",
"translate-workflowgroup-desc": "Este grupo de mensagens mostra os status do fluxo de trabalho de traduções.\nOs status são definidos na variável de configuração $wgTranslateWorkflowStates.",
"translate-dynagroup-recent-label": "Traduções recentes",
"translate-dynagroup-recent-desc": "Este grupo de mensagens mostra todas as traduções recentes para este idioma.\nUsado principalmente em tarefas de revisão.",
"translate-dynagroup-additions-label": "Adições recentes",
"translate-dynagroup-additions-desc": "Este grupo de mensagens exibe as mensagens novas e alteradas.",
- "translate-gethelp": "Ajuda",
"translate-msggroupselector-projects": "Grupo de mensagens",
"translate-msggroupselector-search-placeholder": "Pesquisar grupos",
- "translate-msggroupselector-search-all": "Todos",
+ "translate-msggroupselector-search-all": "Todas",
"translate-msggroupselector-search-recent": "Recentes",
"translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgrupo|subgrupos}}",
"tux-languageselector": "Traduzir para",
- "tux-tab-all": "Tudo",
- "tux-tab-untranslated": "Não traduzido",
- "tux-tab-outdated": "Desatualizado",
+ "tux-tab-all": "Todas",
+ "tux-tab-untranslated": "Não traduzidas",
+ "tux-tab-outdated": "Desatualizadas",
"tux-tab-translated": "Traduzido",
"tux-tab-unproofread": "Não revisado",
"tux-edit": "Editar",
"tux-status-optional": "Opcional",
- "tux-status-fuzzy": "Desatualizado",
- "tux-status-proofread": "Revisado",
+ "tux-status-fuzzy": "Desatualizadas",
+ "tux-status-proofread": "Revisada",
"tux-status-translated": "Traduzido",
- "tux-status-saving": "Salvando...",
+ "tux-status-saving": "Salvando…",
"tux-status-unsaved": "Não salvo",
+ "tux-save-unknown-error": "Ocorreu um erro desconhecido.",
"tux-editor-placeholder": "Sua tradução",
+ "tux-editor-editsummary-placeholder": "Resumo opcional",
"tux-editor-paste-original-button-label": "Colar texto da fonte",
- "tux-editor-discard-changes-button-label": "Descartar mudanças",
+ "tux-editor-discard-changes-button-label": "Descartar alterações",
"tux-editor-save-button-label": "Salvar tradução",
- "tux-editor-skip-button-label": "Pular para seguinte",
+ "tux-editor-skip-button-label": "Pular para próxima",
"tux-editor-cancel-button-label": "Cancelar",
"tux-editor-confirm-button-label": "Confirmar tradução",
- "tux-editor-shortcut-info": "Pressione \"$1\" para salvar, \"$2\" para pular para a mensagem seguinte ou \"$3\" para outros atalhos.",
+ "tux-editor-proofread-button-label": "Marcar como revisado",
+ "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",
@@ -334,7 +335,7 @@
"tux-warnings-more": "{{PLURAL:$1|$1 mais}}",
"tux-warnings-hide": "ocultar",
"tux-editor-save-failed": "O salvamento da tradução falhou: $1",
- "tux-editor-n-uses": "usado $1 {{PLURAL:$1|vez|vezes}}",
+ "tux-editor-n-uses": "usada $1 {{PLURAL:$1|vez|vezes}}",
"tux-editor-message-desc-more": "Ver mais",
"tux-editor-message-desc-less": "Ver menos",
"tux-editor-clear-translated": "Ocultar traduzidas",
@@ -353,7 +354,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ê",
@@ -371,23 +372,25 @@
"tux-empty-you-can-help-providing": "Você pode ajudar a proporcionar novas traduções",
"tux-empty-nothing-new-to-proofread": "Nada de novo para revisar",
"tux-empty-you-can-review-already-proofread": "Você pode revisar traduções já revisadas por outros.",
- "tux-empty-list-other": "Não há nada para traduzir.",
+ "tux-empty-list-other": "Não há nada para traduzir",
"tux-empty-list-other-guide": "Você pode ajudar a revisar traduções existentes",
"tux-empty-list-other-action": "Revisar traduções",
"tux-empty-list-other-link": "Exibir todas as mensagens",
"tux-editor-close-tooltip": "Fechar",
"tux-editor-expand-tooltip": "Expandir",
"tux-editor-collapse-tooltip": "Recolher",
+ "tux-editor-message-tools-show-editor": "Mostrar no editor wiki",
"tux-editor-message-tools-history": "Histórico",
- "tux-editor-message-tools-delete": "Apagar",
+ "tux-editor-message-tools-delete": "Excluir",
"tux-editor-message-tools-translations": "Todas as traduções",
- "tux-editor-loading": "Carregando…",
+ "tux-editor-message-tools-linktothis": "Ligação para essa mensagem",
+ "tux-editor-loading": "Carregando...",
"translate-search-more-languages-info": "mais $1 {{PLURAL:$1|idioma|idiomas}}",
"translate-statsbar-tooltip": "$1% traduzido, $2% revisado",
"translate-statsbar-tooltip-with-fuzzy": "$1% traduzido, $2% revisado, $3% desatualizado",
"translate-search-more-groups-info": "mais $1 {{PLURAL:$1|grupo|grupos}}",
- "translate-ulsdep-title": "erro de configuração",
+ "translate-ulsdep-title": "Ero de configuração",
"translate-ulsdep-body": "A extensão Translate depende da extensão [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector Universal Language Selector].",
"tux-session-expired": "Você não está logado. Por favor entre em uma aba separada. Alternativamente, faça uma cópia das traduções não salvos, faça o login, retorne a esta página e inserir as traduções novamente.",
- "tux-nojs": "Esta página requer JavaScript."
+ "tux-nojs": "Esta ferramenta não funciona sem o JavaScript. Ou o JavaScript está desativado, ou não funcionou, ou este browser não é suportado."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/pt.json b/www/wiki/extensions/Translate/i18n/core/pt.json
index 1e321177..fc3bb3e1 100644
--- a/www/wiki/extensions/Translate/i18n/core/pt.json
+++ b/www/wiki/extensions/Translate/i18n/core/pt.json
@@ -12,16 +12,13 @@
"SandroHc",
"Waldir",
"555",
- "Vitorvicentevalente"
+ "Vitorvicentevalente",
+ "Athena in Wonderland"
]
},
"translate": "Traduzir",
"translate-desc": "[[Special:Translate|Página especial]] para traduzir o MediaWiki e outras aplicações",
- "translate-taskui-view": "Mostrar todas as mensagens",
- "translate-taskui-untranslated": "Mostrar as mensagens não traduzidas",
- "translate-taskui-optional": "Mostrar as mensagens opcionais",
- "translate-taskui-acceptqueue": "Só as mensagens que posso marcar como revistas",
- "translate-taskui-reviewall": "Rever todas as traduções",
+ "translate-fuzzybot-desc": "Esta é uma conta de sistema especial utilizada pela extensão de [https://www.mediawiki.org/wiki/Extension:Translate/pt Tradução] do MediaWiki, para manter as traduções.\nEsta conta faz parte do programa MediaWiki e não pertence a nenhum utilizador.",
"translate-taskui-export-to-file": "Exportar no formato original",
"translate-taskui-export-as-po": "Exportar para tradução ''off-line''",
"translate-taction-translate": "Traduzir",
@@ -33,24 +30,23 @@
"translate-page-no-such-language": "A língua especificada é inválida.",
"translate-page-no-such-group": "O grupo especificado é inválido.",
"translate-page-disabled": "As traduções para esta língua, neste grupo, foram impossibilitadas. Motivo:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 é o idioma original desta página.",
"translate-language-disabled": "A tradução para esta língua foi impossibilitada.",
"translate-page-settings-legend": "Configurações",
"translate-page-group": "Grupo",
"translate-page-language": "Língua",
"translate-page-limit": "Limite",
"translate-page-limit-option": "$1 {{PLURAL:$1|mensagem|mensagens}} por página",
- "translate-submit": "Procurar",
+ "translate-submit": "Obter",
"translate-page-navigation-legend": "Navegação",
"translate-page-showing": "A apresentar as mensagens $1 a $2 de $3.",
"translate-page-showing-all": "A apresentar $1 {{PLURAL:$1|mensagem|mensagens}}.",
+ "translate-page-showing-none": "Não há mensagens para apresentar.",
"translate-next": "Página seguinte",
"translate-prev": "Página anterior",
"translate-page-description-legend": "Informação sobre o grupo",
"translate-page-description-hasoptional": "Este grupo contém mensagens opcionais.\nAs mensagens opcionais só devem ser traduzidas quando a sua língua tem requisitos especiais, como o não usar espaços ou a transliteração de nomes próprios. $1",
"translate-page-description-hasoptional-open": "Mostrar as mensagens opcionais.",
"translate-page-edit": "editar",
- "translate-ext-url": "<hr />Sítio na Internet: $1",
"translate-optional": "(opcional)",
"translate-ignored": "(ignorada)",
"translate-edit-title": "Editar \"$1\"",
@@ -66,10 +62,15 @@
"translate-use-suggestion": "Substituir a tradução atual por esta sugestão.",
"translate-edit-nopermission": "Precisa de ter direitos de tradutor para traduzir mensagens.",
"translate-edit-askpermission": "Obter permissão",
+ "exporttranslations": "Exportar traduções",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Por favor, especifique um formato válido.",
+ "translate-export-not-supported": "A exportação de traduções não é suportada.",
+ "translate-export-format-notsupported": "O formato de exportação especificado não é suportado pelo grupo de mensagens.",
"translate-magic-pagename": "Tradução extra do MediaWiki",
- "translate-magic-help": "Pode traduzir nomes alternativos de páginas especiais, palavras mágicas e nomes de espaços nominais.\n\nOs nomes alternativos de páginas especiais e as palavras mágicas podem ter várias traduções.\nAs traduções são separadas por vírgulas (,).\nOs nomes de espaços nominais só podem ter uma tradução.\n\nNas traduções de espaços nominais, a partícula <code>$1 talk</code> é especial. <code>$1</code> é substituído pelo nome do site (por exemplo, <code>{{ns:project_talk}}</code>).\nSe não é possível formar na sua língua expressões válidas sem alterar o nome do site, por favor, informe-nos em [[Support|Suporte]].\n\nÉ necessário pertencer ao grupo de tradutores para conseguir gravar as alterações.\nAs alterações não serão gravadas até clicar no botão de gravar abaixo.",
+ "translate-magic-help": "Pode traduzir nomes alternativos de páginas especiais, palavras mágicas e nomes de espaços nominais.\n\nOs nomes alternativos de páginas especiais e as palavras mágicas podem ter várias traduções.\nAs traduções são separadas por vírgulas (,).\nOs nomes de espaços nominais só podem ter uma tradução.\n\nNas traduções de espaços nominais, a partícula <code>$1 talk</code> é especial. <code>$1</code> é substituído pelo nome do sítio (por exemplo, <code>{{ns:project_talk}}</code>).\nSe não é possível formar na sua língua expressões válidas sem alterar o nome do sítio, por favor, informe-nos em [[Support|Suporte]].\n\nÉ necessário pertencer ao grupo de tradutores para conseguir gravar as alterações.\nAs alterações não serão gravadas até clicar no botão de gravar abaixo.",
"translate-magic-module": "Módulo:",
- "translate-magic-submit": "Procurar",
+ "translate-magic-submit": "Obter",
"translate-magic-cm-export": "Exportar",
"translate-magic-nothing-to-export": "Não há nada para exportar.",
"translate-magic-cm-to-be": "Novo",
@@ -87,9 +88,9 @@
"translate-magic-saved": "As suas alterações foram gravadas.",
"translate-checks-parameters": "{{PLURAL:$2|O seguinte parâmetro não é usado|Os seguintes parâmetros não são usados}}: <strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|O seguinte parâmetro é desconhecido|Os seguintes parâmetros são desconhecidos}}:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-balance": "Há {{PLURAL:$2|um parênteses irregular|$2 parênteses irregulares}}: <strong><nowiki>$1</nowiki></strong>",
- "translate-checks-links": "{{PLURAL:$2|A seguinte ligação tem|As seguintes $2 ligações têm}} problemas: <strong><nowiki>$1</nowiki></strong>",
- "translate-checks-links-missing": "{{PLURAL:$2|Falta a seguinte ligação|Faltam as seguintes $2 ligações}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-balance": "Há {{PLURAL:$2|um parêntese irregular|$2 parênteses irregulares}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|A seguinte hiperligação tem|As seguintes $2 hiperligações têm}} problemas: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Falta a seguinte hiperligação|Faltam as seguintes $2 hiperligações}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Por favor, corrija {{PLURAL:$2|a seguinte marcação|as seguintes marcações}}:\n<strong>$1</strong>",
"translate-checks-plural": "A definição usa <nowiki>{{PLURAL:}}</nowiki>, mas a tradução não.",
"translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> recebeu {{PLURAL:$1|uma grafia|$1 grafias}}, mas {{PLURAL:$2|só é permitida uma grafia|são permitidas $2 grafias}} (excluindo as formas 0= e 1=).",
@@ -100,7 +101,7 @@
"translate-checks-parametersnotequal": "O número de parâmetros é {{PLURAL:$1|$1}} mas devia ser {{PLURAL:$2|$2}}.",
"translate-checks-malformed": "<nowiki>$1</nowiki> está incorreto.",
"translate-checks-fudforum-syntax": "Use <nowiki>$1</nowiki> em vez de <nowiki>$2</nowiki> neste projeto.",
- "translate-pref-nonewsletter": "Não me enviar ''newsletters'' por correio electrónico",
+ "translate-pref-nonewsletter": "Não me enviar ''newsletters'' por correio eletrónico",
"translate-pref-editassistlang": "Línguas de auxílio:",
"prefs-translate": "Opções de tradução",
"translate-pref-editassistlang-help": "Lista de códigos de língua separados por vírgulas.\nQuando estiver a traduzir, ser-lhe-ão também apresentadas as traduções para estas línguas.\nA lista por omissão depende da sua língua.",
@@ -111,8 +112,17 @@
"right-translate-import": "Importar traduções ''off-line''",
"action-translate-import": "importar traduções ''off-line''",
"right-translate-messagereview": "Rever traduções",
+ "action-translate-messagereview": "rever traduções",
"right-translate-groupreview": "Alterar o estado do fluxo de trabalho de grupos de mensagens",
- "translate-rc-translation-filter": "Filtro de traduções:",
+ "action-translate-groupreview": "alterar o estado do fluxo de trabalho de grupos de mensagens",
+ "translate-rcfilters-translations": "Traduções",
+ "translate-rcfilters-translations-only-label": "Traduções",
+ "translate-rcfilters-translations-only-desc": "Alterações a páginas traduzidas.",
+ "translate-rcfilters-translations-filter-label": "Não traduções",
+ "translate-rcfilters-translations-filter-desc": "Todas as alterações que não são de traduções.",
+ "translate-rcfilters-translations-site-label": "Mensagens de sistema",
+ "translate-rcfilters-translations-site-desc": "Personalizações das mensagens de sistema no espaço nominal MediaWiki.",
+ "translate-rc-translation-filter": "Filtrar traduções:",
"translate-rc-translation-filter-no": "Não filtrar",
"translate-rc-translation-filter-only": "Mostrar apenas traduções",
"translate-rc-translation-filter-filter": "Não mostrar traduções",
@@ -125,8 +135,8 @@
"translate-stats-reviewers": "Revisores",
"translate-statsf-intro": "Pode gerar estatísticas simples usando este formulário.\nTodos os valores têm limites máximos e mínimos.",
"translate-statsf-options": "Opções do gráfico",
- "translate-statsf-width": "Largura em pixels:",
- "translate-statsf-height": "Altura em pixels:",
+ "translate-statsf-width": "Largura em píxeis:",
+ "translate-statsf-height": "Altura em píxeis:",
"translate-statsf-days": "Período de tempo em dias:",
"translate-statsf-start": "Data de início:",
"translate-statsf-scale": "Escala:",
@@ -157,7 +167,7 @@
"translate-translations-history-short": "h",
"languagestats": "Estatísticas de tradução por língua",
"languagestats-summary": "Esta página mostra estatísticas de tradução para todos os grupos de mensagens de uma língua.",
- "messagegroupstats-summary": "Esta página mostra as estatísticas de grupo de mensagens.",
+ "messagegroupstats-summary": "Esta página mostra as estatísticas de grupos de mensagens.",
"languagestats-stats-for": "Estatísticas de tradução para $1 ($2).",
"languagestats-recenttranslations": "traduções recentes",
"translate-langstats-incomplete": "Algumas das estatísticas desta página estão incompletas. Por favor recarregue a página para obter mais estatísticas.",
@@ -173,27 +183,30 @@
"translate-total": "Mensagens (total)",
"translate-untranslated": "Não traduzidas",
"translate-percentage-complete": "Progresso",
- "translate-percentage-fuzzy": "Desactualizadas",
+ "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",
- "translate-mgs-pagename": "Estatísticas do grupo de mensagens",
+ "translate-mgs-pagename": "Estatísticas dos grupos de mensagens",
"translate-mgs-fieldset": "Preferências",
"translate-mgs-group": "Grupo de mensagens:",
"translate-mgs-nocomplete": "Ocultar línguas com traduções completas",
"translate-mgs-noempty": "Ocultar línguas sem traduções",
"translate-mgs-submit": "Ver estatísticas",
"translate-mgs-column-language": "Língua",
- "translate-mgs-totals": "Todas as línguas em conjunto",
+ "translate-mgs-totals": "{{PLURAL:$1|A língua em conjunto|Todas as $1 línguas em conjunto}}",
"translate-mgs-invalid-group": "O grupo especificado ($1) não existe.",
"translate-mgs-nothing": "Sem dados para as estatísticas solicitadas.",
"supportedlanguages": "Línguas suportadas",
- "supportedlanguages-summary": "Esta página lista todas as línguas suportadas pela {{SITENAME}},\ncom os nomes dos tradutores de cada língua.\nQuanto mais traduções feitas por um tradutor, maior será o seu nome.\nA cor do sublinhado indica quão recentemente o tradutor esteve ativo aqui.",
+ "supportedlanguages-summary": "Esta página lista todas as línguas suportadas pela wiki {{SITENAME}},\ncom os nomes dos tradutores de cada língua.\nQuanto mais traduções feitas por um tradutor, maior será o seu nome.\nA cor do sublinhado indica o quanto recentemente o tradutor esteve ativo aqui.",
"supportedlanguages-colorlegend": "Legenda das cores: última tradução há $1 dias.",
+ "supportedlanguages-sqlite-error": "O SQLite não é suportado",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tradutor|Tradutora}}|Tradutores}}: $1",
"supportedlanguages-recenttranslations": "traduções recentes",
"supportedlanguages-count": "$1 {{PLURAL:$1|língua|línguas}} no total.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edição|edições}} - a última edição foi há $3 {{PLURAL:$3|dia|dias}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texto de origem da unidade de tradução",
"translate-save": "Gravar ($1)",
"translate-jssti-add": "Adicionar à lista",
"managemessagegroups": "Administração de grupos de mensagens",
@@ -201,7 +214,7 @@
"translate-smg-nochanges": "Não há alterações para processar.",
"translate-smg-submit": "Enviar alterações para processamento",
"translate-smg-submitted": "Foram atualizadas definições de mensagens. As alterações estão a ser processadas em segundo plano.",
- "translate-smg-more": "Haverá mais mudanças no processo depois de submeter estas alterações.",
+ "translate-smg-more": "Haverá mais mudanças no processo depois de enviar estas alterações.",
"translate-smg-left": "Conteúdo da mensagem na wiki",
"translate-smg-right": "Alterações recebidas",
"translate-manage-import-diff": "Mensagem $1 | Ações: $2",
@@ -212,8 +225,8 @@
"translate-manage-action-ignore": "Ignorar",
"translate-manage-action-fuzzy": "Importar e marcar para revisão",
"translate-manage-nochanges": "Não há alterações nas definições das mensagens deste grupo.",
- "translate-manage-nochanges-other": "Não houve alterações para esta língua.\nUse a ligação abaixo para voltar aos detalhes do grupo.",
- "translate-manage-inconsistent": "Foi detectada uma inconsistência no pedido.\nPor favor, verifique se houve alterações e tente novamente.\nDetalhes: $1.",
+ "translate-manage-nochanges-other": "Não houve alterações para esta língua.\nUse a hiperligação abaixo para voltar aos detalhes do grupo.",
+ "translate-manage-inconsistent": "Foi detetada uma inconsistência no pedido.\nPor favor, verifique se houve alterações e tente novamente.\nDetalhes: $1.",
"translate-manage-toolong": "O tempo máximo de $1 {{PLURAL:$1|segundo|segundos}} de processamento foi excedido.\nPor favor, reenvie o formulário para continuar o processamento.",
"translate-manage-import-summary": "Importando uma nova versão de fonte externa",
"translate-manage-conflict-summary": "Importando uma nova versão de fonte externa.\nVerifique-a, por favor.",
@@ -231,12 +244,10 @@
"translate-import-err-stale-group": "O grupo de mensagens a que este ficheiro pertence não existe.",
"translate-import-err-no-headers": "O ficheiro não é um ficheiro Gettext válido, com o formato da extensão Translate:\nNão foi possível determinar o grupo e a língua a partir dos cabeçalhos.",
"translate-import-err-warnings": "Este ficheiro não é válido.\nCertifique-se de que o seu editor não remove os campos msgctxt.\nDetalhes: $1",
- "translate-js-summary": "Sumário:",
+ "translate-js-summary": "Resumo:",
"translate-js-save": "Gravar",
"translate-js-next": "Gravar e abrir a seguinte",
- "translate-js-nonext": "Esta foi a última mensagem nesta página.",
"translate-js-skip": "Saltar para a seguinte",
- "translate-js-save-failed": "A gravação falhou. Por favor, informe-nos deste erro.",
"translate-js-history": "Histórico de traduções",
"translate-js-support": "Fazer pergunta",
"translate-js-support-title": "Peça ajuda se não existir informação suficiente para traduzir esta mensagem corretamente.",
@@ -253,21 +264,9 @@
"translate-documentation-language": "ajuda de tradução",
"translate-searchprofile": "Traduções",
"translate-searchprofile-tooltip": "Pesquisar todas as traduções",
+ "translate-searchprofile-note": "Mais opções de procura estão disponíveis através da [$1 pesquisa de traduções].",
"translate-search-languagefilter": "Filtrar por língua:",
"translate-search-nofilter": "Não filtrar",
- "translate-messagereview-submit": "Marcar como revista",
- "translate-messagereview-progress": "A marcar como revista...",
- "translate-messagereview-failure": "Erro ao marcar como revista: $1",
- "translate-messagereview-done": "Revista",
- "translate-messagereview-reviews": "Revista por {{PLURAL:$1|um utilizador|$1 utilizadores}}",
- "translate-messagereview-reviewswithyou": "Revista por {{PLURAL:$1|si|$1 utilizadores, incluindo você}}",
- "api-error-invalidrevision": "A tradução não foi encontrada",
- "api-error-unknownmessage": "A mensagem não foi encontrada",
- "api-error-fuzzymessage": "A tradução ainda está sinalizada com FUZZY",
- "api-error-owntranslation": "Não pode marcar as suas próprias traduções como revistas",
- "translate-messagereview-no-fuzzy": "Não se podem marcar como revistas traduções sinalizadas com FUZZY",
- "translate-messagereview-no-own": "Não pode marcar as suas próprias traduções como revistas.",
- "translate-messagereview-doit": "Marcar esta tradução como revista.",
"log-name-translationreview": "Registo de revisão de traduções",
"log-description-translationreview": "Registo de todas as revisões de traduções e de grupos de traduções.",
"logentry-translationreview-message": "$1 {{GENDER:$2|reviu}} a tradução $3",
@@ -289,7 +288,6 @@
"translate-dynagroup-recent-desc": "Este grupo de mensagens mostra todas as traduções recentes para esta língua.\nÉ útil sobretudo para as tarefas de revisão.",
"translate-dynagroup-additions-label": "Adições recentes",
"translate-dynagroup-additions-desc": "Este grupo de mensagens mostra as mensagens novas e modificadas.",
- "translate-gethelp": "Ajuda",
"translate-msggroupselector-projects": "Grupo de mensagens",
"translate-msggroupselector-search-placeholder": "Pesquisar grupos",
"translate-msggroupselector-search-all": "Todos",
@@ -308,14 +306,17 @@
"tux-status-translated": "Traduzida",
"tux-status-saving": "A gravar...",
"tux-status-unsaved": "Não gravada",
+ "tux-save-unknown-error": "Ocorreu um erro desconhecido.",
"tux-editor-placeholder": "A sua tradução",
+ "tux-editor-editsummary-placeholder": "Resumo opcional",
"tux-editor-paste-original-button-label": "Inserir o texto original",
"tux-editor-discard-changes-button-label": "Rejeitar alterações",
"tux-editor-save-button-label": "Gravar tradução",
"tux-editor-skip-button-label": "Saltar para a seguinte",
"tux-editor-cancel-button-label": "Cancelar",
"tux-editor-confirm-button-label": "Confirmar a tradução",
- "tux-editor-shortcut-info": "Prima \"$1\" para gravar ou \"$2\" para saltar para a mensagem seguinte ou \"$3\" para outros atalhos.",
+ "tux-editor-proofread-button-label": "Marcar como revista",
+ "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",
@@ -370,16 +371,18 @@
"tux-editor-close-tooltip": "Fechar",
"tux-editor-expand-tooltip": "Expandir",
"tux-editor-collapse-tooltip": "Recolher",
+ "tux-editor-message-tools-show-editor": "Mostrar no editor wiki",
"tux-editor-message-tools-history": "Histórico",
"tux-editor-message-tools-delete": "Eliminar",
"tux-editor-message-tools-translations": "Todas as traduções",
+ "tux-editor-message-tools-linktothis": "Hiperligação para esta mensagem",
"tux-editor-loading": "A carregar…",
"translate-search-more-languages-info": "mais $1 {{PLURAL:$1|língua|línguas}}",
"translate-statsbar-tooltip": "$1% traduzidas, $2% revistas",
"translate-statsbar-tooltip-with-fuzzy": "$1% traduzidas, $2% revistas, $3% desatualizadas",
"translate-search-more-groups-info": "mais $1 {{PLURAL:$1|grupo|grupos}}",
"translate-ulsdep-title": "Erro de configuração",
- "translate-ulsdep-body": "A tradução da extensão depende da [https://www.mediawiki.org/wiki/Extension:UniversalLanguageSelector extensão Seletor Universal de Idiomas].",
+ "translate-ulsdep-body": "A extensão de tradução depende da [https://www.mediawiki.org/wiki/Extension:UniversalLanguageSelector extensão Universal Language Selector].",
"tux-session-expired": "Não está mais autenticado. Por favor, inicie a sessão num outro separador. Em alternativa, faça uma cópia das traduções que não foram gravadas, inicie sessão e regresse a esta página para inserir as suas traduções novamente.",
- "tux-nojs": "Esta página requer JavaScript."
+ "tux-nojs": "Esta ferramenta não funciona sem o JavaScript. Ou o JavaScript está desativado, ou não funcionou, ou este browser não é suportado."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/qqq.json b/www/wiki/extensions/Translate/i18n/core/qqq.json
index 8ada2903..b0dedc7b 100644
--- a/www/wiki/extensions/Translate/i18n/core/qqq.json
+++ b/www/wiki/extensions/Translate/i18n/core/qqq.json
@@ -35,17 +35,17 @@
"아라",
"555",
"Liuxinyu970226",
- "Tacsipacsi"
+ "Tacsipacsi",
+ "Matma Rex",
+ "Robby",
+ "Mar(c)",
+ "MarcoAurelio"
]
},
"translate": "{{doc-special|Translate}}\nIt is the verb \"to translate\".\n{{Identical|Translate}}",
"translate-extensionname": "{{name}}",
"translate-desc": "{{desc|name=Translate|url=https://www.mediawiki.org/wiki/Extension:Translate}}",
- "translate-taskui-view": "Task in [[Special:Translate]] on action Translate.\n{{Identical|Show all messages}}",
- "translate-taskui-untranslated": "Task in [[Special:Translate]] on action Translate",
- "translate-taskui-optional": "Task in [[Special:Translate]] on action Translate.\n{{Identical|Show optional message}}",
- "translate-taskui-acceptqueue": "Task in [[Special:Translate]] on action Review - only shown to users who are allowed to accept translations\n\nGoes together with {{msg-mw|translate-taskui-reviewall}}",
- "translate-taskui-reviewall": "Task in [[Special:Translate]] on action Review",
+ "translate-fuzzybot-desc": "Text to display on [[User:FuzzyBot]].",
"translate-taskui-export-to-file": "Task in [[Special:Translate]] on action Export",
"translate-taskui-export-as-po": "Task in [[Special:Translate]] on action Export",
"translate-taction-translate": "A tab text used in Special pages [[Special:Translate]], [[Special:LanguageStats]] and [[Special:MessageGroupStats]].\n{{Identical|Translate}}",
@@ -54,10 +54,9 @@
"translate-taction-mstats": "A tab text used in Special pages [[Special:Translate]], [[Special:LanguageStats]] and [[Special:MessageGroupStats]].",
"translate-taction-export": "A tab text used in Special pages [[Special:Translate]], [[Special:LanguageStats]] and [[Special:MessageGroupStats]].\n{{Identical|Export}}",
"translate-taction-disabled": "Shown instead of the radio buttons for tasks when all tasks related to this action has been disabled.",
- "translate-page-no-such-language": "Shown when someone requests a language that doesn't exists. Examples:\n* Special:LanguageStats, under the selectors [{{FULLURL:Special:LanguageStats|language=ugagaga}}]\n* Special:Translate until 2013, next to the language dropdown [//translatewiki.net/w/i.php?title=Special:Translate&tux=0&group=out-blockly-0-all&language=ugagaga]",
+ "translate-page-no-such-language": "Shown when someone requests a language that doesn't exist. Examples:\n* Special:LanguageStats, under the selectors [{{FULLURL:Special:LanguageStats|language=ugagaga}}]\n* Special:Translate until 2013, next to the language dropdown [//translatewiki.net/w/i.php?title=Special:Translate&tux=0&group=out-blockly-0-all&language=ugagaga]",
"translate-page-no-such-group": "Shown when someone requests a group that doesn't exists. [{{FULLURL:Special:Translate|group=invalidgroup}} Example].",
"translate-page-disabled": "Parameters:\n* $1 - reason that the language has been blacklisted",
- "translate-page-disabled-source": "Possible reason for {{msg-mw|translate-page-disabled}}.\nParameters:\n* $1 - language name.",
"translate-language-disabled": "Shown when someone requests a blacklisted language. [{{FULLURL:Special:Translate|group=mediawiki&language=zh-tw}} Example].",
"translate-page-settings-legend": "{{Identical|Settings}}",
"translate-page-group": "{{Identical|Group}}",
@@ -68,6 +67,7 @@
"translate-page-navigation-legend": "{{Identical|Navigation}}",
"translate-page-showing": "Information in the page navigation box of the translate special page, [{{canonicalurl:Special:Translate|taction=translate&limit=100&language=en-gb&group=ext-translate-core}} for example].\n*$1 is the number of the first message displayed on the page\n*$2 is the number of the last message displayed on the page\n*$3 is the total number of messages fetched by the program",
"translate-page-showing-all": "Information in the page navigation box of the translate special page, [{{canonicalurl:Special:Translate|taction=translate&limit=5000&language=en-gb&group=ext-translate-core}} for example].\n*$1 is the total number of messages fetched by the program",
+ "translate-page-showing-none": "Used in query result page.\n\nSee also:\n* {{msg-mw|Translate-page-showing-all}}\n* {{msg-mw|Translate-page-showing}}\n* {{msg-mw|Translate-page-paging-links}}, {{msg-mw|Translate-prev}} and {{msg-mw|Translate-next}}",
"translate-page-paging-links": "{{optional}}\nParameters:\n* $1 - a link which points to the previous page\n* $2 - a link which points to the next page",
"translate-next": "{{Identical|Next page}}",
"translate-prev": "{{Identical|Previous page}}",
@@ -75,7 +75,6 @@
"translate-page-description-hasoptional": "Parameters:\n* $1 - a link with {{msg-mw|translate-page-description-hasoptional-open}} as the text",
"translate-page-description-hasoptional-open": "Link text for message {{msg-mw|translate-page-description-hasoptional}}\n{{Identical|Show optional message}}",
"translate-page-edit": "{{Identical|Edit}}",
- "translate-ext-url": "Unused at this time. Parameters:\n* $1 - URL\n{{Identical|Website}}",
"translate-optional": "{{Identical|Optional}}",
"translate-ignored": "{{Identical|Ignore}}",
"translate-edit-title": "Used as a tooltip for edit links in lists with translatable messages. Parameters:\n* $1 is the name of the page to be edited.\n{{Identical|Edit}}",
@@ -85,13 +84,17 @@
"translate-edit-no-information": "Message is used as a hint to translators that documentation for a message without documentation is needed.",
"translate-edit-information": "Caption for box which contains information about the message. $1 is {{msg-mw|translate-edit-contribute}}.",
"translate-edit-in-other-languages": "Caption for box which contains translation of message in other languages.",
- "translate-edit-warnings": "Title of the warnings box when editing a message.\nThis box list the problems found in the translation.",
+ "translate-edit-warnings": "Title of the warnings box when editing a message.\nThis box lists the problems found in the translation.",
"translate-edit-tmmatch-source": "Used as tooltip for the message {{msg-mw|translate-edit-tmmatch}} in the translation suggestions by the server.\n\nParameters:\n* $1 - translation source text",
"translate-edit-tmmatch": "This message is displayed in the translation interface when there is suggestions from translation memory.\n\nParameters:\n* $1 - number between 1 and 100\n{{Identical|Match}}",
"translate-use-suggestion": "Used as a tooltip for the \"down arrow\" to insert translation suggestions in the translation edit page.",
"translate-edit-nopermission": "Followed by link text {{msg-mw|Translate-edit-askpermission}}.",
"translate-edit-askpermission": "Used as link text.\n\nPreceded by {{msg-mw|Translate-edit-nopermission}}.",
- "translate-edit-tag-warning": "{{notranslate}}\nShown when editing translatable pages. Default is empty.",
+ "exporttranslations": "Title of [[Special:ExportTranslations]]",
+ "translate-export-form-format": "Label of form field on [[Special:ExportTranslations]].\n{{Identical|Format}}",
+ "translate-export-invalid-format": "Validation error shown on [[Special:ExportTranslations]].",
+ "translate-export-not-supported": "Validation error shown on [[Special:ExportTranslations]]",
+ "translate-export-format-notsupported": "Validation error shown on [[Special:ExportTranslations]]",
"translate-magic-pagename": "\"Extended\" can as well be understood as \"Extra\" or \"Special\" or \"Advanced\". It refers to the translations of pieces of text such as names of namespaces or special pages, which are not part of normal message or wiki page translation.\n\nUsed in {{msg-mw|Translate-magic-cm-updatedusing}}.",
"translate-magic-help": "Description of [[Special:AdvancedTranslate]].\n\n<code>$1</code> is not a parameter; appears as is.",
"translate-magic-module": "Label on drop-down box on [[Special:AdvancedTranslate]].\n{{Identical|Module}}",
@@ -128,16 +131,26 @@
"translate-checks-fudforum-syntax": "Unused at this time.\n\nWarning message from automated syntax check for translators.\n\n<code>$1</code> and <code>$2</code> are not parameters.\n{{Related|Translate-checks}}",
"translate-pref-nonewsletter": "Option in [[Special:Preferences]], 'Misc' tab.",
"translate-pref-editassistlang": "Used in [[Special:Preferences]] under the {{msg-mw|prefs-editing}} tab.\n{{Identical|Assistant language}}",
- "prefs-translate": "Caption of a section at [[Special:Preferences#prefsection-3|Special:Preferences]]",
+ "prefs-translate": "Caption of a section at [[Special:Preferences#mw-prefsection-editing|Special:Preferences]] in the tab \"{{int:prefs-editing}}\"",
"translate-pref-editassistlang-help": "Used in [[Special:Preferences]], tab Editing.",
"translate-pref-editassistlang-bad": "Used as validation result.\n\nParameters:\n* $1 - a language code, not list of codes",
"right-translate": "{{doc-right|translate}}",
+ "action-translate": "{{doc-action|translate}}",
"right-translate-manage": "{{doc-right|translate-manage}}",
"action-translate-manage": "{{doc-action|translate-manage}}",
"right-translate-import": "{{doc-right|translate-import}}",
"action-translate-import": "{{doc-action|translate-import}}",
"right-translate-messagereview": "{{doc-right|translate-messagereview}}\n{{Identical|Review translation}}",
+ "action-translate-messagereview": "{{doc-action|translate-messagereview}}",
"right-translate-groupreview": "{{doc-right|translate-groupreview}}",
+ "action-translate-groupreview": "{{doc-action|translate-groupreview}}",
+ "translate-rcfilters-translations": "Title for the filter group for translations. Only available on [[Special:RecentChanges]].\n{{Identical|Translation}}",
+ "translate-rcfilters-translations-only-label": "Label for the filter for showing changes to translated pages only.\n{{Identical|Translation}}",
+ "translate-rcfilters-translations-only-desc": "Description for the filter for showing changes to translated pages only.",
+ "translate-rcfilters-translations-filter-label": "Label for the filter for showing changes to pages that aren't translations.",
+ "translate-rcfilters-translations-filter-desc": "Description for the filter for showing changes to pages that aren't translations.",
+ "translate-rcfilters-translations-site-label": "Label for the filter for showing customizations of site messages.",
+ "translate-rcfilters-translations-site-desc": "Description for the filter for showing customizations of site messages.",
"translate-rc-translation-filter": "Name of filter in [[Special:RecentChanges]]. Gives a user the option to filter out translations, show translations only, or do nothing (default).",
"translate-rc-translation-filter-no": "Option for filter in [[Special:RecentChanges]]. Selecting this option results in the filter not doing anything. It is the default value.",
"translate-rc-translation-filter-only": "Option for filter in [[Special:RecentChanges]]. Selecting this option results in the filter only showing recent changes that are translations.",
@@ -198,8 +211,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}}",
@@ -210,7 +224,7 @@
"translate-mgs-noempty": "Option in [[Special:MessageGroupStats]]",
"translate-mgs-submit": "Submit button text",
"translate-mgs-column-language": "{{Identical|Language}}",
- "translate-mgs-totals": "This is used in [[Special:MessageGroupStats]]",
+ "translate-mgs-totals": "This is used in [[Special:MessageGroupStats]]. Parameters: \n* $1 - total number of shown languages",
"translate-mgs-invalid-group": "Used as error message. Parameters:\n* $1 - target message group name",
"translate-mgs-nothing": "Error message shown on Special:LanguageStats and Special:MessageGroupStats.",
"supportedlanguages": "{{doc-special|SupportedLanguages}}\n{{Identical|Supported language}}",
@@ -219,10 +233,12 @@
"supportedlanguages-localsummary": "{{notranslate}}\nPlace any site specific message here.",
"supportedlanguages-portallink": "{{optional}}\nParameters:\n* $1 - language code\n* $2 - localized language name\n* $3 - native language name\nSee also:\n* {{msg-mw|Supportedlanguages-portallink-nocldr}}",
"supportedlanguages-portallink-nocldr": "{{optional}}\nUsed if the localized language name is available. Parameters:\n* $1 - language code\n* $2 - native language name\nSee also:\n* {{msg-mw|Supportedlanguages-portallink}}",
+ "supportedlanguages-sqlite-error": "Error message emitted when unsupported sqlite database is detected",
"supportedlanguages-translators": "Row for a language in [[Special:SupportedLanguages]], under the respective header.\n* $1 - the list of translators names\n* $2 - the number of translators listed\n* $3 - username for GENDER support when there is only one translator\n{{Identical|Translator}}",
"supportedlanguages-recenttranslations": "Link on [[Special:SupportedLanguages]] to [[Special:RecentChanges]].",
"supportedlanguages-count": "On [[Special:SupportedLanguages]]\n*$1 is the total number of supported languages.",
"supportedlanguages-activity": "Used as tooltip text for username in users list, to show user's activity.\n\nSee [{{canonicalurl:Special:SupportedLanguages}}#fr example].\n\nParameters:\n* $1 - username\n* $2 - number of edits the user made\n* $3 - number of days",
+ "abusefilter-edit-builder-vars-translate-source-text": "Description for an [[mw:Extension:AbuseFilter|AbuseFilter]] variable. Used as an abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"translate-save": "Used as label for the Submit button. Parameters:\n* $1 - language name, or {{msg-mw|Translate-documentation-language}}\n{{Identical|Save}}",
"translate-jssti-add": "Name of button in [[Special:Preferences]], tab Editing.",
"managemessagegroups": "{{doc-special|ManageMessageGroups}}",
@@ -263,9 +279,7 @@
"translate-js-summary": "Label for summary field in translation editor.\n{{Identical|Summary}}",
"translate-js-save": "Button in translation editor which saves the content and closes the dialog.\n{{Identical|Save}}",
"translate-js-next": "next refers to next message in the message list",
- "translate-js-nonext": "This is a JavaScript popup (alert) when user clicks \"Save and open next\" and there is no next message.",
"translate-js-skip": "A button together with Save and Save an open next. Goes to the next message without saving.",
- "translate-js-save-failed": "If there was unknown error while submitting a translation, user gets this message in JavaScript popup (alert).",
"translate-js-history": "A button text in the legacy translation interface.",
"translate-js-support": "A button text in the legacy translation interface.",
"translate-js-support-title": "A button tooltip in the legacy translation interface.",
@@ -282,21 +296,9 @@
"translate-documentation-language": "This is the name of the message documentation language code (qqq). Follow the rules of your languages and use small first letter if it doesn't capitalize language names always. It might be easier to translate it as \"translation guidelines\" or \"translation help\".\n{{Identical|Message documentation}}",
"translate-searchprofile": "Tab in [[Special:Search]]\n{{Identical|Translation}}",
"translate-searchprofile-tooltip": "Tooltip for a tab in [[Special:Search]]",
+ "translate-searchprofile-note": "A message shown in [[Special:Search]]. $1 is the url to a special page.",
"translate-search-languagefilter": "Label for a language dropdown in Special:Search (when ElasticSearch is not in use?).",
"translate-search-nofilter": "First option in language dropdown in Special:Search to not limit by language.",
- "translate-messagereview-submit": "Button label in [[Special:Translate]] review mode.\n\nThis should be consistent with the following messages:\n* {{msg-mw|Translate-messagereview-progress}}\n* {{msg-mw|Translate-messagereview-failure}}\n* {{msg-mw|Translate-messagereview-done}}",
- "translate-messagereview-progress": "Button label in [[Special:Translate]] review mode. Button is disabled. This is shown very briefly while the acceptance is in progress.",
- "translate-messagereview-failure": "Button label in [[Special:Translate]] review mode. Button is disabled.\n\nParameters:\n* $1 - one of the following messages:\n** {{msg-mw|api-error-invalidrevision}}\n** {{msg-mw|api-error-unknownmessage}}\n** {{msg-mw|api-error-fuzzymessage}}\n** {{msg-mw|api-error-owntranslation}}",
- "translate-messagereview-done": "Button label in [[Special:Translate]] review mode. Button is disabled.\n{{Identical|Reviewed}}",
- "translate-messagereview-reviews": "Status message in [[Special:Translate]] in review mode. Parameters:\n* $1 - the total number of users who reviewed the relevant message\nSee also:\n* {{msg-mw|Translate-messagereview-reviewswithyou}}",
- "translate-messagereview-reviewswithyou": "Status message in [[Special:Translate]] in review mode. Parameters:\n* $1 - the total number of users who reviewed the relevant message\nSee also:\n* {{msg-mw|Translate-messagereview-reviews}}",
- "api-error-invalidrevision": "Error message for {{msg-mw|translate-messagereview-failure}}",
- "api-error-unknownmessage": "Error message for {{msg-mw|translate-messagereview-failure}}",
- "api-error-fuzzymessage": "Error message for {{msg-mw|translate-messagereview-failure}}",
- "api-error-owntranslation": "Error message for {{msg-mw|translate-messagereview-failure}}",
- "translate-messagereview-no-fuzzy": "Tooltip for disabled review button",
- "translate-messagereview-no-own": "Tooltip for disabled review button",
- "translate-messagereview-doit": "Tooltip for review button",
"log-name-translationreview": "{{doc-logpage}}",
"log-description-translationreview": "Description of a log type.",
"logentry-translationreview-message": "{{Logentry|[[Special:Log/translationreview]]}}",
@@ -336,15 +338,17 @@
"tux-status-translated": "Status label in [[Special:Translate]] indicating that a message is translated. An adjective that refers to a message.\n{{Identical|Translated}}",
"tux-status-saving": "Status label in [[Special:Translate]] indicating that the translation is being saved.\n{{Identical|Saving}}",
"tux-status-unsaved": "Status label in [[Special:Translate]] indicating that the translation is not saved yet.",
+ "tux-save-unknown-error": "Error message shown on [[Special:Translate]] when an unknown error occurs while attempting to save the translation.",
"tux-editor-placeholder": "Placeholder text for the translation editor textbox",
+ "tux-editor-editsummary-placeholder": "Placeholder text for the translation editor's edit summary box",
"tux-editor-paste-original-button-label": "Label for a button that pastes the text in the source language to the translation editor.",
"tux-editor-discard-changes-button-label": "Label for a button that discards the changes made to a translation and restores the saved version.",
"tux-editor-save-button-label": "Label for save translation button",
"tux-editor-skip-button-label": "Label for skip button",
"tux-editor-cancel-button-label": "Label for cancel button.\nPressing the button hides the message editor without saving and marks the message internally as \"hard\".\n{{Identical|Cancel}}",
"tux-editor-confirm-button-label": "Label for confirm button",
- "tux-editor-proofread-button-label": "Label for review button. \"Reviewed\" refers to a translation.",
- "tux-editor-shortcut-info": "A help text for the keyboard shortcuts. Parameters:\n* $1 - shortcut key for save button\n* $2 - shortcut key for skip button\n* $3 - \"ALT\"",
+ "tux-editor-proofread-button-label": "Label for review button. \"Reviewed\" refers to a translation.\n{{Identical|Mark as reviewed}}",
+ "tux-editor-shortcut-info": "A help text for the keyboard shortcuts. Parameters:\n* $1 - shortcut key for save button\n* $2 - shortcut key for skip button\n* $3 - \"ALT\"\n* $4 - shortcut key for summary input",
"tux-editor-edit-desc": "Text for the link to edit message documentation.\n{{Identical|Edit description}}",
"tux-editor-add-desc": "Text for the link to add message documentation when it doesn't exist",
"tux-editor-suggestions-title": "Title text for translation memory suggestions.\n{{Identical|Suggestion}}",
@@ -399,9 +403,11 @@
"tux-editor-close-tooltip": "Tooltip for close icon of translate editor.\n{{Identical|Close}}",
"tux-editor-expand-tooltip": "Tooltip for an icon (rectangle with an arrow) in the new translation editor which increases size of the main text area by closing the translation aids area on the screen's side.\n\nSee also:\n* {{msg-mw|Tux-editor-collapse-tooltip}}\n{{Identical|Expand}}",
"tux-editor-collapse-tooltip": "Tooltip for an icon (rectangle with an arrow) in the new translation editor which reduces size of the main text area to uncover the translation aids area on the screen's side.\n\nSee also:\n* {{msg-mw|Tux-editor-expand-tooltip}}\n{{Identical|Collapse}}",
+ "tux-editor-message-tools-show-editor": "A link to the message's edit page. An item in a menu that appears when clicking on the message title.",
"tux-editor-message-tools-history": "A link to the message history. An item in a menu that appears when clicking on the message title.\n{{Identical|History}}",
"tux-editor-message-tools-delete": "A link to delete the message. An item in a menu that appears when clicking on the message title.\n{{Identical|Delete}}",
"tux-editor-message-tools-translations": "A link to translations of a message to all languages. An item in a menu that appears when clicking on message title.\n{{Identical|All translations}}",
+ "tux-editor-message-tools-linktothis": "A direct link to the translation editor showing this translation. An item in a menu that appears when clicking on message title",
"tux-editor-loading": "Loading message while translation editor is being prepared with helper information.\n{{Identical|Loading}}",
"translate-search-more-languages-info": "Information shown as number of languages matching the query using\n[[Special:SearchTranslations]]\n* $1 - number of languages\nSee also:\n* {{msg-mw|Translate-search-more-groups-info}}",
"translate-statsbar-tooltip": "Descriptive text to show for the stats bar for message groups on mouse over.\n* $1 percentage of messages translated\n* $2 percentage of messages reviewed",
diff --git a/www/wiki/extensions/Translate/i18n/core/qu.json b/www/wiki/extensions/Translate/i18n/core/qu.json
index 0a8e47f9..694dbb86 100644
--- a/www/wiki/extensions/Translate/i18n/core/qu.json
+++ b/www/wiki/extensions/Translate/i18n/core/qu.json
@@ -6,11 +6,6 @@
},
"translate": "T'ikray",
"translate-desc": "[[Special:Translate|Sapaq p'anqa]] MediaWiki nisqata hukkunatapas t'ikranapaq",
- "translate-taskui-view": "Tukuy willaykunata rikuchiy",
- "translate-taskui-untranslated": "Mana t'ikrasqa willaykunata rikuchiy",
- "translate-taskui-optional": "Akllana willaykunata rikuchiy",
- "translate-taskui-acceptqueue": "Allinchaspa ñawirina unanchanallay willaykunata rikuchiy",
- "translate-taskui-reviewall": "Tukuy t'ikrasqakunata allinchanapaq ñawiriy",
"translate-taction-translate": "T'ikray",
"translate-taction-proofread": "Allinchaspa ñawiriy",
"translate-taction-lstats": "Rimaymanta ranuy (kanchachani)",
@@ -36,7 +31,6 @@
"translate-page-description-legend": "Willay huñumanta t'iktuna",
"translate-page-description-hasoptional-open": "Akllana willaykunata rikuchiy.",
"translate-page-edit": "llamk'apuy",
- "translate-ext-url": "<hr />Llika tiyay: $1",
"translate-optional": "(chikllana)",
"translate-ignored": "(qhawarparisqa)",
"translate-edit-title": "\"$1\" nisqata llamk'apuy",
@@ -45,7 +39,6 @@
"translate-edit-contribute": "llamk'apuy",
"translate-edit-information": "Willaymanta t'iktuynin ($1)",
"translate-edit-in-other-languages": "Kay willay huk rimaykunapi",
- "translate-edit-committed": "Llamp'u kaqpi kunan kachkaq t'ikrasqakuna",
"translate-edit-warnings": "Mana hunt'a t'ikrasqakunamanta yuyampaykuna",
"translate-edit-tmmatch-source": "T'ikranapaq pukyu qillqa: $1",
"translate-edit-tmmatch": "$1%-nin kaqlla kaq",
@@ -82,7 +75,8 @@
"action-translate-import": "mana llikapi kachkaq t'ikrasqakunata hawamanta chaskiy",
"right-translate-messagereview": "T'ikrasqakunata allinchanapaq ñawiriy",
"right-translate-groupreview": "Willay huñukunap llamk'apayayninpa kachkayninta hukchay",
- "translate-rc-translation-filter": "T'ikraykunata ch'illchiy",
+ "translate-rcfilters-translations-only-label": "T'ikrasqakuna",
+ "translate-rc-translation-filter": "T'ikraykunata ch'illchiy:",
"translate-rc-translation-filter-no": "Ama imatapas ruraychu",
"translate-rc-translation-filter-only": "T'ikrasqakunallata rikuchiy",
"translate-rc-translation-filter-filter": "T'ikraykunata ch'illchiy",
@@ -110,7 +104,6 @@
"translate-statsf-count-reviews": "T'ikrasqata qhawakipasqakuna",
"translate-statsf-count-reviewers": "Allinchanapaq ñawiriqkuna",
"translate-statsf-submit": "Ñawpaqta qhawallay",
- "translate-tag-category": "T'ikrana p'anqakuna",
"translate-tag-page-desc": "T'ikrasqaqa [[$2|$1]] nisqa wiki p'anqam.",
"translate-sidebar-alltrans": "Huk simikunapi",
"translations": "Tukuy t'ikrasqakuna",
@@ -167,7 +160,6 @@
"translate-manage-action-conflict": "Hawamanta chaskispa allinchanapaq ñawirina nispa unanchay",
"translate-manage-action-ignore": "Ama musyaychu",
"translate-manage-action-fuzzy": "T'ikrasqakunata hawamanta chaskispa allinchanapaq ñawirina nispa unanchay",
- "translate-manage-fuzzy-summary": "Willañiqip sut'ichayninqa hukchasqam.",
"importtranslations": "T'ikrasqakunata hawamanta chaskiy",
"translate-import-from-local": "Tiyanalla willañiqita chaqnay:",
"translate-import-load": "Willañiqita chaqnay",
@@ -179,9 +171,7 @@
"translate-js-summary": "Pisichay:",
"translate-js-save": "Waqaychay",
"translate-js-next": "Waqaychay, qatiqta kichaspa",
- "translate-js-nonext": "Kayqa kay p'anqapi qhipaq willaymi karqan.",
"translate-js-skip": "Qatiqman t'iskuy",
- "translate-js-save-failed": "Manam waqaychasqachu. Ama hina kaspa, kay pantasqamanta willariy.",
"translate-js-history": "T'ikraypa wiñay kaswaynin",
"translate-js-support": "Tapuy",
"translate-js-support-title": "Yanapayta mañarikuy, kay willamanta mana aypalla yachaspaykiqa.",
@@ -200,19 +190,6 @@
"translate-searchprofile-tooltip": "Tukuy t'ikrasqakunapi maskay",
"translate-search-languagefilter": "Ch'illchina rimaykama:",
"translate-search-nofilter": "Ama ch'illchina kachunchu",
- "translate-messagereview-submit": "Allinchaspa ñawirisqa unanchay",
- "translate-messagereview-progress": "Allinchaspa ñawirisqa unanchaspa...",
- "translate-messagereview-failure": "Allinchaspa ñawirisqa unanchayqa manam aypasqachu: $1",
- "translate-messagereview-done": "Allinchaspa ñawirisqa unanchasqañam",
- "translate-messagereview-reviews": "{{PLURAL:$1|Huk ruraqpa|$1 ruraqkunap}} allinchaspa ñawirisqa unanchasqanñam",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|Qampa uyakusqaykiñam|$1 ruraqkunap (qampapas) allinchaspa ñawirisqa unanchasqaykichikñam}}",
- "api-error-invalidrevision": "T'ikrasqaqa manam tarisqachu",
- "api-error-unknownmessage": "Willayqa manam tarisqachu",
- "api-error-fuzzymessage": "Willayqa allinchanapaq ñawirina unanchasqam",
- "api-error-owntranslation": "Kikiykip t'ikrasqaykikunataqa manam allinchaspa ñawirisqa unanchayta atinkichu",
- "translate-messagereview-no-fuzzy": "Allinchanapaq ñawirina t'ikrasqakunataqa manam allinchaspa ñawirisqa unanchayta atinkichu.",
- "translate-messagereview-no-own": "Kikiykip t'ikrasqaykikunataqa manam allinchaspa ñawirisqa unanchayta atinkichu.",
- "translate-messagereview-doit": "Kay t'ikrasqata allin t'ikrasqam nispa allinchaspa ñawirisqa unanchay.",
"log-name-translationreview": "T'ikrasqata qhawakipay hallch'a",
"log-description-translationreview": "T'ikrasqakunamanta willay huñukunamantapas tukuy qhawakipasqakunamanta hallch'a.",
"logentry-translationreview-message": "$1 {{GENDER:$2|allinchaspa ñawirisqa unanchan}} t'ikrasqata $3",
@@ -225,7 +202,6 @@
"translate-dynagroup-recent-label": "Ñaqha t'ikrasqakuna",
"translate-dynagroup-additions-label": "Ñaqha yapasqakuna",
"translate-dynagroup-additions-desc": "Kay willay huñuqa musuqpas hukchasqapas willaykunatam rikuchin.",
- "translate-gethelp": "Yanapa",
"translate-msggroupselector-projects": "Willay huñu",
"translate-msggroupselector-search-placeholder": "Huñukunata maskay",
"translate-msggroupselector-search-all": "Tukuy",
diff --git a/www/wiki/extensions/Translate/i18n/core/rif.json b/www/wiki/extensions/Translate/i18n/core/rif.json
index ea6a91d4..9881aed1 100644
--- a/www/wiki/extensions/Translate/i18n/core/rif.json
+++ b/www/wiki/extensions/Translate/i18n/core/rif.json
@@ -1,9 +1,10 @@
{
"@metadata": {
"authors": [
- "Jose77"
+ "Jose77",
+ "Amara-Amaziɣ"
]
},
- "translate-page-navigation-legend": "Asari",
- "translate-page-edit": "arri"
+ "translate-page-navigation-legend": "ⴰⵙⵜⴰⵔⴰ",
+ "translate-page-edit": "ⵙⵏⴼⵍ"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/rm.json b/www/wiki/extensions/Translate/i18n/core/rm.json
index 2306e6c0..9d38a982 100644
--- a/www/wiki/extensions/Translate/i18n/core/rm.json
+++ b/www/wiki/extensions/Translate/i18n/core/rm.json
@@ -3,7 +3,8 @@
"authors": [
"Gion",
"Gion-andri",
- "Kazu89"
+ "Kazu89",
+ "Terfili"
]
},
"translate-page-settings-legend": "Parameters",
@@ -27,7 +28,7 @@
"translate-edit-no-information": "''Tar quai messadi na datti nagina documentaziun.\nSche vus savais nua e co che quai messadi vegn duvrà, pudais vus gidar auters translaturs cun agiuntar ina documentaziun tar quai messadi.''",
"translate-edit-information": "Infurmaziuns davart il messadi \"$2\" ($1)",
"translate-edit-in-other-languages": "Messadis \"$1\" en autras linguas",
- "translate-edit-committed": "Translaziun actuala da la software",
"translate-edit-warnings": "Avertiment davart translaziuns nuncumplettas",
+ "translate-documentation-language": "Documentaziun da messadi",
"tux-warnings-hide": "zuppentar"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ro.json b/www/wiki/extensions/Translate/i18n/core/ro.json
index 69e98e4f..a3174754 100644
--- a/www/wiki/extensions/Translate/i18n/core/ro.json
+++ b/www/wiki/extensions/Translate/i18n/core/ro.json
@@ -14,11 +14,6 @@
},
"translate": "Traducere",
"translate-desc": "[[Special:Translate|Pagină specială]] pentru traducerea software-ului MediaWiki, dar nu numai",
- "translate-taskui-view": "Arată toate mesajele",
- "translate-taskui-untranslated": "Arată mesajele netraduse",
- "translate-taskui-optional": "Arată mesajele opționale",
- "translate-taskui-acceptqueue": "Doar mesajele pe care le pot marca ca revizuite",
- "translate-taskui-reviewall": "Revizuiește toate traducerile",
"translate-taskui-export-to-file": "Exportare în format nativ",
"translate-taskui-export-as-po": "Exportare pentru traducere off-line",
"translate-taction-translate": "Traducere",
@@ -47,7 +42,6 @@
"translate-page-description-hasoptional": "Acest grup conține mesaje opționale.\nMesajele opționale ar trebui traduse doar în cazul în care limba dumneavoastră are cerințe speciale,\nprecum neutilizarea spațiilor sau transliterarea numelor proprii. $1",
"translate-page-description-hasoptional-open": "Arată mesajele opționale.",
"translate-page-edit": "modificare",
- "translate-ext-url": "<hr /> Site web: $1",
"translate-optional": "(opțional)",
"translate-ignored": "(ignorat)",
"translate-edit-title": "Modificați „$1”",
@@ -57,9 +51,7 @@
"translate-edit-no-information": "<em>Acest mesaj nu are documentație.\nDacă știți unde sau cum este folosit, îi puteți ajuta pe ceilalți traducători prin adăugarea documentației sale.</em>",
"translate-edit-information": "Informații despre mesaj ($1)",
"translate-edit-in-other-languages": "Mesajul în alte limbi",
- "translate-edit-committed": "Traducerea curentă din software",
"translate-edit-warnings": "Avertizări în legătură cu traducerile incomplete",
- "translate-edit-tmsugs": "Sugestii din memoria de traducere",
"translate-edit-tmmatch-source": "Textul sursă al traducerii: $1",
"translate-edit-tmmatch": "Potrivire în proporție de $1%",
"translate-use-suggestion": "Înlocuiește traducerea curentă cu această sugestie.",
@@ -141,7 +133,6 @@
"translate-statsf-language": "Listă de coduri de limbă separate prin virgulă:",
"translate-statsf-group": "Listă de coduri de grup separate prin virgulă:",
"translate-statsf-submit": "Previzualizare",
- "translate-tag-category": "Pagini traductibile",
"translate-tag-page-desc": "Traducerea paginii wiki [[$2|$1]] din $3 ($4).",
"translate-sidebar-alltrans": "În alte limbi",
"translations": "Toate traducerile",
@@ -216,7 +207,6 @@
"translate-manage-toolong": "Timpul maxim de prelucrare care este de {{PLURAL:$1|o secundă|$1 secunde|$1 de secunde}} a fost depășit.\nVă rugăm să retrimiteți formularul pentru a continua prelucrarea.",
"translate-manage-import-summary": "Se importă o nouă versiune din sursă externă",
"translate-manage-conflict-summary": "Se importă o nouă versiune dintr-o sursă externă.\nVă rugăm să verificați.",
- "translate-manage-fuzzy-summary": "Definiția mesajului s-a schimbat",
"translate-manage-submit": "Execută",
"translate-manage-import-ok": "Importată: $1",
"translate-manage-import-done": "Importare finalizată!",
@@ -233,9 +223,7 @@
"translate-js-summary": "Rezumat:",
"translate-js-save": "Salvare",
"translate-js-next": "Salvează și mergi mai departe",
- "translate-js-nonext": "Acesta este ultimul mesaj de pe această pagină.",
"translate-js-skip": "Sari mai departe",
- "translate-js-save-failed": "Salvarea a eșuat. Vă rugăm să raportați această eroare.",
"translate-js-history": "Istoricul traducerii",
"translate-js-support": "Adresați o întrebare",
"translate-js-support-title": "Cereți ajutor în cazul în care nu există suficiente informații pentru a traduce corect acest mesaj.",
@@ -254,19 +242,6 @@
"translate-searchprofile-tooltip": "Caută în toate traducerile",
"translate-search-languagefilter": "Filtrare după limbă:",
"translate-search-nofilter": "Fără filtrare",
- "translate-messagereview-submit": "Marchează ca revizuită",
- "translate-messagereview-progress": "Se marchează ca revizuită...",
- "translate-messagereview-failure": "Marcarea ca revizuită a eșuat: $1",
- "translate-messagereview-done": "Revizuită",
- "translate-messagereview-reviews": "Revizuit de {{PLURAL:$1|un utilizator|$1 utilizatori|$1 de utilizatori}}",
- "translate-messagereview-reviewswithyou": "Revizuit de {{PLURAL:$1|dumneavoastră|$1 utilizatori, inclusiv dumneavoastră|$1 de utilizatori, inclusiv dumneavoastră}}",
- "api-error-invalidrevision": "Traducerea nu a fost găsită",
- "api-error-unknownmessage": "Mesajul nu a fost găsit",
- "api-error-fuzzymessage": "Traducerea este marcată ca fuzzy",
- "api-error-owntranslation": "Nu vă puteți marca propriile traduceri ca revizuite",
- "translate-messagereview-no-fuzzy": "Traducerile fuzzy nu pot fi marcate ca revizuite.",
- "translate-messagereview-no-own": "Nu vă puteți marca propriile traduceri ca revizuite.",
- "translate-messagereview-doit": "Marcați această traducere ca revizuită.",
"log-name-translationreview": "Jurnal recenzii traduceri",
"log-description-translationreview": "Jurnalul tuturor revizuirilor pentru traduceri și grupuri de mesaje.",
"logentry-translationreview-message": "$1 {{GENDER:$2|a revizuit}} traducerea $3",
@@ -281,7 +256,6 @@
"translate-dynagroup-recent-desc": "Acest grup de mesaje afișează toate traducerile recente pentru această limbă. Este util în special în cazul revizuirilor.",
"translate-dynagroup-additions-label": "Adăugiri recente",
"translate-dynagroup-additions-desc": "Acest grup de mesaje afișează mesajele noi și modificate.",
- "translate-gethelp": "Ajutor",
"translate-msggroupselector-projects": "Grup de mesaje",
"translate-msggroupselector-search-placeholder": "Căutare grupuri",
"translate-msggroupselector-search-all": "Toate",
diff --git a/www/wiki/extensions/Translate/i18n/core/roa-tara.json b/www/wiki/extensions/Translate/i18n/core/roa-tara.json
index def688ff..a5d3bb15 100644
--- a/www/wiki/extensions/Translate/i18n/core/roa-tara.json
+++ b/www/wiki/extensions/Translate/i18n/core/roa-tara.json
@@ -6,11 +6,7 @@
},
"translate": "Traduce",
"translate-desc": "[[Special:Translate|Pàgena speciele]] pe le traduziune de MediaUicchi e rrete",
- "translate-taskui-view": "Fà vedè tutte le messàgge",
- "translate-taskui-untranslated": "Fà vedè le messàgge da traducere",
- "translate-taskui-optional": "Fà vedè le messaggè opzionale",
- "translate-taskui-acceptqueue": "Sulamende le messàgge ca pozze signà cumme reviste",
- "translate-taskui-reviewall": "Revide tutte le traduziune",
+ "translate-fuzzybot-desc": "Stu cunde speciale de sisteme avène ausate da l'[https://www.mediawiki.org/wiki/Extension:Translate estenzione de traduzione] de MediaUicchi ausate pe mandenè le traduziune.\nStu cunde jè 'nu stuézze d'u softuer de MediaUicchi e non ge se pò ddà a nisciune utende.",
"translate-taskui-export-to-file": "Esporte in formate native",
"translate-taskui-export-as-po": "Esporte pe le traduziune fore linèe",
"translate-taction-translate": "Traduce",
@@ -32,6 +28,7 @@
"translate-page-navigation-legend": "Navigazzione",
"translate-page-showing": "Stoche a fazze vedè le messàgge da $1 a $2 de $3.",
"translate-page-showing-all": "Stoche a fazze vedè $1 {{PLURAL:$1|messàgge}}.",
+ "translate-page-showing-none": "Nisciune messàgge da fà vedè.",
"translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "Pàgena successive",
"translate-prev": "Pàgena precedende",
@@ -39,7 +36,6 @@
"translate-page-description-hasoptional": "Stu gruppe de messàgge tène messàgge opzionale.\nLe messàgge opzione avessera sulamende essere tradotte quanne 'a lènga toje tène richieste speciale cumme a quidde de nò ausà spazie o probbietà de translitterazione de le nome. $1",
"translate-page-description-hasoptional-open": "Fà vedè le messàgge opzionale.",
"translate-page-edit": "cange",
- "translate-ext-url": "<hr />Site web: $1",
"translate-optional": "(opzionale)",
"translate-ignored": "(ignorate)",
"translate-edit-title": "Cange \"$1\"",
@@ -55,7 +51,13 @@
"translate-use-suggestion": "Sostituisce 'a traduzione de mò cu le suggereminde.",
"translate-edit-nopermission": "Tu è abbesogne de le permesse pe traducere le messàgge.",
"translate-edit-askpermission": "Richieste de permesse",
+ "exporttranslations": "Esporte le traduziune",
+ "translate-export-form-format": "Formate",
+ "translate-export-invalid-format": "Specifiche 'nu formate valide.",
+ "translate-export-not-supported": "L'esportazione de le traduziune non ge stè.",
+ "translate-export-format-notsupported": "'U formate de esportazione specificate non g'avène supportate da 'u gruppe de le messàgge.",
"translate-magic-pagename": "Traduzione Estese de MediaUicchi",
+ "translate-magic-help": "Puè traducere le alias de le pàggene speciale, le parole mageche e le nome de le namespace.\n\nLe alias de le pàggene speciale e le parole mageche ponne avè cchiù traduziune.\nLe traduziune avènene separate da 'na virgole (,).\nLe namespace ponne avè sulamende 'na traduzione.\n\nTraducere 'u namespace de le 'ngazzaminde de le pàggene de pruggette <code>$1 talk</code> pò essere comblicate assaije. <code>$1</code> avène cangiate cu 'u nome d'u site (pe esembie <code>{{ns:project_talk}}</code>).\nCe non g'è possibbile fà 'n'espressione valide jndr'à lènga toje senze cangià 'u nome d'u site, pe piacere condatte 'u [[Support]].\n\nA essere traduttore pe reggistrà le cangiaminde toje.\nLe cangiaminde non g'avènene reggistrate 'nzigne ca non ge cazze sus a 'u buttone \"Reggistre\" aqquà sotte.",
"translate-magic-module": "Module:",
"translate-magic-submit": "Analizze",
"translate-magic-cm-export": "Esporte",
@@ -75,6 +77,7 @@
"translate-magic-saved": "Le cangiaminde tune onne state reggistrate.",
"translate-checks-parameters": "{{PLURAL:$2|'U seguende parametre non g'è|'U seguende parametre non ge sonde}} ausate:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|'U seguende parametre jè|'U seguende parametre sò}} scanusciute:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-balance": "Ste 'nu numere de {{PLURAL:$2|parendesi}} scucchiate: <strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "{{PLURAL:$2|'U collegamende suguende jè probblematiche|Le $2 collegaminde seguende sò probblematece}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "{{PLURAL:$2|'U collegamende suguende jè |Le $2 collegaminde seguende sò }} mangande:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Pe piacere sostituisce {{PLURAL:$2|'u tag|le tag}} cu une corrette:\n<strong><nowiki>$1</nowiki></strong>",
@@ -83,20 +86,32 @@
"translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ave module duplicate a 'a fine. <nowiki>{{PLURAL:$1|pecore|pecore}}</nowiki> avessera essere scritte cumme a <nowiki>{{PLURAL:$1|pecore}}</nowiki>.",
"translate-checks-pagename": "'U namespace ha cangiate da 'a definizione",
"translate-checks-format": "Sta traduzione non ge segue 'a definizione o tène 'na sindassi invalide: $1",
+ "translate-checks-escape": "Le cange de codece seguende ponne essere accidendale: <strong>$1</strong>",
"translate-checks-parametersnotequal": "'U cunde de le parametre jè {{PLURAL:$1|$1}}; invece avessa essere {{PLURAL:$2|$2}}.",
"translate-checks-malformed": "<nowiki>$1</nowiki> jè malformate.",
"translate-checks-fudforum-syntax": "Ause <nowiki>$1</nowiki> invece de <nowiki>$2</nowiki> jndr'à stu proggette.",
"translate-pref-nonewsletter": "No me mannà email da le newsletter",
"translate-pref-editassistlang": "Assistende de le lènghe:",
"prefs-translate": "Opziune de traduzione",
+ "translate-pref-editassistlang-help": "Codece de le lènghe separate da virgole.\nLe traduziune de 'nu messàgge jndr'à ste lènghe avènene fatte 'ndrucà duranne 'a traduzione.\nL'elenghe predefinite (default) de le lènghe depende da ìa probbia lènghe.",
"translate-pref-editassistlang-bad": "Codece d'a lènghe invalide jndr'à l'elenghe:\n<nowiki>$1</nowiki>.",
"right-translate": "Cange ausanne l'inderfacce de traduzione",
+ "action-translate": "cange ausanne l'inderfacce de traduzione",
"right-translate-manage": "Gestisce le gruppe de messàgge",
"action-translate-manage": "gestisce le gruppe de messàgge",
"right-translate-import": "'Mborte le traduziune fore linèe",
"action-translate-import": "'mborte le traduziune fore linèe",
"right-translate-messagereview": "Revide le traduziune",
+ "action-translate-messagereview": "revide le traduziune",
"right-translate-groupreview": "Cange 'u state d'u flusse de fatìe de le gruppe de messàgge",
+ "action-translate-groupreview": "cange 'u state d'u flusse de fatìe de le gruppe de messàgge",
+ "translate-rcfilters-translations": "Traduziune",
+ "translate-rcfilters-translations-only-label": "Traduziune",
+ "translate-rcfilters-translations-only-desc": "Cangiaminde sus a le pàggene tradotte.",
+ "translate-rcfilters-translations-filter-label": "Nisciuna traduzione",
+ "translate-rcfilters-translations-filter-desc": "Tutte le cangiaminde ca non ge so traduziune.",
+ "translate-rcfilters-translations-site-label": "Messàgge d'u site",
+ "translate-rcfilters-translations-site-desc": "Personalizzaziune de le messàgge d'u site jndr'à le namespace de MediaUicchi.",
"translate-rc-translation-filter": "Filtre de traduziune:",
"translate-rc-translation-filter-no": "No fà ninde",
"translate-rc-translation-filter-only": "Fà vedè sulamende le traduziune",
@@ -138,12 +153,14 @@
"translate-translations-fieldset-title": "Mèssagge",
"translate-translations-messagename": "Nome:",
"translate-translations-project": "Pruggette:",
+ "translate-translations-including-no-param": "Pe piacere specifiche 'na chiave de messàgge valide jndr'à 'u parametre d'a sottopàgene",
"translate-translations-history-short": "h",
"languagestats": "Statisteche d'a lènghe",
"languagestats-summary": "Sta pàgene face vedè le traduziune pe tutte le gruppe de messàgge pe 'na lènghe.",
"messagegroupstats-summary": "Sta pàgene face 'ndrucà le statisteche de le gruppe de messàgge.",
"languagestats-stats-for": "Statisteche de le traduziune pe $1 ($2).",
"languagestats-recenttranslations": "traduziune recende",
+ "translate-langstats-incomplete": "De le statisteche de sta pàgene so 'ngomblete. Careche arrete 'a pàgene pe farle assè cchiù comblete.",
"translate-langstats-expand": "spanne",
"translate-langstats-collapse": "scunne",
"translate-langstats-expandall": "spanne tutte",
@@ -156,7 +173,8 @@
"translate-total": "Messagge Totale",
"translate-untranslated": "Senza traduzione",
"translate-percentage-complete": "% de Combletamende",
- "translate-percentage-fuzzy": "Non aggiornete",
+ "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",
@@ -167,17 +185,20 @@
"translate-mgs-noempty": "No fà 'ndrucà le lènghe ca no tènene nisciuna traduzione",
"translate-mgs-submit": "Fà vedè le statisteche",
"translate-mgs-column-language": "Lènghe",
- "translate-mgs-totals": "Tutte le lènghe 'nzieme",
+ "translate-mgs-totals": "Tutte le $1 {{PLURAL:$1|lènghe}} 'nzieme",
"translate-mgs-invalid-group": "'U gruppe specifiche $1 non g'esiste.",
"translate-mgs-nothing": "Ninde da fà vedè pe le statisteche cercate.",
"supportedlanguages": "Lènghe supportate",
+ "supportedlanguages-summary": "Sta pàgene face 'ndrucà 'n'elenghe de totte le lènghe mandenute da {{SITENAME}}, 'nzieme a le nome de le tradutture ca onne fatiate sus a quedda lènghe. 'U nome de 'nu traduttore iesse de demenziune cchiù granne ce ha fatte 'nu sbuènne de cangiaminde ce nò iesse cchiù piccinne, invece 'u culore d'a sottolineature indichesce quanda tiembe ha passate da l'urtema attività soje.",
"supportedlanguages-colorlegend": "Leggende d'u culore: L'urtema traduzione jè de $1 sciurne fà.",
"supportedlanguages-portallink": "[$1] $2 - $3",
"supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite non g'è supportate",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traduttore}}|Tradutture}}: $1",
"supportedlanguages-recenttranslations": "traduziune recende",
"supportedlanguages-count": "$1 {{PLURAL:$1|lènghe}} in totale.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|cangiamende|cangiaminde}} - l'urteme cangiamende $3 {{PLURAL:$3|sciurne}} fà",
+ "abusefilter-edit-builder-vars-translate-source-text": "Teste de origgene de 'n'aunità de traduzione",
"translate-save": "Reggistre ($1)",
"translate-jssti-add": "Aggiunge a l'elenghe",
"managemessagegroups": "Gestione de le gruppe de messàgge",
@@ -185,6 +206,7 @@
"translate-smg-nochanges": "Non ge stonne cangiaminde da processà.",
"translate-smg-submit": "Conferme le cangiaminde pu processe",
"translate-smg-submitted": "'A definizione de le messàgge ha state aggiornate. Le cangiaminde stonne avènene processate da sotta sotte.",
+ "translate-smg-more": "Stonne otre cangiaminde da trattà apprisse 'u 'nvie de ste cangiaminde.",
"translate-smg-left": "Condenute d'u messàgge jndr'à uicchi",
"translate-smg-right": "Cangiaminde ca arrivane",
"translate-manage-import-diff": "Messàgge $1 | Aziune: $2",
@@ -195,7 +217,13 @@
"translate-manage-action-ignore": "Ignore",
"translate-manage-action-fuzzy": "'Mborte e mitte le traduziune da revedè",
"translate-manage-nochanges": "Non ge stonne cangiaminde jndr'à le definiziune de le messàgge jndr'à stu gruppe.",
+ "translate-manage-nochanges-other": "Non ge stonne cangiaminde pe sta lénghe.\nAuse 'u collegamende aqquà sotte pe 'ndrucà le dettaglie d'u gruppe.",
+ "translate-manage-inconsistent": "Ha state acchiate 'n'ingonsistenze jndr'à richieste.\nControlle le cangiaminde e pruéve arrete.\nDettaglie: $1",
+ "translate-manage-toolong": "'U tiembe massime de elabborazione de $1 {{PLURAL:$1|seconde}} ha spicciate.\nPe piacere manna arrete 'u module pe condinuà jndr'à l'elabborazione.",
+ "translate-manage-import-summary": "Stoche a 'mborte 'na versiona nove da 'na sorgende de fore",
+ "translate-manage-conflict-summary": "Stoche a 'mborte 'na versiona nove da 'na fonde de fore.\nPe piacere condrolle.",
"translate-manage-submit": "Esegue",
+ "translate-manage-intro-other": "Aqquà sotte ste 'n'elenghe de cangiaminde a le traduziune jndr'à lènghe $1.\nCondrolle le cangiaminde e scacchie l'azione da ffà pe ogne messàgge.\nCe scacchie de cacà le cangiaminde, sta azione addevende sulamende temboranèe.",
"translate-manage-import-ok": "'Mbortate: $1",
"translate-manage-import-done": "'Mbortazione combletate!",
"importtranslations": "'Mborte le traduziune",
@@ -206,14 +234,15 @@
"translate-import-err-invalid-title": "'U nome d'u file date <nowiki>$1</nowiki> ere invalide.",
"translate-import-err-no-such-file": "'U file <nowiki>$1</nowiki> non g'esiste o non già state carecate in locale.",
"translate-import-err-stale-group": "Jndr'à 'u gruppe de messàgge stu file non g'esiste.",
+ "translate-import-err-no-headers": "'U file non g'è 'nu Gettext formattate correttamende pe l'estenzione Translate:\n'Mbossibbile determinà 'u gruppe de messàgge e 'a lènghe da le 'ndestazziune d'u file.",
+ "translate-import-err-warnings": "'U file non g'è furmate bbuène.\nAssecurate ca 'u probbie cangiatore non ge leve le cambe msgctxt.\nDettaglie: $1",
"translate-js-summary": "Riepileghe:",
"translate-js-save": "Reggìstre",
"translate-js-next": "Reggìstre e iapre 'u prossime",
- "translate-js-nonext": "Quiste ere l'urteme messàgge sus a sta pàgene.",
"translate-js-skip": "Zumbe a 'u prossime",
- "translate-js-save-failed": "Reggistrazione fallite. Pe piacere segnale st'errore.",
"translate-js-history": "Cunde d'a traduzione",
"translate-js-support": "Fà 'na domande",
+ "translate-js-support-title": "Richieste de assistenze ce non ge iacchie 'mbormaziune sufficiende pe traducere stu messàgge.",
"translate-js-support-unsaved-warning": "Tu è tradiziune non reggistrate.",
"translate-gs-pos": "Pos.",
"translate-gs-code": "Codece",
@@ -227,38 +256,30 @@
"translate-documentation-language": "Documendazione d'u messàgge",
"translate-searchprofile": "Tradutture",
"translate-searchprofile-tooltip": "Cirche da tutte le traduziune",
+ "translate-searchprofile-note": "Cchiù opziune pa recerche sò disponibbile cy [$1 ricerche de traduzione].",
"translate-search-languagefilter": "Filtre pe lènghe:",
"translate-search-nofilter": "Nisciune filtre",
- "translate-messagereview-submit": "Signe reviste",
- "translate-messagereview-progress": "Stoche a segne cumme reviste...",
- "translate-messagereview-failure": "Stoche a segne cumme reviste fallite: $1",
- "translate-messagereview-done": "Reviste",
- "translate-messagereview-reviews": "Reviste da {{PLURAL:$1|'n'utende|$1 utinde}}",
- "translate-messagereview-reviewswithyou": "Reviste da {{PLURAL:$1|te|$1 utinde cu te}}",
- "api-error-invalidrevision": "Traduzione none acchiate",
- "api-error-unknownmessage": "Messàgge none acchiate",
- "api-error-fuzzymessage": "Traduzione signate cumme da revedè",
- "api-error-owntranslation": "Tu non ge puè signà 'a traduziona toje cumme reviste",
- "translate-messagereview-no-fuzzy": "Le traduziune non confermate non ge ponne essere signate cumme reviste.",
- "translate-messagereview-no-own": "Tu non ge puè signà 'a traduziona toje cumme reviste.",
- "translate-messagereview-doit": "Signe sta traduzione cumme reviste.",
"log-name-translationreview": "Archivije de le revisitaziune de le traduziune",
+ "log-description-translationreview": "Archivije de tutte le revisiune de le traduziune e de le gruppe de messàgge.",
"logentry-translationreview-message": "$1 traduzione {{GENDER:$2|reviste}} $3",
"logentry-translationreview-group": "$1 {{GENDER:$2|ave cangiate}} 'u state de $4 traduziune de $3 da $6 a $7",
"group-translate-sandboxed": "Tradutture none approvate",
"group-translate-sandboxed-member": "{{GENDER:$1|traduttore none approvate}}",
"right-translate-sandboxmanage": "Gestisce le buatte de sabbie de l'utinde",
"action-translate-sandboxmanage": "gestisce le buatte de sabbie de l'utinde",
+ "right-translate-sandboxaction": "Esegue aziune autorizzate pe le utinde in modalità sandbox",
+ "action-translate-sandboxaction": "esegue aziune autorizzate pe le utinde in modalità sandbox",
"translate-workflow-state-": "(none 'mbostate)",
"translate-workflowstatus": "State: $1",
"translate-workflow-set-doing": "Stoche a 'mboste...",
+ "translate-workflow-autocreated-summary": "Ccrejazzione automateche d'a pàgene pu state de flusse de fatìe $1",
"translate-stats-workflow": "State",
"translate-workflowgroup-label": "State de le flusse de fatìe",
"translate-workflowgroup-desc": "Stu gruppe de messàgge face vedè le state de le flusse de fatìe de le traduziune.\nLe state sò definite jndr'à variabbile de configurazione $wgTranslateWorkflowStates.",
"translate-dynagroup-recent-label": "Traduziune recende",
+ "translate-dynagroup-recent-desc": "Stu gruppe de messàgge face 'ndrucà le urteme traduziune jndr'à sta lènghe.\nUtile pe l'attività de revisione.",
"translate-dynagroup-additions-label": "Urteme aggiunde",
"translate-dynagroup-additions-desc": "Stu gruppe de messàgge face vedè le messàgge nuève e cangiate.",
- "translate-gethelp": "Ajute",
"translate-msggroupselector-projects": "Gruppe de messàgge",
"translate-msggroupselector-search-placeholder": "Gruppe de ricerche",
"translate-msggroupselector-search-all": "Tutte",
@@ -277,14 +298,17 @@
"tux-status-translated": "Tradotte",
"tux-status-saving": "Stoche a reggistre...",
"tux-status-unsaved": "Non reggistrate",
+ "tux-save-unknown-error": "'N'errore scanusciute s'a verificate.",
"tux-editor-placeholder": "'A traduziona toje",
+ "tux-editor-editsummary-placeholder": "Riepiloghe opzionale",
"tux-editor-paste-original-button-label": "Copie 'u teste iniziale",
"tux-editor-discard-changes-button-label": "Scitte le cangiaminde",
"tux-editor-save-button-label": "Reggistre 'a traduzione",
"tux-editor-skip-button-label": "Zumbe a 'u prossime",
"tux-editor-cancel-button-label": "Annulle",
"tux-editor-confirm-button-label": "Conferme 'a traduzione",
- "tux-editor-shortcut-info": "Cazze \"$1\" pe reggistrà o \"$2\" pe zumbà a 'u prossime messàgge o \"$3\" pe otre cose.",
+ "tux-editor-proofread-button-label": "Signe cumme reviste",
+ "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",
@@ -339,14 +363,18 @@
"tux-editor-close-tooltip": "Achiude",
"tux-editor-expand-tooltip": "Spanne",
"tux-editor-collapse-tooltip": "Scunne",
+ "tux-editor-message-tools-show-editor": "Fà 'ndrucà jndr'à 'u cangiatore de uicchi",
"tux-editor-message-tools-history": "Cunde",
"tux-editor-message-tools-delete": "Scangìlle",
"tux-editor-message-tools-translations": "Tutte le traduziune",
+ "tux-editor-message-tools-linktothis": "Collegaminde a stu messàgge",
"tux-editor-loading": "Stoche a scareche…",
"translate-search-more-languages-info": "$1 cchiù {{PLURAL:$1|lènghe}}",
"translate-statsbar-tooltip": "$1% tradotte, $2% reviste",
"translate-statsbar-tooltip-with-fuzzy": "$1% tradotte, $2% reviste, $3% da aggiornà",
"translate-search-more-groups-info": "$1 cchiù {{PLURAL:$1|gruppe}}",
"translate-ulsdep-title": "Errore de configurazione",
- "translate-ulsdep-body": "L'estenzione de traduzione depenne da l'[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector estenzione Scacchiatore Universale de Lènghe]."
+ "translate-ulsdep-body": "L'estenzione de traduzione depenne da l'[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector estenzione Scacchiatore Universale de Lènghe].",
+ "tux-session-expired": "Non g'è trasute. Tràse jndr'à 'na schede a parte; oppure copie 'a traduzione ca non g'è reggistrate, tràse, e tuèrne jndr'à sta pàgene e sckaffe 'a traduziona toje.",
+ "tux-nojs": "Stu strumende non ge funzione senze JavaScript. JavaScript jè disabilitate, non ge ste funzione, o 'u browser tune non g'u supporte."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ru.json b/www/wiki/extensions/Translate/i18n/core/ru.json
index 6d197cb4..cb985e87 100644
--- a/www/wiki/extensions/Translate/i18n/core/ru.json
+++ b/www/wiki/extensions/Translate/i18n/core/ru.json
@@ -22,16 +22,23 @@
"Rubin",
"Tempodivalse",
"Volkov",
- "Александр Сигачёв"
+ "Александр Сигачёв",
+ "Туллук",
+ "Irus",
+ "Kareyac",
+ "Умар",
+ "Ping08",
+ "Mailman",
+ "Av6",
+ "Wirbel78",
+ "Vlad5250",
+ "Diralik",
+ "Movses"
]
},
"translate": "Перевод",
"translate-desc": "[[Special:Translate|Служебная страница]] для перевода MediaWiki и прочих программ",
- "translate-taskui-view": "Показать все сообщения",
- "translate-taskui-untranslated": "Показать непереведённые сообщения",
- "translate-taskui-optional": "Показать дополнительные сообщения",
- "translate-taskui-acceptqueue": "Только сообщения, ожидающие моей проверки",
- "translate-taskui-reviewall": "Проверить все переводы",
+ "translate-fuzzybot-desc": "Это специальная системная учётная запись, используемая [https://www.mediawiki.org/wiki/Extension:Translate/ru расширением перевода] MediaWiki для задач поддержки переводов.\nЭта учётная запись является частью программного обеспечения MediaWiki и не принадлежит никакому участнику.",
"translate-taskui-export-to-file": "Экспорт в родном формате",
"translate-taskui-export-as-po": "Экспорт для оффлайнового перевод",
"translate-taction-translate": "Перевод",
@@ -53,13 +60,13 @@
"translate-page-navigation-legend": "Навигация",
"translate-page-showing": "Показаны сообщения с $1 по $2 (из $3).",
"translate-page-showing-all": "Показано $1 {{PLURAL:$1|сообщение|сообщения|сообщений}}.",
+ "translate-page-showing-none": "Нет сообщений для показа.",
"translate-next": "следующая страница",
"translate-prev": "предыдущая страница",
"translate-page-description-legend": "Информация о группе",
"translate-page-description-hasoptional": "В этой группе содержатся дополнительные сообщения.\nДополнительные сообщения переводятся только в тех случаях, когда ваш язык предъявляет какие-то дополнительные требования, — например, если где-то не должны использоваться пробелы, или при транслитерации имён собственных. $1",
"translate-page-description-hasoptional-open": "Показывать дополнительные сообщения.",
"translate-page-edit": "изменить",
- "translate-ext-url": "<hr />Сайт: $1",
"translate-optional": "(необязательное)",
"translate-ignored": "(игнорируемое)",
"translate-edit-title": "Изменить «$1»",
@@ -75,6 +82,11 @@
"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": "Углублённый перевод MediaWiki",
"translate-magic-help": "Вы можете переводить псевдонимы служебных страниц, «волшебные слова» и названия пространств имён.\n\nСлужебные страницы и «волшебные слова» могут иметь несколько переводов.\nПереводы разделяются запятой (,).\nНазвания пространств имён могут иметь только один вариант перевода.\n\nПеревод названий пространств имён, содержащих страницы обсуждений («<code>$1 talk</code>»), может оказаться сложнее, так как «<code>$1</code>» здесь будет заменено на имя сайта (например, «<code>{{ns:project_talk}}</code>»).\nЕсли подобная грамматическая конструкция для вашего языка некорректна без изменения имени сайта, сообщите нам об этом на странице [[Support]].\n\nЧтобы сохранить изменения, вы должны входить в группу переводчиков.\nИзменения не будут сохранены, пока вы не нажмёте кнопку ниже.",
"translate-magic-module": "Модуль:",
@@ -114,13 +126,23 @@
"prefs-translate": "Настройки перевода",
"translate-pref-editassistlang-help": "Разделённый запятыми список кодов языков.\nПереводы на эти языки будут показаны при правке сообщений.\nСписок по умолчанию зависит от вашего языка.",
"translate-pref-editassistlang-bad": "Неверный языковой код в списке:\n<nowiki>$1</nowiki>.",
- "right-translate": "правка с использованием интерфейса перевода",
- "right-translate-manage": "управление группами сообщений",
+ "right-translate": "Правка с использованием интерфейса перевода",
+ "action-translate": "править с использованием интерфейса перевода",
+ "right-translate-manage": "Управление группами сообщений",
"action-translate-manage": "управление группами сообщений",
- "right-translate-import": "импортирование переводов, выполненных в оффлайне",
+ "right-translate-import": "Импортирование переводов, выполненных в оффлайне",
"action-translate-import": "импорт переводов, выполненных в оффлайне",
- "right-translate-messagereview": "досмотр переводов",
- "right-translate-groupreview": "изменять состояние обработки групп сообщений",
+ "right-translate-messagereview": "Досмотр переводов",
+ "action-translate-messagereview": "проверку переводов",
+ "right-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": "Кастомизация сообщений сайта в пространстве имён MediaWiki.",
"translate-rc-translation-filter": "Фильтровать переводы:",
"translate-rc-translation-filter-no": "Без ограничений",
"translate-rc-translation-filter-only": "Показать только переводы",
@@ -183,6 +205,7 @@
"translate-untranslated": "Непереведённые",
"translate-percentage-complete": "Выполнено",
"translate-percentage-fuzzy": "Устарело",
+ "translate-percentage-proofread": "Проверенные",
"translate-languagestats-overall": "Сообщения всех групп",
"translate-ls-submit": "Показать статистику",
"translate-ls-column-group": "Группа сообщений",
@@ -190,20 +213,22 @@
"translate-mgs-fieldset": "Показать настройки",
"translate-mgs-group": "Группа сообщений:",
"translate-mgs-nocomplete": "Не показывать языки, перевод на которые полностью завершён",
- "translate-mgs-noempty": "Не показывать языки, перевод на которые еще на начинался",
+ "translate-mgs-noempty": "Не показывать языки, перевод на которые ещё не начинался",
"translate-mgs-submit": "Показать статистику",
"translate-mgs-column-language": "Язык",
- "translate-mgs-totals": "Все языки",
+ "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 {{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|язык|языка|языков}}.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|правка|правки|правок}} — последняя правка $3 {{PLURAL:$3|день|дня|дней}} назад",
+ "abusefilter-edit-builder-vars-translate-source-text": "Исходный текст элемента перевода",
"translate-save": "Сохранить ($1)",
"translate-jssti-add": "Добавить в список",
"managemessagegroups": "Управление группами сообщений",
@@ -244,9 +269,7 @@
"translate-js-summary": "Описание:",
"translate-js-save": "Сохранить",
"translate-js-next": "Сохранить и открыть следующий",
- "translate-js-nonext": "Это было последнее сообщение на этой странице.",
"translate-js-skip": "Перейти к следующему",
- "translate-js-save-failed": "Сохранение не выполнено. Пожалуйста, сообщите об этой ошибке.",
"translate-js-history": "История перевода",
"translate-js-support": "Задать вопрос",
"translate-js-support-title": "Обратитесь за помощью, если не хватает информации для правильного перевода этого сообщения.",
@@ -263,30 +286,18 @@
"translate-documentation-language": "Документация сообщения",
"translate-searchprofile": "Переводы",
"translate-searchprofile-tooltip": "Поиск во всех переводах",
+ "translate-searchprofile-note": "Дополнительные параметры поиска доступны в форме [$1 поиска переводов].",
"translate-search-languagefilter": "Фильтр по языку:",
"translate-search-nofilter": "Без фильтрации",
- "translate-messagereview-submit": "Пометить как проверенное",
- "translate-messagereview-progress": "Пометить как непроверенное",
- "translate-messagereview-failure": "Пометить как проверенное не удалось: $1",
- "translate-messagereview-done": "Проверено",
- "translate-messagereview-reviews": "Проверено {{PLURAL:$1|$1 участником|$1 участниками|1=другим участником}}",
- "translate-messagereview-reviewswithyou": "Проверено {{PLURAL:$1|$1 участником, включая вас|$1 участниками, включая вас|1=вами}}",
- "api-error-invalidrevision": "Перевод не был найден",
- "api-error-unknownmessage": "Сообщение не было найдено",
- "api-error-fuzzymessage": "Перевод помечен как нечёткий",
- "api-error-owntranslation": "Вы не можете проверять свои собственные переводы",
- "translate-messagereview-no-fuzzy": "Нечёткие переводы не могут быть помечены как проверенные.",
- "translate-messagereview-no-own": "Вы не можете проверять свои собственные переводы.",
- "translate-messagereview-doit": "Пометить этот перевод как проверенный.",
"log-name-translationreview": "Журнал проверки переводов",
"log-description-translationreview": "Журнал всех проверок переводов и групп сообщений.",
"logentry-translationreview-message": "$1 {{GENDER:$2|проверил|проверила}} перевод «$3»",
"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)",
+ "right-translate-sandboxaction": "выполнение действий, разрешённых для участников, ещё не получивших полных прав (sandboxed users)",
"action-translate-sandboxaction": "выполнять действия, разрешённые для участников, ещё не получивших полных прав (sandboxed users)",
"translate-workflow-state-": "(не задан)",
"translate-workflowstatus": "Статус: $1",
@@ -299,7 +310,6 @@
"translate-dynagroup-recent-desc": "Эта группа сообщений отображает все недавние переводы на данный язык.\nЭтот режим наиболее полезен для задач проверки.",
"translate-dynagroup-additions-label": "Недавние дополнения",
"translate-dynagroup-additions-desc": "Эта группа показывает новые и изменённые сообщения.",
- "translate-gethelp": "Справка",
"translate-msggroupselector-projects": "Группа сообщений",
"translate-msggroupselector-search-placeholder": "Поиск групп",
"translate-msggroupselector-search-all": "Все",
@@ -314,18 +324,21 @@
"tux-edit": "Правка",
"tux-status-optional": "Необязательно",
"tux-status-fuzzy": "Устарело",
- "tux-status-proofread": "Проверка",
+ "tux-status-proofread": "Проверено",
"tux-status-translated": "Переведено",
"tux-status-saving": "Сохраняется...",
"tux-status-unsaved": "Не сохранено",
+ "tux-save-unknown-error": "Произошла неизвестная ошибка.",
"tux-editor-placeholder": "Ваш перевод",
+ "tux-editor-editsummary-placeholder": "Необязательный комментарий",
"tux-editor-paste-original-button-label": "Вставить исходный текст",
"tux-editor-discard-changes-button-label": "Отменить изменения",
"tux-editor-save-button-label": "Сохранить перевод",
"tux-editor-skip-button-label": "Следующее",
"tux-editor-cancel-button-label": "Отмена",
"tux-editor-confirm-button-label": "Подтвердить перевод",
- "tux-editor-shortcut-info": "Нажмите «$1» для сохранения, «$2» для перехода к следующему сообщению или «$3» для других ярлыков.",
+ "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": "Подсказки",
@@ -380,9 +393,11 @@
"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": "Удалить",
"tux-editor-message-tools-translations": "Все переводы",
+ "tux-editor-message-tools-linktothis": "Ссылка на это сообщение",
"tux-editor-loading": "Загрузка…",
"translate-search-more-languages-info": "ещё $1 {{PLURAL:$1|язык|языка|языков}}",
"translate-statsbar-tooltip": "$1% переведённых, $2% проверенных",
@@ -391,5 +406,5 @@
"translate-ulsdep-title": "Ошибка конфигурации",
"translate-ulsdep-body": "Расширение по переводу зависит от [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector расширения «Универсальный переключатель языков»].",
"tux-session-expired": "Вы не авторизованы. Пожалуйста, авторизуйтесь в отдельной вкладке или скопируйте несохранённый перевод, вернитесь на эту страницу после авторизации и введите свой перевод ещё раз.",
- "tux-nojs": "Эта страница требует JavaScript."
+ "tux-nojs": "Этот инструмент не работает без JavaScript. JavaScript отключён, не работает, или этот браузер не поддерживается."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/rue.json b/www/wiki/extensions/Translate/i18n/core/rue.json
index 992929b4..57205545 100644
--- a/www/wiki/extensions/Translate/i18n/core/rue.json
+++ b/www/wiki/extensions/Translate/i18n/core/rue.json
@@ -7,11 +7,6 @@
},
"translate": "Перекладаня",
"translate-desc": "[[Special:Translate|Шпеціална сторінка]] про переклад MediaWiki і іншых проґрамів",
- "translate-taskui-view": "Вказати вшыткы повідомлїня",
- "translate-taskui-untranslated": "Вказати непереложены повідомлїня",
- "translate-taskui-optional": "Вказати додатковы повідомлїня",
- "translate-taskui-acceptqueue": "Лем повідомлїня, якы можу прияти",
- "translate-taskui-reviewall": "Ошацовати вшыткы переклады",
"translate-taskui-export-to-file": "Екстортовати в натівнім форматї",
"translate-taskui-export-as-po": "Експортовати про офлайн переклад",
"translate-taction-translate": "Переклад",
@@ -40,7 +35,6 @@
"translate-page-description-hasoptional": "Тота ґрупа повідомлїнь обсягує волительны повідомлїня.\nВолительны повідомлня ся мають перекладати кідь ваш язык мать особливы потребы\nяк нехоснованя павз в текстї або транслітерація властных імен. $1",
"translate-page-description-hasoptional-open": "Вказати додатковы повідомлїня",
"translate-page-edit": "едітовати",
- "translate-ext-url": "<hr />Сайт: $1",
"translate-optional": "(волительне)",
"translate-ignored": "(іґнороване)",
"translate-edit-title": "Едітовати «$1»",
@@ -50,9 +44,7 @@
"translate-edit-no-information": "''Тото повідомлїня не має документацію. Кідь знаєте, де або як ся повідомлїня хоснує, можете помочі далшым перекладателям так, же придате документацію ку тому повідомлїню.''",
"translate-edit-information": "Інформація о повідомлїню ($1)",
"translate-edit-in-other-languages": "Повідомлїня іншыма языками",
- "translate-edit-committed": "Сучасный переклад в софтвері",
"translate-edit-warnings": "Упозорнїня на неповный переклад",
- "translate-edit-tmsugs": "Пропозіції з памятї перекладів",
"translate-edit-tmmatch-source": "Жрідловый текст перекладу: $1",
"translate-edit-tmmatch": "$1% згода",
"translate-use-suggestion": "Замінити актуалный переклад гевсёв пропозіціов.",
@@ -133,7 +125,6 @@
"translate-statsf-language": "Список кодів языка, роздїленых комами:",
"translate-statsf-group": "Список кодів ґрупы языків, роздїленых комами:",
"translate-statsf-submit": "Нагляд",
- "translate-tag-category": "Сторінкы што можуть быти переложены",
"translate-tag-page-desc": "Переклад вікі сторінкы [[$2|$1]].",
"translate-sidebar-alltrans": "Іншыма языками",
"translations": "Вшыткы переклады",
diff --git a/www/wiki/extensions/Translate/i18n/core/sa.json b/www/wiki/extensions/Translate/i18n/core/sa.json
index 2218ac94..a4ade6d8 100644
--- a/www/wiki/extensions/Translate/i18n/core/sa.json
+++ b/www/wiki/extensions/Translate/i18n/core/sa.json
@@ -6,7 +6,6 @@
]
},
"translate": "अनूद्यताम्",
- "translate-taskui-view": "सर्वे सन्देशाः दृश्यन्ताम्",
"translate-taction-translate": "अनूद्यताम्",
"translate-taction-lstats": "भाषासाङ्ख्यिकी",
"translate-taction-export": "निर्यातः",
@@ -75,7 +74,6 @@
"translate-documentation-language": "सन्देशप्रलेखनम्",
"translate-workflow-set-doing": "अभिविन्यासः...",
"translate-dynagroup-recent-label": "अधुना जाताः अनुवादाः",
- "translate-gethelp": "साहाय्यम्",
"translate-msggroupselector-search-all": "सर्वम्",
"translate-msggroupselector-search-recent": "सद्यस्कम्",
"tux-languageselector": "अनूद्यताम्",
diff --git a/www/wiki/extensions/Translate/i18n/core/sah.json b/www/wiki/extensions/Translate/i18n/core/sah.json
index f7694123..419ba06d 100644
--- a/www/wiki/extensions/Translate/i18n/core/sah.json
+++ b/www/wiki/extensions/Translate/i18n/core/sah.json
@@ -3,16 +3,12 @@
"authors": [
"Amire80",
"Bert Jickty",
- "HalanTul"
+ "HalanTul",
+ "Туллук"
]
},
"translate": "Тылбаас",
"translate-desc": "MediaWiki движогу уонна атын бырагырааммалары тылбаастыырга [[Special:Translate|аналлаах сирэй]]",
- "translate-taskui-view": "Этиилэри барыларын көрдөр",
- "translate-taskui-untranslated": "Тылбаастамматаҕы көрдөр",
- "translate-taskui-optional": "Эбии этиилэри көрдөр",
- "translate-taskui-acceptqueue": "Мин бигэргэтэрбин кэтэһэри эрэ",
- "translate-taskui-reviewall": "Бары тылбаастары көр",
"translate-taskui-export-to-file": "Бэйэтин формаатынан экспортаа",
"translate-taskui-export-as-po": "Ситимнэммэккэ тылбаастыырга анаан экспортааһын",
"translate-taction-translate": "Тылбаас",
@@ -41,7 +37,6 @@
"translate-page-description-hasoptional": "Бу эбии этиилэр бөлөхтөрө.\nЭбии этиилэр тылбаастамматтар. Арай тылыҥ улахан уратылаах буоллаҕына тылбаастаныан сөп, холобур, тыллар ыккардыларыгар арыт суох буоллаҕына эбэтэр ааттары транслитерациялыырга. $1",
"translate-page-description-hasoptional-open": "Эбии этиилэри көрдөр.",
"translate-page-edit": "Уларыт",
- "translate-ext-url": "<hr />Ситим-сир: $1",
"translate-optional": "(булгуччута суох)",
"translate-ignored": "(ааххайыллыбат)",
"translate-edit-title": "\"$1\" уларытыы",
@@ -51,9 +46,7 @@
"translate-edit-no-information": "''Бу этии туһунан туох да суох. Ханна, хаһан бу этии туттулларын билэр буоллаххына, атын тылбаасчыттарга көмөлөһөн, ол туһунан суруйуоххун сөп.''",
"translate-edit-information": "Бу туһунан ($1)",
"translate-edit-in-other-languages": "Атын тылынан",
- "translate-edit-committed": "Билигин баар тылбаас",
"translate-edit-warnings": "Ситэтэ суох тылбаас туһунан сэрэтии",
- "translate-edit-tmsugs": "Урукку тылбаастартан",
"translate-edit-tmmatch-source": "Тылбаастаныахтаах этии: $1",
"translate-edit-tmmatch": "$1% сөп түбэһэр",
"translate-use-suggestion": "Баар тиэкиһи бу этэн биэриинэн солбуй.",
@@ -133,7 +126,6 @@
"translate-statsf-language": "Соппутуойунан арахсыбыт тыллар куодтарын тиһигэ:",
"translate-statsf-group": "Соппутуойунан арахсыбыт бөлөхтөр куодтарын тиһигэ:",
"translate-statsf-submit": "Бигэргэтиэх иннинэ көрүү",
- "translate-tag-category": "Тылбаастанар сирэйдэр",
"translate-tag-page-desc": "Биики-сирэй тылбааһа [[$2|$1]].",
"translate-sidebar-alltrans": "Атын тылларынан",
"translations": "Бары тылбаастар",
@@ -156,8 +148,8 @@
"translate-langstats-collapseall": "барытын суулаа",
"translate-language-code": "Тыл куода",
"translate-language-code-field-name": "Тыл куода:",
- "translate-suppress-complete": "Толору тылбаастаммыт этиилэрдээх бөлөхтөрү көрдөрүмэ",
- "translate-ls-noempty": "Толору тылбаастаммыт этиилэрдээх бөлөхтөрү көрдөрүмэ",
+ "translate-suppress-complete": "Толору тылбаастаммыт этиилээх бөлөҕү көрдөрүмэ",
+ "translate-ls-noempty": "Толору тылбаастамматах этиилээх бөлөҕү көрдөрүмэ",
"translate-language": "Ханнык тылынан:",
"translate-total": "Этии",
"translate-untranslated": "Тылбаастамматах биирдэмнэр ахсааннара",
@@ -177,7 +169,7 @@
"translate-mgs-invalid-group": "$1 диэн ааттаах бөлөх суох эбит.",
"translate-mgs-nothing": "Көрдөрүллэр дааннай суох.",
"supportedlanguages": "Өйүүр тыллара",
- "supportedlanguages-summary": "Манна{{SITENAME}} өйүүр тыллара уонна тылбаасчыттар ааттара көстөр. Тылбаасчыт төһөнөн элбэхтик үлэлээбит да, оччонон аата бөдөҥ бичигинэн суруллар. Алларанан тардыытын өҥө тылбаасчыт бүтэһигин хаһан үлэлээбитин көрдөрөр.",
+ "supportedlanguages-summary": "Манна {{SITENAME}} өйүүр тыллара уонна тылбаасчыттар ааттара көстөр. Тылбаасчыт төһөнөн элбэхтик үлэлээбит да, оччонон аата бөдөҥ бичигинэн суруллар. Алларанан тардыытын өҥө тылбаасчыт бүтэһигин хаһан үлэлээбитин көрдөрөр.",
"supportedlanguages-colorlegend": "Өҥүн суолтата: Тиһэх көннөрүүнү $1 күн ынараа өттүгэр оҥорбут.",
"supportedlanguages-translators": "{{PLURAL:$2|Тылбаасчыт|Тылбаасчыттар}}: $1",
"supportedlanguages-recenttranslations": "соторутааҥы тылбаастар",
@@ -199,5 +191,6 @@
"translate-gs-avgscore": "Ортотунан",
"translate-documentation-language": "Биллэрии документацията",
"tux-editor-proofreading-hide-own-translations": "Бэйэ тылбааһын көрдөрүмэ",
- "tux-empty-nothing-new-to-proofread": "Тургутуллуохтаах саҥа тылбаас суох"
+ "tux-empty-nothing-new-to-proofread": "Тургутуллуохтаах саҥа тылбаас суох",
+ "tux-editor-message-tools-show-editor": "Вики редакторын көр"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/sat.json b/www/wiki/extensions/Translate/i18n/core/sat.json
new file mode 100644
index 00000000..f35bb2dd
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/sat.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Albinus",
+ "Manik Soren",
+ "Amire80",
+ "Ramjit Tudu"
+ ]
+ },
+ "translate-documentation-language": "ᱢᱮᱥᱮᱡᱽ ᱰᱚᱠᱩᱢᱮᱱᱴᱟᱥᱚᱱ"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/sc.json b/www/wiki/extensions/Translate/i18n/core/sc.json
index 0a2d4d75..7d99c63a 100644
--- a/www/wiki/extensions/Translate/i18n/core/sc.json
+++ b/www/wiki/extensions/Translate/i18n/core/sc.json
@@ -2,10 +2,11 @@
"@metadata": {
"authors": [
"Via maxima",
- "Taxandru"
+ "Taxandru",
+ "L2212"
]
},
"translate": "Tradui",
"translate-desc": "[[Special:Translate|Special page]] po tradusi MediaWiki and beyond",
- "translate-taskui-view": "Ammustra totu is missadas"
+ "translate-documentation-language": "Documentatzione de su messàgiu"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/sco.json b/www/wiki/extensions/Translate/i18n/core/sco.json
index 650827d9..79d9e0f9 100644
--- a/www/wiki/extensions/Translate/i18n/core/sco.json
+++ b/www/wiki/extensions/Translate/i18n/core/sco.json
@@ -7,11 +7,6 @@
},
"translate": "Owerset",
"translate-desc": "[[Special:Translate|Byordiair page]] fer owersetin MediaWiki n ayont",
- "translate-taskui-view": "Shaw aw messages",
- "translate-taskui-untranslated": "Shaw onowerset messages",
- "translate-taskui-optional": "Shaw optional messages",
- "translate-taskui-acceptqueue": "Yinlie messages that Ah can maurk aes luikt ower",
- "translate-taskui-reviewall": "Luikower aw owersets",
"translate-taskui-export-to-file": "Export in nateeve format",
"translate-taskui-export-as-po": "Export fer aff-line owersetin",
"translate-taction-translate": "Owerset",
@@ -46,9 +41,7 @@
"translate-edit-no-information": "<em>This message haes naw documentation.\nGif ye ken whaur or hou this message is uised, ye can heelp ither owerseters bi eikin documentation til this message.</em>",
"translate-edit-information": "Information aneat message ($1)",
"translate-edit-in-other-languages": "Message in ither leids",
- "translate-edit-committed": "The Nou owerset in saffware",
"translate-edit-warnings": "Warnishments aneat oncompleate owersets",
- "translate-edit-tmsugs": "Suggestions fae owerset memries n machine owersetin",
"translate-edit-tmmatch-source": "Owerset soorce tex: $1",
"translate-use-suggestion": "Replace the Nou owerset wi this suggestion.",
"translate-edit-nopermission": "Ye need owersetin richts tae owerset messages.",
@@ -119,7 +112,6 @@
"translate-statsf-language": "Comma-separatit leet o leid codes:",
"translate-statsf-group": "Comma-separatit leet o groop codes:",
"translate-statsf-submit": "Luikower",
- "translate-tag-category": "Owersetable pages",
"translate-tag-page-desc": "Owersetin o the wiki page [[$2|$1]] fae $3($4).",
"translate-sidebar-alltrans": "In ither leids",
"translations": "Aw owersets",
@@ -183,7 +175,6 @@
"translate-manage-toolong": "The mucklest processin time o $1 {{PLURAL:$1|seicont|seiconts}} exceeded.\nPlease haun the form in again tae continue processin.",
"translate-manage-import-summary": "Importin ae new version fae external soorce",
"translate-manage-conflict-summary": "Importin ae new version fae external soorce.\nPlease check.",
- "translate-manage-fuzzy-summary": "The message defineetion haes chynged",
"translate-manage-intro-other": "Ablo is ae leet o owerset chynges in the leid $1.\nPlease luik the chynges ower n chuise aen action that ye want tae tak fer ilka update.\nGif ye chuise tae ignore chynges, than this action is yinlie temparie.",
"translate-manage-import-done": "Import compleate!",
"importtranslations": "Import owersets",
@@ -199,9 +190,7 @@
"translate-js-summary": "Ootline:",
"translate-js-save": "Hain",
"translate-js-next": "Hain n apen nex",
- "translate-js-nonext": "This wis the laist message oan this page.",
"translate-js-skip": "Skip til the nex",
- "translate-js-save-failed": "Hainin failed. Please report this mistak.",
"translate-js-history": "Owersetin histerie",
"translate-js-support": "Speir speirin",
"translate-js-support-title": "Speir fer heelp gif thaur's na enooch information tae owerset this message richt.",
@@ -213,19 +202,6 @@
"translate-searchprofile-tooltip": "Rake fae aw owersets",
"translate-search-languagefilter": "Filter bi leid:",
"translate-search-nofilter": "Naw filterin",
- "translate-messagereview-submit": "Maurk luikt ower",
- "translate-messagereview-progress": "Maurkin aes luikt ower...",
- "translate-messagereview-failure": "Maurkin aes luikower failed: $1",
- "translate-messagereview-done": "Luikt ower",
- "translate-messagereview-reviews": "Luikt ower bi {{PLURAL:$1|yin uiser|$1 uisers}}",
- "translate-messagereview-reviewswithyou": "Luikt ower bi {{PLURAL:$1|ye|$1 uisers incluidin ye}}",
- "api-error-invalidrevision": "Owerset wisna foond",
- "api-error-unknownmessage": "Message wisna foond",
- "api-error-fuzzymessage": "Owerset is maurkt aes fuzzy",
- "api-error-owntranslation": "Ye canna maurk yer ain owersets aes luikt ower",
- "translate-messagereview-no-fuzzy": "Fuzzy owersets canna be maurkt aes luikt ower.",
- "translate-messagereview-no-own": "Ye canna maurk yer ain owersets aes luikt ower.",
- "translate-messagereview-doit": "Maurk this owerset aes luikt ower.",
"log-name-translationreview": "Owerset luikower log",
"log-description-translationreview": "Log o aw luikowers til owersets n message groops.",
"logentry-translationreview-message": "$1 {{GENDER:$2|luikt ower}} owerset $3",
@@ -245,7 +221,6 @@
"translate-dynagroup-recent-desc": "This message groop shaws aw recynt owersets intil this leid.\nMaist uissfu fer the luikower tasks.",
"translate-dynagroup-additions-label": "Recynt addeetions",
"translate-dynagroup-additions-desc": "This message groop shaws new n chynged messages.",
- "translate-gethelp": "Heelp",
"translate-msggroupselector-projects": "Message groop",
"translate-msggroupselector-search-placeholder": "Rake groops",
"translate-msggroupselector-search-all": "Aw",
diff --git a/www/wiki/extensions/Translate/i18n/core/sd.json b/www/wiki/extensions/Translate/i18n/core/sd.json
index 6f2772f7..966dab88 100644
--- a/www/wiki/extensions/Translate/i18n/core/sd.json
+++ b/www/wiki/extensions/Translate/i18n/core/sd.json
@@ -1,8 +1,54 @@
{
"@metadata": {
"authors": [
- "Aursani"
+ "Aursani",
+ "Mehtab ahmed",
+ "Indus Asia",
+ "Tweety"
]
},
- "translate-documentation-language": "نياپاتي دستاويزسازي"
+ "translate": "ترجمايو",
+ "translate-extensionname": "ترجامايو",
+ "translate-taction-translate": "ترجمايو",
+ "translate-taction-proofread": "جائزو وٺو",
+ "translate-taction-lstats": "ٻوليءَ جا انگ اکر",
+ "translate-taction-export": "برآمديو",
+ "translate-language-disabled": "هن ٻوليءَ ۾ ترجمو ڪرڻ غيرفعال ڪيو ويو آهي.",
+ "translate-next": "اڳيون صفحو",
+ "translate-prev": "پويون صفحو",
+ "translate-edit-translation": "ترجمو",
+ "translate-edit-in-other-languages": "ٻين ٻولين ۾ نياپو",
+ "translate-magic-cm-save": "سانڍيو",
+ "translate-rcfilters-translations-only-desc": "ترجمايل صفحن ۾ تبديليون.",
+ "translate-stats-edits": "ترميمون",
+ "translate-statsf-options": "گراف",
+ "translate-statsf-scale-days": "ڏينھن",
+ "translate-statsf-scale-hours": "ڪلاڪَ",
+ "languagestats": "ٻوليءَ جا انگ اکر",
+ "translate-untranslated": "اڻ-ترجمايل",
+ "translate-percentage-fuzzy": "مدي-خارج",
+ "translate-smg-right": "اندر ايندڙ تبديليون",
+ "translate-js-save": "سانڍيو",
+ "translate-js-support": "سوال پڇو",
+ "translate-documentation-language": "نياپاتي دستاويزسازي",
+ "translate-msggroupselector-search-all": "سڀ",
+ "tux-tab-all": "سڀ",
+ "tux-tab-untranslated": "اڻ-ترجمايل",
+ "tux-tab-outdated": "مدي-خارج",
+ "tux-tab-translated": "ترجمايل",
+ "tux-tab-unproofread": "اڻ-جائزو-ورتل",
+ "tux-status-fuzzy": "مدي-خارج",
+ "tux-status-translated": "ترجمايل",
+ "tux-editor-discard-changes-button-label": "تبديليون ڦٽو ڪريو",
+ "tux-editor-save-button-label": "ترجمو سانڍيو",
+ "tux-editor-cancel-button-label": "رد",
+ "tux-editor-confirm-button-label": "ترجمي جي پڪ ڪريو",
+ "tux-editor-in-other-languages": "ٻيون ٻوليون",
+ "tux-editor-clear-translated": "ترجمايل لڪايو",
+ "tux-editor-doc-editor-cancel": "رد",
+ "tux-proofread-translated-by-self": "مون پاران ترجمايل",
+ "tux-empty-list-translated": "پيغام ترجمايل ناھن",
+ "tux-editor-close-tooltip": "بند ڪريو",
+ "tux-editor-message-tools-delete": "ڊاھيو",
+ "translate-statsbar-tooltip": "$1% تجمايل، $2% جائزو-ورتل"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/sdh.json b/www/wiki/extensions/Translate/i18n/core/sdh.json
new file mode 100644
index 00000000..02ea8972
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/sdh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Paraw2"
+ ]
+ },
+ "translate-documentation-language": "پەیام بەڵگەناوە"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/ses.json b/www/wiki/extensions/Translate/i18n/core/ses.json
new file mode 100644
index 00000000..b539af59
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/ses.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Songhay"
+ ]
+ },
+ "translate-documentation-language": "Alhabar fahamandi tiira"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/sgs.json b/www/wiki/extensions/Translate/i18n/core/sgs.json
index 5d7299e2..f0626dd2 100644
--- a/www/wiki/extensions/Translate/i18n/core/sgs.json
+++ b/www/wiki/extensions/Translate/i18n/core/sgs.json
@@ -7,6 +7,7 @@
"translate-sidebar-alltrans": "Kėtuom kalbuom",
"translate-untranslated": "Napargoldītė",
"translate-percentage-fuzzy": "Vetošė",
+ "translate-js-support": "Paklaustė",
"translate-documentation-language": "Pranešėma aprašā",
"tux-tab-all": "Vėsė",
"tux-tab-untranslated": "Napargoldītė",
diff --git a/www/wiki/extensions/Translate/i18n/core/shn.json b/www/wiki/extensions/Translate/i18n/core/shn.json
index a2dfa2fb..49889fbf 100644
--- a/www/wiki/extensions/Translate/i18n/core/shn.json
+++ b/www/wiki/extensions/Translate/i18n/core/shn.json
@@ -4,5 +4,6 @@
"Saimawnkham"
]
},
+ "right-translate": "ၸႂ်ႉလွင်ႈပိၼ်ႇၽႃႇသႃႇယူင်ႉႁၢင်ႈသေ မႄးထတ်း",
"translate-documentation-language": "ၽိုၼ်လိၵ်ႈၶေႃႈၶၢဝ်ႇ"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/shy-latn.json b/www/wiki/extensions/Translate/i18n/core/shy-latn.json
index a349e2d1..68422824 100644
--- a/www/wiki/extensions/Translate/i18n/core/shy-latn.json
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/i18n/core/si.json b/www/wiki/extensions/Translate/i18n/core/si.json
index c601f228..cb671a85 100644
--- a/www/wiki/extensions/Translate/i18n/core/si.json
+++ b/www/wiki/extensions/Translate/i18n/core/si.json
@@ -11,11 +11,6 @@
},
"translate": "පරිවර්තනය කරන්න",
"translate-desc": "මාධ්‍යවිකී සහ ඉන් ඔබ්බට පරිවර්තනය කෙරුම සඳහා [[Special:Translate|විශේෂ පිටුව]]",
- "translate-taskui-view": "සියළු පණිවුඩ පෙන්වන්න",
- "translate-taskui-untranslated": "පරිවර්තනය නොකල පණිවුඩ පෙන්වන්න",
- "translate-taskui-optional": "අමතර පණිවුඩ පෙන්වන්න",
- "translate-taskui-acceptqueue": "මට බාරගත හැකි පණිවුඩ පමණක්",
- "translate-taskui-reviewall": "සියලු පරිවර්තන නිරීක්ෂණය කරන්න",
"translate-taskui-export-to-file": "දේශ්‍රීය ආකෘතියයෙන් නිර්යාත කරන්න",
"translate-taskui-export-as-po": "මාර්ග-අපගත පරිවර්තනය සඳහා නිර්යාත කරන්න",
"translate-taction-translate": "පරිවර්තනය කරන්න",
@@ -43,7 +38,6 @@
"translate-page-description-legend": "කාණ්ඩය පිළිබඳ විස්තර",
"translate-page-description-hasoptional-open": "අමතර පණිවුඩ පෙන්වන්න.",
"translate-page-edit": "සංස්කරණය",
- "translate-ext-url": "<hr />වෙබ් අඩවිය: $1",
"translate-optional": "(වෛකල්පික)",
"translate-ignored": "(නොසලකන ලදි)",
"translate-edit-title": "\"$1\" සංස්කරණය කරන්න",
@@ -53,9 +47,7 @@
"translate-edit-no-information": "''මෙම පණිවුඩය සතුව ප්‍රලේඛනයක් නොමැත.''\n''මෙම පණිවුඩය තිබෙන්නේ කොහේදැයි හෝ භාවිතා කරන්නේ කුමටද කියා දන්නවානම්, මෙම පණිවුඩය සඳහා ප්‍රලේඛනයක් තැනීම මඟින් ඔබට අනෙකුත් පරිවර්තකයන් හට සහය විය හැක.''",
"translate-edit-information": "($1) පණිවුඩය පිලිබඳ තොරතුරු",
"translate-edit-in-other-languages": "පණිවුඩය වෙනත් භාෂාවලින්",
- "translate-edit-committed": "මෘදුකාංගයෙහි වත්මන් පරිවර්තනය",
"translate-edit-warnings": "අසම්පුර්ණ පරිවර්තන පිලිබඳ අවවාද",
- "translate-edit-tmsugs": "පෙර පරිවර්තන මතකයෙන් සහ යන්ත්‍රික පරිවර්තනයෙන්",
"translate-edit-tmmatch-source": "පරිවර්තන මූලාශ්‍ර පාඨය: $1",
"translate-edit-tmmatch": "$1% ගැලපේ",
"translate-use-suggestion": "මෙම යෝජනාව සමඟ වත්මන් පරිවර්තනය ප්‍රතිස්ථාපනය කරන්න.",
@@ -133,7 +125,6 @@
"translate-statsf-language": "කොමාවෙන්-වෙන්වූ භාෂා කේතයන් ලැයිස්තුව:",
"translate-statsf-group": "කොමාවෙන්-වෙන්වූ සමූහ කේතයන් ලැයිස්තුව:",
"translate-statsf-submit": "පෙරදසුන",
- "translate-tag-category": "පරිවර්තනය කල හැකි පිටු",
"translate-tag-page-desc": "[[$2|$1]] විකි පිටුවෙහි පරිවර්තනය.",
"translate-sidebar-alltrans": "වෙනත් භාෂා වලින්",
"translations": "සියළු පරිවර්තන",
@@ -201,7 +192,6 @@
"translate-manage-nochanges-other": "මෙම භාෂාව සඳහා වෙනස්කම් කිසිවක් නොතිබුණි.\nසමූහ විස්තර දසුන වෙත නැවත යාම සඳහා පහත සබැඳිය භාවිතා කරන්න.",
"translate-manage-import-summary": "බාහිර මූලාශ්‍රයකින් නව අනුවාදය ආයාත කරමින්",
"translate-manage-conflict-summary": "බාහිර මූලාශ්‍රයක් වෙතින් නව අනුවාදය ආයාත කරමින්.\nකරුණාකර පිරික්සන්න.",
- "translate-manage-fuzzy-summary": "නිර්වචනය වෙනස් වී ඇත",
"translate-manage-submit": "සම්පාදනය කරන්න",
"translate-manage-import-ok": "$1 පිටුවෙහි නව අනුවාදයක් ආයාත කරන ලදී.",
"translate-manage-import-done": "සියල්ල කරන ලදී",
@@ -215,9 +205,7 @@
"translate-js-summary": "සාරාංශය:",
"translate-js-save": "සුරකින්න",
"translate-js-next": "සුරකීමෙන් පසු ඊළඟ එක විවෘත කරන්න",
- "translate-js-nonext": "මෙය මෙම පිටුවේ තිබු අන්තිම පණිවුඩයයි.",
"translate-js-skip": "මීළඟ පියවරට පනින්න",
- "translate-js-save-failed": "සුරැකීම අසාර්ථක වුණි. කරුණාකර මෙම දෝෂය වාර්තා කරන්න.",
"translate-js-history": "පරිවර්තන ඉතිහාසය",
"translate-js-support": "ප්‍රශ්නයක් අසන්න",
"translate-js-support-title": "මෙම පණිවුඩය නිවැරදිව පරිවර්තනය කිරීම සඳහා ප්‍රමාණවත් තරම් තොරතුරු නොමැති නම් උදව් සඳහා විමසන්න.",
@@ -236,19 +224,6 @@
"translate-searchprofile-tooltip": "සියලු පරිවර්තනයන්ගෙන් සොයන්න",
"translate-search-languagefilter": "භාෂාව අනුව පෙරහන:",
"translate-search-nofilter": "පෙරීමක් නොමැත",
- "translate-messagereview-submit": "පිළිගන්න",
- "translate-messagereview-progress": "බාරගනිමින්...",
- "translate-messagereview-failure": "බාරගනිමින්... අසාර්ථකයි: $1",
- "translate-messagereview-done": "පිළිගන්නා ලදී",
- "translate-messagereview-reviews": "{{PLURAL:$1|එක් පරිශීලකයෙක්|පරිශීලකයන් $1 ක්}} විසින් පිළිගන්නා ලද",
- "translate-messagereview-reviewswithyou": "ඔබද ඇතුළුව {{PLURAL:$1|එක් පරිශීලකයෙක්|පරිශීලකයන් $1 ක්}} විසින් පිළිගන්නා ලද",
- "api-error-invalidrevision": "පරිවර්තනය හමු නොවුණි",
- "api-error-unknownmessage": "පණිවුඩය හමු නොවුණි",
- "api-error-fuzzymessage": "පරිවර්තනය fuzzy ලෙස සලකුණු කොට ඇත",
- "api-error-owntranslation": "ඔබ හට ඔබම සිදුකල පරිවර්තන අනුමතකල නොහැක",
- "translate-messagereview-no-fuzzy": "Fuzzy පරිවර්තනයන් පිළිගත නොහැක.",
- "translate-messagereview-no-own": "ඔබ හට ඔබගේම පරිවර්තන පිළිගත නොහැක.",
- "translate-messagereview-doit": "මෙය නිවැරදි පරිවර්තනයක් ලෙස පිළිගන්න.",
"log-name-translationreview": "පරිවර්තන නිරීක්ෂණ ලඝු සටහන",
"logentry-translationreview-message": "$1 විසින් $3 පරිවර්තනය {{GENDER:$2|පිළිගන්නා ලදී}}",
"translate-workflow-state-": "(සකසා නැත)",
@@ -259,7 +234,6 @@
"translate-dynagroup-recent-label": "මෑත පරිවර්තන",
"translate-dynagroup-additions-label": "මෑත එක් කිරීම්",
"translate-dynagroup-additions-desc": "මෙම පණිවුඩ සමූහය නව සහ වෙනස් වූ පණිවුඩ පෙන්වයි.",
- "translate-gethelp": "උදව්",
"translate-msggroupselector-projects": "පණිවුඩ සමූහය",
"translate-msggroupselector-search-placeholder": "සමූහ සොයන්න",
"translate-msggroupselector-search-all": "සියල්ල",
diff --git a/www/wiki/extensions/Translate/i18n/core/sk.json b/www/wiki/extensions/Translate/i18n/core/sk.json
index 0277e231..32907b00 100644
--- a/www/wiki/extensions/Translate/i18n/core/sk.json
+++ b/www/wiki/extensions/Translate/i18n/core/sk.json
@@ -7,16 +7,12 @@
"Rudko",
"Teslaton",
"Sudo77(new)",
- "TomášPolonec"
+ "TomášPolonec",
+ "LacoR"
]
},
"translate": "Preložiť",
"translate-desc": "[[Special:Translate|Špeciálna stránka]] na preklad MediaWiki a iného",
- "translate-taskui-view": "Zobraziť všetky správy",
- "translate-taskui-untranslated": "Zobraziť nepreložené správy",
- "translate-taskui-optional": "Zobraziť voliteľné správy",
- "translate-taskui-acceptqueue": "Iba správy, ktoré mám právo akceptovať",
- "translate-taskui-reviewall": "Hodnotiť všetky preklady",
"translate-taskui-export-to-file": "Exportovať v natívnom formáte",
"translate-taskui-export-as-po": "Exportovať pre preklad off-line",
"translate-taction-translate": "Preklad",
@@ -44,26 +40,23 @@
"translate-page-description-hasoptional": "Táto skupina obsahuje voliteľné správy.\nVoliteľné správy sa majú prekladať len v prípade, ak má váš jazyk špecifické potreby,\nako napr. nepoužívanie medzier, alebo transkripcie vlastných mien. $1",
"translate-page-description-hasoptional-open": "Zobraziť voliteľné správy.",
"translate-page-edit": "upraviť",
- "translate-ext-url": "<hr />Webstránka: $1",
"translate-optional": "(voliteľné)",
"translate-ignored": "(ignorované)",
"translate-edit-title": "Upraviť \"$1\"",
"translate-edit-definition": "Definícia správy",
"translate-edit-translation": "Preklad",
"translate-edit-contribute": "prispejte",
- "translate-edit-no-information": "''Táto správa nie je zdokumentovaná. Ak viete kde alebo ako je táto správa použitá, môžete pomôcť ostatným prekladateľom tým, že jej pridáte dokumentáciu.''",
+ "translate-edit-no-information": "<em>Táto správa nemá dokumentáciu.\nAk viete kde alebo ako je táto správa použitá, môžete pomôcť ostatným prekladateľom tým, že pridáte dokumentáciu.</em>",
"translate-edit-information": "Informácia o správe ($1)",
"translate-edit-in-other-languages": "Správa v iných jazykoch",
- "translate-edit-committed": "Aktuálny preklad v úložisku",
"translate-edit-warnings": "Upozornenia na neúplné preklady",
- "translate-edit-tmsugs": "Návrhy z kompendia",
"translate-edit-tmmatch-source": "Zdroj prekladu: $1",
"translate-edit-tmmatch": "$1% zhoda",
"translate-use-suggestion": "Nahradiť aktuálny preklad týmto návrhom.",
"translate-edit-nopermission": "Na preklad správ potrebujete povolenie.",
- "translate-edit-askpermission": "Požiadať o povolenie",
+ "translate-edit-askpermission": "Získať oprávnenie",
"translate-magic-pagename": "Rozšírený preklad MediaWiki",
- "translate-magic-help": "Môžete prekladať aliasy špeciálnych stránok, magické slová, názvy tém vzhľadu a názvy menných priestorov.\n\nAliasy špeciálnych stránok a magických slov môžu mať viacero prekladov.\nPreklady sa oddeľujú čiarkami („,“).\nNázvy tém vzhľadu a názvy menných priestorov môžu mať iba jeden preklad.\n\nV prekladoch menných priestorov je <code>$1 talk</code> špeciálne. <code>$1</code> sa nahradí názvom webovej lokality (napr. <code>{{ns:project_talk}}</code>). Ak vo vašom jazyku nie je možné vytvoriť zmysluplný výraz bez zmeny názvu webovej lokality, prosím, kontaktujte vývojára.\n\nAby ste mohli ukladať zmeny, musíte byť členom skupiny prekladatelia.\nZmeny sa neuložia, kým nekliknete na tlačidlo Uložiť dolu.",
+ "translate-magic-help": "Môžete prekladať aliasy špeciálnych stránok, magické slová a názvy menných priestorov.\n\nAliasy špeciálnych stránok a magických slov môžu mať viacero prekladov.\nPreklady sa oddeľujú čiarkou (,).\nNázvy menných priestorov môžu mať iba jeden preklad.\n\nPrekladanie diskusných menných priestorov <code>$1 talk</code> môže byť zložitejšie. <code>$1</code> sa nahradí názvom projektu (napr. <code>{{ns:project_talk}}</code>). Ak vo vašom jazyku nie je možné vytvoriť zmysluplný výraz bez zmeny názvu projektu, kontaktujte nás na stránke [[Support]].\n\nAby ste mohli ukladať zmeny, musíte byť prekladateľom.\nZmeny sa neuložia, kým nekliknete na tlačidlo Uložiť dolu.",
"translate-magic-module": "Modul:",
"translate-magic-submit": "Vykonať",
"translate-magic-cm-export": "Exportovať",
@@ -80,7 +73,7 @@
"translate-magic-namespace": "Názvy menných priestorov",
"translate-magic-notsaved": "Vaša úprava nebola uložená!",
"translate-magic-errors": "Prosím, opravte {{PLURAL:$1|nasledovnú chybu|nasledovné chyby}} v prekladoch:",
- "translate-magic-saved": "Vaše zmeny boli úspešne uložené.",
+ "translate-magic-saved": "Vaše zmeny boli uložené.",
"translate-checks-parameters": "{{PLURAL:$2|Nasledovný parameter nie je použitý|Nasledovné parametre nie sú použité}}: <strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|Nasledovný parameter je neznámy|Nasledovné parametre sú neznáme}}: <strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Nevyvážené počty {{PLURAL:$2|zátvoriek|zátvoriek}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -94,7 +87,7 @@
"translate-checks-parametersnotequal": "Počet parametrov je {{PLURAL:$1|$1}}; mal by byť {{PLURAL:$2|$2}}.",
"translate-checks-malformed": "<nowiki>$1</nowiki>má nesprávny formát.",
"translate-checks-fudforum-syntax": "V tomto projekte používať <nowiki>$1</nowiki> namiesto <nowiki>$2</nowiki>.",
- "translate-pref-nonewsletter": "Neposielať mi novinky emailom",
+ "translate-pref-nonewsletter": "Neposielať mi novinky e-mailom",
"translate-pref-editassistlang": "Pomocné jazyky:",
"prefs-translate": "Možnosti prekladu",
"translate-pref-editassistlang-help": "Čiarkami oddelený zoznam kódov jazykov.\nPreklady správ v týchto jazykoch sa zobrazujú, keď prekladáte.\nPredvoleny zoznam jazykov závisí na vašom jazyku.",
@@ -136,8 +129,7 @@
"translate-statsf-language": "Čiarkami oddelený zoznam kódov jazykov:",
"translate-statsf-group": "Čiarkami oddelený zoznam kódov skupín:",
"translate-statsf-submit": "Náhľad",
- "translate-tag-category": "Preložiteľné stránky",
- "translate-tag-page-desc": "Preklad wiki stránky [[$2|$1]].",
+ "translate-tag-page-desc": "Preklad wiki stránky [[$2|$1]] z jazyka $3 ($4)..",
"translate-sidebar-alltrans": "V iných jazykoch",
"translations": "Všetky preklady",
"translations-summary": "Všetky dostupné preklady zobrazíte po zadaní názvu správy.",
@@ -151,6 +143,7 @@
"translate-translations-history-short": "h",
"languagestats": "Štatistika jazykov",
"languagestats-summary": "Táto stránka zobrazuje štatistiku prekladov všetkých skupín správ jazyka.",
+ "messagegroupstats-summary": "Táto stránka zobrazuje štatistiku skupín správ.",
"languagestats-stats-for": "Štatistika prekladov pre jazyk $1 ($2).",
"languagestats-recenttranslations": "nedávne preklady",
"translate-langstats-incomplete": "Niektoré štatistiky na tejto stránke sú neúplné. Aktuálnejšie údaje získate znovunačítaním stránky.",
@@ -183,10 +176,11 @@
"supportedlanguages": "Podporované jazyky",
"supportedlanguages-summary": "Na tejto stránke sa nachádza zoznam všetkých jazykov podporovaných na {{GRAMMAR:6sg|{{SITENAME}}}}\nspolu s menami prekladateľov, ktorí na jazyku pracujú.\nČím viac úprav prekladateľ poskytol, tým väčším písmom sa jeho meno zobrazuje.\nFarba podčiarknutia znázorňuje, ako nedávno tu bol prekladateľ aktívny.",
"supportedlanguages-colorlegend": "Legenda k farbám: Posledný preklad pred {{PLURAL:$1|$1 dňom|$1 dňami}}.",
- "supportedlanguages-translators": "{{PLURAL:$2|Prekladateľ|Prekladatelia}}: $1",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Prekladateľ|Prekladateľka}}|Prekladatelia}}: $1",
"supportedlanguages-recenttranslations": "nedávne preklady",
"supportedlanguages-count": "Dohromady $1 {{PLURAL:$1|jazyk|jazyky|jazykov}}.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|editácia|editácie|editácií}} – posledná pred $3 {{PLURAL:$3|dňom|dňami}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Zdrojový text prekladovej jednotky",
"translate-save": "Uložiť ($1)",
"translate-jssti-add": "Pridať do zoznamu",
"managemessagegroups": "Správa skupín správ",
@@ -203,7 +197,6 @@
"translate-manage-toolong": "Maximálny čas spracovania $1 {{PLURAL:$1|sekunda|sekundy|sekúnd}} bol prekročený.\nV spracovaní môžete pokračovať opätovným odoslaním formulára.",
"translate-manage-import-summary": "Importuje sa nová verzia z externého zdroja",
"translate-manage-conflict-summary": "Importuje sa nová verzia z externého zdroja. Prosím, skontrolujte ju.",
- "translate-manage-fuzzy-summary": "Definícia sa zmenila",
"translate-manage-submit": "Vykonať",
"translate-manage-intro-other": "Nižšie je zoznam zmien v prekladoch v jazyku $1.\nProsím, skontrolujte zmeny a vyberte operáciu pre každý z prekladov.\nAk sa rozhodnete ignorovať zmeny, prepíšu sa pri ďalšom exporte.",
"translate-manage-import-ok": "Importovaná nová verzia stránky $1.",
@@ -221,12 +214,11 @@
"translate-js-summary": "Zhrnutie:",
"translate-js-save": "Uložiť",
"translate-js-next": "Uložiť a otvoriť ďalšiu",
- "translate-js-nonext": "To bola posledná správa na tejto stránke.",
"translate-js-skip": "Preskočiť na ďalšiu",
- "translate-js-save-failed": "Uloženie sa nepodarilo. Nahláste prosím túto chybu.",
"translate-js-history": "História prekladov",
"translate-js-support": "Položiť otázku",
"translate-js-support-title": "Požiadať o pomoc, ak nie je k dispozícii dostatok informácií pre správny preklad tejto správy.",
+ "translate-js-support-unsaved-warning": "Máte neuložené preklady.",
"translate-gs-pos": "Poz.",
"translate-gs-code": "Kód",
"translate-gs-continent": "Kontinent",
@@ -237,13 +229,41 @@
"translate-gs-total": "Celkom",
"translate-gs-avgscore": "Priem. skóre",
"translate-documentation-language": "Dokumentácia k hláseniam",
- "translate-messagereview-done": "Prijaté",
- "api-error-invalidrevision": "Preklad sa nenašiel",
+ "translate-searchprofile": "Preklady",
"log-name-translationreview": "Log hodnotení prekladov",
"log-description-translationreview": "Log všetkých hodnotení prekladov a skupín správ.",
"logentry-translationreview-message": "$1 {{GENDER:$2|akceptoval|akceptovala|akceptoval}} preklad $3",
"translate-dynagroup-recent-label": "Nedávne preklady",
"translate-dynagroup-recent-desc": "Táto skupina správ obsahuje všetky nedávne preklady do tohoto jazyka. Užitočné pre účely korektúry.",
- "translate-gethelp": "Pomoc",
- "tux-editor-in-other-languages": "V iných jazykoch"
+ "tux-tab-all": "Všetky",
+ "tux-tab-untranslated": "Nepreložené",
+ "tux-tab-outdated": "Zastarané",
+ "tux-tab-translated": "Preložené",
+ "tux-tab-unproofread": "Neskontrolované",
+ "tux-edit": "Editovať",
+ "tux-editor-placeholder": "Váš preklad",
+ "tux-editor-save-button-label": "Uložiť preklad",
+ "tux-editor-skip-button-label": "Preskočiť na nasledujúci",
+ "tux-editor-cancel-button-label": "Zrušiť",
+ "tux-editor-confirm-button-label": "Potvrdiť preklad",
+ "tux-editor-shortcut-info": "Stlačte „$1“ pre uloženie, „$2“ pre preskočenie na ďalšiu správu, „$4“ pre zadanie zhrnutia alebo „$3“ pre ďalšie skratky.",
+ "tux-editor-edit-desc": "Upraviť dokumentáciu",
+ "tux-editor-add-desc": "Pridať dokumentáciu",
+ "tux-editor-suggestions-title": "Návrhy",
+ "tux-editor-in-other-languages": "V iných jazykoch",
+ "tux-editor-need-more-help": "Potrebujete ďalšiu pomoc?",
+ "tux-editor-tm-match": "$1% zhoda",
+ "tux-warnings-hide": "skryť",
+ "tux-editor-save-failed": "Nepodarilo sa uložiť preklad: $1",
+ "tux-editor-n-uses": "použité {{PLURAL:$1|raz|$1krát}}",
+ "tux-editor-message-desc-more": "Zobraziť viac",
+ "tux-editor-message-desc-less": "Zobraziť menej",
+ "tux-editor-clear-translated": "Skryť preložené",
+ "tux-editor-translate-mode": "Zoznam",
+ "tux-editor-proofreading-hide-own-translations": "Skryť vaše preklady",
+ "tux-editor-outdated-warning": "Tento preklad možno potrebuje aktualizáciu.",
+ "tux-editor-outdated-warning-diff-link": "Zobraziť rozdiely",
+ "tux-message-filter-placeholder": "Filtrovať zoznam",
+ "tux-message-filter-result": "Pre reťazec „$2“ sa {{PLURAL:$1|našiel 1 výsledok|našli $1 výsledky|našlo $1 výsledkov}}",
+ "tux-session-expired": "Už nie ste prihlásený. Prihláste sa, prosím, na inom liste, alebo skopírujte neuložený preklad, prihláste sa, vráťte sa k tejto stránke a zadajte znovu váš preklad."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/skr-arab.json b/www/wiki/extensions/Translate/i18n/core/skr-arab.json
new file mode 100644
index 00000000..13409684
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/skr-arab.json
@@ -0,0 +1,76 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saraiki"
+ ]
+ },
+ "translate-export-form-format": "فارمیٹ",
+ "translate-magic-cm-current": "موجودہ",
+ "translate-magic-cm-original": "اصل",
+ "translate-magic-cm-save": "بچاؤ",
+ "translate-magic-words": "جادوئی الفاظ",
+ "translate-rcfilters-translations": "ترجمے",
+ "translate-rcfilters-translations-only-label": "ترجمے",
+ "translate-rcfilters-translations-filter-label": "ترجمے کائنی",
+ "translate-stats-users": "مترجمین",
+ "translate-statsf-scale-months": "مہینے",
+ "translate-statsf-scale-weeks": "ہفتے",
+ "translate-statsf-scale-days": "ݙیہاڑے",
+ "translate-statsf-scale-hours": "گھنٹے",
+ "translate-statsf-count": "پیمائش:",
+ "translate-statsf-count-edits": "تبدیلیاں دی تعداد",
+ "translate-statsf-count-users": "فعال مترجمین",
+ "translate-statsf-count-registrations": "نویں ورتݨ آلے",
+ "translate-statsf-submit": "نمائش",
+ "translate-translations-fieldset-title": "سنیہا",
+ "translate-translations-messagename": "ناں:",
+ "translate-translations-project": "منصوبہ:",
+ "translate-langstats-expand": "ودھاؤ",
+ "translate-langstats-collapse": "لکاؤ",
+ "translate-language-code": "زبان دا کوڈ",
+ "translate-language-code-field-name": "زبان دا کوڈ:",
+ "translate-language": "زبان",
+ "translate-total": "سنیہے",
+ "translate-untranslated": "ترجمے ٻاجھ",
+ "translate-percentage-complete": "مکمل",
+ "translate-percentage-fuzzy": "پُراݨے",
+ "translate-languagestats-overall": "سنیہیاں دے سارے گروہ اکٹھے",
+ "translate-ls-submit": "شماریات ݙکھاؤ",
+ "translate-mgs-submit": "شماریات ݙکھاؤ",
+ "translate-mgs-column-language": "زبان",
+ "translate-js-summary": "خلاصہ:",
+ "translate-js-save": "بچاؤ",
+ "translate-gs-code": "کوڈ",
+ "translate-gs-continent": "براعظم",
+ "translate-gs-speakers": "الاوݨ آلے",
+ "translate-gs-score": "سکور",
+ "translate-gs-multiple": "ہک کنوں ودھ",
+ "translate-gs-count": "ڳیݨ",
+ "translate-gs-total": "مجموعہ",
+ "translate-documentation-language": "سنیہہ دستاویز",
+ "translate-msggroupselector-search-all": "یکے",
+ "translate-msggroupselector-search-recent": "حالیہ",
+ "tux-tab-all": "یکے",
+ "tux-tab-untranslated": "ترجمے ٻاجھ",
+ "tux-tab-outdated": "پُراݨے",
+ "tux-tab-translated": "ترجمہ تھی ڳیا",
+ "tux-status-fuzzy": "پُراݨے",
+ "tux-status-proofread": "ولدا ݙٹھے ہوئے",
+ "tux-status-translated": "ترجمہ تھی ڳیا",
+ "tux-status-saving": "بچیندا پئے۔۔۔",
+ "tux-status-unsaved": "غیر محفوظ",
+ "tux-editor-cancel-button-label": "منسوخ",
+ "tux-editor-confirm-button-label": "ترجمہ دی تصدیق کرو",
+ "tux-warnings-hide": "لُکاؤ",
+ "tux-editor-translate-mode": "فہرست",
+ "tux-proofread-edit-label": "لکھو",
+ "tux-editor-page-mode": "ورقہ",
+ "tux-editor-doc-editor-cancel": "منسوخ",
+ "tux-empty-list-translated-action": "ترجمہ کرو",
+ "tux-editor-close-tooltip": "بند کرو",
+ "tux-editor-expand-tooltip": "ودھاؤ",
+ "tux-editor-collapse-tooltip": "لکاؤ",
+ "tux-editor-message-tools-delete": "مٹاؤ",
+ "tux-editor-message-tools-translations": "سارے ترجمے",
+ "tux-editor-loading": "لوڈ تھیندا پئے۔۔۔"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/sl.json b/www/wiki/extensions/Translate/i18n/core/sl.json
index eab6fc44..9544a81e 100644
--- a/www/wiki/extensions/Translate/i18n/core/sl.json
+++ b/www/wiki/extensions/Translate/i18n/core/sl.json
@@ -4,16 +4,13 @@
"Dbc334",
"Eleassar",
"Smihael",
- "Edinwiki"
+ "Edinwiki",
+ "Janezdrilc",
+ "Upwinxp"
]
},
"translate": "Prevedi",
"translate-desc": "[[Special:Translate|Posebna stran]] za prevajanje MediaWiki in razširitev",
- "translate-taskui-view": "Pokaži vsa sporočila",
- "translate-taskui-untranslated": "Pokaži neprevedena sporočila",
- "translate-taskui-optional": "Pokaži izbirna sporočila",
- "translate-taskui-acceptqueue": "Samo sporočila, ki jih lako označim kot pregledana",
- "translate-taskui-reviewall": "Preglej vse prevode",
"translate-taskui-export-to-file": "Izvozi v izvirni obliki",
"translate-taskui-export-as-po": "Izvozi za nepovezano prevajanje",
"translate-taction-translate": "Prevedi",
@@ -25,7 +22,6 @@
"translate-page-no-such-language": "Izbran jezik je neveljaven.",
"translate-page-no-such-group": "Izbrana skupina je neveljavna.",
"translate-page-disabled": "Prevodi v ta jezik v tej skupini so bili onemogočeni.\nRazlog:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 je izvorni jezik strani.",
"translate-language-disabled": "Prevodi v ta jezik so onemogočeni.",
"translate-page-settings-legend": "Nastavitve",
"translate-page-group": "Skupina",
@@ -36,13 +32,13 @@
"translate-page-navigation-legend": "Navigacija",
"translate-page-showing": "Prikazujem sporočila od $1 do $2 od skupno $3.",
"translate-page-showing-all": "Prikazujem $1 {{PLURAL:$1|sporočilo|sporočili|sporočila|sporočil}}.",
+ "translate-page-showing-none": "Ni sporočil za prikaz.",
"translate-next": "Naslednja stran",
"translate-prev": "Prejšnja stran",
"translate-page-description-legend": "Informacije o skupini",
"translate-page-description-hasoptional": "Ta skupina sporočil vsebuje izbirna sporočila.\nIzbirna sporočila prevedite samo, če ima vaš jezik posebne zahteve,\nkot sta neuporaba presledkov ali prečrkovanje izvirnih imen. $1",
"translate-page-description-hasoptional-open": "Pokaži izbirna sporočila.",
"translate-page-edit": "uredi",
- "translate-ext-url": "<hr /> Spletna stran: $1",
"translate-optional": "(neobvezno)",
"translate-ignored": "(prezri)",
"translate-edit-title": "Uredi »$1«",
@@ -58,6 +54,11 @@
"translate-use-suggestion": "Zamenjaj trenutni prevod s tem predlogom.",
"translate-edit-nopermission": "Za prevajanje sporočil potrebujete prevajalske pravice.",
"translate-edit-askpermission": "Pridobite dovoljenje",
+ "exporttranslations": "Izvozi prevode",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Prosimo, izberi veljaven format.",
+ "translate-export-not-supported": "Izvoz prevoda ni podprt.",
+ "translate-export-format-notsupported": "Izbranega formata za izvoz skupina za obveščanje ne podpira.",
"translate-magic-pagename": "Razširjeno prevajanje MediaWiki",
"translate-magic-help": "Prevedete lahko vzdevke posebnih strani, čarobne besede in imena imenskih prostorov.\n\nVzdevki posebnih strani in čarobne besede imajo lahko več prevodov.\nPrevodi so ločeni z vejico (,).\nImenski prostori imajo lahko samo en prevod.\n\nPrevajanja projektnih imenskih prostorov za pogovor <code>$1 talk</code> je lahko zapleteno.\n<code>$1</code> se zamenja z imenom projektne strani (na primer <code>{{ns:project_talk}}</code>).\nČe v vašem jeziku ni mogoče tvoriti veljavnega izraza brez spreminjanja imena strani, prosimo, nas o tem obvestite na strani [[Support|Podpora]].\n\nZa shranjevanje sprememb morate biti prevajalec.\nSpremembe niso shranjene dokler ne kliknete spodnjega gumba za shranjevanje.",
"translate-magic-module": "Modul:",
@@ -74,7 +75,7 @@
"translate-magic-special": "Vzdevki posebnih strani",
"translate-magic-words": "Čarobne besede",
"translate-magic-namespace": "Imena imenskih prostorov",
- "translate-magic-notsaved": "Vaše urejanje ni bilo shranjeno!",
+ "translate-magic-notsaved": "Tvoje urejanje ni bilo shranjeno!",
"translate-magic-errors": "Prosimo popravite {{PLURAL:$1|naslednjo napako|naslednji $1 napaki|naslednje $1 napake|naslednjih $1 napak}} v prevodih:",
"translate-magic-saved": "Vaše spremembe smo shranili.",
"translate-checks-parameters": "{{PLURAL:$2|Naslednji parameter ni uporabljen|Naslednja parametra nista uporabljena|Naslednji parametri niso uporabljeni}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -102,8 +103,16 @@
"action-translate-manage": "urejanje skupin prevodov",
"right-translate-import": "Uvažanje nepovezanih prevodov",
"action-translate-import": "uvažanje nepovezanih prevodov",
- "right-translate-messagereview": "Pregledovanje prevodov",
+ "right-translate-messagereview": "Preglej prevode",
+ "action-translate-messagereview": "pregled prevodov",
"right-translate-groupreview": "Sprememba stanja poteka dela skupine sporočil",
+ "translate-rcfilters-translations": "Prevodi",
+ "translate-rcfilters-translations-only-label": "Prevodi",
+ "translate-rcfilters-translations-only-desc": "Sprememba strani za prevajanje.",
+ "translate-rcfilters-translations-filter-label": "Brez prevodov",
+ "translate-rcfilters-translations-filter-desc": "Vse spremembe, ki niso prevodi.",
+ "translate-rcfilters-translations-site-label": "Sporočila za strani",
+ "translate-rcfilters-translations-site-desc": "Prilagoditve sporočil za strani v imenskem prostoru MediaWiki.",
"translate-rc-translation-filter": "Filtriraj prevode:",
"translate-rc-translation-filter-no": "Ne stori ničesar",
"translate-rc-translation-filter-only": "Prikaži samo prevode",
@@ -119,8 +128,8 @@
"translate-statsf-options": "Možnosti grafa",
"translate-statsf-width": "Širina v slikovnih pikah:",
"translate-statsf-height": "Višina v slikovnih pikah:",
- "translate-statsf-days": "Začetni datum:",
- "translate-statsf-start": "Začetni datum:",
+ "translate-statsf-days": "Datum začetka:",
+ "translate-statsf-start": "Datum začetka:",
"translate-statsf-scale": "Zrnavost:",
"translate-statsf-scale-months": "Meseci",
"translate-statsf-scale-weeks": "Tedni",
@@ -176,7 +185,7 @@
"translate-mgs-noempty": "Ne prikaži jezikov, ki nimajo nobenega prevoda",
"translate-mgs-submit": "Prikaži statistiko",
"translate-mgs-column-language": "Jezik",
- "translate-mgs-totals": "Vsi jeziki skupaj",
+ "translate-mgs-totals": "{{PLURAL:$1|2=Oba jezika|Vsi jeziki}} skupaj",
"translate-mgs-invalid-group": "Izbrana skupina $1 ne obstaja.",
"translate-mgs-nothing": "Pri izbrani statistiki ni ničesar za prikazati.",
"supportedlanguages": "Podprti jeziki",
@@ -210,7 +219,7 @@
"translate-manage-import-summary": "Uvažanje nove različice iz zunanjega vira",
"translate-manage-conflict-summary": "Uvažanje nove različice iz zunanjega vira.\nProsimo, preverite.",
"translate-manage-submit": "Izvedi",
- "translate-manage-intro-other": "Spodaj se nahaja seznam sprememb prevodov v jeziku $1.\nProsimo, preglejte spremembe in izberite dejanje, ki ga želite storiti za vsako posodobitev.\nČe se odločite prezreti spremembe, bo to dejanje samo začasno.",
+ "translate-manage-intro-other": "Spodaj se nahaja seznam sprememb prevodov v jeziku $1.\nProsimo, preglej spremembe in izberi dejanje, ki ga želiš storiti za vsako posodobitev.\nČe se odločiš prezreti spremembe, bo to dejanje samo začasno.",
"translate-manage-import-ok": "Uvoženo: $1.",
"translate-manage-import-done": "Uvoz je dokončan!",
"importtranslations": "Uvažanje prevodov",
@@ -226,9 +235,7 @@
"translate-js-summary": "Povzetek:",
"translate-js-save": "Shrani",
"translate-js-next": "Shrani in odpri naslednje",
- "translate-js-nonext": "To je bilo zadnje sporočilo na tej strani.",
"translate-js-skip": "Preskoči na naslednje",
- "translate-js-save-failed": "Shranjevanje je spodletelo. Prosimo, prijavite to napako.",
"translate-js-history": "Zgodovina prevoda",
"translate-js-support": "Postavi vprašanje",
"translate-js-support-title": "Prosite za pomoč, če tukaj ni navedenih dovolj informacij, da bi lahko sporočilo pravilno prevedli.",
@@ -245,24 +252,12 @@
"translate-documentation-language": "dokumentacija sporočila",
"translate-searchprofile": "Prevodi",
"translate-searchprofile-tooltip": "Iskanje med vsemi prevodi",
+ "translate-searchprofile-note": "Več možnosti iskanja je na voljo z [$1 iskanjem prevodov].",
"translate-search-languagefilter": "Filtriraj po jeziku:",
"translate-search-nofilter": "Brez filtriranja",
- "translate-messagereview-submit": "Označi kot pregledano",
- "translate-messagereview-progress": "Označevanje kot pregledano ...",
- "translate-messagereview-failure": "Označevanje kot pregledano je spodletelo: $1",
- "translate-messagereview-done": "Pregledano",
- "translate-messagereview-reviews": "{{PLURAL:$1|Pregledal $1 uporabnik|Pregledala $1 uporabnika|Pregledali $1 uporabniki|Pregledalo $1 uporabnikov}}",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|Pregledali ste vi|Pregledala $1 uporabnika, vključno z vami|Pregledali $1 uporabniki, vključno z vami|Pregledalo $1 uporabnikov, vključno z vami}}",
- "api-error-invalidrevision": "Prevoda ni bilo mogoče najti",
- "api-error-unknownmessage": "Sporočila ni bilo mogoče najti",
- "api-error-fuzzymessage": "Prevod je označen kot zastarel",
- "api-error-owntranslation": "Svojih prevodov ne me morete označiti kot pregledane",
- "translate-messagereview-no-fuzzy": "Zastarelih prevodov ni mogoče označiti kot pregledane.",
- "translate-messagereview-no-own": "Svojih prevodov ne me morete označiti kot pregledane.",
- "translate-messagereview-doit": "Označi prevod kot pregledan.",
"log-name-translationreview": "Dnevnik pregledov prevodov",
"log-description-translationreview": "Dnevnik vseh pregledov prevodov in skupin sporočil.",
- "logentry-translationreview-message": "$1 je {{GENDER:$2|pregledal|pregledala|pregledal(-a)}} prevod $3",
+ "logentry-translationreview-message": "$1 je {{GENDER:$2|pregledal|pregledala}} prevod $3",
"logentry-translationreview-group": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} stanje prevodov jezika $4 za $3 iz $6 v $7",
"group-translate-sandboxed": "Neodobreni prevajalci",
"group-translate-sandboxed-member": "{{GENDER:$1|neodobren prevajalec}}",
@@ -281,7 +276,6 @@
"translate-dynagroup-recent-desc": "Skupina sporočil prikazuje vse nedavne prevode v ta jezik.\nNajuporabnejše za opravila pregleda.",
"translate-dynagroup-additions-label": "Nedavna dodajanja",
"translate-dynagroup-additions-desc": "Ta skupina sporočil kaže nova in spremenjena sporočila.",
- "translate-gethelp": "Pomoč",
"translate-msggroupselector-projects": "Skupina sporočil",
"translate-msggroupselector-search-placeholder": "Iskanje skupin",
"translate-msggroupselector-search-all": "Vsi",
@@ -300,7 +294,9 @@
"tux-status-translated": "Prevedeno",
"tux-status-saving": "Shranjevanje ...",
"tux-status-unsaved": "Neshranjeno",
+ "tux-save-unknown-error": "Prišlo je do neznane napake.",
"tux-editor-placeholder": "Vaš prevod",
+ "tux-editor-editsummary-placeholder": "Izbirni povzetek",
"tux-editor-paste-original-button-label": "Prilepi izvorno besedilo",
"tux-editor-discard-changes-button-label": "Zavrzi spremembe",
"tux-editor-save-button-label": "Shrani prevod",
@@ -308,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 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",
@@ -363,9 +359,11 @@
"tux-editor-close-tooltip": "Zapri",
"tux-editor-expand-tooltip": "Razširi",
"tux-editor-collapse-tooltip": "Skrči",
+ "tux-editor-message-tools-show-editor": "Pokaži v wikiurejevalniku",
"tux-editor-message-tools-history": "Zgodovina",
"tux-editor-message-tools-delete": "Izbriši",
"tux-editor-message-tools-translations": "Vsi prevodi",
+ "tux-editor-message-tools-linktothis": "Povezava na to sporočilo",
"tux-editor-loading": "Nalagam ...",
"translate-search-more-languages-info": "Še $1 {{PLURAL:$1|jezik|jezika|jeziki|jezikov}}",
"translate-statsbar-tooltip": "$1% prevedenih, $2% pregledanih",
@@ -374,5 +372,5 @@
"translate-ulsdep-title": "Napaka pri konfiguraciji",
"translate-ulsdep-body": "Razširitev Translate je odvisna od [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector razširitve Universal Language Selector].",
"tux-session-expired": "Niste več prijavljeni. Prosimo, prijavite se v ločenem zavihku. Druga možnost je, da naredite kopijo neshranjenega prevoda, se prijavite, se vrnete na to stran in ponovno vnesete vaš prevod.",
- "tux-nojs": "Stran zahteva JavaScript."
+ "tux-nojs": "Orodje ne deluje brez JavaScripta. JavaScript je onemogočen, ne deluje ali pa brskalnik ni podprt."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/so.json b/www/wiki/extensions/Translate/i18n/core/so.json
index f9a767fe..4583a59e 100644
--- a/www/wiki/extensions/Translate/i18n/core/so.json
+++ b/www/wiki/extensions/Translate/i18n/core/so.json
@@ -7,15 +7,16 @@
]
},
"translate": "Fasir",
- "translate-taskui-acceptqueue": "Fariimaha bis ayaan aqbalayaa",
"translate-taction-proofread": "Sixid",
"translate-taction-lstats": "Tirakoobka Luqadda",
"translate-taction-mstats": "Fariinta Tirakoobka Kooxda",
"translate-submit": "Qaado",
"translate-page-showing": "Soo bandhigista ka bilaabata $1 ilaa $2 of $3.",
+ "translate-page-showing-none": "Wax qoraal ah lama soo bandhigin.",
"translate-page-description-legend": "Macluumaad kusaabsan qaybta",
"translate-edit-nopermission": "Waxaad ubaahantahay ruqsad si aad u turjunto fariimaha.",
"translate-magic-submit": "Qaado",
+ "translate-pref-nonewsletter": "Ha dirin wax wargelin farriin e-mail ah",
"translate-tag-page-desc": "Turjumidda ee bogga wiki [[$2|$1]].",
"languagestats-summary": "Boggaan waxaa lagu soo bandhigay tirakoobka turjumaadda qayba kasta oo ka mid ah fariimaha luaqadaha.",
"languagestats-stats-for": "Tirakoobka turtumida luqadda $1 ($2).",
diff --git a/www/wiki/extensions/Translate/i18n/core/sq.json b/www/wiki/extensions/Translate/i18n/core/sq.json
index 68c36e4a..1c6e0be9 100644
--- a/www/wiki/extensions/Translate/i18n/core/sq.json
+++ b/www/wiki/extensions/Translate/i18n/core/sq.json
@@ -36,5 +36,5 @@
"translate-js-history": "Historia e përkthimit",
"translate-documentation-language": "Dokumentimi i mesazhit",
"tux-editor-save-button-label": "Ruaj përkthimin",
- "tux-editor-shortcut-info": "Shtypni \"<span class=\"notranslate\" translate=\"asnjë\">$1</span>\" për të shpëtuar ose \"<span class=\"notranslate\" translate=\"asnjë\">$2</span>\" për të kaluar tek tjetër mesazh, ose \"<span class=\"notranslate\" translate=\"asnjë\">$3</span>\" për shortcut të tjera ."
+ "tux-editor-shortcut-info": "Shtypni \"$1\" për të ruajtur ose \"$2\" për të kaluar në mesazhin tjetër, ose \"$3\" për shkurtesa të tjera."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/sr-ec.json b/www/wiki/extensions/Translate/i18n/core/sr-ec.json
index d0a9f3df..2f902538 100644
--- a/www/wiki/extensions/Translate/i18n/core/sr-ec.json
+++ b/www/wiki/extensions/Translate/i18n/core/sr-ec.json
@@ -8,372 +8,385 @@
"Милан Јелисавчић",
"Михајло Анђелковић",
"Srdjan m",
- "Сербијана"
+ "Сербијана",
+ "Obsuser",
+ "Acamicamacaraca",
+ "Prevodim",
+ "BadDog",
+ "Zoranzoki21"
]
},
- "translate": "Превод",
- "translate-desc": "[[Special:Translate|Посебна страница]] за превођење Медијавикија и више од тога",
- "translate-taskui-view": "Прикажи све поруке",
- "translate-taskui-untranslated": "Прикажи непреведене поруке",
- "translate-taskui-optional": "Прикажи необавезне поруке",
- "translate-taskui-acceptqueue": "Само поруке које могу да означим као потврђене",
- "translate-taskui-reviewall": "Прегледање превода",
- "translate-taskui-export-to-file": "Извези у матичном формату",
- "translate-taskui-export-as-po": "Извези за ванмрежно превођење",
- "translate-taction-translate": "Превод",
+ "translate": "Превођење",
+ "translate-extensionname": "Превођење",
+ "translate-desc": "[[Special:Translate|Посебна страница]] за превођење Медијавикија и других програма",
+ "translate-fuzzybot-desc": "Ово је посебан системски налог који користи [https://www.mediawiki.org/wiki/Extension:Translate проширење „Превођење”] Медијавикија. Користи се за одржавање превода.\nНалог је део софтвера Медијавики и није у власништву ниједног корисника.",
+ "translate-taskui-export-to-file": "Извези у изворном облику",
+ "translate-taskui-export-as-po": "Извези за превођење ван мреже",
+ "translate-taction-translate": "Превођење",
"translate-taction-proofread": "Провера",
"translate-taction-lstats": "Статистика језика",
- "translate-taction-mstats": "Статистика групе",
+ "translate-taction-mstats": "Статистика групе порука",
"translate-taction-export": "Извоз",
- "translate-taction-disabled": "Радња је онемогућена на овом викију.",
- "translate-page-no-such-language": "Наведени језик није исправан.",
- "translate-page-no-such-group": "Наведена група није исправна.",
- "translate-page-disabled": "Преводи на овом језику у овој групи су онемогућени. Разлог:\n\n<em>$1</em>",
+ "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-settings-legend": "Поставке",
- "translate-page-group": "Група:",
- "translate-page-language": "Језик:",
- "translate-page-limit": "Ограничење:",
+ "translate-page-settings-legend": "Подешавања",
+ "translate-page-group": "Група",
+ "translate-page-language": "Језик",
+ "translate-page-limit": "Ограничење",
"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-none": "Нема порука.",
+ "translate-page-navigation-legend": "Кретање",
+ "translate-page-showing": "Приказујем поруке од $1 до $2, од укупно $3.",
+ "translate-page-showing-all": "Приказујем $1 {{PLURAL:$1|поруку|поруке|порука}}.",
+ "translate-page-showing-none": "Нема порука за приказ.",
"translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "Следећа страница",
"translate-prev": "Претходна страница",
- "translate-page-description-legend": "Подаци о групи",
- "translate-page-description-hasoptional": "Ова група садржи необавезне поруке. Њих преводите само када ваш језик има посебне потребе као пресловљавање имена или неупотреба размака. $1",
+ "translate-page-description-legend": "Информације о групи",
+ "translate-page-description-hasoptional": "Ова група порука садржи необавезне поруке.\nЊих треба преводити само када језик има посебне потребе,\nпопут неупотребе размака или пресловљавања имена. $1",
"translate-page-description-hasoptional-open": "Прикажи необавезне поруке.",
"translate-page-edit": "уреди",
- "translate-ext-url": "<hr />Адреса: $1",
"translate-optional": "(необавезно)",
"translate-ignored": "(занемарено)",
- "translate-edit-title": "Уређивање „$1“",
- "translate-edit-definition": "Значење поруке",
+ "translate-edit-title": "Уредите страницу „$1”",
+ "translate-edit-definition": "Текст поруке",
"translate-edit-translation": "Превод",
- "translate-edit-contribute": "допринеси",
- "translate-edit-no-information": "<em>Ова порука нема пратећу документацију. Ако знате где се и како користи, помозите другим преводиоцима додавањем њеног описа.</em>",
- "translate-edit-information": "Подаци о поруци ($1)",
+ "translate-edit-contribute": "допринесите",
+ "translate-edit-no-information": "<em>Ова порука нема документацију.\nАко знате где или како се користи, помозите другим преводиоцима тако што ћете је написати.</em>",
+ "translate-edit-information": "Информације о поруци ($1)",
"translate-edit-in-other-languages": "Порука на другим језицима",
- "translate-edit-committed": "Текући превод у софтверу",
- "translate-edit-warnings": "Напомене о непотпуним преводима",
- "translate-edit-tmsugs": "Предлози из преводилачке меморије",
- "translate-edit-tmmatch-source": "Текст изворног превода: $1",
- "translate-edit-tmmatch": "$1% поклапања",
- "translate-use-suggestion": "Замени текући превод с овим предлогом.",
- "translate-edit-nopermission": "Треба вам дозвола да преводите поруке.",
+ "translate-edit-warnings": "Упозорења о непотпуним преводима",
+ "translate-edit-tmmatch-source": "Изворни текст за превођење: $1",
+ "translate-edit-tmmatch": "$1% подударања",
+ "translate-use-suggestion": "Замените тренутни превод овим предлогом.",
+ "translate-edit-nopermission": "Требају вам преводилачка права да бисте преводили поруке.",
"translate-edit-askpermission": "Затражи дозволу",
- "translate-magic-pagename": "Проширени превод Медијавикија",
- "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То ћете урадити кликом на дугме „Сачувај“ које се налази испод.",
+ "exporttranslations": "Извоз превода",
+ "translate-export-form-format": "Врста",
+ "translate-export-invalid-format": "Наведите важећи облик.",
+ "translate-export-not-supported": "Извоз превода није подржан.",
+ "translate-export-format-notsupported": "Група порука не подржава наведени облик извоза.",
+ "translate-magic-pagename": "напредног превођења Медијавикија",
+ "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-original": "Изворно",
+ "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-savefailed": "Измене нису сачуване",
- "translate-magic-special": "кодови за посебне странице",
+ "translate-magic-cm-updatedusing": "Ажурирано помоћу [[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]",
+ "translate-magic-cm-savefailed": "Не могу да сачувам промене",
+ "translate-magic-special": "псеудоними посебних страница",
"translate-magic-words": "магичне речи",
- "translate-magic-namespace": "називи именских простора",
- "translate-magic-notsaved": "Ваша измена није сачувана!",
+ "translate-magic-namespace": "имена именских простора",
+ "translate-magic-notsaved": "Ваша измена није сачувана.",
"translate-magic-errors": "Исправите {{PLURAL:$1|следећу грешку|следеће грешке}} у преводима:",
- "translate-magic-saved": "Ваше измене су сачуване.",
+ "translate-magic-saved": "Ваше промене су сачуване.",
"translate-checks-parameters": "Следећи {{PLURAL:$2|параметар се не користи|параметри се не користе}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "Следећи {{PLURAL:$2|параметар је непознат|параметри су непознати}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "Присутан је непаран број {{PLURAL:$2|заграда}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "{{PLURAL:$2|Следећа веза је проблематична|Следеће $2 везе су проблематичне|Следећих $2 веза је проблематично}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "{{PLURAL:$2|Следећа веза недостаје|Следеће $2 везе недостају|Следећих $2 веза недостају}}:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-xhtml": "Замените {{PLURAL:$2|следећу ознаку|следеће ознаке}} с исправним:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-plural": "Значење користи <nowiki>{{PLURAL:}}</nowiki>, а превод не.",
- "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-xhtml": "Замените {{PLURAL:$2|следећу ознаку исправном|следеће ознаке исправним}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Изворни текст користи ознаку <nowiki>{{PLURAL:}}</nowiki>, а превод не.",
+ "translate-checks-plural-forms": "У ознаци <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|унет је један облик|унета су $1 облика}}, али {{PLURAL:$2|само један облик је подржан|$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-escape": "Следећи излази могу бити случајни: <strong>$1</strong>",
- "translate-checks-parametersnotequal": "Број коришћених параметара је {{PLURAL:$1|$1}}; требало би да је {{PLURAL:$2|$2}}.",
- "translate-checks-malformed": "<nowiki>$1</nowiki> има погрешан формат.",
- "translate-checks-fudforum-syntax": "Користи <nowiki>$1</nowiki> уместо <nowiki>$2</nowiki> у овом пројекту.",
- "translate-pref-nonewsletter": "Не шаљи ми билтене преко имејла",
+ "translate-checks-parametersnotequal": "Број параметара је {{PLURAL:$1|$1}}; требало би бити {{PLURAL:$2|$2}}.",
+ "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-manage": "управљате групама порука",
+ "right-translate-import": "увожење превода ван мреже",
+ "action-translate-import": "увозите преводе ван мреже",
+ "right-translate-messagereview": "проверавање превода",
+ "action-translate-messagereview": "проверавате преводе",
"right-translate-groupreview": "мењање стања радног тока за групе порука",
- "translate-rc-translation-filter": "Филтрирање превода:",
+ "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-rc-translation-filter": "Издвоји преводе:",
"translate-rc-translation-filter-no": "не ради ништа",
"translate-rc-translation-filter-only": "прикажи само преводе",
"translate-rc-translation-filter-filter": "избаци преводе",
- "translate-rc-translation-filter-site": "само измене порука сајта",
- "translationstats": "Статистика превођења",
+ "translate-rc-translation-filter-site": "само промене системских порука",
+ "translationstats": "Статистика превода",
"translate-stats-edits": "Измене",
"translate-stats-users": "Преводиоци",
- "translate-stats-registrations": "Учлањења",
- "translate-stats-reviews": "Рецензије",
- "translate-stats-reviewers": "Рецензенти",
- "translate-statsf-intro": "Овом формом можете направити једноставне статистике.\nСве вредности имају своја горња и доња ограничења.",
- "translate-statsf-options": "Поставке графикона",
+ "translate-stats-registrations": "Регистрације",
+ "translate-stats-reviews": "Провере",
+ "translate-stats-reviewers": "Проверавачи",
+ "translate-statsf-intro": "Помоћу овог обрасца можете да створите једноставну статистику.\nСве вредности имају доње и горње границе.",
+ "translate-statsf-options": "Опције графикона",
"translate-statsf-width": "Ширина у пикселима:",
"translate-statsf-height": "Висина у пикселима:",
"translate-statsf-days": "Временски период у данима:",
- "translate-statsf-start": "Почетни датум:",
- "translate-statsf-scale": "Грануларност:",
+ "translate-statsf-start": "Датум почетка:",
+ "translate-statsf-scale": "Зрнатост:",
"translate-statsf-scale-months": "месеци",
"translate-statsf-scale-weeks": "недеље",
"translate-statsf-scale-days": "дани",
"translate-statsf-scale-hours": "сати",
- "translate-statsf-count": "Мера:",
+ "translate-statsf-count": "Мерење:",
"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-category": "Преводиве странице",
"translate-tag-page-desc": "Превод вики странице [[$2|$1]] са $3 ($4).",
"translate-sidebar-alltrans": "На другим језицима",
"translations": "Сви преводи",
- "translations-summary": "Унесите назив поруке испод да бисте приказали све доступне преводе.",
- "translate-translations-no-message": "Порука „$1“ се не може превести.",
- "translate-translations-none": "Нема превода за „$1“.",
+ "translations-summary": "Унесите име поруке испод да бисте приказали све доступне преводе.",
+ "translate-translations-no-message": "Порука „$1” није преводива.",
+ "translate-translations-none": "Не постоје преводи за „$1”.",
"translate-translations-count": "{{PLURAL:$1|Пронађен је један превод|Пронађена су $1 превода|Пронађено је $1 превода}}.",
"translate-translations-fieldset-title": "Порука",
- "translate-translations-messagename": "Назив:",
+ "translate-translations-messagename": "Име:",
"translate-translations-project": "Пројекат:",
- "translate-translations-including-no-param": "Унесите исправан кључ поруке у параметру подстранице",
+ "translate-translations-including-no-param": "Наведите важећи кључ поруке у параметру подстранице",
"translate-translations-history-short": "и",
"languagestats": "Статистика језика",
- "languagestats-summary": "Ова страница приказује статистику превода за све групе порука неког језика.",
- "languagestats-stats-for": "Статистика превода за {{LCFIRST:$1}} ($2).",
- "languagestats-recenttranslations": "скорашњи преводи",
- "translate-langstats-incomplete": "Неке статистике наведене на страници су непотпуне. Поново учитајте страницу да добијете потпуни преглед.",
- "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": "Не приказуј потпуно непреведене групе порука",
+ "languagestats-summary": "Ова страница приказује статистику превода за све групе порука на неком језику.",
+ "messagegroupstats-summary": "Ова страница приказује статистику група порука.",
+ "languagestats-stats-for": "Статистика превођења за {{LCFIRST:$1}} ($2).",
+ "languagestats-recenttranslations": "недавни преводи",
+ "translate-langstats-incomplete": "Неке статистике наведене на страници су непотпуне. Поново учитајте страницу да бите добили још статистика.",
+ "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-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": "Не приказуј језике с потпуним преводом",
- "translate-mgs-noempty": "Не приказуј језике без икаквих превода",
+ "translate-mgs-nocomplete": "Не приказуј језике сa потпуним преводом",
+ "translate-mgs-noempty": "Не приказуј језике који немају никакве преводе",
"translate-mgs-submit": "Прикажи статистику",
"translate-mgs-column-language": "Језик",
- "translate-mgs-totals": "Сви језици заједно",
- "translate-mgs-invalid-group": "Наведена група $1 не постоји.",
- "translate-mgs-nothing": "Нема шта да се прикаже за захтеване статистике.",
+ "translate-mgs-totals": "Свих $1 {{PLURAL:$1|језика}} заједно",
+ "translate-mgs-invalid-group": "Наведена група „$1” не постоји.",
+ "translate-mgs-nothing": "Нема ничега да се прикаже за захтеване статистике.",
"supportedlanguages": "Подржани језици",
- "supportedlanguages-summary": "Ова страница приказује списак свих подржаних језика на овом викију, заједно с именима преводиоца који раде на тим језицима.\nВеличина имена, тј. слова преводиоца зависи од тога колико је порука превео.\nБоја линије с којом је име подвучено приказује колико је преводилац активан.",
- "supportedlanguages-colorlegend": "Легенда за боју; последњи превод извршен пре $1 дана.",
+ "supportedlanguages-summary": "Ова страница приказује списак свих језика које подржава {{SITENAME}},\nзаједно са именима преводилаца који раде на том језику.\nИме преводиоца је веће што је више превода допринео.\nБоја линије подвлачења указује колико скоро је преводилац овде био присутан.",
+ "supportedlanguages-colorlegend": "Легенда за боју: последњи превод извршен пре $1 дана.",
"supportedlanguages-portallink": "[$1] $2 – $3",
"supportedlanguages-portallink-nocldr": "[$1] $2",
- "supportedlanguages-translators": "{{PLURAL:$2|1=Преводилац|Преводиоци}}: $1",
- "supportedlanguages-recenttranslations": "скорашњи преводи",
- "supportedlanguages-count": "Укупно $1 {{PLURAL:$1|језик|језика|језика}}.",
+ "supportedlanguages-sqlite-error": "Ес-Кју-Ел лајт није подржан",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Преводилац|Преводитељка}}|Преводиоци}}: $1",
+ "supportedlanguages-recenttranslations": "недавни преводи",
+ "supportedlanguages-count": "Укупно $1 {{PLURAL:$1|језик|језика}}.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|измена|измене|измена}} – последња измена пре $3 {{PLURAL:$3|дан|дана|дана}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Изворни текст преводилачке јединице",
"translate-save": "Сачувај ($1)",
"translate-jssti-add": "Додај на списак",
"managemessagegroups": "Управљање групама порука",
- "translate-smg-notallowed": "Немате дозволу да извршите ову радњу.",
- "translate-smg-nochanges": "Нема измена које треба обрадити.",
- "translate-smg-submit": "Проследи измене на обраду",
- "translate-smg-submitted": "Дефиниција поруке је ажурирана. Измене се врше у позадини.",
- "translate-smg-left": "Садржај поруке на вики",
- "translate-smg-right": "Долазне измене",
+ "translate-smg-notallowed": "Није вам дозвољено да извршите ову радњу.",
+ "translate-smg-nochanges": "Нема промена које треба обрадити.",
+ "translate-smg-submit": "Пошаљи промене на обраду",
+ "translate-smg-submitted": "Текстови порука су ажурирани. Промене се обрађују у позадини.",
+ "translate-smg-more": "Биће још промена за обраду након што пошаљете ове.",
+ "translate-smg-left": "Садржај поруке на викију",
+ "translate-smg-right": "Предстојеће промене",
"translate-manage-import-diff": "Порука $1 | Радње: $2",
"translate-manage-import-new": "Нова порука $1",
- "translate-manage-import-deleted": "Обрисана порука $1",
+ "translate-manage-import-deleted": "Избрисана порука $1",
"translate-manage-action-import": "увези",
"translate-manage-action-conflict": "увези и означи као застарело",
"translate-manage-action-ignore": "занемари",
- "translate-manage-action-fuzzy": "увези и означи као застарело",
- "translate-manage-nochanges": "Нема измена у значењу поруке за ову групу.",
- "translate-manage-nochanges-other": "Нема измена на овом језику.\nКористите везу испод да се вратите на страницу за опис групе.",
- "translate-manage-inconsistent": "Пронађена је несагласност у захтеву.\nПроверите измене и покушајте поново.\nДетаљи: $1.",
+ "translate-manage-action-fuzzy": "увези преводе и означи их као застареле",
+ "translate-manage-nochanges": "Нема промена у текстовима порука у овој групи.",
+ "translate-manage-nochanges-other": "Нема промена за овај језик.\nКористите доленаведену везу да бисте се вратили на приказ детаља групе.",
+ "translate-manage-inconsistent": "Откривена је недоследност у захтеву.\nПроверите промене, па покушајте поново.\nДетаљи: $1.",
"translate-manage-toolong": "Највеће време извршавања од $1 {{PLURAL:$1|секунде|секунде|секунди}} је прекорачено.\nПоново пошаљите образац за наставак.",
- "translate-manage-import-summary": "Увожење новог издања из спољашњег извора",
- "translate-manage-conflict-summary": "Увожење новог издања из спољашњег извора.\nМолимо, проверите.",
- "translate-manage-fuzzy-summary": "Дефиниција поруке се променила",
+ "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": "Увоз завршен!",
+ "translate-manage-import-done": "Увоз је завршен.",
"importtranslations": "Увоз превода",
- "translate-import-from-local": "Локална датотека:",
- "translate-import-load": "Додај",
- "translate-import-err-dl-failed": "Добављање датотеке није успело:\n$1",
- "translate-import-err-ul-failed": "Не могу да отпремим датотеку.",
- "translate-import-err-invalid-title": "Унесен назив датотеке <nowiki>$1</nowiki> није исправан.",
- "translate-import-err-no-such-file": "Датотека <nowiki>$1</nowiki> не постоји или није послата са рачунара.",
+ "translate-import-from-local": "Отпремање локалне датотеке:",
+ "translate-import-load": "Учитај датотеку",
+ "translate-import-err-dl-failed": "Не могу да добавим датотеку:\n$1",
+ "translate-import-err-ul-failed": "Не могу да отпремим датотеку",
+ "translate-import-err-invalid-title": "Пружено име датотеке <nowiki>$1</nowiki> није важеће.",
+ "translate-import-err-no-such-file": "Датотека <nowiki>$1</nowiki> не постоји или није отпремљена месно.",
"translate-import-err-stale-group": "Група порука којој ова датотека припада не постоји.",
- "translate-import-err-no-headers": "Датотека није добро формирана:\nГрупа и језик нису одређене из заглавља датотеке.",
- "translate-import-err-warnings": "Датотека није добро формирана.\nУверите се да уређивач не уклања msgctxt поља.\nДетаљи: $1",
- "translate-js-summary": "Опис:",
+ "translate-import-err-no-headers": "Датотека није добро обликована Гет текст датотека у облику проширења „Превођење”:\nНе могу да одредим групу порука и језик из заглавља датотеке.",
+ "translate-import-err-warnings": "Датотека није добро обликована.\nУверите се да ваш уређивач не уклања поља msgctxt.\nДетаљи: $1",
+ "translate-js-summary": "Резиме:",
"translate-js-save": "Сачувај",
- "translate-js-next": "Сачувај и отвори следеће",
- "translate-js-nonext": "То је била последња порука на овој страници.",
- "translate-js-skip": "Прескочи на следеће",
- "translate-js-save-failed": "Чување није успело. Пријавите ову грешку.",
+ "translate-js-next": "Сачувај и отвори следећу",
+ "translate-js-skip": "Прескочи на следећу",
"translate-js-history": "Историја превода",
"translate-js-support": "Постави питање",
- "translate-js-support-title": "Питајте за помоћ ако нема довољно података за ваљано превођење поруке",
- "translate-js-support-unsaved-warning": "Имате несачуваних измена.",
+ "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-speakers": "Говорници",
"translate-gs-score": "Резултат",
"translate-gs-multiple": "Више",
"translate-gs-count": "Број",
"translate-gs-total": "Укупно",
- "translate-gs-avgscore": "Просечан резултат",
- "translate-documentation-language": "Помоћ при превођењу",
+ "translate-gs-avgscore": "Прос. резултат",
+ "translate-documentation-language": "Документација поруке",
"translate-searchprofile": "Преводи",
"translate-searchprofile-tooltip": "Претражите све преводе",
- "translate-search-languagefilter": "Филтрирај по језику:",
+ "translate-searchprofile-note": "Још опција претраге доступно је на [$1 претрази превода].",
+ "translate-search-languagefilter": "Филтрирање по језику:",
"translate-search-nofilter": "Без филтрирања",
- "translate-messagereview-submit": "Означи проверено",
- "translate-messagereview-progress": "Означавање потврђеног…",
- "translate-messagereview-failure": "Неуспешно означавање потврђеног: $1",
- "translate-messagereview-done": "Потврђено",
- "translate-messagereview-reviews": "Потврђено од {{PLURAL:$1|једног корисника|$1 корисника}}",
- "translate-messagereview-reviewswithyou": "Потврда од {{PLURAL:$1|вас|$1 корисника закључно са вама}}",
- "api-error-invalidrevision": "Превод није пронађен",
- "api-error-unknownmessage": "Порука није пронађена",
- "api-error-fuzzymessage": "Превод је означен као застарео",
- "api-error-owntranslation": "Не можете да означите сопствене преводе као потврђене",
- "translate-messagereview-no-fuzzy": "Fuzzy преводи се не могу означити прегледаним",
- "translate-messagereview-no-own": "Не можете да означити сопствене преводе као потврђене.",
- "translate-messagereview-doit": "Означи овај превод као потврђен.",
"log-name-translationreview": "Дневник провере превода",
- "log-description-translationreview": "Историја свих провера превода и група порука.",
- "logentry-translationreview-message": "$1 је {{GENDER:$2|потврдио|потврдила}} превод $3",
- "logentry-translationreview-group": "$1 {{GENDER:$2|је променио|је променила}} стање $4 превода $3 са $6 на $7",
+ "log-description-translationreview": "Дневник свих провера превода и група порука.",
+ "logentry-translationreview-message": "$1 је {{GENDER:$2|прегледао|прегледала}} превод $3",
+ "logentry-translationreview-group": "$1 је {{GENDER:$2|променио|променила}} стање $4 превода $3 са $6 на $7",
"group-translate-sandboxed": "Неодобрени преводиоци",
- "group-translate-sandboxed-member": "{{GENDER:$1|неодобрени преводилац}}",
+ "group-translate-sandboxed-member": "{{GENDER:$1|неодобрени преводилац|неодобрена преводитељка}}",
+ "right-translate-sandboxmanage": "управљање корисницима у песку",
+ "action-translate-sandboxmanage": "управљате корисницима у песку",
+ "right-translate-sandboxaction": "извршавање радњи на белом списку за кориснике у песку",
+ "action-translate-sandboxaction": "извршавате радње на белом списку за кориснике у песку",
"translate-workflow-state-": "(непостављен)",
- "translate-workflowstatus": "Статус: $1",
+ "translate-workflowstatus": "Стање: $1",
"translate-workflow-set-doing": "Постављам…",
- "translate-workflow-autocreated-summary": "Аутоматско стварање странице за радно стање $1",
+ "translate-workflow-autocreated-summary": "Аутоматско прављење странице за радно стање $1",
"translate-stats-workflow": "Стање",
"translate-workflowgroup-label": "Радна стања",
- "translate-workflowgroup-desc": "Ова група порука приказује радно стање превода.\nСтања су одређена с променљивом $wgTranslateWorkflowStates.",
- "translate-dynagroup-recent-label": "Скорашњи преводи",
- "translate-dynagroup-recent-desc": "Ова група порука приказује све скорашње преводе на овом језику.\nОво је најкорисније при провери превода.",
- "translate-dynagroup-additions-label": "Скорашња додавања",
- "translate-dynagroup-additions-desc": "Ова група порука приказује нове и измењене поруке.",
- "translate-gethelp": "Помоћ",
+ "translate-workflowgroup-desc": "Ова група порука приказује радно стање превода.\nСтања су одређена у поставци променљиве $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Недавни преводи",
+ "translate-dynagroup-recent-desc": "Ова група порука приказује све недавне преводе на овом језику.\nОво је најкорисније за проверу превода.",
+ "translate-dynagroup-additions-label": "Недавна додавања",
+ "translate-dynagroup-additions-desc": "Ова група порука приказује нове и промењене поруке.",
"translate-msggroupselector-projects": "Група порука",
- "translate-msggroupselector-search-placeholder": "Претрага група",
+ "translate-msggroupselector-search-placeholder": "Претражите групе",
"translate-msggroupselector-search-all": "Све",
- "translate-msggroupselector-search-recent": "Скорашњи",
+ "translate-msggroupselector-search-recent": "Недавне",
"translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|подгрупа|подгрупе}}",
"tux-languageselector": "Превод на",
"tux-tab-all": "Све",
"tux-tab-untranslated": "Непреведено",
"tux-tab-outdated": "Застарело",
"tux-tab-translated": "Преведено",
- "tux-tab-unproofread": "Непотврђено",
+ "tux-tab-unproofread": "Непроверено",
"tux-edit": "Уреди",
- "tux-status-optional": "Необавезно",
+ "tux-status-optional": "Oпционално",
"tux-status-fuzzy": "Застарело",
- "tux-status-proofread": "Потврђено",
+ "tux-status-proofread": "Проверено",
"tux-status-translated": "Преведено",
- "tux-status-saving": "Чување...",
+ "tux-status-saving": "Чувам…",
"tux-status-unsaved": "Несачувано",
+ "tux-save-unknown-error": "Дошло је до непознате грешке.",
"tux-editor-placeholder": "Ваш превод",
- "tux-editor-paste-original-button-label": "Унеси изворни текст",
- "tux-editor-discard-changes-button-label": "Одбаци измене",
+ "tux-editor-editsummary-placeholder": "Необавезан резиме",
+ "tux-editor-paste-original-button-label": "Налепи изворни текст",
+ "tux-editor-discard-changes-button-label": "Одбаци промене",
"tux-editor-save-button-label": "Сачувај превод",
"tux-editor-skip-button-label": "Пређи на следећу",
"tux-editor-cancel-button-label": "Откажи",
"tux-editor-confirm-button-label": "Потврди превод",
- "tux-editor-shortcut-info": "Притисните „$1“ како бисте сачували или „$2“ да пређите на следећу поруку или „$3“ за друге пречице.",
+ "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-ask-help": "Потражите додатне информације",
- "tux-editor-tm-match": "$1% поклапања",
+ "tux-editor-need-more-help": "Потребна вам је додатна помоћ?",
+ "tux-editor-ask-help": "Затражите више информација",
+ "tux-editor-tm-match": "$1% подударања",
"tux-warnings-more": "{{PLURAL:$1|још $1}}",
"tux-warnings-hide": "сакриј",
- "tux-editor-save-failed": "Чување превода није успело: $1",
+ "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-action-tooltip": "Означите као проверено",
"tux-proofread-edit-label": "Уреди",
"tux-editor-page-mode": "Страница",
- "tux-editor-outdated-warning": "Овај превод је можда потребно ажурирати.",
+ "tux-editor-outdated-warning": "Овај превод можда треба да се ажурира.",
"tux-editor-outdated-warning-diff-link": "Прикажи разлике",
- "tux-editor-doc-editor-placeholder": "Документација о поруци",
+ "tux-editor-doc-editor-placeholder": "Документација поруке",
"tux-editor-doc-editor-save": "Сачувај документацију",
"tux-editor-doc-editor-cancel": "Откажи",
"tux-messagetable-more-messages": "још $1 {{PLURAL:$1|порука}}",
- "tux-messagetable-loading-messages": "Учитавање {{PLURAL:$1|порука}}...",
- "tux-message-filter-placeholder": "Филтрирај списак",
- "tux-message-filter-result": "Нађено $1 {{PLURAL:$1|резултат|резултата}} за „$2“",
+ "tux-messagetable-loading-messages": "Учитавам {{PLURAL:$1|поруку|поруке}}…",
+ "tux-message-filter-placeholder": "Филтрирајте списак",
+ "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": "Ваш превод",
"tux-empty-list-all": "Ова група порука је празна",
- "tux-empty-list-all-guide": "Изаберите другу групу порука за превођење",
+ "tux-empty-list-all-guide": "Изаберите другу групу порука за превод",
"tux-translate-page-no-such-group": "<strong>Назначена група не постоји.</strong> Изаберите другу групу порука.",
"tux-empty-list-translated": "Нема преведених порука",
- "tux-empty-list-translated-guide": "Можете помоћи у превођењу",
- "tux-empty-list-translated-action": "Преведи",
- "tux-empty-no-messages-to-display": "Нема порука за приказивање.",
- "tux-empty-there-are-optional": "Има необавезних порука које нису приказане на списку",
+ "tux-empty-list-translated-guide": "Помозите у превођењу",
+ "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-you-can-help-providing": "Можете да помогнете пружањем нових превода",
+ "tux-empty-you-can-help-providing": "Помозите пружањем нових превода",
"tux-empty-nothing-new-to-proofread": "Ништа ново за проверу",
- "tux-empty-you-can-review-already-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-message-tools-show-editor": "Прикажи у вики уређивачу",
"tux-editor-message-tools-history": "Историја",
- "tux-editor-message-tools-delete": "Обриши",
+ "tux-editor-message-tools-delete": "Избриши",
"tux-editor-message-tools-translations": "Сви преводи",
- "tux-editor-loading": "Учитавање…",
+ "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|група}}",
- "tux-nojs": "Ова страница захтјева JavaScript."
+ "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": "Проширење „Превођење” зависи од [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector Универзалног бирача језика”].",
+ "tux-session-expired": "Више нисте пријављени. Пријавите се у засебној картици. Друга могућност је да прекопирате несачуване преводе, пријавите се, вратите се на ову страницу и поново унесете своје преводе.",
+ "tux-nojs": "Ова алатка не ради без јаваскрипта. Јаваскрипт је онемогућен, не ради или је овај прегледач неподржан."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/sr-el.json b/www/wiki/extensions/Translate/i18n/core/sr-el.json
index 1001c9a5..ec26b3ce 100644
--- a/www/wiki/extensions/Translate/i18n/core/sr-el.json
+++ b/www/wiki/extensions/Translate/i18n/core/sr-el.json
@@ -7,309 +7,323 @@
"Sociologist",
"Жељко Тодоровић",
"Edinwiki",
- "Srdjan m"
+ "Srdjan m",
+ "Сербијана",
+ "Obsuser",
+ "Prevodim",
+ "Zoranzoki21"
]
},
- "translate": "Prevod",
- "translate-desc": "[[Special:Translate|Posebna stranica]] za prevođenje Medijavikija",
- "translate-taskui-view": "Prikaži sve poruke",
- "translate-taskui-untranslated": "Prikaži neprevedene poruke",
- "translate-taskui-optional": "Prikaži neobavezne poruke",
- "translate-taskui-acceptqueue": "Samo poruke koje mogu da prihvatim",
- "translate-taskui-reviewall": "Pregledanje prevoda",
+ "translate": "Prevođenje",
+ "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 vanmrežno prevođenje",
- "translate-taction-translate": "Prevod",
- "translate-taction-proofread": "Provera",
+ "translate-taskui-export-as-po": "Izvezi za oflajn-prevođenje",
+ "translate-taction-translate": "Prevođenje",
+ "translate-taction-proofread": "Pregled",
"translate-taction-lstats": "Statistika jezika",
- "translate-taction-mstats": "Statistika grupe",
+ "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": "Izabrani jezik nije ispravan.",
- "translate-page-no-such-group": "Izabrana grupa nije ispravna.",
- "translate-page-disabled": "Prevodi na ovom jeziku u ovoj grupi su onemogućeni. Razlog:\n\n<em>$1</em>",
+ "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": "Postavke",
- "translate-page-group": "Grupa:",
- "translate-page-language": "Jezik:",
- "translate-page-limit": "Ograničenje:",
+ "translate-page-settings-legend": "Podešavanja",
+ "translate-page-group": "Grupa",
+ "translate-page-language": "Jezik",
+ "translate-page-limit": "Ograničenje",
"translate-page-limit-option": "$1 {{PLURAL:$1|poruka|poruke|poruka}} po stranici",
"translate-submit": "Dobavi",
"translate-page-navigation-legend": "Navigacija",
"translate-page-showing": "Prikaz poruka od $1 do $2, od $3.",
- "translate-page-showing-all": "Prikaz $1 {{PLURAL:$1|poruke|poruka}}.",
- "translate-page-showing-none": "Nema poruka.",
+ "translate-page-showing-all": "Prikaz $1 {{PLURAL:$1|poruke|poruke|poruka}}.",
+ "translate-page-showing-none": "Nema poruka za prikaz.",
"translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "Sledeća stranica",
"translate-prev": "Prethodna stranica",
- "translate-page-description-legend": "Podaci o grupi",
- "translate-page-description-hasoptional": "Ova grupa sadrži neobavezne poruke. Njih prevodite samo kada vaš jezik ima posebne potrebe kao preslovljavanje imena ili neupotreba razmaka. $1",
- "translate-page-description-hasoptional-open": "Prikaži neobavezne poruke.",
+ "translate-page-description-legend": "Informacije o ovoj grupi",
+ "translate-page-description-hasoptional": "Ova grupa poruka sadrži opcionalne poruke.\nNjih treba prevoditi samo kada vaš jezik ima posebne potrebe,\nkao što su neupotreba razmaka ili preslovljavanje imena. $1",
+ "translate-page-description-hasoptional-open": "Prikaži opcionalne poruke.",
"translate-page-edit": "uredi",
- "translate-ext-url": "<hr />Adresa: $1",
- "translate-optional": "(neobavezno)",
+ "translate-optional": "(opcionalno)",
"translate-ignored": "(zanemareno)",
- "translate-edit-title": "Uređivanje „$1“",
- "translate-edit-definition": "Značenje poruke",
+ "translate-edit-title": "Uredite stranicu „$1”",
+ "translate-edit-definition": "Definicija poruke",
"translate-edit-translation": "Prevod",
- "translate-edit-contribute": "doprinesi",
- "translate-edit-no-information": "<em>Ova poruka nema prateću dokumentaciju. Ako znate gde se i kako koristi, pomozite drugim prevodiocima dodavanjem njenog opisa.</em>",
- "translate-edit-information": "Podaci o poruci ($1)",
+ "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",
- "translate-edit-committed": "Tekući prevod u softveru",
- "translate-edit-warnings": "Napomene o nepotpunim prevodima",
- "translate-edit-tmsugs": "Predlozi iz prevodilačke memorije",
+ "translate-edit-warnings": "Upozorenja o nepotpunim prevodima",
"translate-edit-tmmatch-source": "Tekst izvornog prevoda: $1",
"translate-edit-tmmatch": "$1% poklapanja",
- "translate-use-suggestion": "Zameni tekući prevod s ovim predlogom.",
- "translate-edit-nopermission": "Treba vam dozvola da prevodite poruke.",
- "translate-edit-askpermission": "Zatraži dozvolu",
+ "translate-use-suggestion": "Zamenite aktuelan prevod ovim predlogom.",
+ "translate-edit-nopermission": "Trebaju vam prava prevodioca da biste prevodili poruke.",
+ "translate-edit-askpermission": "Nabavi dozvolu",
+ "exporttranslations": "Izvoz prevoda",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Navedite važeći format.",
+ "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 ispravan 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": "Tekuće",
- "translate-magic-cm-original": "Izvorno",
+ "translate-magic-cm-current": "Aktuelno",
+ "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}}]]''",
- "translate-magic-cm-savefailed": "Izmene nisu sačuvane.",
- "translate-magic-special": "kodovi za posebne stranice",
+ "translate-magic-cm-savefailed": "Čuvanje nije uspelo",
+ "translate-magic-special": "pseudonimi posebnih stranica",
"translate-magic-words": "magične reči",
- "translate-magic-namespace": "nazivi imenskih prostora",
- "translate-magic-notsaved": "Vaša izmena nije sačuvana!",
+ "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ć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|sledeće oznake}} s ispravnim:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-plural": "Značenje koristi <nowiki>{{PLURAL:}}</nowiki>, a prevod ne.",
+ "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-pagename": "Imenski prostor je promenjen iz značenja",
- "translate-checks-format": "Ovaj prevod nema značenjsku formu ili ima neispravnu sintaksu: $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 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 preko e-pošte",
+ "translate-pref-nonewsletter": "Ne šalji mi biltene putem imejla",
"translate-pref-editassistlang": "Pomoćni jezici:",
- "prefs-translate": "Mogućnosti prevoda",
- "translate-pref-editassistlang-help": "Spisak jezičkih kodova koji su odvojeni zarezom.\nPrevod poruke u ovim jezicima prikazan je u toku prevođenja.\nPodrazumevani spisak jezika zavisi od vašeg jezika.",
- "translate-pref-editassistlang-bad": "Neispravan jezički kod na spisku:\n<nowiki>$1</nowiki>.",
- "right-translate": "uređivanje putem prevodilačkog sučelja",
+ "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": "upravljanje grupama poruka",
- "right-translate-import": "uvoženje vanmrežnih prevoda",
- "action-translate-import": "uvoz prevoda",
+ "action-translate-manage": "upravljate grupama poruka",
+ "right-translate-import": "uvoženje oflajn-prevoda",
+ "action-translate-import": "uvozite oflajn-prevode",
"right-translate-messagereview": "pregledanje prevoda",
+ "action-translate-messagereview": "pregledavate prevode",
"right-translate-groupreview": "menjanje stanja radnog toka za grupe poruka",
- "translate-rc-translation-filter": "Filtriranje prevoda:",
+ "action-translate-groupreview": "promenite stanje toka rada za grupe poruka",
+ "translate-rcfilters-translations": "Prevodi",
+ "translate-rcfilters-translations-only-label": "Prevodi",
+ "translate-rcfilters-translations-only-desc": "Promene prevedenih stranica",
+ "translate-rcfilters-translations-filter-label": "Nisu prevodi",
+ "translate-rcfilters-translations-filter-desc": "Sve promene koje nisu prevodi.",
+ "translate-rcfilters-translations-site-label": "Poruke sajta",
+ "translate-rcfilters-translations-site-desc": "Prilagođavanje poruka sajta u imenskom prostoru Medijaviki.",
+ "translate-rc-translation-filter": "Filtriraj prevode:",
"translate-rc-translation-filter-no": "ne radi ništa",
"translate-rc-translation-filter-only": "prikaži samo prevode",
"translate-rc-translation-filter-filter": "izbaci prevode",
- "translate-rc-translation-filter-site": "samo izmene poruka sajta",
- "translationstats": "Statistika prevođenja",
+ "translate-rc-translation-filter-site": "samo promene poruka sajta",
+ "translationstats": "Statistika prevoda",
"translate-stats-edits": "Izmene",
"translate-stats-users": "Prevodioci",
- "translate-stats-registrations": "Učlanjenja",
- "translate-statsf-intro": "Ovom formom možete napraviti jednostavne statistike.\nSve vrednosti imaju svoja gornja i donja ograničenja.",
- "translate-statsf-options": "Postavke grafikona",
+ "translate-stats-registrations": "Registracije",
+ "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",
"translate-statsf-width": "Širina u pikselima:",
"translate-statsf-height": "Visina u pikselima:",
"translate-statsf-days": "Vremenski period u danima:",
- "translate-statsf-start": "Početni datum:",
- "translate-statsf-scale": "Granularitet:",
+ "translate-statsf-start": "Datum početka:",
+ "translate-statsf-scale": "Granularnost:",
"translate-statsf-scale-months": "meseci",
"translate-statsf-scale-weeks": "nedelje",
"translate-statsf-scale-days": "dani",
"translate-statsf-scale-hours": "sati",
- "translate-statsf-count": "Mera:",
+ "translate-statsf-count": "Merenje:",
"translate-statsf-count-edits": "Broj izmena",
"translate-statsf-count-users": "Aktivni prevodioci",
"translate-statsf-count-registrations": "Novi korisnici",
- "translate-statsf-language": "Spisak jezičkih kodova odvojenih zarezom:",
- "translate-statsf-group": "Spisak grupnih kodova odvojenih zarezom:",
+ "translate-statsf-count-reviews": "Pregledi prevoda",
+ "translate-statsf-count-reviewers": "Pregledavači",
+ "translate-statsf-language": "Spisak kodova jezika razdvojenih zarezom:",
+ "translate-statsf-group": "Spisak kodova grupa razdvojenih zarezom:",
"translate-statsf-submit": "Pregledaj",
- "translate-tag-category": "Prevodive stranice",
"translate-tag-page-desc": "Prevod viki stranice [[$2|$1]] sa $3 ($4).",
"translate-sidebar-alltrans": "Na drugim jezicima",
"translations": "Svi prevodi",
- "translations-summary": "Unesite naziv poruke ispod da biste prikazali sve dostupne prevode.",
- "translate-translations-no-message": "Poruka „$1“ se ne može prevesti.",
- "translate-translations-none": "Nema prevoda za „$1“.",
+ "translations-summary": "Unesite ime poruke ispod da biste prikazali sve dostupne prevode.",
+ "translate-translations-no-message": "Poruka „$1” nije prevodiva.",
+ "translate-translations-none": "Ne postoje prevodi za „$1”.",
"translate-translations-count": "{{PLURAL:$1|Pronađen je jedan prevod|Pronađena su $1 prevoda|Pronađeno je $1 prevoda}}.",
"translate-translations-fieldset-title": "Poruka",
- "translate-translations-messagename": "Naziv:",
+ "translate-translations-messagename": "Ime:",
"translate-translations-project": "Projekat:",
- "translate-translations-including-no-param": "Unesite ispravan ključ poruke u parametru podstranice",
+ "translate-translations-including-no-param": "Navedite važeći ključ poruke u parametru podstranice",
"translate-translations-history-short": "i",
"languagestats": "Statistika jezika",
- "languagestats-summary": "Ova stranica prikazuje statistiku prevoda za sve grupe poruka nekog jezika.",
- "languagestats-stats-for": "Statistika prevoda za {{LCFIRST:$1}} ($2).",
- "languagestats-recenttranslations": "skorašnji prevodi",
- "translate-langstats-incomplete": "Neke statistike navedene na stranici su nepotpune. Ponovo učitajte stranicu da dobijete potpuni pregled.",
- "translate-langstats-expand": "prikaži",
- "translate-langstats-collapse": "sakrij",
- "translate-langstats-expandall": "prikaži sve",
- "translate-langstats-collapseall": "sakrij sve",
- "translate-language-code": "Jezični kod",
- "translate-language-code-field-name": "Jezični kod:",
- "translate-suppress-complete": "Ne prikazuj potpuno prevedene grupe poruka",
- "translate-ls-noempty": "Ne prikazuj potpuno neprevedene grupe poruka",
+ "languagestats-summary": "Ova stranica prikazuje statistiku prevoda za sve grupe poruka na nekom jeziku.",
+ "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",
+ "translate-langstats-collapse": "skupi",
+ "translate-langstats-expandall": "proširi sve",
+ "translate-langstats-collapseall": "skupi sve",
+ "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 neprevedene grupe poruka",
"translate-language": "Jezik",
- "translate-total": "Poruka",
+ "translate-total": "Poruke",
"translate-untranslated": "Neprevedeno",
- "translate-percentage-complete": "Dovršeno",
+ "translate-percentage-complete": "Završeno",
"translate-percentage-fuzzy": "Zastarelo",
"translate-languagestats-overall": "Sve grupe poruka zajedno",
"translate-ls-submit": "Prikaži statistiku",
"translate-ls-column-group": "Grupa poruka",
- "translate-mgs-pagename": "Statistike grupe",
+ "translate-mgs-pagename": "Statistika grupa poruka",
"translate-mgs-fieldset": "Podešavanje prikaza",
"translate-mgs-group": "Grupa poruka:",
- "translate-mgs-nocomplete": "Ne prikazuj jezike s potpunim prevodom",
- "translate-mgs-noempty": "Ne prikazuj jezike bez ikakvih prevoda",
+ "translate-mgs-nocomplete": "Ne prikazuj jezike sa potpunim prevodom",
+ "translate-mgs-noempty": "Ne prikazuj jezike koji nemaju nikakve prevode",
"translate-mgs-submit": "Prikaži statistiku",
"translate-mgs-column-language": "Jezik",
- "translate-mgs-totals": "Svi jezici zajedno",
- "translate-mgs-invalid-group": "Navedena grupa $1 ne postoji.",
- "translate-mgs-nothing": "Nema šta da se prikaže za zahtevane statistike.",
+ "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 spisak svih podržanih jezika na ovom vikiju, zajedno s imenima prevodioca koji rade na tim jezicima.\nVeličina imena, tj. slova prevodioca zavisi od toga koliko je poruka preveo.\nBoja linije s kojom je ime podvučeno prikazuje koliko je prevodilac aktivan.",
- "supportedlanguages-colorlegend": "Legenda za boju; poslednji prevod izvršen pre $1 dana.",
+ "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-translators": "{{PLURAL:$2|1=Prevodilac|Prevodioci}}: $1",
- "supportedlanguages-recenttranslations": "skorašnji prevodi",
- "supportedlanguages-count": "Ukupno $1 {{PLURAL:$1|jezik|jezika|jezika}}.",
+ "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 spisak",
"managemessagegroups": "Upravljanje grupama poruka",
- "translate-smg-notallowed": "Nemate dozvolu da izvršite ovu radnju.",
- "translate-smg-nochanges": "Nema izmena koje treba obraditi.",
- "translate-smg-submitted": "Definicija poruke je ažurirana. Izmene se vrše u pozadini.",
+ "translate-smg-notallowed": "Nije vam dozvoljeno da izvršite ovu radnju.",
+ "translate-smg-nochanges": "Nema promena koje treba obraditi.",
+ "translate-smg-submit": "Pošalji promene na obradu",
+ "translate-smg-submitted": "Definicije poruka su ažurirane. Promene se obrađuju u pozadini.",
+ "translate-smg-more": "Biće još promena za obradu nakon što pošaljete ove.",
+ "translate-smg-left": "Sadržaj poruke na vikiju",
+ "translate-smg-right": "Predstojeće promene",
"translate-manage-import-diff": "Poruka $1 | Radnje: $2",
"translate-manage-import-new": "Nova poruka $1",
- "translate-manage-import-deleted": "Obrisana poruka $1",
+ "translate-manage-import-deleted": "Izbrisana poruka $1",
"translate-manage-action-import": "uvezi",
"translate-manage-action-conflict": "uvezi i označi kao zastarelo",
"translate-manage-action-ignore": "zanemari",
- "translate-manage-action-fuzzy": "uvezi i označi kao zastarelo",
- "translate-manage-nochanges": "Nema izmena u značenju poruke za ovu grupu.",
- "translate-manage-nochanges-other": "Nema izmena na ovom jeziku.\nKoristite vezu ispod da se vratite na stranicu za opis grupe.",
- "translate-manage-inconsistent": "Pronađena je nesaglasnost u zahtevu.\nProverite izmene i pokušajte ponovo.\nDetalji: $1.",
+ "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 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": "Uvoženje novog izdanja iz spoljašnjeg izvora",
- "translate-manage-conflict-summary": "Uvoženje novog izdanja iz spoljašnjeg izvora.\nMolimo, proverite.",
- "translate-manage-fuzzy-summary": "Definicija poruke se promenila",
+ "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 spisak izmena prevoda za $1 jezik.\nPregledajte izmene i izaberite radnju za svaki prevod.\nAko izaberete da zanemarite izmene, one će biti poništene pri sledećem izvozu.",
+ "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 završen!",
+ "translate-manage-import-done": "Uvoz je završen.",
"importtranslations": "Uvoz prevoda",
- "translate-import-from-local": "Lokalna datoteka:",
- "translate-import-load": "Dodaj",
- "translate-import-err-dl-failed": "Dobavljanje datoteke nije uspelo:\n$1",
- "translate-import-err-ul-failed": "Slanje datoteke nije uspelo.",
- "translate-import-err-invalid-title": "Unesen naziv datoteke <nowiki>$1</nowiki> nije ispravan.",
- "translate-import-err-no-such-file": "Datoteka <nowiki>$1</nowiki> ne postoji ili nije poslata sa računara.",
+ "translate-import-from-local": "Otpremanje lokalne datoteke:",
+ "translate-import-load": "Učitaj datoteku",
+ "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:\nGrupa i jezik nisu određene iz zaglavlja datoteke.",
- "translate-import-err-warnings": "Datoteka nije dobro formirana.\nUverite se da uređivač ne uklanja msgctxt polja.\nDetalji: $1",
- "translate-js-summary": "Opis:",
+ "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",
- "translate-js-next": "Sačuvaj i otvori sledeće",
- "translate-js-nonext": "To je bila poslednja poruka na ovoj stranici.",
- "translate-js-skip": "Preskoči na sledeće",
- "translate-js-save-failed": "Čuvanje nije uspelo. Prijavite ovu grešku.",
+ "translate-js-next": "Sačuvaj i otvori sledeću",
+ "translate-js-skip": "Preskoči na sledeću",
"translate-js-history": "Istorija prevoda",
"translate-js-support": "Postavi pitanje",
- "translate-js-support-title": "Pitajte za pomoć ako nema dovoljno podataka za valjano prevođenje poruke",
+ "translate-js-support-title": "Zatražite pomoć ako nemate dovoljno informacija za ispravan prevod ove poruke.",
"translate-js-support-unsaved-warning": "Imate nesačuvanih izmena.",
"translate-gs-pos": "Položaj",
- "translate-gs-code": "Kod",
+ "translate-gs-code": "Kôd",
"translate-gs-continent": "Kontinent",
- "translate-gs-speakers": "Govornika",
+ "translate-gs-speakers": "Govornici",
"translate-gs-score": "Rezultat",
"translate-gs-multiple": "Više",
"translate-gs-count": "Broj",
"translate-gs-total": "Ukupno",
- "translate-gs-avgscore": "Prosečan rezultat",
- "translate-documentation-language": "Pomoć pri prevođenju",
+ "translate-gs-avgscore": "Pros. rezultat",
+ "translate-documentation-language": "Dokumentacija poruke",
"translate-searchprofile": "Prevodi",
- "translate-searchprofile-tooltip": "Traženje po svim prevodima",
- "translate-search-languagefilter": "Filtriraj po jeziku:",
+ "translate-searchprofile-tooltip": "Pretražite sve prevode",
+ "translate-searchprofile-note": "Još opcija pretrage dostupno je na [$1 pretrazi prevoda].",
+ "translate-search-languagefilter": "Filtriranje po jeziku:",
"translate-search-nofilter": "Bez filtriranja",
- "translate-messagereview-submit": "Označi provereno",
- "translate-messagereview-progress": "Označavanje potvrđenog…",
- "translate-messagereview-failure": "Neuspešno označavanje potvrđenog: $1",
- "translate-messagereview-done": "Potvrđeno",
- "translate-messagereview-reviews": "Potvrđeno od {{PLURAL:$1|jednog korisnika|$1 korisnika}}",
- "translate-messagereview-reviewswithyou": "Potvrda od {{PLURAL:$1|vas|$1 korisnika zaključno sa vama}}",
- "api-error-invalidrevision": "Prevod nije pronađen",
- "api-error-unknownmessage": "Poruka nije pronađena",
- "api-error-fuzzymessage": "Prevod je označen kao zastareo",
- "api-error-owntranslation": "Ne možete da prihvatate sopstvene prevode",
- "translate-messagereview-no-fuzzy": "Fuzzy prevodi se ne mogu označiti pregledanim",
- "translate-messagereview-no-own": "Ne možete da prihvatate sopstvene prevode.",
- "translate-messagereview-doit": "Prihvati ovaj prevod kao tačan i ispravan.",
- "log-name-translationreview": "Dnevnik provere prevoda",
- "log-description-translationreview": "Istorija svih provera prevoda i grupa poruka.",
- "logentry-translationreview-message": "$1 je {{GENDER:$2|potvrdio|potvrdila}} prevod $3",
- "logentry-translationreview-group": "$1 {{GENDER:$2|je promenio|je promenila}} stanje $4 prevoda $3 sa $6 na $7",
+ "log-name-translationreview": "Dnevnik pregleda prevoda",
+ "log-description-translationreview": "Dnevnik svih pregleda prevoda i grupa poruka.",
+ "logentry-translationreview-message": "$1 je {{GENDER:$2|pregledao|pregledala}} prevod $3",
+ "logentry-translationreview-group": "$1 je {{GENDER:$2|promenio|promenila}} stanje $4 prevoda $3 sa $6 na $7",
"group-translate-sandboxed": "Neodobreni prevodioci",
- "group-translate-sandboxed-member": "{{GENDER:$1|neodobreni prevodilac}}",
+ "group-translate-sandboxed-member": "{{GENDER:$1|neodobreni prevodilac|neodobrena prevoditeljka}}",
+ "right-translate-sandboxmanage": "upravljanje korisnicima u pesku",
+ "action-translate-sandboxmanage": "upravljate korisnicima u pesku",
+ "right-translate-sandboxaction": "izvršavanje radnji na beloj listi za korisnike u pesku",
+ "action-translate-sandboxaction": "izvršavate radnje na beloj listi za korisnike u pesku",
"translate-workflow-state-": "(nepostavljen)",
- "translate-workflowstatus": "Status: $1",
- "translate-workflow-set-doing": "Postavljam…",
- "translate-workflow-autocreated-summary": "Automatsko stvaranje stranice za radno stanje $1",
- "translate-stats-workflow": "Status",
+ "translate-workflowstatus": "Stanje: $1",
+ "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",
- "translate-workflowgroup-desc": "Ova grupa poruka prikazuje radno stanje prevoda.\nStanja su određena s promenljivom $wgTranslateWorkflowStates.",
- "translate-dynagroup-recent-label": "Skorašnji prevodi",
- "translate-dynagroup-recent-desc": "Ova grupa poruka prikazuje sve skorašnje prevode na ovom jeziku.\nOvo je najkorisnije pri proveri prevoda.",
- "translate-dynagroup-additions-label": "Skorašnja dodavanja",
- "translate-dynagroup-additions-desc": "Ova grupa poruka prikazuje nove i izmenjene poruke.",
- "translate-gethelp": "Pomoć",
+ "translate-workflowgroup-desc": "Ova grupa poruka prikazuje radno stanje prevoda.\nStanja su definisana u konfiguraciji promenljive $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Nedavni prevodi",
+ "translate-dynagroup-recent-desc": "Ova grupa poruka prikazuje sve nedavne prevode na ovom jeziku.\nOvo je najkorisnije za pregled prevoda.",
+ "translate-dynagroup-additions-label": "Nedavna dodavanja",
+ "translate-dynagroup-additions-desc": "Ova grupa poruka prikazuje nove i promenjene poruke.",
"translate-msggroupselector-projects": "Grupa poruka",
- "translate-msggroupselector-search-placeholder": "Pretraga grupa",
+ "translate-msggroupselector-search-placeholder": "Pretražite grupe",
"translate-msggroupselector-search-all": "Sve",
- "translate-msggroupselector-search-recent": "Skorašnji",
+ "translate-msggroupselector-search-recent": "Nedavne",
"translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|podgrupa|podgrupe}}",
"tux-languageselector": "Prevod na",
"tux-tab-all": "Sve",
"tux-tab-untranslated": "Neprevedeno",
"tux-tab-outdated": "Zastarelo",
"tux-tab-translated": "Prevedeno",
- "tux-tab-unproofread": "Nepotvrđeno",
+ "tux-tab-unproofread": "Nepregledano",
"tux-edit": "Uredi",
- "tux-status-optional": "Neobavezno",
+ "tux-status-optional": "Opcionalno",
"tux-status-fuzzy": "Zastarelo",
- "tux-status-proofread": "Potvrđeno",
+ "tux-status-proofread": "Pregledano",
"tux-status-translated": "Prevedeno",
- "tux-status-saving": "Čuvanje...",
+ "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",
- "tux-editor-paste-original-button-label": "Unesi izvorni tekst",
- "tux-editor-discard-changes-button-label": "Odbaci izmene",
+ "tux-editor-editsummary-placeholder": "Opcionalan rezime",
+ "tux-editor-paste-original-button-label": "Nalepi izvorni tekst",
+ "tux-editor-discard-changes-button-label": "Odbaci promene",
"tux-editor-save-button-label": "Sačuvaj prevod",
"tux-editor-skip-button-label": "Pređi na sledeću",
"tux-editor-cancel-button-label": "Otkaži",
"tux-editor-confirm-button-label": "Potvrdi prevod",
- "tux-editor-shortcut-info": "Pritisnite „$1“ kako biste sačuvali ili „$2“ da pređite na sledeću poruku ili „$3“ za druge prečice.",
+ "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 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",
"tux-editor-in-other-languages": "Na drugim jezicima",
- "tux-editor-need-more-help": "Potrebna pomoć?",
- "tux-editor-ask-help": "Potražite dodatne informacije",
+ "tux-editor-need-more-help": "Treba vam pomoć?",
+ "tux-editor-ask-help": "Zatražite više informacija",
"tux-editor-tm-match": "$1% poklapanja",
"tux-warnings-more": "{{PLURAL:$1|još $1}}",
"tux-warnings-hide": "sakrij",
@@ -318,52 +332,58 @@
"tux-editor-message-desc-more": "Prikaži još",
"tux-editor-message-desc-less": "Prikaži manje",
"tux-editor-clear-translated": "Sakrij prevedeno",
- "tux-editor-proofreading-mode": "Potvrda",
+ "tux-editor-proofreading-mode": "Pregled",
"tux-editor-translate-mode": "Spisak",
"tux-editor-proofreading-hide-own-translations": "Sakrij moje prevode",
"tux-editor-proofreading-show-own-translations": "Prikaži moje prevode",
- "tux-proofread-action-tooltip": "Označi kao provereno",
+ "tux-proofread-action-tooltip": "Označite kao pregledano",
"tux-proofread-edit-label": "Uredi",
"tux-editor-page-mode": "Stranica",
- "tux-editor-outdated-warning": "Ovaj prevod je možda potrebno ažurirati.",
+ "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čitavanje {{PLURAL:$1|poruka}}...",
- "tux-message-filter-placeholder": "Filtriraj spisak",
- "tux-message-filter-result": "Nađeno $1 {{PLURAL:$1|rezultat|rezultata}} za „$2“",
+ "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": "Neobavezne poruke",
+ "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": "Možete pomoći u prevođenju",
- "tux-empty-list-translated-action": "Prevedi",
- "tux-empty-no-messages-to-display": "Nema poruka za prikazivanje.",
- "tux-empty-there-are-optional": "Ima neobaveznih poruka koje nisu prikazane na spisku",
- "tux-empty-show-optional-messages": "Prikaži neobavezne poruke",
+ "tux-empty-list-translated-guide": "Pomozite u prevođenju",
+ "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",
"tux-empty-no-outdated-messages": "Nema zastarelih poruka",
- "tux-empty-nothing-to-proofread": "Ništa za proveru",
- "tux-empty-you-can-help-providing": "Možete da pomognete pružanjem novih prevoda",
- "tux-empty-nothing-new-to-proofread": "Ništa novo za proveru",
- "tux-empty-you-can-review-already-proofread": "Pregledaj te prevode već potvrđene od strane drugih.",
+ "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": "Možete da pregledate prevode koje su drugi već pregledali.",
"tux-empty-list-other": "Ništa za prevođenje",
- "tux-empty-list-other-guide": "Možete pomoći proverom postojećih prevoda",
- "tux-empty-list-other-action": "Potvrđeni prevodi",
+ "tux-empty-list-other-guide": "Pomozite pregledom postojećih prevoda",
+ "tux-empty-list-other-action": "Pregledajte prevode",
"tux-empty-list-other-link": "Prikaži sve poruke",
- "tux-editor-close-tooltip": "Zatvori",
- "tux-editor-expand-tooltip": "Proširi",
- "tux-editor-collapse-tooltip": "Skupi",
+ "tux-editor-close-tooltip": "Zatvorite",
+ "tux-editor-expand-tooltip": "Proširite",
+ "tux-editor-collapse-tooltip": "Skupite",
+ "tux-editor-message-tools-show-editor": "Prikaži u viki uređivaču",
"tux-editor-message-tools-history": "Istorija",
- "tux-editor-message-tools-delete": "Obriši",
+ "tux-editor-message-tools-delete": "Izbriši",
"tux-editor-message-tools-translations": "Svi prevodi",
- "tux-editor-loading": "Učitavanje...",
+ "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% potvrđeno",
- "translate-statsbar-tooltip-with-fuzzy": "$1% prevedeno, $2% potvrđeno, $3% zastarelo",
- "translate-search-more-groups-info": "još $1 {{PLURAL:$1|grupa}}"
+ "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|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.",
+ "tux-nojs": "Ova alatka ne radi bez JavaScript-a. JavaScript je onemogućen, ne radi ili je ovaj pregledač nepodržan."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/stq.json b/www/wiki/extensions/Translate/i18n/core/stq.json
index 178f94b4..52b34610 100644
--- a/www/wiki/extensions/Translate/i18n/core/stq.json
+++ b/www/wiki/extensions/Translate/i18n/core/stq.json
@@ -31,7 +31,6 @@
"translate-edit-no-information": "''Disse Systemättergjucht häd noch neen Dokumentation. Wan du waast, wier un in wäkken Touhoopehong ju benutsed wäd, koast du uur Uursättere hälpe, deertruch dät du ne Dokumentation bietouföigest.''",
"translate-edit-information": "Information uur Systemättergjucht ($1)",
"translate-edit-in-other-languages": "Systemättergjucht in uur Sproaken",
- "translate-edit-committed": "Aktuelle Uursättenge",
"translate-edit-warnings": "Woarskauenge uur uunfulboodige Uursättengen",
"translate-magic-pagename": "Ärwiederde MediaWiki-Uursättenge",
"translate-magic-help": "Du koast hier Aliase foar Spezioalsieden, magiske Woude un Noomensruumnoomen uursätte.\n\nSpezioalsieden un magiske Woude konnen moorere Uursättengen hääbe, jo wäide älkemoal truch n Komma (,) tränd. Noomensruumnoomen duuren bloot je een Uursättenge hääbe.\n\nIn ju Uursättenge fon n Noomensruumnoome häd <code>$1 talk</code> ne spezielle Betjuudenge. <code>$1</code> wäd truch dän Projektnoome ärsät (toun Biespil <code>{{ns:project_talk}}</code>).\nWan et in dien Sproake nit muugelk is, ne grammatikalisk korrekte Foarm deerfon tou bildjen sunner dän Projektnoome tou ferannerjen, kontaktier n Softwareäntwikler.\n\nDu moast in ju Uursätter-Gruppe weese, uum Annerengen tou spiekerjen.\nAnnerengen wäide eerste bie dän Klik ap dän Spiekerje-Knoop spiekerd.",
@@ -82,7 +81,6 @@
"translate-statsf-language": "Komma-trände Lieste fon do Sproakkoden:",
"translate-statsf-group": "Komma-trände Lieste fon do Gruppenkoden:",
"translate-statsf-submit": "Foarbekiek",
- "translate-tag-category": "Uursätboare Sieden",
"translate-tag-page-desc": "Uursättenge fon ju Wikisiede [[$2|$1]].",
"translate-sidebar-alltrans": "In uur Sproaken",
"translations": "Aal Uursättengen",
diff --git a/www/wiki/extensions/Translate/i18n/core/sty.json b/www/wiki/extensions/Translate/i18n/core/sty.json
new file mode 100644
index 00000000..eb69471a
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/sty.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Khanmarat"
+ ]
+ },
+ "translate-documentation-language": "Ҡәбәрнеңке документациясы"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/su.json b/www/wiki/extensions/Translate/i18n/core/su.json
index a0e5154e..abdbbcd9 100644
--- a/www/wiki/extensions/Translate/i18n/core/su.json
+++ b/www/wiki/extensions/Translate/i18n/core/su.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Irwangatot",
- "Kandar"
+ "Kandar",
+ "Uchup19"
]
},
"translate": "Alih basakeun",
@@ -24,16 +25,13 @@
"translate-prev": "Kaca saméméhna",
"translate-page-description-legend": "Informasi ngeunaan grup",
"translate-page-edit": "édit",
- "translate-ext-url": "<hr />Ramatloka: $1",
"translate-optional": "(piliheun)",
"translate-edit-definition": "Definisi talatah",
"translate-edit-contribute": "milu ngédit",
"translate-edit-no-information": "''Talatah ieu teu ngabogaan dokuméntasi. Lamun Anjeun nyaho di mana sarta kumaha talatah ieu dipaké, Anjeun bisa nulungan panarjamah séjén kalawan nambahan dokuméntasi pikeun talatah ieu.''",
"translate-edit-information": "Informasi ngeunaan talatah ieu \"$2\" ($1)",
"translate-edit-in-other-languages": "Talatah \"$1\" dina basa séjén",
- "translate-edit-committed": "Parobahan anu aya di pakakas",
"translate-edit-warnings": "Panginget ngeunaan tarjamahan anu teu pepek",
- "translate-edit-tmsugs": "Usulan ti mémori alihbasa",
"translate-edit-tmmatch": "$1% cocog",
"translate-magic-pagename": "Landihan tarjamahan MediaWiki",
"translate-magic-help": "Anjeun bisa narjamahkuen landihan pikeun kaca husus, kecap magis, ngaran kulit, sarta ngaran ''ngaranspasi''.\n\nPikeun kecap magis, Anjeun perlu nyantumkeun ogé tarjamahan basa Inggris atawa baris lumangsung kasalahan. Ogé tetep nyantumkeun item kahiji (0 atawa 1) kitu waé.\n\nLandian pikeun halaman husus sarta kecap magis bisa ngabogaan leuwih ti hiji tarjamahan anu lainna dipisahkan ku koma (,). Ngaran kulit sarta ngaranspasi ngan bisa ngabogaan hiji tarjamahan.\n\nDina tarjamahan ngaranspasi <code>$1 talk</code> diperlakukan husus. <code>$1</code> digantikeun kalawan ngaran loka (contona {{ns:project_talk}}).\nLamun basa Anjeun henteu matak bisa pikeun nyieun hiji ekspresi anu valid tanpa ngaganti ngaran loka, sumangga kontak salah saurang pengembang.\n\nAnjeun perlu jadi anggota grup panarjamah pikeun nyimpen parobahan. Parobahan moal disimpen nepi ka Anjeun ngaklik tombol simpen di handapeun.",
@@ -47,7 +45,7 @@
"translate-magic-cm-save": "Simpen",
"translate-magic-cm-updatedusing": "Dirobah ngagunakeun [[Special:AdvancedTranslate|{{int:Translate-magic-pagename}}]]",
"translate-magic-cm-savefailed": "Gagal nyimpen",
- "translate-magic-special": "Landihan kaca husus",
+ "translate-magic-special": "Alias kaca husus",
"translate-magic-words": "Kecap magis",
"translate-magic-namespace": "Ngaran ngaranspasi",
"translate-magic-notsaved": "Éditan anjeun can disimpen!",
@@ -72,5 +70,8 @@
"translate-save": "Simpen ($1)",
"translate-gs-code": "Sandi",
"translate-gs-continent": "Buana",
- "translate-documentation-language": "Dokuméntasi talatah"
+ "translate-documentation-language": "Dokuméntasi talatah",
+ "tux-editor-cancel-button-label": "Bolay",
+ "tux-editor-shortcut-info": "Pencét \"$1\" pikeun nyimpen atawa \"$2\" pikeun ngaliwatkeun ka talatah saterusna atawa \"$4\" pikeun nyiapkeun tingkesan atawa \"$3\" pikeun tarabasan lianna.",
+ "tux-editor-doc-editor-cancel": "Bolay"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/sv.json b/www/wiki/extensions/Translate/i18n/core/sv.json
index 099ea592..760e8902 100644
--- a/www/wiki/extensions/Translate/i18n/core/sv.json
+++ b/www/wiki/extensions/Translate/i18n/core/sv.json
@@ -21,16 +21,14 @@
"WikiPhoenix",
"Lokal Profil",
"Marfuas",
- "Stryn"
+ "Stryn",
+ "Bengtsson96",
+ "Pipetricker"
]
},
"translate": "Översätt",
"translate-desc": "[[Special:Translate|Specialsida]] för översättning av MediaWiki och annat",
- "translate-taskui-view": "Visa alla meddelanden",
- "translate-taskui-untranslated": "Visa oöversatta meddelanden",
- "translate-taskui-optional": "Visa valfria meddelanden",
- "translate-taskui-acceptqueue": "Endast meddelanden jag kan markera som granskade",
- "translate-taskui-reviewall": "Granska alla översättningar",
+ "translate-fuzzybot-desc": "Detta är ett speciellt systemkonto som används av MediaWiki-tillägget [https://www.mediawiki.org/wiki/Extension:Translate Translate] för att underhålla översättningar.\nDetta konto är en del av MediaWiki-programvaran och ägs inte av någon användare.",
"translate-taskui-export-to-file": "Exportera i ursprungligt format",
"translate-taskui-export-as-po": "Exportera för översättning offline",
"translate-taction-translate": "Översätt",
@@ -52,13 +50,13 @@
"translate-page-navigation-legend": "Navigering",
"translate-page-showing": "Visar meddelande $1 till $2 av $3.",
"translate-page-showing-all": "Visar $1 {{PLURAL:$1|meddelande|meddelanden}}.",
+ "translate-page-showing-none": "Det finns inga meddelanden att visa.",
"translate-next": "Nästa sida",
"translate-prev": "Föregående sida",
"translate-page-description-legend": "Information om gruppen",
"translate-page-description-hasoptional": "Denna meddelandegrupp innehåller valfria meddelanden.\nValfria meddelanden bör endast översättas när ditt språk har särskilda krav,\nexempelvis att inte använda blanksteg eller transkribera egennamn. $1",
"translate-page-description-hasoptional-open": "Visa valfria meddelanden.",
"translate-page-edit": "redigera",
- "translate-ext-url": "<hr />Webbplats: $1",
"translate-optional": "(valfritt)",
"translate-ignored": "(ignorerad)",
"translate-edit-title": "Redigera \"$1\"",
@@ -70,10 +68,15 @@
"translate-edit-in-other-languages": "Meddelandet på andra språk",
"translate-edit-warnings": "Varningar om fel i översättningen",
"translate-edit-tmmatch-source": "Källtext för översättning: $1",
- "translate-edit-tmmatch": "$1% överensstämmelse",
+ "translate-edit-tmmatch": "$1&nbsp;% likhet",
"translate-use-suggestion": "Ersätt aktuell översättning med detta förslag.",
"translate-edit-nopermission": "Du behöver översättningsbehörighet för att översätta meddelanden.",
"translate-edit-askpermission": "Få behörighet",
+ "exporttranslations": "Exportera översättningar",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Ange ett giltigt format.",
+ "translate-export-not-supported": "Översättningsexportering stöds inte.",
+ "translate-export-format-notsupported": "Det angivna exportformatet stöds inte av meddelandegruppen.",
"translate-magic-pagename": "Utökad MediaWiki-översättning",
"translate-magic-help": "Du kan översätta alias för specialsidor, magiska ord och namnrymdsnamn.\n\nAlias för specialsidor och magiska ord kan ha flera översättningar.\nÖversättningar skiljs åt med ett kommatecken (,).\nNamnrymder kan endast ha en översättning.\n\nÖversättning av projektets diskussionsnamnrymd <code>$1 talk</code> kan vara komplicerat.\n<code>$1</code> ersätts med projektets webbplatsnamn (till exempel <code>{{ns:project_talk}}</code>).\nOm det inte är möjligt att skapa en giltig översättning till ditt språk utan att ändra webbplatsens namn, var god [[Support|kontakta oss]].\n\nFör att kunna spara ändringar så behöver du vara översättare.\nÄndringar sparas inte förrän du klickar på spara-knappen nedan.",
"translate-magic-module": "Modul:",
@@ -92,10 +95,10 @@
"translate-magic-namespace": "Namnrymdsnamn",
"translate-magic-notsaved": "Din redigering sparades inte!",
"translate-magic-errors": "Vänligen rätta följande {{PLURAL:$1|fel|fel}} i översättningen:",
- "translate-magic-saved": "Dina ändringar har sparats",
+ "translate-magic-saved": "Dina ändringar har sparats.",
"translate-checks-parameters": "Följande {{PLURAL:$2|parameter|parametrar}} används inte:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "Följande {{PLURAL:$2|parameter är okänd|parametrar är okända}}:\n<strong><nowiki>$1</nowiki></strong>",
- "translate-checks-balance": "Det är ett ojämnt antal {{PLURAL:$2|paranteser|paranteser}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-balance": "Det är ett ojämnt antal {{PLURAL:$2|parenteser}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "Följande {{PLURAL:$2|länk är problematisk|länkar är problematiska}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links-missing": "Följande {{PLURAL:$2|länk|$2 länkar}} saknas:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "Var vänligt rätta följande {{PLURAL:$2|tagg|taggar}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -114,12 +117,22 @@
"translate-pref-editassistlang-help": "Kommaseparerad lista med språkkoder.\nÖversättningar av ett meddelande på dessa språk visas när du översätter.\nStandardlistan på språk avgörs av ditt språk.",
"translate-pref-editassistlang-bad": "Ogiltig språkkod i listan:\n<nowiki>$1</nowiki>.",
"right-translate": "Redigera genom översättningsgränssnittet",
+ "action-translate": "redigera med översättningsgränssnittet",
"right-translate-manage": "Hantera meddelandegrupper",
"action-translate-manage": "hantera meddelandegrupper",
"right-translate-import": "Importera översättningar gjorda frånkopplad",
"action-translate-import": "importera översättningar offline",
"right-translate-messagereview": "Granska översättningar",
+ "action-translate-messagereview": "granska översättningar",
"right-translate-groupreview": "Ändra arbetsflödesstatus för meddelandegrupper",
+ "action-translate-groupreview": "ändra arbetsflödestillstånd för meddelandegrupper",
+ "translate-rcfilters-translations": "Översättningar",
+ "translate-rcfilters-translations-only-label": "Översättningar",
+ "translate-rcfilters-translations-only-desc": "Ändringar på översätta sidor.",
+ "translate-rcfilters-translations-filter-label": "Inte översättningar",
+ "translate-rcfilters-translations-filter-desc": "Alla ändringar som inte är översättningar.",
+ "translate-rcfilters-translations-site-label": "Webbplatsmeddelanden",
+ "translate-rcfilters-translations-site-desc": "Anpassningar av webbplatsmeddelanden i namnrymden MediaWiki.",
"translate-rc-translation-filter": "Filtrera översättningar:",
"translate-rc-translation-filter-no": "Gör ingenting",
"translate-rc-translation-filter-only": "Visa endast översättningar",
@@ -182,6 +195,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",
@@ -192,16 +206,18 @@
"translate-mgs-noempty": "Visa inte språk som inte har några översättningar",
"translate-mgs-submit": "Visa statistik",
"translate-mgs-column-language": "Språk",
- "translate-mgs-totals": "Alla språk tillsammans",
+ "translate-mgs-totals": "Alla $1 {{PLURAL:$1|språk}} tillsammans",
"translate-mgs-invalid-group": "Den angivna gruppen $1 finns inte.",
"translate-mgs-nothing": "Inget att visa för begärd statistik.",
"supportedlanguages": "Språk som stöds",
- "supportedlanguages-summary": "Denna sida visar en lista över alla språk som stöds av {{SITENAME}},\ntillsammans med en lista över översättare som jobbar på detta språk.\nEn översättares namn visas större, desto mer ändringar översättaren har bidragit.\nFärgen för understrykningen anger hur mycket en översättare har varit aktiv här nyligen.",
+ "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.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|redigering|redigeringar}} - senaste redigering $3 {{PLURAL:$3|dag|dagar}} sedan",
+ "abusefilter-edit-builder-vars-translate-source-text": "Översättningsenhetens källtext",
"translate-save": "Spara ($1)",
"translate-jssti-add": "Lägg till i listan",
"managemessagegroups": "Meddelandegruppshantering",
@@ -242,9 +258,7 @@
"translate-js-summary": "Sammanfattning:",
"translate-js-save": "Spara",
"translate-js-next": "Spara och öppna nästa",
- "translate-js-nonext": "Detta var det sista meddelandet på denna sida.",
"translate-js-skip": "Hoppa över till nästa",
- "translate-js-save-failed": "Misslyckades att spara. Var vänlig rapportera detta fel.",
"translate-js-history": "Översättningshistorik",
"translate-js-support": "Ställ en fråga",
"translate-js-support-title": "Fråga efter hjälp om det inte finns tillräckligt mycket information för att översätta detta meddelande korrekt.",
@@ -261,21 +275,9 @@
"translate-documentation-language": "Meddelandedokumentation",
"translate-searchprofile": "Översättningar",
"translate-searchprofile-tooltip": "Sök från alla översättningar",
+ "translate-searchprofile-note": "Fler sökalternativ finns i [$1 översättningssökningen].",
"translate-search-languagefilter": "Filtrera efter språk:",
"translate-search-nofilter": "Ingen filtrering",
- "translate-messagereview-submit": "Markera som granskad",
- "translate-messagereview-progress": "Markerar som granskad...",
- "translate-messagereview-failure": "Misslyckades att markera som granskad: $1",
- "translate-messagereview-done": "Granskade",
- "translate-messagereview-reviews": "Granskad av {{PLURAL:$1|en användare|$1 användare}}",
- "translate-messagereview-reviewswithyou": "Granskad av {{PLURAL:$1|dig|$1 användare inklusive dig}}",
- "api-error-invalidrevision": "Översättning hittades inte",
- "api-error-unknownmessage": "Meddelande hittades inte",
- "api-error-fuzzymessage": "Översättning är märkt som föråldrad",
- "api-error-owntranslation": "Du kan inte markera dina egna översättningar som granskade",
- "translate-messagereview-no-fuzzy": "Oklara översättningar kan inte markeras som granskade.",
- "translate-messagereview-no-own": "Du kan inte markera dina egna översättningar som granskade.",
- "translate-messagereview-doit": "Markera denna översättning som granskad.",
"log-name-translationreview": "Logg för översättningsgranskningar",
"log-description-translationreview": "Logg över alla granskningar till översättningar och meddelandegrupper.",
"logentry-translationreview-message": "$1 {{GENDER:$2|granskade}} översättningen $3",
@@ -315,7 +317,9 @@
"tux-status-translated": "Översatt",
"tux-status-saving": "Sparar...",
"tux-status-unsaved": "Inte sparad",
+ "tux-save-unknown-error": "Okänt fel uppstod.",
"tux-editor-placeholder": "Din översättning",
+ "tux-editor-editsummary-placeholder": "Valfri sammanfattning",
"tux-editor-paste-original-button-label": "Klistra in källtext",
"tux-editor-discard-changes-button-label": "Ta bort ändringar",
"tux-editor-save-button-label": "Spara översättning",
@@ -323,14 +327,14 @@
"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 eller \"$2\" för att hoppa till nästa meddelande 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",
"tux-editor-in-other-languages": "På andra språk",
"tux-editor-need-more-help": "Behöver du mer hjälp?",
"tux-editor-ask-help": "Fråga efter mer information",
- "tux-editor-tm-match": "$1 % likhet",
+ "tux-editor-tm-match": "$1&nbsp;% likhet",
"tux-warnings-more": "{{PLURAL:$1|$1 till|$1 fler}}",
"tux-warnings-hide": "dölj",
"tux-editor-save-failed": "Misslyckades att spara översättningen: $1",
@@ -346,7 +350,7 @@
"tux-proofread-edit-label": "Redigera",
"tux-editor-page-mode": "Sida",
"tux-editor-outdated-warning": "Denna översättning kan behöva uppdateras.",
- "tux-editor-outdated-warning-diff-link": "Visa differenser",
+ "tux-editor-outdated-warning-diff-link": "Visa skillnader",
"tux-editor-doc-editor-placeholder": "Meddelandedokumentation",
"tux-editor-doc-editor-save": "Spara dokumentation",
"tux-editor-doc-editor-cancel": "Avbryt",
@@ -378,9 +382,11 @@
"tux-editor-close-tooltip": "Stäng",
"tux-editor-expand-tooltip": "Expandera",
"tux-editor-collapse-tooltip": "Göm",
+ "tux-editor-message-tools-show-editor": "Visa i wikiredigeraren",
"tux-editor-message-tools-history": "Historik",
"tux-editor-message-tools-delete": "Radera",
"tux-editor-message-tools-translations": "Alla översättningar",
+ "tux-editor-message-tools-linktothis": "Länk till detta meddelande",
"tux-editor-loading": "Läser in...",
"translate-search-more-languages-info": "$1 {{PLURAL:$1|till|fler}} språk",
"translate-statsbar-tooltip": "$1% översatt, $2% granskat",
@@ -389,5 +395,5 @@
"translate-ulsdep-title": "Konfigurationsfel",
"translate-ulsdep-body": "Översättningstillägget är beroende av [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector Universal Language Selector]-tillägget.",
"tux-session-expired": "Du är inte längre inloggad. Vänligen logga in i en separat flik. Alternativt kan du göra en kopia av osparade översättningar, logga in, gå tillbaka till denna sida och klistra in din översättningar igen.",
- "tux-nojs": "Denna sida kräver JavaScript."
+ "tux-nojs": "Detta verktyg fungerar inte utan JavaScript. JavaScript är inaktiverat, fungerar inte eller stöds inte denna webbläsare."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/sw.json b/www/wiki/extensions/Translate/i18n/core/sw.json
index 200aa192..bd5ab7ed 100644
--- a/www/wiki/extensions/Translate/i18n/core/sw.json
+++ b/www/wiki/extensions/Translate/i18n/core/sw.json
@@ -7,9 +7,6 @@
]
},
"translate": "Kutafsiri",
- "translate-taskui-view": "Onyesha jumbe zote",
- "translate-taskui-untranslated": "Onyesha jumbe ambazo hazijatafsiriwa",
- "translate-taskui-optional": "Onyesha ujumbe wa hiari",
"translate-taction-translate": "Tafsiri",
"translate-taction-export": "Peleka",
"translate-language-disabled": "Tafsiri kwa lugha hii kumelemazwa",
@@ -21,7 +18,6 @@
"translate-prev": "Ukurasa uliotangulia",
"translate-page-description-hasoptional-open": "Onyesha ujumbe wa hiari",
"translate-page-edit": "hariri",
- "translate-ext-url": "<hr />Tovuti: $1",
"translate-optional": "(ya hiari)",
"translate-ignored": "(imepuuzwa)",
"translate-edit-title": "Hariri \"$1\"",
@@ -45,7 +41,6 @@
"translate-statsf-count": "Pima:",
"translate-statsf-count-edits": "Idadi ya hariri",
"translate-statsf-count-registrations": "Watumiaji wapya",
- "translate-tag-category": "Kurasa zinaoweza kuharirika",
"translate-sidebar-alltrans": "Katika lugha nyingine",
"translations": "Tafsiri zote",
"translate-translations-fieldset-title": "Ujumbe",
@@ -81,7 +76,6 @@
"translate-js-summary": "Muhtasari:",
"translate-js-save": "Hifadhi",
"translate-js-next": "Hifadhi na ufungue inayofuatia",
- "translate-js-nonext": "Huu ndio ulikuwa ujumbe wa mwisho katika ukurasa huu.",
"translate-js-skip": "Ruka hado unaofuatia",
"translate-js-history": "Historia ya fasiri",
"translate-js-support": "Uliza swali",
@@ -91,13 +85,7 @@
"translate-gs-total": "Jumla",
"translate-gs-avgscore": "Alama ya wastani",
"translate-searchprofile": "Tafsiri",
- "translate-messagereview-submit": "Kubali",
- "translate-messagereview-progress": "Inakubali...",
- "translate-messagereview-done": "Imekubaliwa",
- "api-error-invalidrevision": "Tafsiri haikupatikana",
- "api-error-unknownmessage": "Ujumbe haukupatikana",
"translate-workflowstatus": "Hali: $1",
"translate-stats-workflow": "Hali",
- "translate-dynagroup-recent-label": "fasiri za hivi karibuni",
- "translate-gethelp": "Msaada"
+ "translate-dynagroup-recent-label": "fasiri za hivi karibuni"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ta.json b/www/wiki/extensions/Translate/i18n/core/ta.json
index d0553341..3fb91f04 100644
--- a/www/wiki/extensions/Translate/i18n/core/ta.json
+++ b/www/wiki/extensions/Translate/i18n/core/ta.json
@@ -10,16 +10,13 @@
"Trengarasu",
"செல்வா",
"மதனாஹரன்",
- "Anj.balaji"
+ "Anj.balaji",
+ "ElangoRamanujam",
+ "Rakeshonwiki"
]
},
"translate": "மொழி பெயர்ப்பு",
"translate-desc": "மீடியாவிக்கியையும் தாண்டிய வேறு மொழிபெயர்ப்புகளுக்கான [[Special:Translate|சிறப்புப் பக்கம்]]",
- "translate-taskui-view": "அனைத்துத் தகவல்களையும் காண்பி",
- "translate-taskui-untranslated": "மொழிபெயர்க்கப்படாத தகவல்களை காண்பி",
- "translate-taskui-optional": "கட்டாயமில்லாதத் தகவல்களை காண்பி",
- "translate-taskui-acceptqueue": "நான் ஏற்றுக்கொள்ளக்கூடிய தகவல்களை மட்டும் காண்பி",
- "translate-taskui-reviewall": "அனைத்து மொழிபெயர்ப்புகளையும் பரிசீலனை செய்",
"translate-taskui-export-to-file": "சொந்த வடிவமைப்பில் ஏற்றுமதி செய்",
"translate-taskui-export-as-po": "இணைப்பில்லா (off-line) மொழிபெயர்ப்புக்காக ஏற்றுமதி செய்",
"translate-taction-translate": "மொழிபெயர்ப்பு செய்யவும்",
@@ -47,7 +44,6 @@
"translate-page-description-legend": "குழுவைப் பற்றிய தகவல்",
"translate-page-description-hasoptional-open": "விருப்பத் தகவல்களை காண்பி.",
"translate-page-edit": "தொகு",
- "translate-ext-url": "<hr />வலைத்தளம்: $1",
"translate-optional": "(விருப்பதேர்வு)",
"translate-ignored": "(புறக்கணிக்கப்பட்டது)",
"translate-edit-title": "\"$1\" -ஐ தொகுக்கவும்",
@@ -57,12 +53,11 @@
"translate-edit-no-information": "இச் செய்திக்கு ஆவணமாக்கல் ஏதும் இல்லை.\nஇச் செய்தி எங்கே எப்படிப் பயன்படுத்தப்படும் என்பது உங்களுக்குத் தெரியுமாயின் இதற்கு ஆவணமாக்கல் சேர்ப்பதன் மூலம் மற்ற மொழிபெயர்ப்பாளர்களுக்கு நீங்கள் உதவ முடியும்.",
"translate-edit-information": "தகவல் ($1) ஐப் பற்றிய குறிப்பு",
"translate-edit-in-other-languages": "மற்ற மொழிகளில் தகவல்",
- "translate-edit-committed": "மென்பொருளில் நடப்பு மொழிபெயர்ப்பு",
"translate-edit-warnings": "நிறைவுபெறாத மொழிபெயர்ப்புகளைப் பற்றிய எச்சரிக்கைகள்",
- "translate-edit-tmsugs": "மொழிபெயர்ப்பு நினைவகத்தில் இருந்து பரிந்துரைகள்",
"translate-edit-tmmatch": "$1% பொருத்தம்",
"translate-edit-nopermission": "தகவல்களை மொழிபெயர்க்க உங்களுக்கு அனுமதி இருக்கவேண்டும்.",
"translate-edit-askpermission": "அனுமதி வேண்டுக",
+ "exporttranslations": "மொழிபெயர்ப்புகளை ஏற்றுக",
"translate-magic-pagename": "நீட்சிபெற்ற மீடியாவிக்கி மொழிபெயர்ப்பு",
"translate-magic-submit": "கொண்டு வா",
"translate-magic-cm-export": "ஏற்றுமதி செய்",
@@ -111,7 +106,6 @@
"translate-statsf-language": "மொழிகளுக்கான குறியீடுகளின் காற்புள்ளிகளால் பிரித்த பட்டியல்:",
"translate-statsf-group": "குழுக்களுக்கான குறியீடுகளின் காற்புள்ளிகளால் பிரித்த பட்டியல்:",
"translate-statsf-submit": "முன்னோட்டம்",
- "translate-tag-category": "மொழிபெயர்க்கக்கூடிய பக்கங்கள்",
"translate-tag-page-desc": "விக்கி பக்கம் [[$2|$1]] ன் மொழிபெயர்ப்பு",
"translate-sidebar-alltrans": "மற்ற மொழிகளில்",
"translations": "எல்லா மொழிபெயர்ப்புகளும்",
@@ -159,7 +153,6 @@
"translate-manage-action-ignore": "புறக்கணி",
"translate-manage-action-fuzzy": "இறக்கு மற்றும் மயக்குறு மொழிபெயர்ப்புகள்",
"translate-manage-import-summary": "வெளி மூலத்திலிருந்து ஒரு புதிய பதிப்பை உள்ளிடுகின்றது",
- "translate-manage-fuzzy-summary": "செய்தி வரையறை மாறியுள்ளது.",
"translate-manage-submit": "செயல்படுத்து",
"importtranslations": "மொழிபெயர்ப்புகளை இறக்கு",
"translate-import-from-local": "உள்ளகத்துக் கோப்பு ஏற்றல்:",
@@ -171,9 +164,7 @@
"translate-js-summary": "சுருக்கம்:",
"translate-js-save": "சேமி",
"translate-js-next": "சேமித்து அடுத்ததைத் திறக்கவும்",
- "translate-js-nonext": "இதுவே இப்பக்கத்தில் இருந்த கடைசித் தகவல்",
"translate-js-skip": "அடுத்ததற்குத் தாண்டிச் செல்க",
- "translate-js-save-failed": "சேமிப்பு ஆகவில்லை. இந்தப் பிழையை அறிவிக்கவும்",
"translate-js-history": "மொழிபெயர்ப்பு வரலாறு",
"translate-js-support": "கேள்வி கேள்",
"translate-js-support-title": "இந்தத் தகவலை சரியாக மொழிபெயர்க்கத் தேவையான தகவல்கள் இல்லையெனில் உதவி கேட்கவும்.",
@@ -192,19 +183,6 @@
"translate-searchprofile-tooltip": "எல்லா மொழிபெயர்ப்புகளில் இருந்தும் தேடு",
"translate-search-languagefilter": "மொழிவாரியாக வடிகட்டு:",
"translate-search-nofilter": "வடிகட்டல் இல்லை",
- "translate-messagereview-submit": "ஏற்றுக்கொள்",
- "translate-messagereview-progress": "ஏற்றுக்கொண்டிருக்கிறது...",
- "translate-messagereview-failure": "ஏற்றுக்கொள்வது.... தோல்வியடைந்தது:$1",
- "translate-messagereview-done": "ஏற்றுக்கொள்ளப்பட்டது.",
- "translate-messagereview-reviews": "{{PLURAL:$1|ஒரு பயனரால்|$1 பயனர்களால்}} ஏற்றுக்கொள்ளப்பட்டது.",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|உங்களால்|உங்களுடன் சேர்த்து $1 பயனர்களால்}} ஏற்றுக்கொள்ளப்பட்டது.",
- "api-error-invalidrevision": "மொழிபெயர்ப்பு காணப்படவில்லை",
- "api-error-unknownmessage": "தகவல் காணப்படவில்லை",
- "api-error-fuzzymessage": "மொழிபெயர்ப்பு தெளிவில்லாததாக குறியிடப்பட்டுள்ளது",
- "api-error-owntranslation": "உங்களது மொழிபெயர்ப்புகளை உங்களால் ஏற்றுக்கொள்ள இயலாது.",
- "translate-messagereview-no-fuzzy": "தெளிவில்லா மொழிபெயர்ப்புகளை ஏற்றுக்கொள்ள இயலாது.",
- "translate-messagereview-no-own": "உங்களது மொழிபெயர்ப்புகளை உங்களால் ஏற்றுக்கொள்ள இயலாது.",
- "translate-messagereview-doit": "இந்த மொழிபெயர்ப்பை சரியான மொழிபெயர்ப்பு என ஏற்கவும்.",
"log-name-translationreview": "மொழிபெயர்ப்பு பரிசீலனைப் பதிகை",
"log-description-translationreview": "மொழிபெயர்ப்புகள் மற்றும் தகவல் குழுக்களுக்கான அனைத்து பரிசீலனைகளின் பதிகை.",
"logentry-translationreview-message": "மொழிபெயர்ப்பு $3, $1 பயனரால் {{GENDER:$2|ஏற்றுக்கொள்ளப்பட்டது}}",
@@ -214,7 +192,6 @@
"translate-stats-workflow": "நிலைமை",
"translate-dynagroup-recent-label": "அண்மைய மொழிபெயர்ப்புகள்",
"translate-dynagroup-additions-label": "அண்மைய சேர்க்கைகள்",
- "translate-gethelp": "உதவி",
"translate-msggroupselector-projects": "தகவல் குழுக்கள்",
"translate-msggroupselector-search-placeholder": "தேடல் குழுக்கள்",
"translate-msggroupselector-search-all": "அனைத்தும்",
@@ -231,6 +208,7 @@
"tux-status-proofread": "மெய்ப்புப் பார்",
"tux-status-translated": "மொழிபெயர்ப்பு செய்யப்பட்டது",
"tux-status-unsaved": "சேமிக்கப்படாதது",
+ "tux-save-unknown-error": "இனம் தெரியாத ஒரு தவறு நிகழ்ந்துவிட்டது.",
"tux-editor-placeholder": "உங்கள் மொழிபெயர்ப்பு",
"tux-editor-save-button-label": "மொழிபெயர்ப்பை சேமிக்கவும்",
"tux-editor-skip-button-label": "அடுத்ததற்குத் தாண்டிச் செல்க",
@@ -239,5 +217,6 @@
"tux-editor-in-other-languages": "மற்ற மொழிகளில்",
"tux-editor-need-more-help": "மேலதிக உதவி தேவையா?",
"tux-editor-ask-help": "மேலதிக தகவல்களை கேட்கவும்",
+ "tux-editor-message-tools-show-editor": "விக்கி எடிட்டரில் காண்பிக்கவும்",
"tux-nojs": "இந்தப் பக்கத்திற்கு ஜாவாஸ்ரிப்ட் தேவை"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/tay.json b/www/wiki/extensions/Translate/i18n/core/tay.json
new file mode 100644
index 00000000..4d7c54c6
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/tay.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Akamycoco",
+ "Hitaypayan"
+ ]
+ },
+ "translate-page-edit": "smr’zyut miru’",
+ "translate-edit-title": "Smr’zyut miru’ \"$1\"",
+ "translate-documentation-language": "Minblaq kmal biru’ na pintkaykay’",
+ "tux-edit": "Smr’zyut miru’",
+ "tux-proofread-edit-label": "Smr’zyut miru’"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/tcy.json b/www/wiki/extensions/Translate/i18n/core/tcy.json
index c678cc55..2d7304a1 100644
--- a/www/wiki/extensions/Translate/i18n/core/tcy.json
+++ b/www/wiki/extensions/Translate/i18n/core/tcy.json
@@ -3,15 +3,58 @@
"authors": [
"VASANTH S.N.",
"Soundarya shetty s",
- "Vishwanatha Badikana"
+ "Vishwanatha Badikana",
+ "BHARATHESHA ALASANDEMAJALU",
+ "Kiranpoojary",
+ "Ravi Mundkur"
]
},
"translate": "ಭಾಷಾಂತರ ಮಲ್ಪುಲೆ",
+ "translate-taction-translate": "ತರ್ಜುಮೆ",
+ "translate-taction-lstats": "ಬಾಸೆ ಅಂಕಿಅಂಶೊಲು",
"translate-page-group": "ಗುಂಪು",
"translate-page-language": "ಭಾಸೆ",
"translate-page-limit": "ಮಿತಿ",
"translate-next": "ಬೊಕ್ಕದ ಪುಟೊ",
"translate-prev": "ದುಂಬುದ ಪುಟೊ",
+ "translate-edit-contribute": "ಸಹಾಯ ಕೊರ್ಲೆ",
+ "translate-edit-in-other-languages": "ಬೇತೆ ಬಾಸೆಲೆಡ್ ಸಂದೇಶೊ",
"translate-magic-module": "ಘಟಕ:",
- "translate-documentation-language": "ಸುದ್ದಿ ದಾಕಲೆ ಮಲ್ಪುನು"
+ "translate-pref-nonewsletter": "ಎಂಕ್ ಈ-ಮೈಲ್ ವಾರ್ತಾಪತ್ರೊಲೆನ್ ಕಡಪುಡುನ ಬೊಡ್ಚಿ",
+ "translate-rc-translation-filter": "ತರ್ಜುಮೆದ ಅರಿಪೆ",
+ "translate-rc-translation-filter-no": "ದಾಲ ಮಲ್ಪೊಡ್ಚಿ",
+ "translate-rc-translation-filter-only": "ತರ್ಜುಮೆಲೆನ್ ಮಾತ್ರ ತೋಜಾಲೆ",
+ "translate-rc-translation-filter-filter": "ತರ್ಜುಮೆಲೆನ್ ಅರಿತ್ ದೆಪ್ಪುಲೆ",
+ "translate-rc-translation-filter-site": "ಸೈಟ್ ಸಂದೇಶೊಲೆಗ್ ಆಯಿನ ಬದಲಾವಣೆಲು ಮಾತ್ರ",
+ "translate-stats-edits": "ಸೇರ್ಸಯಿನ",
+ "translate-stats-users": "ಅನುವಾದಕೆರ್",
+ "translate-stats-reviews": "ಪೀರ ಒರ ತೂಲೆ",
+ "translate-stats-reviewers": "ಸರಿ ಉಂಡಾಂದ್ ತುಪುನಾರ್",
+ "translate-statsf-scale-months": "ತಿಂಗೊಳು",
+ "translate-statsf-scale-weeks": "ವಾರೋಲು",
+ "translate-statsf-scale-days": "ದಿನಕ್ಕುಲು",
+ "translate-statsf-scale-hours": "ಘಂಟೆಲು",
+ "translate-statsf-count": "ಅಳತೆ:",
+ "translate-statsf-count-edits": "ಸಂಪಾದನೆತಾ ಸಂಖ್ಯೆ",
+ "translate-statsf-count-users": "ಸಕ್ರಿಯವಾದುಪ್ಪುನ ಅನುವಾದಕೆರ್",
+ "translate-statsf-count-registrations": "ಪೊಸ ಗಲಸುನರ್",
+ "translate-statsf-count-reviewers": "ಸರಿ ಉಂಡಾಂದ್ ತುಪುನಾರ್",
+ "translate-statsf-submit": "ದುಂಬುತಾ",
+ "translate-sidebar-alltrans": "ಬೇತೆ ಬಾಸೆಲೆಡ್",
+ "translations": "ಮಾತಾ ತರ್ಜುಮೆಲು",
+ "translations-summary": "ಇತ್ತಿನ ಮಾತಾ ತರ್ಜುಮೆಲೆನ್ ತೋಜಾಯೆರೆ ಒಂಜಿ ಸಂದೇಶೊದ ಪುದರ್‌ನ್ ತಿರ್ತ್ ಬರೆಲೆ.",
+ "translate-translations-fieldset-title": "ಸಂದೇಸೊ",
+ "translate-translations-messagename": "ಪುದರ್:",
+ "translate-translations-project": "ಯೋಜನೆ:",
+ "translate-translations-history-short": "ದುಂಬು ಇರ್ ತೂಯಿನವು",
+ "languagestats": "ಬಾಸೆತಾ ಲೆಕ್ಕಪಕ್ಕೋಲು",
+ "languagestats-recenttranslations": "ಇಂಚಿಪದ ಅನುವಾದೋಲು",
+ "translate-language": "ಬಾಸೆ",
+ "translate-total": "ಸಂದೇಶಲು",
+ "translate-js-support": "ಪ್ರಶ್ನೆ ಕೇನ್‌ಲೆ",
+ "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/www/wiki/extensions/Translate/i18n/core/te.json b/www/wiki/extensions/Translate/i18n/core/te.json
index 6a371d03..19856fdd 100644
--- a/www/wiki/extensions/Translate/i18n/core/te.json
+++ b/www/wiki/extensions/Translate/i18n/core/te.json
@@ -11,11 +11,6 @@
},
"translate": "అనువదించు",
"translate-desc": "మీడియావికీ మరియు ఇతరాలను అనువదించడానికి [[Special:Translate|ప్రత్యేక పుట]]",
- "translate-taskui-view": "అన్ని సందేశాలను చూపించు",
- "translate-taskui-untranslated": "అనువాదంకాని సందేశాలను చూపించు",
- "translate-taskui-optional": "ఐచ్చిక సందేశాలను చూపించు",
- "translate-taskui-acceptqueue": "నేను సమీక్షించగల సందేశాలు మాత్రమే",
- "translate-taskui-reviewall": "అన్ని అనువాదాలు సమీక్షించండి",
"translate-taskui-export-to-file": "స్థానిక ఫార్మాట్లోకి ఎగుమతి చేయండి",
"translate-taskui-export-as-po": "ఆఫ్ లైన్ అనువాదానికై ఎగుమతి",
"translate-taction-translate": "అనువాదం",
@@ -43,7 +38,6 @@
"translate-page-description-legend": "ఈ సమూహం గురించిన సమాచారం",
"translate-page-description-hasoptional-open": "ఐచ్చిక సందేశాలను చూపించు.",
"translate-page-edit": "మార్చు",
- "translate-ext-url": "<hr />జాలగూడు: $1",
"translate-optional": "(ఐచ్ఛికం)",
"translate-ignored": "(ఉపేక్షించినది)",
"translate-edit-title": "\"$1\"ని మార్చండి",
@@ -53,14 +47,14 @@
"translate-edit-no-information": "<em>ఈ సందేశానికి డాక్యుమెంటేషను లేదు. \nఈ సందేశాన్ని ఎక్కడ లేదా ఎలా ఉపయోగిస్తారో మీకు తెలిస్తే, దీనికి ఆ సమాచారాన్ని చేర్చి ఇతర అనువాదకులకు తోడ్పడవచ్చు.</em>",
"translate-edit-information": "సందేశం గురించి సమాచారం ($1)",
"translate-edit-in-other-languages": "ఇతర భాషలలో సందేశం",
- "translate-edit-committed": "సాఫ్ట్&zwnj;వేర్&zwnj;లో ప్రస్తుతమున్న అనువాదం",
"translate-edit-warnings": "అసంపూర్తి అనువాదాల గురించి హెచ్చరికలు",
- "translate-edit-tmsugs": "అనువాద కోశం నుండి సలహాలు",
"translate-edit-tmmatch-source": "మూలకోశ అనువాదం: $1",
"translate-edit-tmmatch": "$1% పోలిక",
"translate-use-suggestion": "ఈ అనువాదాన్ని మార్చుటకు సూచననివ్వండి.",
"translate-edit-nopermission": "సందేశాలను అనువదించడానికి మీకు అనువాద హక్కులు అవసరం.",
"translate-edit-askpermission": "అనుమతి తెచ్చుకోండి",
+ "exporttranslations": "అనువాదాలన ఎగుమతి",
+ "translate-export-form-format": "ఆకృతి",
"translate-magic-pagename": "విస్తరిత మీడియావికీ అనువాదం",
"translate-magic-module": "మాడ్యూలు:",
"translate-magic-submit": "తీసుకురా",
@@ -77,7 +71,7 @@
"translate-magic-namespace": "పేరుబరుల పేర్లు",
"translate-magic-notsaved": "మీ మార్పు భద్రం కాలేదు!",
"translate-magic-errors": "ఆనువాదంలోని ఈ క్రింది {{PLURAL:$1|పొరపాటుని|పొరపాట్లను}} సరిచేయండి:",
- "translate-magic-saved": "మీ మార్పులు విజయవంతంగా భద్రమయ్యాయి.",
+ "translate-magic-saved": "మీ మార్పులు భద్రమయ్యాయి.",
"translate-checks-parameters": "ఈ {{PLURAL:$2|పరామితిని|పరామితులను}} వాడనేలేదు:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "{{PLURAL:$2|ఇది గుర్తుతెలియని పరామితి|ఇవి గుర్తుతెలియని పరామితులు}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "{{PLURAL:$2|బ్రాకెట్లు|బ్రాకెట్లు}} సరి సమాన సంఖ్యలో లేవు:\n<strong><nowiki>$1</nowiki></strong>",
@@ -131,8 +125,7 @@
"translate-statsf-language": "కామాతో వేరుపరచిన భాషా సంకేతాల జాబితా:",
"translate-statsf-group": "కామాలతో వేరుపరచిన సమూహ సంకేతాల జాబితా:",
"translate-statsf-submit": "మునుజూపు",
- "translate-tag-category": "అనువదించదగ్గ పుటలు",
- "translate-tag-page-desc": "[[$2|$1]] వికీ పుట యొక్క అనువాదం.",
+ "translate-tag-page-desc": "$3 ($4) నుండి [[$2|$1]] వికీ పేజీ అనువాదం.",
"translate-sidebar-alltrans": "ఇతర భాషలలో",
"translations": "అన్ని అనువాదాలు",
"translate-translations-no-message": "\"$1\" అనేది అనువదించదగ్గ సందేశం కాదు",
@@ -154,15 +147,17 @@
"translate-total": "సందేశాలు",
"translate-untranslated": "అనువాదంకానివి",
"translate-percentage-complete": "పూర్తైనవి",
- "translate-percentage-fuzzy": "కాలదోషం పట్టినవి",
+ "translate-percentage-fuzzy": "పాతబడినవి",
"translate-ls-submit": "గణాంకాలను చూపించు",
"translate-ls-column-group": "సందేశాల సమూహం",
"translate-mgs-pagename": "సందేశ సమూహ గణాంకాలు",
+ "translate-mgs-fieldset": "ప్రదర్శన అభిరుచులు",
+ "translate-mgs-group": "సందేశాల సమూహం:",
"translate-mgs-submit": "గణాంకాలను చూపించు",
"translate-mgs-column-language": "భాష",
"translate-mgs-totals": "అన్ని భాషలు కలిపి",
"supportedlanguages": "తోడ్పాటు ఉన్న భాషలు",
- "supportedlanguages-translators": "{{PLURAL:$2|అనువాదకుడు|అనువాదకులు}}: $1",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|అనువాదకుడు|అనువాదకురాలు}}|అనువాదకులు}}: $1",
"supportedlanguages-recenttranslations": "ఇటీవలి అనువాదాలు",
"supportedlanguages-count": "మొత్తం $1 {{PLURAL:$1|భాష|భాషలు}}.",
"translate-save": "భద్రపరచు ($1)",
@@ -173,17 +168,14 @@
"translate-manage-import-deleted": "సందేశం $1ని తొలగించారు",
"translate-manage-action-import": "దిగుమతి చెయ్యి",
"translate-manage-action-ignore": "పట్టించుకోవద్దు",
- "translate-manage-fuzzy-summary": "ఈ సందేశపు నిర్వచనం మారింది",
- "translate-manage-import-done": "అంతా పూర్తయ్యింది!",
+ "translate-manage-import-done": "దిగుమతి పూర్తయ్యింది!",
"importtranslations": "అనువాదాల దిగుమతి",
"translate-import-from-local": "స్థానిక దస్త్రపు ఎక్కింపు:",
- "translate-import-err-ul-failed": "దస్త్రపు ఎక్కింపు విజయవంతం కాలేదు",
+ "translate-import-err-ul-failed": "దస్త్రపు ఎక్కింపు విఫలమైంది",
"translate-js-summary": "సారాంశం:",
"translate-js-save": "భద్రపరచు",
"translate-js-next": "భద్రపరిచి తర్వాతి దానికి వెళ్ళు",
- "translate-js-nonext": "ఈ పుటలో ఇది చివరి సందేశం",
"translate-js-skip": "వదిలేసి తర్వాతి దానికి వెళ్ళు",
- "translate-js-save-failed": "భద్రపరచడం విఫలమైంది. ఈ లోపం గురించి ఫిర్యాదు చెయ్యండి.",
"translate-js-history": "అనువాద చరిత్ర",
"translate-js-support": "సందేహముంటే అడగండి",
"translate-js-support-title": "ఈ సందేశాన్ని సరిగ్గా అనువదించేందుకు అవసరమైన సమాచారం సరిపడా లేకపోతే సాయం కోసం అడగండి",
@@ -196,40 +188,44 @@
"translate-gs-count": "లెక్క",
"translate-gs-total": "మొత్తం",
"translate-gs-avgscore": "సగటు స్కోరు",
- "translate-documentation-language": "తెలుగు",
+ "translate-documentation-language": "అనువాద సహాయం",
"translate-searchprofile": "అనువాదాలు",
"translate-searchprofile-tooltip": "అనువాదాలన్నింటిలో వెతకండి",
"translate-search-languagefilter": "భాష వడపోత:",
"translate-search-nofilter": "వడపోత లేదు",
- "translate-messagereview-submit": "అంగీకరించు",
- "translate-messagereview-no-own": "మీ అనువాదాలను మీరే అంగీకరించలేరు.",
"log-name-translationreview": "అనువాద సమీక్షల చిట్టా",
"translate-workflowstatus": "స్థితి: $1",
"translate-stats-workflow": "స్థితి",
"translate-dynagroup-recent-label": "ఇటీవలి అనువాదాలు",
"translate-dynagroup-additions-label": "ఇటీవలి చేర్పులు",
- "translate-gethelp": "సహాయం",
+ "translate-msggroupselector-projects": "సందేశాల సమూహం",
"translate-msggroupselector-search-all": "అన్నీ",
"translate-msggroupselector-search-recent": "ఇటీవలి",
"tux-tab-all": "అన్నీ",
"tux-tab-untranslated": "అనువాదం కానివి",
- "tux-tab-outdated": "కాలదోషం పట్టినవి",
+ "tux-tab-outdated": "పాతబడినవి",
"tux-tab-translated": "అనువాదమైనవి",
"tux-tab-unproofread": "సమీక్షించనివి",
"tux-edit": "మార్చు",
"tux-status-optional": "ఐచ్చికం",
- "tux-status-fuzzy": "కాలదోషం పట్టింది",
+ "tux-status-fuzzy": "పాతబడినది",
"tux-status-proofread": "సమీక్షించబడింది",
"tux-status-translated": "అనువదించబడింది",
"tux-status-saving": "భద్రపరుస్తున్నాం...",
+ "tux-save-unknown-error": "ఏదో తెలియని లోపం సంభవించింది.",
"tux-editor-placeholder": "మీ అనువాదం",
+ "tux-editor-editsummary-placeholder": "ఐచ్చిక సారాంశం",
+ "tux-editor-paste-original-button-label": "మూలపాఠ్యాన్ని కాపీచెయ్యి",
+ "tux-editor-discard-changes-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-suggestions-title": "సూచనలు",
"tux-editor-in-other-languages": "ఇతర భాషలలో",
"tux-editor-need-more-help": "మరింత సహాయం కావాలా?",
+ "tux-editor-ask-help": "మరింత సమాచారం కోసం అడగండి",
"tux-editor-tm-match": "$1% పోలిక",
"tux-warnings-more": "{{PLURAL:$1|ఇంకా $1}}",
"tux-warnings-hide": "దాచు",
@@ -251,6 +247,7 @@
"tux-editor-close-tooltip": "మూసివేయి",
"tux-editor-expand-tooltip": "విస్తరించు",
"tux-editor-message-tools-history": "చరిత్ర",
+ "tux-editor-message-tools-delete": "తొలగించు",
"tux-editor-message-tools-translations": "అన్ని అనువాదాలు",
"tux-editor-loading": "లోడవుతోంది...",
"translate-search-more-languages-info": "ఇంకా $1 {{PLURAL:$1|భాష|భాషలు}}",
diff --git a/www/wiki/extensions/Translate/i18n/core/tg-cyrl.json b/www/wiki/extensions/Translate/i18n/core/tg-cyrl.json
index e10e8f2b..0679fe8c 100644
--- a/www/wiki/extensions/Translate/i18n/core/tg-cyrl.json
+++ b/www/wiki/extensions/Translate/i18n/core/tg-cyrl.json
@@ -1,7 +1,9 @@
{
"@metadata": {
"authors": [
- "Ibrahim"
+ "Ibrahim",
+ "ToJack",
+ "Vashgird"
]
},
"translate": "Тарҷума",
@@ -28,7 +30,6 @@
"translate-edit-no-information": "''Ин пайғом дорои тавзеҳот нест.\nАгар шумо медонед ин пағом чигуна ё дар куҷо истифода мешавад, шумо метавонед бо изофа кардани тавзеҳот ба ин пайғом ба дигар тарҷумакунандагон кӯмак кунед.''",
"translate-edit-information": "Иттилоот дар мавриди ин пайғом ($1)",
"translate-edit-in-other-languages": "Ҳамин пайғом дар дигар забонҳо",
- "translate-edit-committed": "Тарҷумаи феълӣ дар нармафзор",
"translate-edit-warnings": "Ҳушдор дар мавриди тарҷумаҳои нокомил",
"translate-magic-pagename": "Тарҷумаи густаришёфтаи МедиаВики",
"translate-magic-submit": "Вокашидан",
@@ -42,5 +43,8 @@
"translate-magic-cm-savefailed": "Шикаст дар захира кардан",
"translate-magic-words": "Калимаҳои ҷодуӣ",
"translate-magic-namespace": "Исми фазоҳои ном",
- "translate-checks-parameters": "Параметрҳои зерин истифода нашудаанд: <strong>$1</strong>"
+ "translate-checks-parameters": "Параметрҳои зерин истифода нашудаанд: <strong>$1</strong>",
+ "translate-sidebar-alltrans": "Ба забонҳои дигар",
+ "translate-documentation-language": "ҳуҷатгузории паём",
+ "tux-editor-in-other-languages": "Ба забонҳои дигар"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/tg-latn.json b/www/wiki/extensions/Translate/i18n/core/tg-latn.json
index 96fbf697..c01b86b9 100644
--- a/www/wiki/extensions/Translate/i18n/core/tg-latn.json
+++ b/www/wiki/extensions/Translate/i18n/core/tg-latn.json
@@ -26,7 +26,6 @@
"translate-edit-definition": "Ta'rifi pajƣom",
"translate-edit-contribute": "hissaguzorī",
"translate-edit-no-information": "''In pajƣom doroi tavzehot nest.\nAgar şumo medoned in paƣom ciguna jo dar kuço istifoda meşavad, şumo metavoned bo izofa kardani tavzehot ba in pajƣom ba digar tarçumakunandagon kūmak kuned.''",
- "translate-edit-committed": "Tarçumai fe'lī dar narmafzor",
"translate-edit-warnings": "Huşdor dar mavridi tarçumahoi nokomil",
"translate-magic-pagename": "Tarçumai gustarişjoftai MediaViki",
"translate-magic-submit": "Vokaşidan",
diff --git a/www/wiki/extensions/Translate/i18n/core/th.json b/www/wiki/extensions/Translate/i18n/core/th.json
index 00aea210..b482e685 100644
--- a/www/wiki/extensions/Translate/i18n/core/th.json
+++ b/www/wiki/extensions/Translate/i18n/core/th.json
@@ -5,15 +5,27 @@
"Manop",
"Passawuth",
"Woraponboonkerd",
- "Horus"
+ "Horus",
+ "Octahedron80",
+ "Aefgh39622",
+ "Geonuch"
]
},
"translate": "แปล",
"translate-desc": "[[Special:Translate|หน้าพิเศษ]]สำหรับแปลมีเดียวิกิและอื่น ๆ",
+ "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-page-settings-legend": "การตั้งค่าต่างๆ",
+ "translate-language-disabled": "การแปลเป็นภาษานี้ถูกปิดใช้งาน",
+ "translate-page-settings-legend": "การตั้งค่า",
"translate-page-group": "กลุ่ม",
"translate-page-language": "ภาษา",
"translate-page-limit": "ไม่เกิน",
@@ -21,29 +33,40 @@
"translate-submit": "ดึงข้อมูล",
"translate-page-navigation-legend": "แถบนำทาง",
"translate-page-showing": "แสดงตั้งแต่ข้อความที่ $1 ถึง $2 จากทั้งหมด $3 ข้อความ",
- "translate-page-showing-all": "แสดง $1 {{PLURAL:$1|ข้อความ|ข้อความ}}",
+ "translate-page-showing-all": "แสดงข้อความ $1 {{PLURAL:$1|ข้อความ}}",
"translate-page-showing-none": "ไม่มีข้อความแสดง",
"translate-next": "หน้าถัดไป",
"translate-prev": "หน้าก่อน",
"translate-page-description-legend": "ข้อมูลเกี่ยวกับกลุ่มข้อความ",
+ "translate-page-description-hasoptional": "กลุ่มข้อความนี้มีข้อความทางเลือก\nควรแปลข้อความทางเลือกก็ต่อเมื่อในภาษาของคุณมีกฎพิเศษ อย่างเช่น ไม่มีการใช้วรรค หรือการเขียนชื่อที่ถูกต้อง $1",
+ "translate-page-description-hasoptional-open": "แสดงข้อความทางเลือก",
"translate-page-edit": "แก้ไข",
- "translate-ext-url": "<hr />เว็บไซต์: $1",
- "translate-optional": "(สามารถเลือกได้)",
+ "translate-optional": "(ทางเลือก)",
"translate-ignored": "(เพิกเฉย)",
"translate-edit-title": "แก้ไข \"$1\"",
"translate-edit-definition": "นิยามข้อความต้นฉบับ",
+ "translate-edit-translation": "การแปล",
"translate-edit-contribute": "ช่วยเขียน",
- "translate-edit-no-information": "''ข้อความนี้ไม่มีคำอธิบายการใช้งาน ถ้าคุณทราบว่าข้อความนี้ใช้ตรงส่วนไหนหรือใช้อย่างไร คุณสามารถช่วยเพิ่มคำอธิบายการใช้งานของข้อความนี้ เพื่อเป็นประโยชน์แก่ผู้แปลคนอื่นได้''",
- "translate-edit-information": "ข้อมูลเกี่ยวกับข้อความ \"$2\" ($1)",
- "translate-edit-in-other-languages": "ข้อความ \"$1\" ในภาษาอื่นๆ",
- "translate-edit-committed": "คำแปลปัจจุบันที่ฝังอยู่ในตัวโปรแกรม",
+ "translate-edit-no-information": "<em>ข้อความนี้ไม่มีคำอธิบายการใช้งาน\nถ้าคุณทราบว่าข้อความนี้ใช้ตรงส่วนไหนหรือใช้อย่างไร คุณสามารถช่วยเพิ่มคำอธิบายการใช้งานของข้อความนี้ เพื่อเป็นประโยชน์แก่ผู้แปลคนอื่นได้</em>",
+ "translate-edit-information": "ข้อมูลเกี่ยวกับข้อความ ($1)",
+ "translate-edit-in-other-languages": "ข้อความในภาษาอื่น ๆ",
"translate-edit-warnings": "คำเตือนเกี่ยวกับคำแปลที่ยังไม่สมบูรณ์หรือมีปัญหา",
- "translate-edit-tmsugs": "คำแนะนำจากคำแปลที่ผ่านมา",
+ "translate-edit-tmmatch-source": "ข้อความต้นทางการแปล: $1",
+ "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-help": "คุณสามารถแปลชื่อหน้าพิเศษต่าง ๆ, ตัวแปรพิเศษ, ชื่อแบบหน้าตา และ ชื่อเนมสเปซ\n\nชื่อหน้าพิเศษและตัวแปรพิเศษสามารถมีคำแปลได้หลายอย่าง\nคำแปลจะแยกโดยการใช้ จุลภาค (,)\nชื่อแบบหน้าตาและเนมสเปซสามารถมีคำแปลได้แค่คำเดียว\n\nในคำแปลชื่อเนมสเปซ <code>คุยเรื่อง$1</code> ต้องระวังเป็นพิเศษ <code>$1</code> จะถูกแทนที่โดยชื่อเว็บไซต์ (เช่น <code>{{ns:project_talk}}</code>)\nถ้าไม่สามารถกระทำการดังกล่าวได้ในภาษาของคุณ กรุณาติดต่อผู้ดูแลระบบขั้นสูง\n\nคุณต้องอยู่ในกลุ่มคนแปลเพื่อที่จะบันทึกข้อมูลได้\nข้อมูลจะไม่ถูกบันทึกตราบใดที่คุณยังไม่กด \"บันทึก\"",
+ "translate-magic-help": "คุณสามารถแปลชื่อหน้าพิเศษต่าง ๆ, ตัวแปรพิเศษ, ชื่อแบบหน้าตา และ ชื่อเนมสเปซ\n\nชื่อหน้าพิเศษและตัวแปรพิเศษสามารถมีคำแปลได้หลายอย่าง\nคำแปลจะแยกโดยการใช้ จุลภาค (,)\nชื่อแบบหน้าตาและเนมสเปซสามารถมีคำแปลได้แค่คำเดียว\n\nในคำแปลชื่อเนมสเปซ <code>คุยเรื่อง$1</code> ต้องระวังเป็นพิเศษ <code>$1</code> จะถูกแทนที่โดยชื่อเว็บไซต์ (เช่น <code>{{ns:project_talk}}</code>)\nถ้าไม่สามารถกระทำการดังกล่าวได้ในภาษาของคุณ กรุณาแจ้งให้เราทราบในหน้า[[สนับสนุน]]\n\nคุณต้องอยู่ในกลุ่มคนแปลเพื่อที่จะบันทึกข้อมูลได้\nข้อมูลจะไม่ถูกบันทึกตราบใดที่คุณยังไม่กด \"บันทึก\"",
"translate-magic-module": "มอดูล:",
"translate-magic-submit": "ดึงข้อมูล",
"translate-magic-cm-export": "ส่งออกมา (export)",
+ "translate-magic-nothing-to-export": "ไม่มีอะไรที่จะส่งออก",
"translate-magic-cm-to-be": "แก้เป็น",
"translate-magic-cm-current": "ปัจจุบัน",
"translate-magic-cm-original": "ต้นฉบับ",
@@ -57,31 +80,60 @@
"translate-magic-notsaved": "การแก้ไขของคุณยังไม่ได้รับการบันทึก!",
"translate-magic-errors": "กรุณาแก้ไขความผิดพลาด{{PLURAL:$1|นี้|เหล่านี้}} ในการแปลภาษา:",
"translate-magic-saved": "การเปลี่ยนแปลงของคุณได้ถูกบันทึกแล้ว",
- "translate-checks-parameters": "{{PLURAL:$2|ตัวแปร|ตัวแปร}}ต่อไปนี้ไม่ได้รับการใช้งาน: <strong>$1</strong>",
+ "translate-checks-parameters": "{{PLURAL:$2|ตัวแปร|ตัวแปร}}ต่อไปนี้ไม่ได้ถูกใช้งาน: <strong>$1</strong>",
"translate-checks-parameters-unknown": "ไม่รู้จัก{{PLURAL:$2|ตัวแปรต่อไปนี้|ตัวแปรต่อไปนี้}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "จับคู่{{PLURAL:$2|วงเล็บ|วงเล็บ}}ไม่ครบคู่:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-links": "{{PLURAL:$2|ลิงก์|ลิงก์ $2 ลิงก์}}ต่อไปนี้ทำให้เกิดปัญหา:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|ลิงก์|ลิงก์ $2 ลิงก์}}ต่อไปนี้ไม่มีอยู่:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "{{PLURAL:$2|tag ต่อไปนี้|tag เหล่านี้}}ไม่ถูกต้อง กรุณาแก้ไขโดยใช้ tag ที่ถูกต้อง:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "ข้อความต้นฉบับใช้ <nowiki>{{PLURAL:}}</nowiki> ในขณะที่คำแปลไม่ได้ใช้",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> ถูกให้มา {{PLURAL:$1|1 รูปแบบ|$1 รูปแบบ}} แต่{{PLURAL:$2|มีเพียง 1 รูปแบบ|มีเพียง $2 รูปแบบ}}เท่านั้นที่รองรับ (ยกเว้นรูปแบบ 0= และ 1=)",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> มีรูปแบบที่ซ้ำกันในตอนท้าย <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> ควรเขียนเป็น <nowiki>{{PLURAL:$1|sheep}}</nowiki>",
"translate-checks-pagename": "namespace ไม่ตรงกับนิยาม (definition) ต้นฉบับ",
"translate-checks-format": "คำแปลนี้ไม่ตรงกับนิยามในต้นฉบับ (definition) หรือ มีไวยากรณ์ (syntax) ที่ไม่ถูกต้อง: $1",
"translate-checks-escape": "เครื่องหมายหลบ (escape) ต่อไปนี้ อาจจะเกิดจากความไม่ตั้งใจ: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "การนับตัวแปรคือ {{PLURAL:$1|$1}} ซึ่งควรจะเป็น {{PLURAL:$2|$2}}",
+ "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": "แก้ไขในส่วนที่ใช้สำหรับแปล",
+ "right-translate-manage": "จัดการกลุ่มข้อความ",
+ "action-translate-manage": "จัดการกลุ่มข้อความ",
+ "right-translate-import": "นำเข้าการแปลออฟไลน์",
+ "action-translate-import": "นำเข้าการแปลออฟไลน์",
+ "right-translate-messagereview": "ตรวจทานการแปล",
+ "action-translate-messagereview": "ตรวจทานการแปล",
+ "right-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": "การปรับแต่งข้อความไซต์ในเนมสเปซ MediaWiki",
"translate-rc-translation-filter": "กรองงานแปล:",
"translate-rc-translation-filter-no": "ไม่ทำอะไรทั้งสิ้น",
"translate-rc-translation-filter-only": "แสดงงานแปลเท่านั้น",
"translate-rc-translation-filter-filter": "กรองงานแปลออก",
"translate-rc-translation-filter-site": "การเปลี่ยนแปลงในส่วนอื่นของเว็บไซต์ที่ไม่ใช่งานแปล",
"translationstats": "สถิติการแปล",
- "translate-stats-edits": "การแก้ไขต่อหนึ่งวัน",
+ "translate-stats-edits": "การแก้ไข",
"translate-stats-users": "ผู้แปล",
+ "translate-stats-registrations": "การลงทะเบียน",
+ "translate-stats-reviews": "การตรวจทาน",
+ "translate-stats-reviewers": "ผู้ตรวจทาน",
+ "translate-statsf-intro": "คุณสามารถสร้างสถิติอย่างง่ายได้โดยใช้แบบฟอร์มนี้\nค่าทั้งหมดมีขีดจำกัดทั้งบนและล่าง",
"translate-statsf-options": "ตัวปรับแต่งกราฟ",
"translate-statsf-width": "ความกว้างในหน่วยพิกเซล:",
"translate-statsf-height": "ความสูงในหน่วยพิกเซล:",
"translate-statsf-days": "ช่วงเวลานับเป็นวัน:",
- "translate-statsf-start": "ช่วงเวลานับเป็นวัน:",
- "translate-statsf-scale": "ความละเอียด",
+ "translate-statsf-start": "วันที่เริ่มต้น:",
+ "translate-statsf-scale": "ความละเอียด:",
"translate-statsf-scale-months": "เดือน",
"translate-statsf-scale-weeks": "สัปดาห์",
"translate-statsf-scale-days": "วัน",
@@ -90,55 +142,232 @@
"translate-statsf-count-edits": "จำนวนการแก้ไข",
"translate-statsf-count-users": "ผู้แปลที่ขยันขันแข็ง",
"translate-statsf-count-registrations": "ผู้ใช้ใหม่",
+ "translate-statsf-count-reviews": "การตรวจทานการแปล",
+ "translate-statsf-count-reviewers": "ผู้ตรวจทาน",
"translate-statsf-language": "รายการรหัสภาษา ใช้เครื่องหมายลูกน้ำ (comma) เป็นตัวคั่น:",
"translate-statsf-group": "รายการรหัสของกลุ่ม ใช้เครื่องหมายลูกน้ำ (comma) เป็นตัวคั่น:",
"translate-statsf-submit": "แสดงตัวอย่าง",
- "translate-tag-category": "หน้าที่สามารถแปลได้",
- "translate-tag-page-desc": "คำแปลของหน้าวิกิ [[$2|$1]].",
- "translate-sidebar-alltrans": "คำแปลในภาษาอื่น ๆ",
- "translations": "คำแปลทั้งหมด",
+ "translate-tag-page-desc": "คำแปลจากภาษา$3 ($4) ของหน้าวิกิ [[$2|$1]].",
+ "translate-sidebar-alltrans": "ในภาษาอื่น ๆ",
+ "translations": "คำแปลทุกภาษา",
"translations-summary": "ใส่ชื่อของข้อความลงด้านล่างนี้ เพื่อแสดงคำแปลที่มีทั้งหมด",
"translate-translations-no-message": "\"$1\" เป็นข้อความที่ไม่สามารถแปลได้",
"translate-translations-none": "ไม่มีคำแปลสำหรับ \"$1\"",
+ "translate-translations-count": "ค้นพบ $1 {{PLURAL:$1|การแปล|การแปล}}",
"translate-translations-fieldset-title": "ข้อความ",
"translate-translations-messagename": "ชื่อ:",
"translate-translations-project": "โครงการ:",
"translate-translations-including-no-param": "โปรดระบุคีย์ของข้อความในตัวแปรหน้าย่อย (subpage parameter) ให้ถูกต้อง",
+ "translate-translations-history-short": "ป",
"languagestats": "สถิติภาษา",
"languagestats-summary": "หน้านี้แสดงค่าสถิติการแปลของทุกกลุ่มข้อความในภาษาหนึ่งๆ",
+ "messagegroupstats-summary": "หน้านี้แสดงสถิติกลุ่มข้อความ",
"languagestats-stats-for": "สถิติการแปลสำหรับภาษา$1 ($2)",
"languagestats-recenttranslations": "การแปลล่าสุด",
+ "translate-langstats-incomplete": "สถิติบางรายการบนหน้านี้ไม่สมบูรณ์ โปรดโหลดใหม่เพื่อรับสถิติเพิ่มเติม",
+ "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": "ล้าสมัย",
- "supportedlanguages-translators": "{{PLURAL:$2|ผู้แปล|ผู้แปล}}: คุณ $1",
+ "translate-percentage-proofread": "ตรวจทานแล้ว",
+ "translate-languagestats-overall": "กลุ่มข้อความทั้งหมด",
+ "translate-ls-submit": "แสดงสถิติ",
+ "translate-ls-column-group": "กลุ่มข้อความ",
+ "translate-mgs-pagename": "สถิติกลุ่มข้อความ",
+ "translate-mgs-fieldset": "การตั้งค่าการแสดงผล",
+ "translate-mgs-group": "กลุ่มข้อความ:",
+ "translate-mgs-nocomplete": "ไม่ต้องแสดงภาษาที่มีการแปลเสร็จสมบูรณ์",
+ "translate-mgs-noempty": "ไม่ต้องแสดงภาษาที่ยังไม่ได้มีการแปลใด ๆ",
+ "translate-mgs-submit": "แสดงสถิติ",
+ "translate-mgs-column-language": "ภาษา",
+ "translate-mgs-totals": "{{PLURAL:$1|ภาษา}}ทั้งหมด $1 ภาษาด้วยกัน",
+ "translate-mgs-invalid-group": "กลุ่ม $1 ที่ระบุไม่มีอยู่",
+ "translate-mgs-nothing": "ไม่มีอะไรที่จะแสดงสำหรับสถิติที่ร้องขอ",
+ "supportedlanguages": "ภาษาที่รองรับ",
+ "supportedlanguages-summary": "หน้านี้แสดงรายการภาษาทั้งหมดที่ {{SITENAME}} รองรับ\nพร้อมชื่อผู้แปลที่ีทำงานแปลภาษานั้นๆ\nโดยชื่อผู้แปลจะปรากฏเป็นขนาดใหญ่ ถ้าผู้แปลคนนั้นร่วมแปลมาก\nสีขีดเส้นใต้บ่งบอกว่าผู้แปลได้ทำงานที่้นี่ครั้งล่าสุดเมื่อใด",
+ "supportedlanguages-colorlegend": "คำอธิบายสี: แปลครั้งล่าสุดเมื่อ $1 วันที่ผ่านมา",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|ผู้แปล}}|ผู้แปล}}: คุณ $1",
"supportedlanguages-recenttranslations": "การแปลล่าสุด",
+ "supportedlanguages-count": "รวมทั้งหมด $1 {{PLURAL:$1|ภาษา}}",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|การแก้ไข}} - แก้ไขล่าสุดเมื่อ $3 {{PLURAL:$3|วัน}}ที่ผ่านมา",
+ "abusefilter-edit-builder-vars-translate-source-text": "ข้อความต้นทางของหน่วยการแปล",
"translate-save": "บันทึก ($1)",
- "translate-jssti-add": "เพิ่มลงในรายการ",
- "translate-manage-intro-other": "ด้านล่างนี้คือรายการความเปลี่ยนแปลงของงานแปลทั้งหมดในภาษา $1\n<br />กรุณาตรวจสอบความเปลี่ยนแปลงและเลือกสิ่งที่ต้องการจะทำต่อไปในงานแปลแต่ละอัน\n<br />ถ้าคุณเลือกที่จะไม่สนใจการเปลี่ยนแปลงนี้ มันจะถูกลบล้างในการส่งออกครั้งต่อไป",
+ "translate-jssti-add": "เพิ่มลงในรายชื่อ",
+ "managemessagegroups": "การจัดการกลุ่มภาษา",
+ "translate-smg-notallowed": "คุณไม่ได้รับอนุญาตให้ดำเนินการนี้",
+ "translate-smg-nochanges": "ไม่มีการเปลี่ยนแปลงที่จะประมวลผล",
+ "translate-smg-submit": "ส่งการเปลี่ยนแปลงเพื่อประมวลผล",
+ "translate-smg-submitted": "นิยามข้อความได้ถูกปรับปรุงแล้ว การเปลี่ยนแปลงกำลังถูกประมวลผลในเบื้องหลัง",
+ "translate-smg-more": "จะมีการเปลี่ยนแปลงที่จะประมวลผลเพิ่มเติมหลังจากที่ส่งการเปลี่ยนแปลงเหล่านี้แล้ว",
+ "translate-smg-left": "เนื้อหาข้อความในวิกิ",
+ "translate-smg-right": "การเปลี่ยนแปลงที่ใกล้จะมาถึง",
+ "translate-manage-import-diff": "ข้อความ $1 | การกระทำ: $2",
+ "translate-manage-import-new": "ข้อความใหม่ $1",
+ "translate-manage-import-deleted": "ข้อความที่ลบแล้ว $1",
+ "translate-manage-action-import": "นำเข้า",
+ "translate-manage-action-conflict": "นำเข้าและทำเครื่องหมายว่าคลุมเครือ",
+ "translate-manage-action-ignore": "ละเว้น",
+ "translate-manage-action-fuzzy": "นำเข้าและทำเครื่องหมายว่าการแปลคลุมเครือ",
+ "translate-manage-nochanges": "ไม่มีการเปลี่ยนแปลงในนิยามข้อความสำหรับกลุ่มนี้",
+ "translate-manage-nochanges-other": "ไม่มีการเปลี่ยนแปลงใดๆ สำหรับภาษานี้\nใช้ลิงก์ด้านล่างเพื่อกลับไปใช้มุมมองรายละเอียดกลุ่ม",
+ "translate-manage-toolong": "หมดเวลาการประมวลผลสูงสุด $1 {{PLURAL:$1|วินาที}}แล้ว\nโปรดส่งแบบฟอร์มใหม่เพื่อดำเนินการประมวลผลต่อไป",
+ "translate-manage-import-summary": "กำลังนำเข้ารุ่นใหม่จากแหล่งข้อมูลภายนอก",
+ "translate-manage-conflict-summary": "กำลังนำเข้ารุ่นใหม่จากแหล่งข้อมูลภายนอก\nโปรดตรวจสอบ",
+ "translate-manage-submit": "ดำเนินการ",
+ "translate-manage-intro-other": "ด้านล่างนี้คือรายการความเปลี่ยนแปลงของงานแปลทั้งหมดในภาษา $1\nกรุณาตรวจสอบความเปลี่ยนแปลงและเลือกสิ่งที่ต้องการจะทำต่อไปในงานแปลแต่ละอัน\nถ้าคุณเลือกที่จะไม่สนใจการเปลี่ยนแปลงนี้ มันจะถูกลบล้างในการส่งออกครั้งต่อไป",
+ "translate-manage-import-ok": "นำเข้าแล้ว: $1",
+ "translate-manage-import-done": "การนำเข้าเสร็จสมบูรณ์!",
"importtranslations": "นำเข้างานแปล",
"translate-import-from-local": "อัพโหลดไฟล์:",
"translate-import-load": "โหลดไฟล์",
"translate-import-err-dl-failed": "ไม่สามารถดีงไฟล์นี้ได้:\n<br />$1",
- "translate-import-err-ul-failed": "อัพโหลดไฟล์ไม่สำเร็จ",
+ "translate-import-err-ul-failed": "การอัปโหลดไฟล์ล้มเหลว",
"translate-import-err-invalid-title": "ชื่อของไฟล์ที่กำหนดมา: <nowiki>$1</nowiki> ไม่ถูกต้อง",
"translate-import-err-no-such-file": "ไม่ปรากฎไฟล์ <nowiki>$1</nowiki> หรือไฟล์นี้ไม่ได้ถูกอัพโหลดเข้ามา",
+ "translate-import-err-stale-group": "ไฟล์ที่เป็นสมาชิกของกลุ่มข้อความนี้ไม่มีอยู่",
"translate-import-err-no-headers": "ไฟล์นี้ไม่ใช่ไฟล์ Gettext ในส่วนเพิ่มเติมการแปลภาษาที่ดี:\n<br />ไม่สามารถกำหนดกลุ่มและภาษาจากส่วนต้นของไฟล์ได้",
"translate-import-err-warnings": "ไฟล์ไม่ได้ถูกสร้างโดยปกติ\n<br />ตรวจสอบให้แน่ใจว่าตัวแก้ไขของคุณไม่ได้ลบส่วนของ msgctxt ออกไป\n<br />รายละเอียด: $1",
+ "translate-js-summary": "สรุป:",
+ "translate-js-save": "บันทึก",
"translate-js-next": "บันทึกและแปลต่อ",
- "translate-js-nonext": "นี่เป็นข้อความล่าสุดในหน้านี้",
"translate-js-skip": "ข้าม",
- "translate-js-save-failed": "ไม่สามารถบันทึกได้ กรุณาติดต่อเจ้าหน้าที่",
"translate-js-history": "ประวัติการแปล",
+ "translate-js-support": "ถามคำถาม",
+ "translate-js-support-title": "ขอความช่วยเหลือ ถ้ามีข้อมูลไม่เพียงพอที่จะแปลข้อความนี้ให้ถูกต้อง",
+ "translate-js-support-unsaved-warning": "คุณมีการแปลที่ยังไม่ได้บันทึก",
+ "translate-gs-pos": "ตำแหน่ง",
+ "translate-gs-code": "รหัส",
"translate-gs-continent": "ทวีป",
"translate-gs-speakers": "จำนวนผู้ใช้",
"translate-gs-score": "คะแนน",
"translate-gs-total": "รวม",
"translate-gs-avgscore": "คะแนนเฉลี่ย",
- "translate-documentation-language": "เอกสารกำกับสาร"
+ "translate-documentation-language": "เอกสารกำกับสาร",
+ "translate-searchprofile": "การแปล",
+ "translate-searchprofile-tooltip": "ค้นหาจากการแปลทั้งหมด",
+ "translate-searchprofile-note": "ตัวเลือกการค้นหาเพิ่มเติมสามารถใช้ได้ด้วย[$1 การค้นหาการแปล]",
+ "translate-search-languagefilter": "ตัวกรองตามภาษา:",
+ "translate-search-nofilter": "ไม่มีการกรอง",
+ "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": "ผู้แปลที่ยังไม่ได้อนุมัติ",
+ "group-translate-sandboxed-member": "{{GENDER:$1|ผู้แปลที่ยังไม่ได้อนุมัติ}}",
+ "right-translate-sandboxmanage": "จัดการผู้ใช้แบบ Sandbox",
+ "action-translate-sandboxmanage": "จัดการผู้ใช้แบบ sandbox",
+ "translate-workflow-state-": "(ไม่ได้ตั้งค่า)",
+ "translate-workflowstatus": "สถานะ: $1",
+ "translate-workflow-set-doing": "กำลังตั้งค่า...",
+ "translate-workflow-autocreated-summary": "การสร้างหน้าอัตโนมัติสำหรับสถานะลำดับงาน $1",
+ "translate-stats-workflow": "สถานะ",
+ "translate-workflowgroup-label": "สถานะลำดับงาน",
+ "translate-workflowgroup-desc": "กลุ่มข้อความนี้แสดงสถานะลำดับงานการแปล\nสถานะต่างๆ จะถูกกำหนดในตัวแปรการกำหนดค่า $wgTranslateWorkflowStates",
+ "translate-dynagroup-recent-label": "การแปลล่าสุด",
+ "translate-dynagroup-recent-desc": "กลุ่มข้อความนี้แสดงการแปลล่าสุดทั้งหมดเป็นภาษานี้\nมีประโยชน์ที่สุดสำหรับงานตรวจทาน",
+ "translate-dynagroup-additions-label": "การเพิ่มเติมล่าสุด",
+ "translate-dynagroup-additions-desc": "กลุ่มข้อความนี้แสดงข้อความใหม่และข้อความที่มีการเปลี่ยนแปลง",
+ "translate-msggroupselector-projects": "กลุ่มข้อความ",
+ "translate-msggroupselector-search-placeholder": "ค้นหากลุ่ม",
+ "translate-msggroupselector-search-all": "ทั้งหมด",
+ "translate-msggroupselector-search-recent": "ล่าสุด",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|กลุ่มย่อย}}",
+ "tux-languageselector": "แปลเป็น",
+ "tux-tab-all": "ทั้งหมด",
+ "tux-tab-untranslated": "ยังไม่ได้แปล",
+ "tux-tab-outdated": "ล้าสมัย",
+ "tux-tab-translated": "แปลแล้ว",
+ "tux-tab-unproofread": "ยังไม่ได้ตรวจทาน",
+ "tux-edit": "แก้ไข",
+ "tux-status-optional": "ทางเลือก",
+ "tux-status-fuzzy": "ล้าสมัย",
+ "tux-status-proofread": "ตรวจทานแล้ว",
+ "tux-status-translated": "แปลแล้ว",
+ "tux-status-saving": "กำลังบันทึก...",
+ "tux-status-unsaved": "ยังไม่บันทึก",
+ "tux-save-unknown-error": "เกิดข้อผิดพลาดที่ไม่รู้จัก",
+ "tux-editor-placeholder": "การแปลของคุณ",
+ "tux-editor-editsummary-placeholder": "สรุปทางเลือก",
+ "tux-editor-paste-original-button-label": "วางข้อความต้นฉบับ",
+ "tux-editor-discard-changes-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-edit-desc": "แก้ไขคำอธิบายการใช้งาน",
+ "tux-editor-add-desc": "เพิ่มคำอธิบายการใช้งาน",
+ "tux-editor-suggestions-title": "คำแนะนำ",
+ "tux-editor-in-other-languages": "ในภาษาอื่น ๆ",
+ "tux-editor-need-more-help": "ต้องการความช่วยเหลือเพิ่มเติมหรือไม่",
+ "tux-editor-ask-help": "ถามเพื่อดูข้อมูลเพิ่มเติม",
+ "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-less": "ดูน้อยลง",
+ "tux-editor-clear-translated": "ซ่อนที่แปลแล้ว",
+ "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-editor-page-mode": "หน้า",
+ "tux-editor-outdated-warning": "การแปลนี้อาจจำเป็นต้องมีการปรับปรุง",
+ "tux-editor-outdated-warning-diff-link": "แสดงความแตกต่าง",
+ "tux-editor-doc-editor-placeholder": "คำอธิบายการใช้งานข้อความ",
+ "tux-editor-doc-editor-save": "บันทึกคำอธิบายการใช้งาน",
+ "tux-editor-doc-editor-cancel": "ยกเลิก",
+ "tux-messagetable-more-messages": "{{PLURAL:$1|ข้อความ|ข้อความ}}เพิ่มเติม $1 รายการ",
+ "tux-messagetable-loading-messages": "กำลังโหลด{{PLURAL:$1|ข้อความ|ข้อความ}}...",
+ "tux-message-filter-placeholder": "กรองรายการ",
+ "tux-message-filter-result": "ค้นพบ $1 {{PLURAL:$1|ผลลัพธ์|ผลลัพธ์}}สำหรับ \"$2\"",
+ "tux-message-filter-advanced-button": "การค้นหาขั้นสูง",
+ "tux-message-filter-optional-messages-label": "ข้อความทางเลือก",
+ "tux-proofread-translated-by-self": "แปลแล้วโดยคุณ",
+ "tux-empty-list-all": "กลุ่มข้อความนี้ว่างเปล่า",
+ "tux-empty-list-all-guide": "เลือกกลุ่มข้อความอื่นเพื่อแปล",
+ "tux-translate-page-no-such-group": "<strong>ไม่มีกลุ่มที่ระบุไว้</strong> โปรดเลือกกลุ่มข้อความอื่น",
+ "tux-empty-list-translated": "ไม่มีข้อความที่แปลแล้ว",
+ "tux-empty-list-translated-guide": "คุณสามารถช่วยแปลได้",
+ "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-you-can-help-providing": "คุณสามารถช่วยเขียนการแปลใหม่ได้",
+ "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-link": "แสดงข้อความทั้งหมด",
+ "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": "ลบ",
+ "tux-editor-message-tools-translations": "คำแปลทุกภาษา",
+ "tux-editor-loading": "กำลังโหลด...",
+ "translate-search-more-languages-info": "{{PLURAL:$1|ภาษา}}เพิ่มเติม $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": "การกำหนดค่าผิดพลาด",
+ "tux-nojs": "เครื่องมือนี้ไม่สามารถทำงานได้โดยไม่มี JavaScript JavaScript อาจถูกปิดใช้งาน ไม่สามารถทำงานได้ หรือเบราว์เซอร์นี้ไม่รองรับ"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/tk.json b/www/wiki/extensions/Translate/i18n/core/tk.json
index 6ee381dc..fcd43cea 100644
--- a/www/wiki/extensions/Translate/i18n/core/tk.json
+++ b/www/wiki/extensions/Translate/i18n/core/tk.json
@@ -8,8 +8,6 @@
},
"translate": "Terjime",
"translate-desc": "Mediawikini we ýenekileri terjime etmek üçin [[Special:Translate|ýörite sahypa]]",
- "translate-taskui-view": "Ähli habarlary görkez",
- "translate-taskui-untranslated": "Terjime edilmedik habarlary görkez",
"translate-page-settings-legend": "Ileri tutmalar",
"translate-page-group": "Topar",
"translate-page-language": "Dil",
diff --git a/www/wiki/extensions/Translate/i18n/core/tl.json b/www/wiki/extensions/Translate/i18n/core/tl.json
index de44baf7..2291b21c 100644
--- a/www/wiki/extensions/Translate/i18n/core/tl.json
+++ b/www/wiki/extensions/Translate/i18n/core/tl.json
@@ -8,11 +8,6 @@
},
"translate": "Isalinwika",
"translate-desc": "[[Special:Translate|Natatanging pahina]] para sa pagsasalinwika ng MediaWiki at lampas pa",
- "translate-taskui-view": "Ipakita ang lahat ng mga mensahe",
- "translate-taskui-untranslated": "Ipakita ang mga mensaheng hindi pa nasasalinwika",
- "translate-taskui-optional": "Ipakita ang mga mensaheng maaaring wala naman",
- "translate-taskui-acceptqueue": "Mga mensaheng matatanggap ko lamang",
- "translate-taskui-reviewall": "Suriin ang lahat ng mga salinwika",
"translate-taskui-export-to-file": "Iluwas na nasa katutubong anyo",
"translate-taskui-export-as-po": "Iluwas para sa salinwikang hindi nakaugnay sa internet",
"translate-taction-translate": "Isalinwika",
@@ -34,6 +29,7 @@
"translate-page-navigation-legend": "Paglilibot (nabigasyon)",
"translate-page-showing": "Nagpapakita ng mga mensahe mula $1 hanggang $2 ng $3.",
"translate-page-showing-all": "Nagpapakita ng $1 {{PLURAL:$1|mensahe|mga mensahe}}.",
+ "translate-page-showing-none": "Walang maipapakitang mga mensahe.",
"translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "Susunod na pahina",
"translate-prev": "Sinundang pahina",
@@ -41,7 +37,6 @@
"translate-page-description-hasoptional": "Ang pangkat na ito ng mensahe ay naglalaman ng mga mensaheng opsiyonal.\nAng mga mensaheng pang-opsiyon ay nararapat na isalinwika lang kapag ang wika mo ay mayroong natatanging mga pangangailangan\nkatulad ng hindi paggamit ng mga patlang o transliterasyon ng mga pangalang pantangi. $1",
"translate-page-description-hasoptional-open": "Ipakita ang mga mensaheng maaaring wala naman.",
"translate-page-edit": "baguhin",
- "translate-ext-url": "<hr />Websayt: $1",
"translate-optional": "(maaaring wala nito)",
"translate-ignored": "(binalewala)",
"translate-edit-title": "Baguhin ang \"$1\"",
@@ -223,9 +218,7 @@
"translate-js-summary": "Buod:",
"translate-js-save": "Itala",
"translate-js-next": "Susunod na sasagipin at bubuksan",
- "translate-js-nonext": "Ito ang huling mensahe sa pahinang ito.",
"translate-js-skip": "Lumaktaw papunta sa susunod",
- "translate-js-save-failed": "Nabigo ang pagsagip. Mangyaring paki-ulat ang kamaliang ito.",
"translate-js-history": "Kasaysayan ng salinwika",
"translate-js-support": "Itanong ang katanungan",
"translate-js-support-title": "Humingi ng tulong kung walang sapat na kabatiran upang maisalinwika ng wasto ang mensaheng ito.",
@@ -244,19 +237,6 @@
"translate-searchprofile-tooltip": "Maghanap mula sa lahat ng mga salinwika",
"translate-search-languagefilter": "Salain ayon sa wika:",
"translate-search-nofilter": "Walang pagsasala",
- "translate-messagereview-submit": "Tanggapin",
- "translate-messagereview-progress": "Tinatanggap...",
- "translate-messagereview-failure": "Tinatanggap... nabigo: $1",
- "translate-messagereview-done": "Tinanggap",
- "translate-messagereview-reviews": "Tinanggap ng {{PLURAL:$1|isang tagagamit|$1 mga tagagamit}}",
- "translate-messagereview-reviewswithyou": "Tinanggap {{PLURAL:$1|mo|ng $1 mga tagagamit na kabilang ka}}",
- "api-error-invalidrevision": "Hindi natagpuan ang salinwika",
- "api-error-unknownmessage": "Hindi natagpuan ang mensahe",
- "api-error-fuzzymessage": "Minarkahan ang salinwika bilang malabo",
- "api-error-owntranslation": "Hindi mo maaaring tanggapin ang sarili mong mga pagsasalinwika",
- "translate-messagereview-no-fuzzy": "Hindi maaaring tanggapin ang mga salinwikang malabo.",
- "translate-messagereview-no-own": "Hindi mo maaaring tanggapin ang sarili mong mga pagsasalinwika.",
- "translate-messagereview-doit": "Tanggapin ang salinwikang ito bilang isang wastong pagsasalinwika.",
"log-name-translationreview": "Tala ng pagsuri ng salinwika",
"log-description-translationreview": "Tala ng lahat ng mga pagsusuri ng mga salinwika at mga pangkat ng mensahe.",
"logentry-translationreview-message": "{{GENDER:$2|Tinanggap}} ni $1 ang salinwika ng $3",
diff --git a/www/wiki/extensions/Translate/i18n/core/tly.json b/www/wiki/extensions/Translate/i18n/core/tly.json
index ff41d95b..ba4cd25e 100644
--- a/www/wiki/extensions/Translate/i18n/core/tly.json
+++ b/www/wiki/extensions/Translate/i18n/core/tly.json
@@ -12,6 +12,5 @@
"translate-page-edit": "сәрост кардеј",
"translate-edit-translation": "Пегордыније",
"translate-magic-cm-current": "Есәтнә",
- "translate-magic-cm-save": "Огәте",
- "translate-gethelp": "Арајиш"
+ "translate-magic-cm-save": "Огәте"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/tr.json b/www/wiki/extensions/Translate/i18n/core/tr.json
index 78b738e5..179ae0ff 100644
--- a/www/wiki/extensions/Translate/i18n/core/tr.json
+++ b/www/wiki/extensions/Translate/i18n/core/tr.json
@@ -14,16 +14,14 @@
"Suelnur",
"Vito Genovese",
"Sayginer",
- "McAang"
+ "McAang",
+ "Kumkumuk",
+ "Bulgu",
+ "TmY e12"
]
},
"translate": "Çevir",
"translate-desc": "MediaWiki'yi ve ötesini çevirmek için [[Special:Translate|özel sayfa]]",
- "translate-taskui-view": "Bütün iletileri göster",
- "translate-taskui-untranslated": "Çevrilmeyen iletileri göster",
- "translate-taskui-optional": "İsteğe bağlı iletileri göster",
- "translate-taskui-acceptqueue": "Yalnızca incelendi olarak işaretlenenleri kabul edebilirim",
- "translate-taskui-reviewall": "Bütün çevirileri incele",
"translate-taskui-export-to-file": "Yerel biçimde aktar",
"translate-taskui-export-as-po": "Çevrim dışı çeviri aktar",
"translate-taction-translate": "Çevir",
@@ -52,32 +50,34 @@
"translate-page-description-legend": "Grup hakkında bilgi",
"translate-page-description-hasoptional": "Bu ileti grubu isteğe bağlı iletileri içerir. Dilin özel gereksinimleri olduğunda isteğe bağlı iletiler çevrilmelidir.\nÖzel adların farklı alfabe ile yazılmasında ya da boşluklarda kullanmayınız. $1",
"translate-page-description-hasoptional-open": "İsteğe bağlı iletileri göster",
- "translate-page-edit": "değiştir",
- "translate-ext-url": "<hr />Web sitesi: $1",
+ "translate-page-edit": "düzenle",
"translate-optional": "(isteğe bağlı)",
"translate-ignored": "(yok sayılan)",
- "translate-edit-title": "Değiştir \"$1\"",
+ "translate-edit-title": "\"$1\" adlı sayfayı düzenle",
"translate-edit-definition": "İleti tanımı",
"translate-edit-translation": "Çeviri",
"translate-edit-contribute": "Katkıda bulun",
"translate-edit-no-information": "<em>Bu ileti için tanım bulunmuyor.\nEğer bu iletinin nerede ve nasıl kullanıldığını biliyorsanız, bu ileti için bir tanım ekleyerek diğer çevirmenlere yardımcı olabilirsiniz.</em>",
"translate-edit-information": "İleti hakkında bilgi(ler) ($1)",
"translate-edit-in-other-languages": "Diğer dillerdeki iletisi",
- "translate-edit-committed": "Yazılımdaki mevcut çeviriler",
"translate-edit-warnings": "Tamamlanmamış çeviriler hakkındaki uyarılar",
- "translate-edit-tmsugs": "Çeviri belleğinden öneriler",
"translate-edit-tmmatch-source": "Çeviri kaynağı metin: $1",
"translate-edit-tmmatch": "%$1 benzer",
"translate-use-suggestion": "Mevcut çeviriyi bu öneri ile değiştirin.",
"translate-edit-nopermission": "İletileri çevirmek için çeviri hakkınız olmalı.",
"translate-edit-askpermission": "İzin al",
+ "exporttranslations": "Çeviriyi dışa aktar",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Lütfen geçerli bir format belirtiniz.",
+ "translate-export-not-supported": "Çeviriyi dışa aktarım desteklenmiyor.",
+ "translate-export-format-notsupported": "Belirtilen dışa aktarım formatı, ileti grubu tarafından desteklenmiyor.",
"translate-magic-pagename": "Genişletilmiş MedyaViki çevirisi",
"translate-magic-module": "Modül:",
"translate-magic-submit": "Getir",
"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",
@@ -107,20 +107,23 @@
"prefs-translate": "Çeviri seçenekleri",
"translate-pref-editassistlang-help": "Dil kodlarının virgülle ayrılmış listesi.\nBu dillerdeki bir mesajın çevirisi, siz çeviri yaparken görünür.\nVarsayılan dil listesi sizin dilinizw bağlıdır.",
"translate-pref-editassistlang-bad": "Listede geçersiz dil kodu:\n<nowiki>$1</nowiki>.",
- "right-translate": "Çeviri arayüzünü kullanarak değişiklik yapar",
+ "right-translate": "Çeviri arayüzünü kullanarak değişiklik yap",
"right-translate-manage": "İleti gruplarını yönet",
"action-translate-manage": "ileti gruplarını yönet",
- "right-translate-import": "Çevrimdışı çevirileri içe aktarır",
+ "right-translate-import": "Çevrimdışı çevirileri içe aktar",
"action-translate-import": "çevrim dışı çevirileri içe aktar",
"right-translate-messagereview": "Çevirileri incele",
+ "action-translate-messagereview": "çeviri inceleme",
"right-translate-groupreview": "İleti gruplarının iş akışı durumunu değiştir",
+ "action-translate-groupreview": "ileti gruplarının iş akışı durumunu değiştirme",
+ "translate-rcfilters-translations": "Çeviriler",
"translate-rc-translation-filter": "Çevirileri filtrele:",
"translate-rc-translation-filter-no": "Hiçbir şey yapma",
"translate-rc-translation-filter-only": "Yalnızca çevirileri göster",
"translate-rc-translation-filter-filter": "Çevirileri filtrele",
"translate-rc-translation-filter-site": "Sadece site iletilerine değişiklikler",
"translationstats": "Çeviri istatistikleri",
- "translate-stats-edits": "Değişiklikler",
+ "translate-stats-edits": "Düzenlemeler",
"translate-stats-users": "Çevirmenler",
"translate-stats-registrations": "Kayıtlar",
"translate-stats-reviews": "İncelemeler",
@@ -145,8 +148,7 @@
"translate-statsf-language": "Dil kodlarının virgül ile ayrılmış listesi:",
"translate-statsf-group": "Grup kodlarının virgül ile ayrılmış listesi:",
"translate-statsf-submit": "Ön izleme",
- "translate-tag-category": "Çevirilebilir sayfalar",
- "translate-tag-page-desc": "[[$2|$1]] viki sayfasının çevirisi.",
+ "translate-tag-page-desc": "[[$2|$1]] viki sayfasının $3 ($4) dilinden çevirisi.",
"translate-sidebar-alltrans": "Diğer dillerde",
"translations": "Tüm çeviriler",
"translations-summary": "Tüm mevcut çevirilerin gösterilmesi için aşağıya bir ileti adı giriniz.",
@@ -160,6 +162,7 @@
"translate-translations-history-short": "t",
"languagestats": "Dil istatistikleri",
"languagestats-summary": "Bu sayfa tüm ileti grupları için dil çeviri istatistiklerini gösterir.",
+ "messagegroupstats-summary": "Bu sayfa, mesaj grup istatistiklerini göstermektedir.",
"languagestats-stats-for": "$1 için çeviri istatistikleri ($2).",
"languagestats-recenttranslations": "son çeviriler",
"translate-langstats-incomplete": "Bu sayfadaki bazı istatistikler eksik. Daha fazla istatistik almak için lütfen yeniden yükleyin.",
@@ -193,7 +196,7 @@
"supportedlanguages-colorlegend": "Renk göstergesi: Son çeviri $1 gün önce yapıldı",
"supportedlanguages-portallink": "[$1] $2 - $3",
"supportedlanguages-portallink-nocldr": "[$1] $2",
- "supportedlanguages-translators": "{{PLURAL:$2|Çevirmen|Çevirmenler}}: $1",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Çevirmen}}|Çevirmenler}}: $1",
"supportedlanguages-recenttranslations": "son çeviriler",
"supportedlanguages-count": "Toplamda $1 {{PLURAL:$1|dil|dil}}",
"supportedlanguages-activity": "$1: toplam $2 {{PLURAL:$2|değişiklik|değişiklik}} - son değişiklik $3 {{PLURAL:$3|gün|gün}} önce yapıldı",
@@ -219,7 +222,6 @@
"translate-manage-inconsistent": "İstekte tutarsızlık algılandı.\nLütfen değişiklikleri gözden geçirin ve yeniden deneyin.\nAyrıntılar: $1.",
"translate-manage-import-summary": "Dış bir kaynaktan yeni bir sürüm içe aktarılıyor",
"translate-manage-conflict-summary": "Dış bir kaynaktan yeni bir sürüm içe aktarılıyor.\nLütfen kontrol edin.",
- "translate-manage-fuzzy-summary": "İleti tanımı değişti",
"translate-manage-submit": "Yürüt",
"translate-manage-import-ok": "İçe aktarılan: $1",
"translate-manage-import-done": "İçe aktarma tamamlandı!",
@@ -236,9 +238,7 @@
"translate-js-summary": "Açıklama:",
"translate-js-save": "Kaydet",
"translate-js-next": "Kaydet ve sonrakini aç",
- "translate-js-nonext": "Bu, bu sayfadaki son iletiydi.",
"translate-js-skip": "Sonrakine geç",
- "translate-js-save-failed": "Kaydetme başarısız oldu. Lütfen bu hatayı bildirin.",
"translate-js-history": "Çeviri geçmişi",
"translate-js-support": "Soru sor",
"translate-js-support-unsaved-warning": "Kaydedilmemiş çevirileriniz var.",
@@ -254,21 +254,9 @@
"translate-documentation-language": "İleti belgelemesi",
"translate-searchprofile": "Çeviriler",
"translate-searchprofile-tooltip": "Tüm çevirilerde ara",
+ "translate-searchprofile-note": "[$1 Çeviri araması] ile daha fazla arama seçenekleri mevcuttur.",
"translate-search-languagefilter": "Dile göre filtre uygula:",
"translate-search-nofilter": "Filtre yok",
- "translate-messagereview-submit": "\"İncelendi\" olarak işaretle",
- "translate-messagereview-progress": "\"İncelendi\" olarak işaretleniyor...",
- "translate-messagereview-failure": "\"İncelendi\" olarak işaretleme başarısız oldu: $1",
- "translate-messagereview-done": "İncelendi",
- "translate-messagereview-reviews": "{{PLURAL:$1|Bir kullanıcı|$1 kullanıcı}} tarafından incelendi",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|Sizin tarafınızdan|Siz dahil $1 kullanıcı tarafından}} incelendi",
- "api-error-invalidrevision": "Çeviri bulunamadı",
- "api-error-unknownmessage": "İleti bulunamadı",
- "api-error-fuzzymessage": "Çeviri belirsiz olarak işaretlenmiş",
- "api-error-owntranslation": "Kendi çevirilerinizi incelendi olarak işaretleyemezsiniz",
- "translate-messagereview-no-fuzzy": "Eski çeviriler gözden geçirilmiş olarak işaretlenemez.",
- "translate-messagereview-no-own": "Kendi çevirilerinizi gözden geçirilmiş olarak işaretleyemezsiniz.",
- "translate-messagereview-doit": "Bu çeviriyi gözden geçirilmiş olarak işaretle.",
"log-name-translationreview": "Çeviri gözden geçirme günlüğü",
"group-translate-sandboxed": "Onaylanmamış çevirmenler",
"group-translate-sandboxed-member": "{{GENDER:$1|onaylanmamış çevirmen}}",
@@ -280,7 +268,7 @@
"translate-dynagroup-recent-label": "Son çeviriler",
"translate-dynagroup-recent-desc": "Bu ileti grubu, bu dildeki bütün son çevirileri gösterir.\nGörevleri incelemek için çok kullanışlıdır.",
"translate-dynagroup-additions-label": "Son eklenenler",
- "translate-gethelp": "Yardım",
+ "translate-dynagroup-additions-desc": "Bu mesaj grubu, yeni veya değiştirilen mesajları göstermektedir.",
"translate-msggroupselector-projects": "İleti grubu",
"translate-msggroupselector-search-placeholder": "Grupları ara",
"translate-msggroupselector-search-all": "Hepsi",
@@ -292,7 +280,7 @@
"tux-tab-outdated": "Eski tarihli",
"tux-tab-translated": "Çevrilmiş",
"tux-tab-unproofread": "İncelenmemiş",
- "tux-edit": "Değiştir",
+ "tux-edit": "Düzenle",
"tux-status-optional": "İsteğe Bağlı",
"tux-status-fuzzy": "Eski tarihli",
"tux-status-proofread": "İncelendi",
@@ -300,13 +288,15 @@
"tux-status-saving": "Kaydediliyor...",
"tux-status-unsaved": "Kaydedilmedi",
"tux-editor-placeholder": "Çeviriniz",
+ "tux-editor-editsummary-placeholder": "İsteğe bağlı özet",
"tux-editor-paste-original-button-label": "Kaynak metni yapıştır",
"tux-editor-discard-changes-button-label": "Değişiklikleri çıkar",
"tux-editor-save-button-label": "Çeviriyi kaydet",
"tux-editor-skip-button-label": "Sonrakine geç",
"tux-editor-cancel-button-label": "İptal",
"tux-editor-confirm-button-label": "Çeviriyi onayla",
- "tux-editor-shortcut-info": "Kaydetmek için \"$1\"; bir sonraki iletiye geçmek için \"$2\" yapın",
+ "tux-editor-proofread-button-label": "İncelendi olarak işaretle",
+ "tux-editor-shortcut-info": "Kaydetmek için \"$1\"; bir sonraki iletiye geçmek için \"$2\"; özet girmek için \"$4\" tuşlarına basın. Diğer kısayollar için \"$3\" tuşuna basın.",
"tux-editor-edit-desc": "Belgelemeyi düzenle",
"tux-editor-add-desc": "Belgeleme ekle",
"tux-editor-suggestions-title": "Öneriler",
@@ -325,7 +315,7 @@
"tux-editor-proofreading-hide-own-translations": "Çevirilerini gizle",
"tux-editor-proofreading-show-own-translations": "Çevirilerini göster",
"tux-proofread-action-tooltip": "İncelendi olarak işaretle",
- "tux-proofread-edit-label": "Değiştir",
+ "tux-proofread-edit-label": "Düzenle",
"tux-editor-page-mode": "Sayfa",
"tux-editor-outdated-warning": "Bu çevirinin güncellenmesi gerekebilir.",
"tux-editor-outdated-warning-diff-link": "Farkları göster",
@@ -347,6 +337,7 @@
"tux-empty-list-translated-action": "Çevir",
"tux-empty-show-optional-messages": "İsteğe bağlı iletileri göster",
"tux-empty-no-outdated-messages": "Eski tarihli ileti yok",
+ "tux-empty-nothing-to-proofread": "İncelemek için yeni bir şey yok",
"tux-empty-you-can-help-providing": "Yeni çeviriler sağlayarak yardımcı olabilirsiniz",
"tux-empty-nothing-new-to-proofread": "İncelemek için yeni bir şey yok",
"tux-empty-you-can-review-already-proofread": "Başkaları tarafından incelenen çevirileri inceleyebilirsiniz.",
@@ -357,6 +348,7 @@
"tux-editor-close-tooltip": "Kapat",
"tux-editor-expand-tooltip": "Genişlet",
"tux-editor-collapse-tooltip": "Daralt",
+ "tux-editor-message-tools-show-editor": "Wiki editöründe göster",
"tux-editor-message-tools-history": "Geçmiş",
"tux-editor-message-tools-delete": "Sil",
"tux-editor-message-tools-translations": "Bütün çeviriler",
@@ -364,5 +356,7 @@
"translate-search-more-languages-info": "$1 tane daha {{PLURAL:$1|dil|dil}}",
"translate-statsbar-tooltip": "%$1 çevrildi, %$2 incelendi",
"translate-statsbar-tooltip-with-fuzzy": "%$1 çevrildi, %$2 incelendi, %$3 eski",
- "translate-search-more-groups-info": "$1 tane daha {{PLURAL:$1|grup|grup}}"
+ "translate-search-more-groups-info": "$1 tane daha {{PLURAL:$1|grup|grup}}",
+ "translate-ulsdep-title": "Yapılandırma hatası",
+ "tux-nojs": "Bu sayfa için JavaScript gerekmektedir."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/trv.json b/www/wiki/extensions/Translate/i18n/core/trv.json
new file mode 100644
index 00000000..2eea59db
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/trv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iyuqciyang"
+ ]
+ },
+ "translate-documentation-language": "pnegkla patas pgkla kari"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/tt-cyrl.json b/www/wiki/extensions/Translate/i18n/core/tt-cyrl.json
index 8e18b1c2..0e97cdfa 100644
--- a/www/wiki/extensions/Translate/i18n/core/tt-cyrl.json
+++ b/www/wiki/extensions/Translate/i18n/core/tt-cyrl.json
@@ -8,8 +8,13 @@
]
},
"translate": "Тәрҗемә",
+ "translate-extensionname": "Тәрҗемә",
"translate-desc": "[[Special:Translate|Махсус бит]] MediaWiki һәм башка программлар тәрҗемә итү өчен",
+ "translate-taction-translate": "Тәрҗемә",
+ "translate-taction-proofread": "Тикшерү",
+ "translate-taction-lstats": "Тел статистикасы",
"translate-taction-mstats": "Хәбәрләр төркеме хисапнамәсе",
+ "translate-taction-export": "Экспортлау",
"translate-page-no-such-group": "Төркем дөрес күрсәтелмәгән",
"translate-page-disabled": "Әлеге бүлектә бу тел буенча тәрҗемәләр ябылган. Сәбәбе:\n\n<em>$1</em>",
"translate-page-settings-legend": "Көйләнмәләр",
@@ -21,15 +26,22 @@
"translate-page-navigation-legend": "Навигация",
"translate-page-showing": "$3 мәкалә арасыннан $1 алып $2 кадәр күрсәтелгән.",
"translate-page-showing-all": "$1 {{PLURAL:$1|хат}} күрсәтелгән",
+ "translate-page-showing-none": "Күрсәтү өчен хәбәрләр юк.",
"translate-next": "киләсе бит",
"translate-prev": "алдагы бит",
"translate-page-description-legend": "Төркем турында мәгълүмат",
+ "translate-page-edit": "үзгәртү",
+ "translate-optional": "(мәҗбүри түгел)",
+ "translate-ignored": "(игътибарга алынмай)",
+ "translate-edit-title": "\"$1\" битен үзгәртү",
"translate-edit-definition": "Мәкаләнең тасвирламасы",
+ "translate-edit-translation": "Тәрҗемә",
"translate-edit-contribute": "үзгәртү",
"translate-edit-information": "Хат турында мәгълүмат ($1)",
"translate-edit-in-other-languages": "Хат башка телләрдә",
"translate-edit-warnings": "Тулы булмаган тәрҗемәләр турында искәрмә",
"translate-edit-tmmatch": "$1% туры килү",
+ "translate-export-form-format": "Формат",
"translate-magic-pagename": "MediaWiki-ны тулысынча тәрҗемә итү",
"translate-magic-module": "Модуль:",
"translate-magic-submit": "Чыгарырга",
@@ -52,7 +64,27 @@
"translate-checks-parameters-unknown": "{{PLURAL:$2|Билгесез параметрлар}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-pref-nonewsletter": "Минем электрон почтага мәгълүмати бюллетень җибәрмәскә",
"translate-pref-editassistlang": "Ярдәмчел телләр:",
+ "prefs-translate": "Тәржемә көйләнмәләре",
+ "translate-rcfilters-translations": "Тәрҗемәләр",
+ "translate-rcfilters-translations-only-label": "Тәрҗемәләр",
+ "translate-rcfilters-translations-filter-label": "Тәрҗемә түгелләр",
+ "translate-rcfilters-translations-site-label": "Сайт хәбәрләре",
"translate-rc-translation-filter": "Тәрҗемәләрне сайлау:",
+ "translationstats": "Тәрҗемәләр хисапнамәсе",
+ "translate-stats-edits": "Үзгәртүләр",
+ "translate-stats-users": "Тәрҗемәчеләргә",
+ "translate-stats-registrations": "Теркәлүләр",
+ "translate-stats-reviews": "Тикшерүләр",
+ "translate-stats-reviewers": "Тикшерүчеләр",
+ "translate-statsf-scale-months": "Айлар",
+ "translate-statsf-scale-weeks": "Атналар",
+ "translate-statsf-scale-days": "Көннәр",
+ "translate-statsf-scale-hours": "Сәгатьләр",
+ "translate-statsf-count": "Үлчәм:",
+ "translate-statsf-count-registrations": "Яңа кулланучылар",
+ "translate-statsf-count-reviews": "Тәрҗемә тикшерүчеләре",
+ "translate-statsf-count-reviewers": "Тикшерүчеләр",
+ "translate-statsf-submit": "Алдан карау",
"translate-sidebar-alltrans": "Башка телләрдә",
"translations": "Барлык тәрҗемәләр",
"translate-translations-fieldset-title": "Хәбәр",
@@ -78,25 +110,101 @@
"translate-percentage-complete": "Башкарылган эш",
"translate-percentage-fuzzy": "Искергән битләр",
"translate-languagestats-overall": "Барлык төркемнәрнең хәбәрләре",
- "translate-mgs-totals": "Барлык телләр",
+ "translate-ls-column-group": "Язмалар төркеме",
+ "translate-mgs-submit": "Хисапнамәне күрсәтү",
+ "translate-mgs-column-language": "Тел",
+ "translate-mgs-totals": "Барлык $1 {{PLURAL:$1|тел}} бергә",
"supportedlanguages": "Кулланылучы телләр",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Тәрҗемәче}}|Тәрҗемәчеләр}}: $1",
"supportedlanguages-recenttranslations": "яңа тәрҗемәләр",
"translate-save": "Саклау ($1)",
"translate-jssti-add": "Исемлеккә өстәү",
+ "translate-manage-action-import": "Импортлау",
+ "translate-manage-action-ignore": "Игнор",
+ "translate-manage-submit": "Башкару",
+ "translate-import-load": "Файлны йөкләү",
+ "translate-js-summary": "Тасвирлама:",
+ "translate-js-save": "Саклау",
"translate-js-next": "Сакларга һәм яңасын ачарга",
- "translate-js-nonext": "Әлеге биттә бу соңгы мәкалә иде.",
"translate-js-skip": "Киләсе биткә күчү",
"translate-js-history": "Тәрҗемә тарихы",
"translate-js-support": "Сорау бирү",
+ "translate-gs-pos": "Урын",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Җир йөзе кисәге",
+ "translate-gs-speakers": "Сөйләшүчеләр",
+ "translate-gs-score": "Билге",
+ "translate-gs-multiple": "Берничә",
+ "translate-gs-count": "Микъдар",
+ "translate-gs-total": "Барысы",
+ "translate-gs-avgscore": "Уртача билге",
"translate-documentation-language": "Хат документациясе",
+ "translate-searchprofile": "Тәрҗемәләр",
+ "translate-workflow-state-": "(билгеләнмәгән)",
+ "translate-workflowstatus": "Статусы: $1",
+ "translate-workflow-set-doing": "Урнаштыру...",
+ "translate-stats-workflow": "Статусы",
+ "translate-dynagroup-recent-label": "Яңа тәрҗемәләр",
+ "translate-dynagroup-additions-label": "Соңгы өстәлмәләр",
+ "translate-msggroupselector-projects": "Язмалар төркеме",
+ "translate-msggroupselector-search-placeholder": "Төркемнәр эзләү",
"translate-msggroupselector-search-all": "Барлык",
+ "translate-msggroupselector-search-recent": "Соңгы",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|$1 астөркем|1=бер астөркем}}",
"tux-languageselector": "Тәрҗемә итү теле",
"tux-tab-all": "Барлык",
"tux-tab-untranslated": "Тәрҗемә ителмәгәннәре",
"tux-tab-outdated": "Искергәннәре",
"tux-tab-translated": "Тәрҗемә ителгәннәре",
+ "tux-tab-unproofread": "Тикшерелмәгән",
+ "tux-edit": "Үзгәртү",
+ "tux-status-optional": "Мәҗбүри түгел",
+ "tux-status-fuzzy": "Искергән",
+ "tux-status-proofread": "Тикшерү",
+ "tux-status-translated": "Тәрҗемә ителгән",
+ "tux-status-saving": "Саклана...",
+ "tux-status-unsaved": "Сакланмаган",
+ "tux-editor-placeholder": "Сезнең тәрҗемәләр",
+ "tux-editor-editsummary-placeholder": "Мәҗбүри булмаган тасвирлама",
+ "tux-editor-paste-original-button-label": "Чыганак текст өстәү",
+ "tux-editor-discard-changes-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-edit-desc": "Документацияне үзгәртү",
+ "tux-editor-add-desc": "Документация өстәү",
+ "tux-editor-suggestions-title": "Ярдәм",
"tux-editor-in-other-languages": "Башка телләрдә",
+ "tux-editor-need-more-help": "Ярдәм кирәкме?",
+ "tux-editor-ask-help": "Тулырак мәгълүмат сорау",
+ "tux-editor-tm-match": "$1% туры килү",
+ "tux-warnings-more": "{{PLURAL:$1|тагын $1}}",
+ "tux-warnings-hide": "яшерү",
+ "tux-editor-message-desc-more": "Тулырак мәгълүмат",
+ "tux-editor-message-desc-less": "Азрак күрсәтү",
"tux-editor-clear-translated": "Тәрҗемәләрне яшерү",
- "tux-empty-list-other": "Тәрҗемәгә итәргә бернәрсә дә юк"
+ "tux-editor-proofreading-mode": "Тикшерү",
+ "tux-editor-translate-mode": "Исемлек",
+ "tux-proofread-edit-label": "Үзгәртү",
+ "tux-editor-page-mode": "Бит",
+ "tux-editor-outdated-warning": "Бәлки бу тәрҗемәгә яңарту кирәктер.",
+ "tux-editor-outdated-warning-diff-link": "Аермаларны күрсәтү",
+ "tux-editor-doc-editor-placeholder": "Хат документациясе",
+ "tux-editor-doc-editor-save": "Документацияне саклау",
+ "tux-editor-doc-editor-cancel": "Баш тарту",
+ "tux-messagetable-more-messages": "Тагын $1 {{PLURAL:$1|хат}}",
+ "tux-empty-list-translated-action": "Тәрҗемә итү",
+ "tux-empty-list-other": "Тәрҗемәгә итәргә бернәрсә дә юк",
+ "tux-editor-close-tooltip": "Ябу",
+ "tux-editor-expand-tooltip": "Ачу",
+ "tux-editor-collapse-tooltip": "Төрү",
+ "tux-editor-message-tools-history": "Тарих",
+ "tux-editor-message-tools-delete": "Бетерү",
+ "tux-editor-message-tools-translations": "Барлык тәрҗемәләр",
+ "tux-editor-loading": "Йөкләү...",
+ "translate-search-more-languages-info": "тагын $1 {{PLURAL:$1|тел}}",
+ "translate-search-more-groups-info": "тагын $1 {{PLURAL:$1|төркем}}",
+ "translate-ulsdep-title": "Конфигурация хатасы"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/tyv.json b/www/wiki/extensions/Translate/i18n/core/tyv.json
index 05c99c2f..876dba94 100644
--- a/www/wiki/extensions/Translate/i18n/core/tyv.json
+++ b/www/wiki/extensions/Translate/i18n/core/tyv.json
@@ -1,8 +1,9 @@
{
"@metadata": {
"authors": [
- "Монгуш Салим"
+ "Монгуш Салим",
+ "Agilight"
]
},
- "translate-documentation-language": "Дыңнадыгның документациязы"
+ "translate-documentation-language": "Дыңнадыгның документилели"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/udm.json b/www/wiki/extensions/Translate/i18n/core/udm.json
new file mode 100644
index 00000000..2a3454ec
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/udm.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaganer",
+ "Irus",
+ "Wadorgurt"
+ ]
+ },
+ "translate-statsf-submit": "Эскерон",
+ "translate-sidebar-alltrans": "Мукет кылъёсын",
+ "languagestats": "Кыл статистика",
+ "translate-documentation-language": "Ивортонлэн документациез",
+ "translate-msggroupselector-search-all": "Ваньзэ",
+ "tux-tab-all": "Ваньзэ",
+ "tux-editor-in-other-languages": "Мукет кылъёсын"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/ug-arab.json b/www/wiki/extensions/Translate/i18n/core/ug-arab.json
index 73fc777d..f5cbb1d9 100644
--- a/www/wiki/extensions/Translate/i18n/core/ug-arab.json
+++ b/www/wiki/extensions/Translate/i18n/core/ug-arab.json
@@ -2,20 +2,16 @@
"@metadata": {
"authors": [
"Alfredie",
- "Sahran"
+ "Sahran",
+ "Uzdil"
]
},
"translate": "تەرجىمە",
"translate-desc": "MediaWiki ۋە باشقا يۇمشاق دېتاللارنى تەرجىمە قىلىدىغان [[Special:Translate|ئالاھىدە بەت]]",
- "translate-taskui-view": "ھەممە ئۇچۇرنى كۆرسەت",
- "translate-taskui-untranslated": "تەرجىمە قىلىنمىغان ئۇچۇرلارنى كۆرسەت",
- "translate-taskui-optional": "تاللاشچان ئۇچۇرلارنى كۆرسەت",
- "translate-taskui-acceptqueue": "مەن قوشۇلغان ئۇچۇرلارلا",
- "translate-taskui-reviewall": "ھەممە تەرجىمىنى كۆزدىن كەچۈر",
"translate-taskui-export-to-file": "ئەسلى پىچىمىدا چىقار",
"translate-taskui-export-as-po": "تورسىز تەرجىمە ئۈچۈن چىقار",
"translate-taction-translate": "تەرجىمە",
- "translate-taction-proofread": "تۈزەت",
+ "translate-taction-proofread": "تۈزىتىلدى",
"translate-taction-lstats": "تىل سىتاتىستىكىسى",
"translate-taction-mstats": "ئۇچۇر گۇرۇپپا سىتاتىستىكىسى",
"translate-taction-export": "چىقار",
@@ -39,8 +35,7 @@
"translate-page-description-legend": "گۇرۇپپا ھەققىدىكى ئۇچۇر",
"translate-page-description-hasoptional": "بۇ ئۇچۇر گۇرۇپپىسى تاللاشچان ئۇچۇرنى ئۆز ئىچىگە ئالىدۇ.\nتاللاشچان ئۇچۇر پەقەت تىلىڭىزدا ماقالە يازغاندا بوشلۇق ئىشلەتمىسە، مەخسۇس ئاتالغۇلار تاۋۇش تەرجىمىسىدە يېزىشقا ئوخشاش ئالاھىدە تەلەپ بولغاندىلا ئاندىن تەرجىمە قىلىنىدۇ. $1",
"translate-page-description-hasoptional-open": "تاللاشچان ئۇچۇرلارنى كۆرسەت.",
- "translate-page-edit": "تەھرىر",
- "translate-ext-url": "<hr />تور بېكەت: $1",
+ "translate-page-edit": "تەھرىرلەش",
"translate-optional": "(تاللاشچان)",
"translate-ignored": "(پەرۋا قىلىنمىغان)",
"translate-edit-title": "تەھرىر \"$1\"",
@@ -50,9 +45,7 @@
"translate-edit-no-information": "''بۇ ئۇچۇرنىڭ چۈشەندۈرۈشى يوق.''\n''ئەگەر سىز بۇ ئۇچۇرنىڭ قەيەردە ياكى قانداق ئىشلىتىلىدىغانلىقىنى بىلسىڭىز، بۇ ئۇچۇرنىڭ چۈشەندۈرۈشىنى قوشۇپ باشقا تەرجىمانلارغا ياردەم قىلالايسىز.''",
"translate-edit-information": "ئۇچۇر ھەققىدىكى ئۇچۇر ($1)",
"translate-edit-in-other-languages": "باشقا تىللاردىكى ئۇچۇرى",
- "translate-edit-committed": "يۇمشاق دېتالنىڭ نۆۋەتتىكى تەرجىمىسى",
"translate-edit-warnings": "تولۇق بولمىغان تەرجىمە ھەققىدىكى ئاگاھلاندۇرۇش",
- "translate-edit-tmsugs": "تەرجىمە خاتىرىسىنىڭ تەۋسىيىسى",
"translate-edit-tmmatch-source": "تەرجىمە ئەسلى تېكىستى: $1",
"translate-edit-tmmatch": "$1% ماس كېلىدۇ",
"translate-use-suggestion": "نۆۋەتتىكى تەرجىمىنى بۇ تەكلىپ بىلەن ئالماشتۇر",
@@ -106,7 +99,7 @@
"translate-rc-translation-filter-filter": "سۈزۈلگەن تەرجىمە",
"translate-rc-translation-filter-site": "بېكەت ئۇچۇرىنىلا ئۆزگەرت",
"translationstats": "تەرجىمە سىتاتىستىكىسى",
- "translate-stats-edits": "تەھرىر",
+ "translate-stats-edits": "تەھرىرلەش",
"translate-stats-users": "تەرجىمانلار",
"translate-stats-registrations": "خەتلىتىش",
"translate-stats-reviews": "باھالار",
@@ -131,7 +124,6 @@
"translate-statsf-language": "پەش بىلەن ئايرىلغان تىل تىزىملىك كودى:",
"translate-statsf-group": "پەش بىلەن ئايرىلغان گۇرۇپپا تىزىملىك كودى:",
"translate-statsf-submit": "ئالدىن كۆزەت",
- "translate-tag-category": "تەرجىمە قىلىشقا بولىدىغان بەتلەر",
"translate-tag-page-desc": "تەرجىمە قىلغان wiki بەت [[$2|$1]].",
"translate-sidebar-alltrans": "باشقا تىلاردا",
"translations": "ھەممە تەرجىمە",
@@ -176,7 +168,7 @@
"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-translators": "{{PLURAL:$2|تەرجىمان|تەرجىمان}}: $1",
"supportedlanguages-recenttranslations": "يېقىنقى تەرجىمىلەر",
@@ -204,11 +196,10 @@
"translate-manage-toolong": "ئەڭ ئۇزۇن بىر تەرەپ قىلىش ۋاقتى $1 {{PLURAL:$1|سېكۇنت|سېكۇنت}} توشتى.\nداۋاملىق بىر تەرەپ قىلىش ئۈچۈن بۇ كۆزنەكنى قايتا تاپشۇرۇڭ.",
"translate-manage-import-summary": "سىرتتىن يېڭى بىر نەشرىنى ئەكىرىۋاتىدۇ",
"translate-manage-conflict-summary": "سىرتقى مەنبەدىن يېڭى بىر نەشرىنى ئەكىرىۋاتىدۇ.\nتەڭشۈرۈڭ.",
- "translate-manage-fuzzy-summary": "ئۇچۇر ئېنىقلىمىسى ئۆزگەردى",
"translate-manage-submit": "ئىجراچان",
"importtranslations": "تەرجىمىلەرنى ئەكىر",
"translate-import-from-local": "يەرلىك ھۆججەت يۈكلەش:",
- "translate-import-load": "ھۆججەت يۈكلە",
+ "translate-import-load": "ھۆججەت يۈكلەش",
"translate-import-err-dl-failed": "ھۆججەتكە ئېرىشەلمىدى:\n$1",
"translate-import-err-ul-failed": "ھۆججەتنى مۇۋەپپەقىيەتلىك يۈكلىيەلمىدى",
"translate-import-err-invalid-title": "تەمىنلەنگەن ھۆججەت ئاتى <nowiki>$1</nowiki> ئىناۋەتسىز.",
@@ -219,9 +210,7 @@
"translate-js-summary": "ئۈزۈندە",
"translate-js-save": "ساقلا",
"translate-js-next": "ساقلاپ كېيىنكىنى ئاچ",
- "translate-js-nonext": "بۇ مۇشۇ بەتتىكى ئاخىرقى ئۇچۇر.",
- "translate-js-skip": "كېيىنكىگە ئاتلا",
- "translate-js-save-failed": "ساقلىيالمىدى. بۇ خاتالىقنى مەلۇم قىلىڭ.",
+ "translate-js-skip": "كېيىنكىگە ئاتلاش",
"translate-js-history": "تەرجىمە تارىخى",
"translate-js-support": "سوئال سورا",
"translate-js-support-title": "ئەگەر بۇ ئۇچۇرنى توغرا تەرجىمە قىلىشقا يېتەرلىك ئۇچۇر بولمىسا ياردەم سوراڭ.",
@@ -240,19 +229,6 @@
"translate-searchprofile-tooltip": "ھەممە تەرجىمىدىن ئىزدە",
"translate-search-languagefilter": "تىل بويىچە سۈز:",
"translate-search-nofilter": "سۈزگۈچ يوق",
- "translate-messagereview-submit": "قوشۇل",
- "translate-messagereview-progress": "قوبۇل قىلىۋاتىدۇ…",
- "translate-messagereview-failure": "قوبۇل قىلىۋاتىدۇ… مەغلۇپ بولدى: $1",
- "translate-messagereview-done": "قوبۇل قىلدى",
- "translate-messagereview-reviews": "{{PLURAL:$1|بىر ئىشلەتكۈچى|$1 ئىشلەتكۈچى}} قوبۇل قىدى",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|سىز|$1 ئىشلەتكۈچى سىزمۇ بار }} قۇبۇل قىلدىڭىز",
- "api-error-invalidrevision": "تەرجىمە تېپىلمىدى",
- "api-error-unknownmessage": "ئۇچۇر تېپىلمىدى",
- "api-error-fuzzymessage": "تەرجىمەگە مۈجمەل بەلگىسى سېلىندى",
- "api-error-owntranslation": "ئۆزىڭىزنىڭ تەرجىمىسىنى قوبۇل قىلالمايسىز",
- "translate-messagereview-no-fuzzy": "مۈجمەل تەرجىمىنى قوبۇل قىلغىلى بولمايدۇ",
- "translate-messagereview-no-own": "ئۆزىڭىزنىڭ تەرجىمىسىگە قوشۇلالمايسىز.",
- "translate-messagereview-doit": "بۇ تەرجىمىنى توغرا دەپ قوبۇل قىلىدۇ.",
"log-name-translationreview": "تەرجىمە كۆزدىن كەچۈرۈش خاتىرىسى",
"log-description-translationreview": "بارلىق تەرجىمە ۋە ئۇچۇر گۇرۇپپىسىنىڭ كۆزدىن كەچۈرۈش خاتىرىسى.",
"logentry-translationreview-message": "$1 {{GENDER:$2|قۇبۇل قىلغان}} تەرجىمە $3",
@@ -265,7 +241,6 @@
"translate-workflowgroup-desc": "بۇ ئۇچۇر گۇرۇپپىسى تەرجىمە خىزمىتىنىڭ ئېقىم ھالىتىنى كۆرسىتىدۇ.\nبۇ ھالەتنى $wgTranslateWorkflowStates سەپلىمە ئۆزگەرگۈچىسىدە بەلگىلىگەن.",
"translate-dynagroup-recent-label": "يېقىنقى تەرجىمىلەر",
"translate-dynagroup-recent-desc": "بۇ ئۇچۇر گۇرۇپپىسى مەزكۇر تىلنىڭ يېقىنقى ھەممە تەرجىمىلىرىنى كۆرسىتىدۇ.\nئىملا تۈزەتكەندە ناھايىتى كېرەكلىك.",
- "translate-gethelp": "ياردەم",
"translate-msggroupselector-search-all": "ھەممىسى",
"translate-msggroupselector-search-recent": "يېقىنقى",
"tux-languageselector": "تىل",
@@ -273,12 +248,12 @@
"tux-tab-untranslated": "تەرجىمە قىلىنمىغان",
"tux-tab-outdated": "زاماندىن قالغان",
"tux-tab-translated": "تەرجىمە قىلىنغان",
- "tux-edit": "تەھرىر",
+ "tux-edit": "تەھرىرلەش",
"tux-status-optional": "تاللاشچان",
"tux-status-fuzzy": "زاماندىن قالغان",
- "tux-status-proofread": "تۈزەت",
+ "tux-status-proofread": "قايتا تەستىقلاندى",
"tux-status-translated": "تەرجىمە قىلىنغان",
- "tux-editor-skip-button-label": "كېيىنكىگە ئاتلا",
+ "tux-editor-skip-button-label": "كېيىنكىگە ئاتلاش",
"tux-editor-suggestions-title": "نامزاتلار",
"tux-editor-in-other-languages": "باشقا تىلاردا",
"tux-editor-tm-match": "$1% ماس كېلىدۇ"
diff --git a/www/wiki/extensions/Translate/i18n/core/uk.json b/www/wiki/extensions/Translate/i18n/core/uk.json
index 6dc38f40..9426452e 100644
--- a/www/wiki/extensions/Translate/i18n/core/uk.json
+++ b/www/wiki/extensions/Translate/i18n/core/uk.json
@@ -21,16 +21,16 @@
"Ата",
"Тест",
"Olion",
- "Piramidion"
+ "Piramidion",
+ "Geraki",
+ "Renamerr",
+ "Movses",
+ "Vlad5250"
]
},
"translate": "Переклад",
"translate-desc": "[[Special:Translate|Спеціальна сторінка]] для перекладу MediaWiki та інших програм",
- "translate-taskui-view": "Показати всі повідомлення",
- "translate-taskui-untranslated": "Показати неперекладені повідомлення",
- "translate-taskui-optional": "Показати додаткові повідомлення.",
- "translate-taskui-acceptqueue": "Лише повідомлення, які я можу помітити як перевірені",
- "translate-taskui-reviewall": "Перевірити всі переклади",
+ "translate-fuzzybot-desc": "Це — спеціальний системний обліковий запис, який використовується [https://www.mediawiki.org/wiki/Extension:Translate розширенням перекладу] MediaWiki для обслуговування перекладів.\nЦей обліковий запис є частиною програмного забезпечення MediaWiki й не належить жодному користувачеві.",
"translate-taskui-export-to-file": "Експорт у «рідному» форматі",
"translate-taskui-export-as-po": "Експорт для офлайн-перекладу",
"translate-taction-translate": "Переклад",
@@ -42,7 +42,6 @@
"translate-page-no-such-language": "Зазначена неправильна мова.",
"translate-page-no-such-group": "Зазначена неправильна група.",
"translate-page-disabled": "Переклади на цю мову в цій групі вимкнені. Причина:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 — це вихідна мова цієї сторінки.",
"translate-language-disabled": "Переклад цією мовою вимкнено.",
"translate-page-settings-legend": "Параметри",
"translate-page-group": "Група",
@@ -53,13 +52,13 @@
"translate-page-navigation-legend": "Навігація",
"translate-page-showing": "Показано повідомлення з $1 по $2 (із $3).",
"translate-page-showing-all": "Показано $1 {{PLURAL:$1|повідомлення|повідомлення|повідомлень}}.",
+ "translate-page-showing-none": "Нема повідомлень для відображення.",
"translate-next": "наступна сторінка",
"translate-prev": "попередня сторінка",
"translate-page-description-legend": "Інформація про групу",
"translate-page-description-hasoptional": "Ця група повідомлень містить також необов'язкові повідомлення.\nЇх слід перекладати лише якщо Ваша мова вимагає особливого ставлення,\nскажімо, у ній не вживаються пробіли чи не потрібна транслітерація власних імен. $1",
"translate-page-description-hasoptional-open": "Показувати додаткові повідомлення.",
"translate-page-edit": "редагувати",
- "translate-ext-url": "<hr />Сайт: $1",
"translate-optional": "(необов'язкове)",
"translate-ignored": "(ігнорується)",
"translate-edit-title": "Редагувати «$1»",
@@ -75,6 +74,11 @@
"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": "Поглиблений переклад MediaWiki",
"translate-magic-help": "Ви можете перекладати псевдоніми спеціальних сторінок, магічні слова та назви простори.\n\nПсевдоніми спеціальних сторінок і магічні слова можуть мати декілька варіантів перекладу, які розділяються комою (,).\nНазви просторів можуть мати лише один переклад.\n\nПереклад назви простору обговорень проекту<code>$1 talk</code> може викликати труднощі. <code>$1</code> замінюється назвою сайту проекту (наприклад <code>{{ns:project_talk}}</code>). Якщо у Вашій мові неможливо утворити коректне словосполучення без зміни назви сайту (наприклад, якщо слід вживати родовий відмінок), повідомте про це [[Support|Службу підтримки]].\n\nЩоб зберегти зміни, Ви повинні бути перекладачем.\nЗміни не буде збережено, поки Ви не натиснете кнопку Зберегти нижче.",
"translate-magic-module": "Модуль:",
@@ -115,12 +119,22 @@
"translate-pref-editassistlang-help": "Перелік мовних кодів, відокремлених комою.\nПереклади повідомлень цими мовами буде показано, коли Ви перекладаєте.\nСтандартний список мов залежить від вашої мови.",
"translate-pref-editassistlang-bad": "Неправильний мовний код в списку:\n<nowiki>$1</nowiki>.",
"right-translate": "редагування з використанням інтерфейсу перекладу",
+ "action-translate": "редагування з використанням інтерфейсу перекладу",
"right-translate-manage": "управління групами повідомлень",
"action-translate-manage": "Керування групами повідомлень",
"right-translate-import": "імпорт офлайнових перекладів",
"action-translate-import": "імпорт офлайнових перекладів",
"right-translate-messagereview": "рецензування перекладів",
+ "action-translate-messagereview": "здійснення перевірки перекладів",
"right-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": "Локальні зміни системних повідомлень у просторі назв MediaWiki.",
"translate-rc-translation-filter": "Фільтр перекладів:",
"translate-rc-translation-filter-no": "Немає",
"translate-rc-translation-filter-only": "Показати тільки переклади",
@@ -158,7 +172,7 @@
"translations-summary": "Введіть назву повідомлення, щоб показати всі доступні переклади.",
"translate-translations-no-message": "\"$1\" не є повідомленням для перекладу",
"translate-translations-none": "Немає ніяких перекладів для \"$1\"",
- "translate-translations-count": "Знайдено {{PLURAL:$1|один переклад|$1 переклади|$1 перекладів}}.",
+ "translate-translations-count": "Знайдено {{PLURAL:$1|1=один переклад|$1 переклади|$1 перекладів}}.",
"translate-translations-fieldset-title": "Повідомлення",
"translate-translations-messagename": "Назва:",
"translate-translations-project": "Проект:",
@@ -183,6 +197,7 @@
"translate-untranslated": "Неперекладені",
"translate-percentage-complete": "Готово",
"translate-percentage-fuzzy": "Застаріло",
+ "translate-percentage-proofread": "Перевірено",
"translate-languagestats-overall": "Повідомлення всіх груп",
"translate-ls-submit": "Показати статистику",
"translate-ls-column-group": "Група повідомлень",
@@ -193,16 +208,18 @@
"translate-mgs-noempty": "Не показувати мов, які не мають жодного перекладу",
"translate-mgs-submit": "Показати статистику",
"translate-mgs-column-language": "Мова",
- "translate-mgs-totals": "Всі мови разом",
+ "translate-mgs-totals": "Всі $1 {{PLURAL:$1|мова|мови|мов}} разом",
"translate-mgs-invalid-group": "Зазначеної групи $1 не існує.",
- "translate-mgs-nothing": "Немає статистики за вашим запитом.",
+ "translate-mgs-nothing": "Немає статистики за Вашим запитом.",
"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|мова|мови|мов}}.",
"supportedlanguages-activity": "$1: $2 {{PLURAL:$2|редагування|редагування|редагувань}} — останнє редагування $3 {{PLURAL:$3|день|дні|днів}} тому",
+ "abusefilter-edit-builder-vars-translate-source-text": "Вихідний текст одиниці перекладу",
"translate-save": "Зберегти ($1)",
"translate-jssti-add": "Додати в список",
"managemessagegroups": "Керування групами повідомлень",
@@ -243,9 +260,7 @@
"translate-js-summary": "Опис:",
"translate-js-save": "Зберегти",
"translate-js-next": "Зберегти і відкрити наступне",
- "translate-js-nonext": "Це було останнє повідомлення з цієї сторінки.",
"translate-js-skip": "Перейти до наступного",
- "translate-js-save-failed": "Збереження не виконане. Будь ласка, повідомте про цю помилку.",
"translate-js-history": "Історія перекладу",
"translate-js-support": "Поставити запитання",
"translate-js-support-title": "Попросіть про допомогу, якщо ви не маєте достатньої інформації для правильного перекладу цього повідомлення.",
@@ -259,24 +274,12 @@
"translate-gs-count": "Кількість",
"translate-gs-total": "Всього",
"translate-gs-avgscore": "Сер. оцінка",
- "translate-documentation-language": "Документація повідомлення",
+ "translate-documentation-language": "документація повідомлень",
"translate-searchprofile": "Переклади",
"translate-searchprofile-tooltip": "Пошук серед усіх перекладів",
+ "translate-searchprofile-note": "Більше можливостей пошуку доступні у [$1 пошуку перекладів].",
"translate-search-languagefilter": "Фільтр мов:",
"translate-search-nofilter": "Без фільтрації",
- "translate-messagereview-submit": "Помітити як перевірене",
- "translate-messagereview-progress": "Помітка як перевірене…",
- "translate-messagereview-failure": "Помилка помітки як перевірене: $1",
- "translate-messagereview-done": "Перевірено",
- "translate-messagereview-reviews": "Перевірено $1 {{PLURAL:$1|1=користувачем|користувачами}}",
- "translate-messagereview-reviewswithyou": "Перевірено {{PLURAL:$1|1=Вами|$1 користувачами разом з Вами}}",
- "api-error-invalidrevision": "Переклад не знайдено",
- "api-error-unknownmessage": "Повідомлення не знайдено",
- "api-error-fuzzymessage": "Переклад позначено як неточний",
- "api-error-owntranslation": "Ви не можете помічати Ваші власні переклади як перевірені",
- "translate-messagereview-no-fuzzy": "Переклади, що позначено як нечіткі (Fuzzy), не може бути перевірено.",
- "translate-messagereview-no-own": "Ви не можете позначати власні переклади як перевірені.",
- "translate-messagereview-doit": "Позначити цей переклад як перевірений.",
"log-name-translationreview": "Журнал рецензування перекладів",
"log-description-translationreview": "Журнал усіх рецензій та груп повідомлень",
"logentry-translationreview-message": "$1 {{GENDER:$2|перевірив|перевірила}} переклад $3",
@@ -298,7 +301,6 @@
"translate-dynagroup-recent-desc": "Ця група повідомлень містить усі останні переклади цією мовою.\nНайзручніший режим для завдань перевірки.",
"translate-dynagroup-additions-label": "Останні доповнення",
"translate-dynagroup-additions-desc": "Ця група повідомлень містить нові та змінені повідомлення.",
- "translate-gethelp": "Довідка",
"translate-msggroupselector-projects": "Група повідомлень",
"translate-msggroupselector-search-placeholder": "Шукати групи",
"translate-msggroupselector-search-all": "Усі",
@@ -312,12 +314,14 @@
"tux-tab-unproofread": "Неперевірені",
"tux-edit": "Редагувати",
"tux-status-optional": "Необов'язково",
- "tux-status-fuzzy": "Застарілі",
+ "tux-status-fuzzy": "Застаріло",
"tux-status-proofread": "Перевірка",
"tux-status-translated": "Перекладено",
"tux-status-saving": "Зберігається...",
- "tux-status-unsaved": "Незбережено",
+ "tux-status-unsaved": "Не збережено",
+ "tux-save-unknown-error": "Трапилась невідома помилка.",
"tux-editor-placeholder": "Ваш переклад",
+ "tux-editor-editsummary-placeholder": "Необов'язковий короткий опис",
"tux-editor-paste-original-button-label": "Вставити вихідний текст",
"tux-editor-discard-changes-button-label": "Скасувати зміни",
"tux-editor-save-button-label": "Зберегти переклад",
@@ -325,7 +329,7 @@
"tux-editor-cancel-button-label": "Скасувати",
"tux-editor-confirm-button-label": "Підтвердити переклад",
"tux-editor-proofread-button-label": "Позначити як перевірений",
- "tux-editor-shortcut-info": "Натисніть «$1» щоб зберегти або «$2» для переходу до наступного повідомлення або \"$3\" для інших ярликів",
+ "tux-editor-shortcut-info": "Натисніть «$1» щоб підтвердити і перейти до наступного повідомлення, «$2», щоб пропустити, «$4», щоб додати короткий опис, або натисніть і потримайте «$3», щоб переглянути інші ярлики.",
"tux-editor-edit-desc": "Редагувати документацію",
"tux-editor-add-desc": "Додати документацію",
"tux-editor-suggestions-title": "Пропозиції",
@@ -380,9 +384,11 @@
"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": "Вилучити",
"tux-editor-message-tools-translations": "Усі переклади",
+ "tux-editor-message-tools-linktothis": "Посилання на це повідомлення",
"tux-editor-loading": "Завантаження…",
"translate-search-more-languages-info": "Ще $1 {{PLURAL:$1|мова|мови|мов}}",
"translate-statsbar-tooltip": "$1% перекладено, $2% перевірено",
@@ -391,5 +397,5 @@
"translate-ulsdep-title": "Помилка конфігурації",
"translate-ulsdep-body": "Розширення перекладу залежить від [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector розширення «Універсальний мовний селектор»].",
"tux-session-expired": "Зараз Ви не авторизовані. Будь ласка, увійдіть до системи на окремій вкладці. Або зробіть копію незбереженого перекладу, увійдіть, поверніться до цієї сторінки та введіть свої переклади знову.",
- "tux-nojs": "Ця функція вимагає JavaScript."
+ "tux-nojs": "Цей інструмент не працює без JavaScript. JavaScript вимкнено, не вдалося запустити, або ж цей браузер не підтримується."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/ur.json b/www/wiki/extensions/Translate/i18n/core/ur.json
index 32c862e6..007cbb1a 100644
--- a/www/wiki/extensions/Translate/i18n/core/ur.json
+++ b/www/wiki/extensions/Translate/i18n/core/ur.json
@@ -5,40 +5,103 @@
"Tahir mq",
"පසිඳු කාවින්ද",
"عثمان خان شاہ",
- "Muhammad Shuaib"
+ "Muhammad Shuaib",
+ "Hindustanilanguage",
+ "Obaid Raza",
+ "Zainab Meher",
+ "BukhariSaeed"
]
},
"translate": "ترجمہ",
- "translate-taskui-view": "تمام پیغامات دکھائیں",
- "translate-taskui-optional": "کچھ اختیاری پیغامات دکھائیں",
- "translate-taskui-acceptqueue": "صرف پیغامات میں قبول کر سکتے ہیں",
- "translate-taskui-reviewall": "سب ترجمے کا جائزہ لیں",
+ "translate-desc": "میڈیاویکی وغیرہ کا ترجمہ کرنے کے لیے [[Special:Translate|خصوصی صفحہ]]",
"translate-taskui-export-to-file": "مقامی کی شکل میں برآمد",
"translate-taskui-export-as-po": "آف لائن ترجمہ کے لئے برآمد",
"translate-taction-translate": "ترجمہ کریں",
+ "translate-taction-proofread": "نظر ثانی",
"translate-taction-lstats": "شماریات زبان",
- "translate-taction-mstats": "شماریات گروہ پیغامات",
+ "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-settings-legend": "ترتیبات",
"translate-page-group": "گروپ",
"translate-page-language": "زبان",
+ "translate-page-limit": "حد",
+ "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": "سابق صفحہ",
"translate-page-description-hasoptional-open": "کچھ اختیاری پیغامات دکھائیں ۔",
"translate-page-edit": "ترمیم کریں",
+ "translate-optional": "(اختیاری)",
+ "translate-ignored": "(نظر انداز شدہ)",
+ "translate-edit-title": "ترمیم «$1»",
+ "translate-edit-definition": "پیغام کی وضاحت",
"translate-edit-translation": "ترجمہ",
"translate-edit-contribute": "میں شراکت",
+ "translate-edit-no-information": "<em>اس پیغام کی دستاویز نہیں ہے۔\nاگر آپ اس پیغام کے استعمال سے واقف ہیں تو اس کی دستاویز بنا کر آپ دیگر مترجمین کا تعاون کر سکتے ہیں۔</em>",
+ "translate-edit-information": "پیغام ($1) کے متعلق",
"translate-edit-in-other-languages": "دیگر زبانوں میں پیغام",
+ "translate-edit-warnings": "نامکمل ترجموں کے متعلق انتباہات",
+ "translate-edit-nopermission": "پیغامات کے ترجمے کے لیے آپ کے پاس ترجمہ کاری کا اختیار ہونا لازمی ہے۔",
+ "translate-edit-askpermission": "اجازت حاصل کریں",
+ "exporttranslations": "تراجم برآمد کریں",
+ "translate-export-form-format": "فارمیٹ",
+ "translate-export-invalid-format": "براہ کرم درست فارمیٹ عنایت کریں",
+ "translate-export-not-supported": "تراجم کی برآمد ممکن نہیں۔",
+ "translate-magic-pagename": "میڈیاویکی کا وسیع ترجمہ",
+ "translate-magic-module": "ماڈیول:",
+ "translate-magic-submit": "اخذ کریں",
+ "translate-magic-cm-export": "برآمد کریں",
+ "translate-magic-nothing-to-export": "یہاں کوئی بھی قابل برآمد شے موجود نہیں ہے۔",
"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-savefailed": "محفوظ نہیں ہو سکا",
+ "translate-magic-special": "خصوصی صفحات کے نام",
"translate-magic-words": "جادوئی الفاظ",
+ "translate-magic-namespace": "نام فضا کے نام",
+ "translate-magic-notsaved": "آپ کی ترمیم محفوظ نہیں ہوئی!",
+ "translate-magic-errors": "براہ کرم ترجموں میں درج ذیل {{PLURAL:$1|نقص|نقائص}} کو درست کریں:",
+ "translate-magic-saved": "آپ کی تبدیلیاں محفوظ ہو گئیں۔",
+ "translate-pref-editassistlang": "معاون زبانیں:",
+ "prefs-translate": "اختیارات ترجمہ",
+ "translate-pref-editassistlang-bad": "فہرست میں نادرست رمز زبان:\n<nowiki>$1</nowiki>",
+ "right-translate-manage": "پیامی گروہوں کا انتظام",
+ "action-translate-manage": "پیامی گروہوں کا انتظام",
+ "right-translate-import": "آف لائن تراجم کو درآمد کریں",
+ "action-translate-import": "آف لائن تراجم کو درآمد کریں",
+ "right-translate-messagereview": "تراجم کی نظر ثانی کریں",
+ "action-translate-messagereview": "ترجموں پر نظر ثانی کی",
+ "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-rc-translation-filter": "ترجموں کو فلٹر کریں:",
+ "translate-rc-translation-filter-no": "کچھ نہ کریں",
+ "translate-rc-translation-filter-only": "فقط تراجم دکھاییں",
+ "translate-rc-translation-filter-filter": "ترجموں کو خارج کریں",
+ "translate-rc-translation-filter-site": "فقط ویب سائٹ کے پیغامات میں ہونے والی تبدیلیاں",
+ "translationstats": "ترجمہ کے اعداد و شمار",
+ "translate-stats-edits": "ترامیم",
"translate-stats-users": "مترجمین",
+ "translate-stats-registrations": "اندراجات",
+ "translate-stats-reviews": "نظر ثانیاں",
"translate-stats-reviewers": "مبصرین",
"translate-statsf-options": "مخطط کے اختیارات",
+ "translate-statsf-width": "چوڑائی پکسل میں:",
+ "translate-statsf-height": "لمبائی پکسل میں:",
+ "translate-statsf-days": "وقت کا دورانیہ دنوں میں:",
"translate-statsf-start": "تاریخ شروع ہو رہا ہے:",
"translate-statsf-scale-months": "ماہ",
"translate-statsf-scale-weeks": "ہفتے",
@@ -50,74 +113,167 @@
"translate-statsf-count-registrations": "نئے صارفین",
"translate-statsf-count-reviews": "ترجمہ کا جائزہ",
"translate-statsf-count-reviewers": "مبصرین",
+ "translate-statsf-language": "رموز زبان کی وقفہ سے علاحدہ شدہ فہرست",
"translate-statsf-submit": "نمائش",
- "translate-tag-category": "قابل ترجمہ صفحات",
"translate-sidebar-alltrans": "دیگر زبانوں میں",
"translations": "جملہ تراجم",
+ "translations-summary": "تمام دستیاب تراجم دیکھنے کے لیے ذیل میں کسی پیغام کا نام درج کریں۔",
+ "translate-translations-none": "«$1» کے تراجم موجود نہیں ہیں",
"translate-translations-fieldset-title": "پیغام",
"translate-translations-messagename": "نام:",
"translate-translations-project": "منصوبہ:",
+ "translate-translations-history-short": "ت",
"languagestats": "لسانی شماریات",
- "languagestats-summary": "اس صفحہ میں متعلقہ زبان کے تمام گروہان پیغامات کی ترجماتی شماریات درج ہیں۔",
+ "languagestats-summary": "اس صفحہ میں متعلقہ زبان کے تمام پیامی گروہوں کے تراجم کے اعداد و شمار درج ہیں۔",
+ "languagestats-stats-for": "$1 کے تراجم کے اعداد و شمار ($2)۔",
"languagestats-recenttranslations": "حالیہ تراجم",
"translate-langstats-expand": "وسیع کریں",
- "translate-langstats-collapse": "خاتمے",
- "translate-langstats-expandall": "تمام وسیع کریں",
+ "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-languagestats-overall": "تمام پیامی گروہ ایک ساتھ",
"translate-ls-submit": "شماریات دکھائیں",
- "translate-ls-column-group": "پیغام کے گروپ",
- "translate-mgs-pagename": "پیغام گروپ کے اعداد و شمار",
+ "translate-ls-column-group": "پیامی گروہ",
+ "translate-mgs-pagename": "پیامی گروہ کے اعداد و شمار",
"translate-mgs-fieldset": "ڈسپلے کی ترجیحات",
+ "translate-mgs-group": "پیامی گروہ:",
+ "translate-mgs-nocomplete": "ان زبانوں کو نہ دکھائیں جن کے تراجم مکمل ہو چکے ہیں",
+ "translate-mgs-noempty": "ان زبانوں کو نہ دکھائیں جن کے تراجم نہیں ہوئے ہیں",
+ "translate-mgs-submit": "شماریات دکھائیں",
"translate-mgs-column-language": "زبان",
- "translate-mgs-totals": "تمام زبانوں کی ایک ساتھ",
+ "translate-mgs-totals": "جملہ $1 {{PLURAL:$1|زبان|زبانیں}} ایک ساتھ",
"supportedlanguages": "حمایت کی زبانیں",
+ "supportedlanguages-recenttranslations": "حالیہ تراجم",
+ "supportedlanguages-count": "کل $1 {{PLURAL:$1|زبان|زبانیں}}",
"translate-jssti-add": "فہرست کرنے کے لئے شامل کریں",
"translate-smg-right": "آنے والی تبدیلیاں",
"translate-manage-action-import": "درآمد",
"translate-manage-action-ignore": "نظر انداز",
+ "translate-manage-import-ok": "درآمد شدہ: $1",
+ "translate-manage-import-done": "درآمد مکمل!",
+ "importtranslations": "تراجم درآمد کریں",
"translate-import-load": "بوجھ فائل",
"translate-js-summary": "خلاصہ:",
"translate-js-save": "محفوظ کریں",
+ "translate-js-skip": "آگے بڑھ جائیں",
"translate-js-history": "ترجمہ کی تاریخ",
"translate-js-support": "سوال پوچھیں",
+ "translate-js-support-unsaved-warning": "آپ کے کچھ تراجم اب تک محفوظ نہیں ہوئے ہیں۔",
+ "translate-gs-code": "کوڈ",
"translate-gs-continent": "براعظم",
"translate-gs-speakers": "مقررین",
"translate-gs-score": "سکور",
"translate-gs-multiple": "ایک سے زیادہ",
"translate-gs-count": "شمار",
"translate-gs-total": "کل",
- "translate-documentation-language": "پیغام دستاویزات",
+ "translate-documentation-language": "پیغام کی دستاویز سازی",
"translate-searchprofile": "ترجمہ",
- "translate-messagereview-submit": "قبول",
+ "translate-searchprofile-tooltip": "تمام تراجم میں تلاش کریں",
+ "translate-search-languagefilter": "فلٹر بلحاظ زبان",
+ "translate-search-nofilter": "کوئی فلٹر نہیں",
+ "log-name-translationreview": "نوشتہ مراجعت ترجمہ",
+ "logentry-translationreview-message": "$1 نے $3 ترجمہ پر {{GENDER:$2|نظر ثانی کی}}",
+ "group-translate-sandboxed": "غیر منظور شدہ مترجمین",
+ "translate-workflow-state-": "(غیر مرتب)",
+ "translate-workflow-set-doing": "مرتب ہو رہا ہے۔۔۔",
"translate-stats-workflow": "حیثیت",
- "translate-gethelp": "مدد",
+ "translate-dynagroup-recent-label": "حالیہ تراجم",
+ "translate-dynagroup-recent-desc": "اس پیامی گروہ میں اس زبان میں ہونے والے تازہ ترین ترجموں کو دکھایا گیا ہے۔\nنظرثانی کے کاموں کے لیے انتہائی مفید ہے۔",
+ "translate-dynagroup-additions-label": "حالیہ اضافے",
"translate-msggroupselector-projects": "گروہ پیغامات",
"translate-msggroupselector-search-all": "تمام",
+ "translate-msggroupselector-search-recent": "حالیہ",
"tux-languageselector": "ترجمہ در",
"tux-tab-all": "تمام",
"tux-tab-untranslated": "غیر ترجمہ شدہ",
"tux-tab-outdated": "از کار رفتہ",
"tux-tab-translated": "ترجمہ شدہ",
+ "tux-tab-unproofread": "غیر نظرثانی شدہ",
"tux-edit": "ترمیم",
+ "tux-status-optional": "اختیاری",
+ "tux-status-fuzzy": "از کار رفتہ",
+ "tux-status-proofread": "نظرثانی شدہ",
"tux-status-translated": "ترجمہ مکمل",
+ "tux-status-saving": "محفوظ ہورہا ہے...",
+ "tux-status-unsaved": "غیر محفوظ",
+ "tux-save-unknown-error": "نامعلوم نقص واقع ہوا ہے۔",
+ "tux-editor-placeholder": "آپ کا ترجمہ",
+ "tux-editor-editsummary-placeholder": "اختیاری خلاصہ",
+ "tux-editor-paste-original-button-label": "ماخذی متن چسپاں کریں",
"tux-editor-discard-changes-button-label": "تبدیلیاں مسترد کریں",
"tux-editor-save-button-label": "ترجمہ محفوظ کریں",
"tux-editor-skip-button-label": "آگے بڑھیں",
- "tux-editor-shortcut-info": "محفوظ کرنے کے لیے \"$1\" دبائیں، اسے چھوڑ کر آگے بڑھنے کے لیے \"$2\" دبائیں یا دیگر شارٹ کٹس کے لیے \"$3\" دبائیں۔",
+ "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-suggestions-title": "تجاویز",
+ "tux-editor-in-other-languages": "دیگر زبانوں میں",
+ "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": "ترجمہ شدہ کو چھپائیں",
+ "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-editor-page-mode": "صفحہ",
+ "tux-editor-outdated-warning": "اس ترجمے کی تجدید ضروری ہے۔",
+ "tux-editor-outdated-warning-diff-link": "فرق دکھائیں",
+ "tux-editor-doc-editor-placeholder": "پیغام کی دستاویز سازی",
+ "tux-editor-doc-editor-save": "دستاویز محفوظ کریں",
+ "tux-editor-doc-editor-cancel": "منسوخ کریں",
+ "tux-messagetable-more-messages": "$1 مزید {{PLURAL:$1|پیغام}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|پیغام}} لوڈ ہو رہے ہیں۔۔۔",
"tux-message-filter-placeholder": "فہرست میں تلاش کریں",
+ "tux-message-filter-result": "«$2» {{PLURAL:$1|کا|کے}} $1 {{PLURAL:$1|نتیجہ ملا|نتائج ملے}}",
+ "tux-message-filter-advanced-button": "پیشرفتہ تلاش",
+ "tux-message-filter-optional-messages-label": "اختیاری پیغامات",
+ "tux-proofread-translated-by-self": "آپ کے تراجم",
+ "tux-empty-list-translated": "کوئی ترجمہ شدہ پیغام نہیں ہے",
+ "tux-empty-list-translated-guide": "آپ ترجمہ کرنے میں مدد کر سکتے ہیں",
+ "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-link": "تمام پیغامات دکھائیں",
+ "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-translations": "جملہ تراجم"
+ "tux-editor-message-tools-delete": "حذف کریں",
+ "tux-editor-message-tools-translations": "جملہ تراجم",
+ "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٪ ازکار رفتہ",
+ "tux-session-expired": "آپ لاگ ان نہیں نہیں، براہ کرم دوسرے ٹیب میں لاگ ان ہوں۔ یا غیر محفوظ ترجموں کو نقل کریں، لاگ ان ہوں اور واپس اس صفحے میں پہنچ کر اپنے ترجمے دوبارہ درج کریں۔",
+ "tux-nojs": "اس صفحے کے لیے جاوا اسکرپٹ درکار ہے۔"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/uz.json b/www/wiki/extensions/Translate/i18n/core/uz.json
index 737761f0..86d7c45f 100644
--- a/www/wiki/extensions/Translate/i18n/core/uz.json
+++ b/www/wiki/extensions/Translate/i18n/core/uz.json
@@ -7,11 +7,6 @@
},
"translate": "Tarjima",
"translate-desc": "MediaWiki va boshqa dasturlarni tarjima qilish uchun [[Special:Translate|maxsus sahifa]]",
- "translate-taskui-view": "Barcha xabarlarni koʻrsatish",
- "translate-taskui-untranslated": "Tarjima qilinmagan xabarlarni koʻrsatish",
- "translate-taskui-optional": "Qoʻshimcha xabarlarni koʻrsatish",
- "translate-taskui-acceptqueue": "Faqat mening roziligim zarur bo'lgan xabarlar",
- "translate-taskui-reviewall": "Barcha tarjimalarni tekshirib chiqish",
"translate-taskui-export-to-file": "O'z formatida eksport qilish",
"translate-taskui-export-as-po": "Off-line tarjima uchun eksport qilish",
"translate-taction-translate": "Tarjima",
@@ -40,7 +35,6 @@
"translate-page-description-hasoptional": "Mazkur guruhda qo'shimcha xabarlar mavjud.\nQo'shimcha xabarlar faqat shu hollardagina tarjima qilinadi, qachonki xususiy nomlarni transliteratsiya qilishda, yoki agar sizning tilingiz qandaydir qo'shimcha shartlarni taqdim qilsa, - masalan, agarki qayerlardadir bo'sh joydan foydalanmaslik kerak bo'lsa. $1",
"translate-page-description-hasoptional-open": "Qoʻshimcha xabarlarni koʻrsatish",
"translate-page-edit": "tahrir",
- "translate-ext-url": "<hr />Sayt: $1",
"translate-optional": "(majburiy emas)",
"translate-ignored": "(e'tiborga olinmagan)",
"translate-edit-title": "Tahrir \"$1\"",
@@ -50,9 +44,7 @@
"translate-edit-no-information": "'Bu xabar tavsifga ega emas. Agar siz bu xabar qayerda va qanday ishlatilishini bilsangiz, u holda unga tavsif kiritib boshqa tarjimonlarga yordam berishingiz mumkin.''",
"translate-edit-information": "Xabar haqida maʼlumot ($1)",
"translate-edit-in-other-languages": "Xabar boshqa tillarda",
- "translate-edit-committed": "Dasturda joriy tarjima",
"translate-edit-warnings": "Chala tarjima qilinayotgani haqida ogohlantirishlar",
- "translate-edit-tmsugs": "Tarjimalar xotirasidan takliflar",
"translate-edit-tmmatch-source": "Tarjima uchun manba xabar matni: $1",
"translate-edit-tmmatch": "$1% moslik",
"translate-use-suggestion": "Joriy tarjima matnini mazkur taklifga almashtirish.",
@@ -95,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",
@@ -105,28 +99,27 @@
"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-category": "Tarjima qilinadigan sahifalar",
"translate-tag-page-desc": "[[$2|$1]] viki-sahifasining tarjimasi",
"translate-sidebar-alltrans": "Boshqa tillarda",
"translations": "Barcha tarjimalar",
@@ -153,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",
@@ -172,24 +166,22 @@
"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",
- "translate-js-nonext": "Bu mazkur sahifadagi oxirgi xabar edi.",
"translate-js-skip": "Keyingisiga o'tish",
- "translate-js-save-failed": "Saqlash bajarilmadi. Iltimos, bu kamchilik haqida xabar bering.",
"translate-js-history": "Tarjima tarixi",
"translate-js-support": "Savol berish",
"translate-js-support-title": "Agar ushbu xabarni toʻgʻri tarjima qilish uchun zarur boʻlgan maʼlumotlar yoʻq boʻlsa, yordam soʻrab murojaat qiling.",
@@ -208,21 +200,8 @@
"translate-searchprofile-tooltip": "Barcha tarjimalardan qidirish",
"translate-search-languagefilter": "Mazkur til boʻyicha saralash:",
"translate-search-nofilter": "Filtrsiz",
- "translate-messagereview-submit": "Qabul qilish",
- "translate-messagereview-progress": "Qabul qilinmoqda...",
- "translate-messagereview-failure": "Qabul qilinmoqda... amalga oshmadi: $1",
- "translate-messagereview-done": "Qabul qilindi",
- "translate-messagereview-reviews": "{{PLURAL:$1|foydalanuvchi}} tomonidan qabul qilindi",
- "translate-messagereview-reviewswithyou": "{{PLURAL:$1|Siz|$1 foydalanuvchilar va siz}} tomondan tasdiqlandi",
- "api-error-invalidrevision": "Tarjima topilmadi",
- "api-error-unknownmessage": "Xabar topilmadi",
- "api-error-fuzzymessage": "Tarjima noaniq deb belgilandi",
- "api-error-owntranslation": "Siz oʻzingizning tarjimalaringizni tasdiqlay olmaysiz",
- "translate-messagereview-no-fuzzy": "Noaniq tarjimalar qabul qilinmaydi.",
- "translate-messagereview-no-own": "Siz oʻzingizning tarjimalaringizni tasdiqlay olmaysiz",
- "translate-messagereview-doit": "Ushbu tarjimani to'g'ri deb tasdiqlash.",
"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",
@@ -230,6 +209,5 @@
"translate-stats-workflow": "Holat",
"translate-workflowgroup-label": "Jarayon holati",
"translate-dynagroup-recent-label": "Yaqin oradagi tarjimalar",
- "translate-dynagroup-recent-desc": "Ushbu xabarlar guruhida mazkur tilga yaqin orada qilingan barcha tarjimalar koʻrsatilgan.\nTarjimalarni koʻzdan kechirib chiqish uchun qulay.",
- "translate-gethelp": "Yordam"
+ "translate-dynagroup-recent-desc": "Ushbu xabarlar guruhida mazkur tilga yaqin orada qilingan barcha tarjimalar koʻrsatilgan.\nTarjimalarni koʻzdan kechirib chiqish uchun qulay."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/vec.json b/www/wiki/extensions/Translate/i18n/core/vec.json
index a1ac6782..55fc363b 100644
--- a/www/wiki/extensions/Translate/i18n/core/vec.json
+++ b/www/wiki/extensions/Translate/i18n/core/vec.json
@@ -29,7 +29,6 @@
"translate-edit-no-information": "''Sto messagio no'l gà documentassion.\nSe te sè dove o come sto messagio el vien doparà, te podi jutar altri tradutori zontando documentassion a sto messagio.''",
"translate-edit-information": "Informassion sul messagio \"$2\" ($1)",
"translate-edit-in-other-languages": "El messagio \"$1\" in altre lengue",
- "translate-edit-committed": "Tradussion atuale del software",
"translate-edit-warnings": "Avertimenti su tradussion incomplete",
"translate-magic-pagename": "Tradussion estesa de MediaWiki",
"translate-magic-help": "Te pol tradur i alias de le pagine speciali, le parole magiche, i nomi de le skin e i nomi dei namespace.\n\nI alias e le parole magiche le pol verghe più tradussion.\nLe tradussion le xe separà da na virgola (,).\nI nomi dei namespace i pol verghe na tradussion sola.\n\nIn te le tradussion dei namespace <code>$1 talk</code> el xe speciale. <code>$1</code> el vien sostituìo col nome del sito (par esenpio <code>{{ns:project_talk}}</code>).\nSe ne la to lengua no se riesse a scrivar na espression valida sensa canbiar el nome del sito, par piaser contata un svilupador.\n\nTe ghè da èssar nel grupo dei tradutori par salvar i canbiamenti.\nI canbiamenti no i xe salvà finché no te struchi el boton qua soto.",
@@ -70,7 +69,6 @@
"translate-statsf-count-edits": "Nùmaro de modifiche",
"translate-statsf-count-users": "Tradutori ativi",
"translate-statsf-submit": "Anteprima",
- "translate-tag-category": "Pagine che se pol tradur",
"translate-tag-page-desc": "Tradussion de la pagina wiki [[$2|$1]].",
"translate-sidebar-alltrans": "In altre lengoe",
"translations": "Tute le tradussion",
diff --git a/www/wiki/extensions/Translate/i18n/core/vep.json b/www/wiki/extensions/Translate/i18n/core/vep.json
index c253b664..119ec650 100644
--- a/www/wiki/extensions/Translate/i18n/core/vep.json
+++ b/www/wiki/extensions/Translate/i18n/core/vep.json
@@ -7,11 +7,6 @@
},
"translate": "Käta",
"translate-desc": "[[Special:Translate|Specialine lehtpol']] MediaWikid da toižid programmid kätes",
- "translate-taskui-view": "Ozutada kaik kirjutesed",
- "translate-taskui-untranslated": "Ozutada kändmatomad kirjutesed",
- "translate-taskui-optional": "Ozutada ližakirjutesed",
- "translate-taskui-acceptqueue": "Vaiše kirjutesed, kudambad sab znamoita kut kodvdud",
- "translate-taskui-reviewall": "Kodvda kaik kändmižed",
"translate-taskui-export-to-file": "Eksportiruida ičeze formatas",
"translate-taskui-export-as-po": "Eksportiruida, miše käta verkota",
"translate-taction-translate": "Käta",
@@ -37,7 +32,6 @@
"translate-page-description-legend": "Informacii gruppas",
"translate-page-description-hasoptional-open": "Ozutada ližakirjutesed.",
"translate-page-edit": "redaktiruida",
- "translate-ext-url": "<hr />Sait: $1",
"translate-optional": "(opcionaline)",
"translate-ignored": "(ignoriruidud)",
"translate-edit-title": "Redaktiruida \"$1\"",
@@ -46,7 +40,6 @@
"translate-edit-contribute": "ühtneda",
"translate-edit-information": "Informacii ($1)-kirjutesen polhe",
"translate-edit-in-other-languages": "Tedotuz toižil kelil:",
- "translate-edit-committed": "Nügüdläine känduz programmas",
"translate-edit-warnings": "Varutused täutmatomiš kändusiš",
"translate-edit-tmmatch": "Sättund om $1%",
"translate-edit-askpermission": "Pakita laskendas",
@@ -95,7 +88,6 @@
"translate-statsf-language": "Katkoimel erigoittud kelenkodoiden nimikirjutez:",
"translate-statsf-group": "Katkoimel erigoittud gruppkodoiden nimikirjutez:",
"translate-statsf-submit": "Ezikacund",
- "translate-tag-category": "Ned lehtpoled, kudambad voib käta",
"translate-tag-page-desc": "[[$2|$1]]-wikilehtpolen kändmine.",
"translate-sidebar-alltrans": "Toižil kelil",
"translations": "Kaik kändused",
@@ -148,8 +140,6 @@
"translate-searchprofile": "Kändused",
"translate-searchprofile-tooltip": "Ectä kaikiš kändmižiš",
"translate-search-nofilter": "Fil'truimata",
- "translate-messagereview-submit": "Otta",
- "api-error-invalidrevision": "Ei voi löuta kändust",
"translate-workflow-state-": "(ei ole kävutamas)",
"translate-workflowstatus": "Status: $1",
"translate-workflow-set-doing": "Panmine...",
diff --git a/www/wiki/extensions/Translate/i18n/core/vi.json b/www/wiki/extensions/Translate/i18n/core/vi.json
index 5e4ab975..53ebe7a3 100644
--- a/www/wiki/extensions/Translate/i18n/core/vi.json
+++ b/www/wiki/extensions/Translate/i18n/core/vi.json
@@ -2,17 +2,15 @@
"@metadata": {
"authors": [
"Minh Nguyen",
- "Vinhtantran"
+ "Vinhtantran",
+ "Thin",
+ "Leduyquang753"
]
},
"translate": "Biên dịch",
"translate-extensionname": "Biên dịch",
"translate-desc": "[[Special:Translate|Trang đặc biệt]] dùng để dịch MediaWiki và các thứ khác",
- "translate-taskui-view": "Hiện tất cả các thông điệp",
- "translate-taskui-untranslated": "Các thông điệp chưa dịch",
- "translate-taskui-optional": "Các thông điệp tùy dịch",
- "translate-taskui-acceptqueue": "Chỉ hiện các thông điệp tôi có quyền đánh dấu duyệt",
- "translate-taskui-reviewall": "Duyệt tất cả các bản dịch",
+ "translate-fuzzybot-desc": "Đây là tài khoản hệ thống đặc biệt được sử dụng bởi [https://www.mediawiki.org/wiki/Extension:Translate phần mở rộng Translate] của MediaWiki để quản lý các bản dịch.\nTài khoản này trực thuộc phần mềm MediaWiki và không có người dùng nào làm chủ.",
"translate-taskui-export-to-file": "Xuất ra định dạng bản địa",
"translate-taskui-export-as-po": "Xuất để dịch ngoại tuyến",
"translate-taction-translate": "Biên dịch",
@@ -24,7 +22,6 @@
"translate-page-no-such-language": "Ngôn ngữ chỉ định không đúng.",
"translate-page-no-such-group": "Nhóm chỉ định không đúng.",
"translate-page-disabled": "Các bản dịch trong ngôn ngữ này trong nhóm đã bị tắt. Lý do:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1 là ngôn ngữ gốc của trang này.",
"translate-language-disabled": "Đã tắt chức năng dịch sang ngôn ngữ này.",
"translate-page-settings-legend": "Thiết lập",
"translate-page-group": "Nhóm",
@@ -35,6 +32,7 @@
"translate-page-navigation-legend": "Điều khiển",
"translate-page-showing": "Đang hiển thị thông điệp có thứ tự từ $1 đến $2 trong tổng số $3 thông điệp.",
"translate-page-showing-all": "Đang hiển thị $1 thông điệp.",
+ "translate-page-showing-none": "Không có thông điệp nào.",
"translate-page-paging-links": "[ $1 ] [ $2 ]",
"translate-next": "Trang sau",
"translate-prev": "Trang trước",
@@ -42,7 +40,6 @@
"translate-page-description-hasoptional": "Nhóm thông điệp này có thông điệp tùy dịch.\nChỉ nên dịch một thông điệp tùy dịch nếu ngôn ngữ của bạn có những thuộc tính đặc biệt\nthí dụ như không sử dụng khoảng cách hoặc có hệ thống phiên âm tên. $1",
"translate-page-description-hasoptional-open": "Xem các thông điệp tùy dịch.",
"translate-page-edit": "sửa",
- "translate-ext-url": "<hr />Website: $1",
"translate-optional": "(tùy chọn)",
"translate-ignored": "(đã bỏ)",
"translate-edit-title": "Sửa đổi “$1”",
@@ -58,6 +55,11 @@
"translate-use-suggestion": "Thay thế bản dịch hiện hành với đề nghị này.",
"translate-edit-nopermission": "Bạn cần xin phép biên dịch thông điệp.",
"translate-edit-askpermission": "Xin phép",
+ "exporttranslations": "Xuất bản dịch",
+ "translate-export-form-format": "Định dạng",
+ "translate-export-invalid-format": "Xin hãy định rõ một định dạng hợp lệ.",
+ "translate-export-not-supported": "Chưa hỗ trợ kết xuất bản dịch.",
+ "translate-export-format-notsupported": "Định dạng xuất được chỉ định không được nhóm thông điệp này hỗ trợ.",
"translate-magic-pagename": "Bản dịch MediaWiki mở rộng",
"translate-magic-help": "Bạn có thể dịch bí danh của các trang đặc biệt, câu thần chú và tên của không gian tên.\n\nBí danh của các trang đặc biệt và câu thần chú có thể có nhiều bản dịch.\nCác bản dịch phân cách nhau bằng dấu phẩy (,).\nTên không gian tên chỉ có thể có một bản dịch.\n\nViệc dịch không gian tên dự án <code>$1 talk</code> có thể phức tạp hơn.\n<code>$1</code> được thay thế bằng tên trang (<code>SITENAME</code>) của dự án (ví dụ <code>{{ns:project_talk}}</code>).\nNếu cần thay đổi tên trang trong không gian tên để đúng ngữ pháp trong ngôn ngữ của bạn, xin hãy cho chúng tôi biết tại [[Support]].\n\nBạn cần phải là biên dịch viên để có thể lưu các thay đổi.\nCác thay đổi sẽ không được lưu lại đến khi nào bạn nhấn vào nút Lưu ở dưới.",
"translate-magic-module": "Gói:",
@@ -103,7 +105,16 @@
"right-translate-import": "Nhập các bản dịch ngoại tuyến",
"action-translate-import": "nhập các bản dịch ngoại tuyến",
"right-translate-messagereview": "Duyệt các bản dịch",
+ "action-translate-messagereview": "duyệt các bản dịch",
"right-translate-groupreview": "Thay đổi trạng thái luồng làm việc của các nhóm thông điệp",
+ "action-translate-groupreview": "thay đổi trạng thái luồng làm việc của các nhóm thông điệp",
+ "translate-rcfilters-translations": "Bản dịch",
+ "translate-rcfilters-translations-only-label": "Bản dịch",
+ "translate-rcfilters-translations-only-desc": "Thay đổi trong được dịch.",
+ "translate-rcfilters-translations-filter-label": "Không phải bản dịch",
+ "translate-rcfilters-translations-filter-desc": "Tất cả các thay đổi không phải là bản dịch.",
+ "translate-rcfilters-translations-site-label": "Thông điệp hệ thống",
+ "translate-rcfilters-translations-site-desc": "Việc tùy biến các thông điệp trang Web trong không gian tên MediaWiki.",
"translate-rc-translation-filter": "Lọc bản dịch:",
"translate-rc-translation-filter-no": "Không lọc",
"translate-rc-translation-filter-only": "Chỉ hiển thị bản dịch",
@@ -166,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",
@@ -176,17 +188,20 @@
"translate-mgs-noempty": "Ẩn các ngôn ngữ không có bản dịch",
"translate-mgs-submit": "Xem thống kê",
"translate-mgs-column-language": "Ngôn ngữ",
- "translate-mgs-totals": "Mọi ngôn ngữ tập hợp",
+ "translate-mgs-totals": "Mọi {{PLURAL:$1}}ngôn ngữ tập hợp",
"translate-mgs-invalid-group": "Nhóm thông điệp chỉ định, “$1”, không tồn tại.",
"translate-mgs-nothing": "Không có thống kê để hiển thị.",
"supportedlanguages": "Ngôn ngữ có sẵn",
"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.",
"supportedlanguages-activity": "$1: $2 lần sửa đổi – lần cuối cách đây $3 ngày",
+ "abusefilter-edit-builder-vars-translate-source-text": "Văn bản gốc của đơn vị biên dịch",
"translate-save": "Lưu ($1)",
"translate-jssti-add": "Thêm vào danh sách",
"managemessagegroups": "Quản lý nhóm thông điệp",
@@ -227,9 +242,7 @@
"translate-js-summary": "Tóm lược:",
"translate-js-save": "Lưu",
"translate-js-next": "Lưu và sang thông điệp sau",
- "translate-js-nonext": "Đây là thông điệp cuối cùng trên trang này.",
"translate-js-skip": "Chuyển đến thông điệp kế",
- "translate-js-save-failed": "Không lưu được. Xin hãy báo lỗi này.",
"translate-js-history": "Lịch sử biên dịch",
"translate-js-support": "Đặt câu hỏi",
"translate-js-support-title": "Yêu cầu giúp đỡ nếu không có đủ thông tin để dịch thông điệp này một cách chính xác.",
@@ -246,21 +259,9 @@
"translate-documentation-language": "Tài liệu thông điệp",
"translate-searchprofile": "Bản dịch",
"translate-searchprofile-tooltip": "Tìm kiếm tất cả các bản dịch",
+ "translate-searchprofile-note": "Có thêm tùy chọn tìm kiếm trong công cụ [$1 tìm kiếm bản dịch].",
"translate-search-languagefilter": "Lọc theo ngôn ngữ:",
"translate-search-nofilter": "Không lọc",
- "translate-messagereview-submit": "Đánh dấu duyệt",
- "translate-messagereview-progress": "Đang đánh dấu duyệt…",
- "translate-messagereview-failure": "Thất bại khi đánh dấu duyệt: $1",
- "translate-messagereview-done": "Đã duyệt",
- "translate-messagereview-reviews": "Đã được $1 người dùng duyệt",
- "translate-messagereview-reviewswithyou": "Đã được {{PLURAL:$1|bạn duyệt|$1 người dùng duyệt, bao gồm bạn}}",
- "api-error-invalidrevision": "Không tìm thấy bản dịch",
- "api-error-unknownmessage": "Không tìm thấy thông điệp",
- "api-error-fuzzymessage": "Bản dịch được đánh dấu là lỗi thời",
- "api-error-owntranslation": "Bạn không thể đánh dấu các bản dịch của chính bạn là đã duyệt.",
- "translate-messagereview-no-fuzzy": "Không thể đánh dấu các bản dịch lỗi thời là đã duyệt.",
- "translate-messagereview-no-own": "Bạn không thể đánh dấu các bản dịch của chính bạn là đã duyệt.",
- "translate-messagereview-doit": "Đánh dấu bản dịch này là đã duyệt.",
"log-name-translationreview": "Nhật trình duyệt bản dịch",
"log-description-translationreview": "Nhật trình các tác vụ duyệt bản dịch và nhóm thông điệp.",
"logentry-translationreview-message": "$1 {{GENDER:$2}}đã duyệt bản dịch $3",
@@ -291,16 +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ó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",
@@ -308,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ế, 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 ý",
@@ -363,9 +366,11 @@
"tux-editor-close-tooltip": "Đóng",
"tux-editor-expand-tooltip": "Mở rộng",
"tux-editor-collapse-tooltip": "Thu gọn",
+ "tux-editor-message-tools-show-editor": "Hiện trong trình chỉnh sửa của Wiki",
"tux-editor-message-tools-history": "Lịch sử",
"tux-editor-message-tools-delete": "Xóa",
"tux-editor-message-tools-translations": "Tất cả các bản dịch",
+ "tux-editor-message-tools-linktothis": "Liên kết đến thông điệp này",
"tux-editor-loading": "Đang tải…",
"translate-search-more-languages-info": "$1 ngôn ngữ khác",
"translate-statsbar-tooltip": "Đã biên dịch $1%, đã duyệt $2%",
@@ -374,5 +379,5 @@
"translate-ulsdep-title": "Lỗi cấu hình",
"translate-ulsdep-body": "Phần mở rộng Biên dịch cần [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector?uselang=vi phần mở rộng Lựa chọn Ngôn ngữ Toàn thể].",
"tux-session-expired": "Bạn không còn đăng nhập. Xin vui lòng đăng nhập trong thẻ riêng. Thay thế, hãy sao chép các bản dịch chưa lưu, đăng nhập, trở lại trang này, và nhập lại các bản dịch của bạn.",
- "tux-nojs": "Trang này cần JavaScript."
+ "tux-nojs": "Trang này cần JavaScript để hoạt động. JavaScript đang tắt hay bị hư hỏng, hoặc trình duyệt này không được hỗ trợ."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/vo.json b/www/wiki/extensions/Translate/i18n/core/vo.json
index 6849cabc..ee5c16a7 100644
--- a/www/wiki/extensions/Translate/i18n/core/vo.json
+++ b/www/wiki/extensions/Translate/i18n/core/vo.json
@@ -65,7 +65,6 @@
"translate-statsf-language": "Lised pükakotas me liunüls peteilölas:",
"translate-statsf-group": "Lised grupakotas me liunüls peteilölas:",
"translate-statsf-submit": "Büologed",
- "translate-tag-category": "Pads tradutovik",
"translate-tag-page-desc": "Tradutod vükapada: [[$2|$1]].",
"translate-sidebar-alltrans": "In püks votik",
"translations": "Tradutods valik",
diff --git a/www/wiki/extensions/Translate/i18n/core/wa.json b/www/wiki/extensions/Translate/i18n/core/wa.json
index e178287a..870e4008 100644
--- a/www/wiki/extensions/Translate/i18n/core/wa.json
+++ b/www/wiki/extensions/Translate/i18n/core/wa.json
@@ -6,11 +6,6 @@
},
"translate": "Ratourner",
"translate-desc": "[[Special:Translate|Padje sipeciåle]] po ratourner MediaWiki et ds ôtes",
- "translate-taskui-view": "Mostrer tos les messaedjes",
- "translate-taskui-untranslated": "Mostrer les messaedjes nén ratournés",
- "translate-taskui-optional": "Mostrer les messaedjes opcionels",
- "translate-taskui-acceptqueue": "Rén k' les messaedjes ki dj' pou acertiner",
- "translate-taskui-reviewall": "Verifyî tos les ratournaedjes",
"translate-taskui-export-to-file": "Riçure e cogne native",
"translate-taskui-export-as-po": "Riçure po on ratournaedje foû raloyaedje",
"translate-taction-translate": "Ratourner",
@@ -32,13 +27,13 @@
"translate-page-navigation-legend": "Naiviaedje",
"translate-page-showing": "Mostraedje des messaedje di $1 a $2 so $3.",
"translate-page-showing-all": "Håynaedje {{PLURAL:$1|d' on messaedje|di $1 messaedjes}}.",
+ "translate-page-showing-none": "Nou messaedje a håyner.",
"translate-next": "Pådje shuvante",
"translate-prev": "Pådje di dvant",
"translate-page-description-legend": "Infôrmåcions sol groupe",
"translate-page-description-hasoptional": "Ci groupe di messaedjes ci a des messaedjes di rawete.\nLes messaedjes di rawete sont-st opcionels et n' divèt esse ratournés k' si vosse lingaedje a mezåjhe di sacwès speciåles, come di n' nén eployî d' vudes inte les mots ou di scrire dins èn ôte sistinme les nos prôpes. $1",
"translate-page-description-hasoptional-open": "Mostrer les messaedjes opcionels.",
"translate-page-edit": "candjî",
- "translate-ext-url": "<hr />Waibe: $1",
"translate-optional": "(opcionel)",
"translate-ignored": "(ignoré)",
"translate-edit-title": "Candjî «$1»",
@@ -197,7 +192,6 @@
"translate-js-summary": "Rascourti:",
"translate-js-save": "Schaper",
"translate-js-next": "Schaper et drovi l' shuvant",
- "translate-js-nonext": "C' esteut l' dierin messaedje del pådje.",
"translate-js-skip": "Potchî å shuvant",
"translate-js-history": "Istwere do ratournaedje",
"translate-js-support": "Dimander åk",
@@ -213,19 +207,6 @@
"translate-searchprofile-tooltip": "Cweri dins tos les lingaedjes",
"translate-search-languagefilter": "Passete pa lingaedje:",
"translate-search-nofilter": "dins tos les lingaedjes",
- "translate-messagereview-submit": "Acertiner",
- "translate-messagereview-progress": "Acertinaedje...",
- "translate-messagereview-failure": "Acertinaedje... 'l a fwait berwete: $1",
- "translate-messagereview-done": "Acertiné",
- "translate-messagereview-reviews": "Acertiné pa {{PLURAL:$1|èn uzeu|$1 uzeus}}",
- "translate-messagereview-reviewswithyou": "Acertiné pa {{PLURAL:$1|èn uzeu|$1 uzeus}}, tot vs contant",
- "api-error-invalidrevision": "Ratournaedje nén trové",
- "api-error-unknownmessage": "Messaedje nén trové",
- "api-error-fuzzymessage": "Li ratournaedje est metou come «fuzzy»",
- "api-error-owntranslation": "Vos n' poloz nén acertiner vos prôpes ratournaedjes",
- "translate-messagereview-no-fuzzy": "Les ratournaedjes «fuzzy» n' polèt nén esse acertinés.",
- "translate-messagereview-no-own": "Vos n' poloz nén acertiner vos prôpes ratournaedjes.",
- "translate-messagereview-doit": "Acertiner ki l' ratournaedje est comifåt.",
"log-name-translationreview": "Djournå des verifiaedjes des ratournaedjes",
"log-description-translationreview": "Djournå di tos les verifiaedjes des ratournaedjes et groupes di messaedjes.",
"logentry-translationreview-message": "$1 {{GENDER:$2|a-st acertiné}} l' ratournaedje $3",
@@ -237,5 +218,7 @@
"translate-workflowgroup-label": "Estats d' ovrance",
"translate-workflowgroup-desc": "Ci groupe ci mostere l' estat d' ovrance des ratournaedjes.\nLes estats sont definis dins l' variåve d' apontiaedje $wgTranslateWorkflowStates.",
"translate-dynagroup-recent-label": "Dierins ratournaedjes",
- "translate-dynagroup-recent-desc": "Ci groupe ci mostere les ratournaedjes fwaits dierinnmint dins l' lingaedje.\nIl est eployî copurade po les bouyes di verifiaedje."
+ "translate-dynagroup-recent-desc": "Ci groupe ci mostere les ratournaedjes fwaits dierinnmint dins l' lingaedje.\nIl est eployî copurade po les bouyes di verifiaedje.",
+ "tux-edit": "Candjî",
+ "tux-proofread-edit-label": "Candjî"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/xal.json b/www/wiki/extensions/Translate/i18n/core/xal.json
index d12a3635..b4c81d7a 100644
--- a/www/wiki/extensions/Translate/i18n/core/xal.json
+++ b/www/wiki/extensions/Translate/i18n/core/xal.json
@@ -13,6 +13,7 @@
"translate-submit": "Асрх",
"translate-page-navigation-legend": "Орм медлһн",
"translate-page-showing": "$1 - $2 тойгта зәңгс ($3 ут туршдан) үзүлсн.",
+ "translate-page-showing-none": "Зәңгс үзүлх уга",
"translate-next": "дарук халх",
"translate-prev": "урдк халх",
"translate-page-description-legend": "Багин туск",
diff --git a/www/wiki/extensions/Translate/i18n/core/xh.json b/www/wiki/extensions/Translate/i18n/core/xh.json
new file mode 100644
index 00000000..967f8d51
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/xh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nomden"
+ ]
+ },
+ "translate-documentation-language": "imigaqo yokutolika"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/xsy.json b/www/wiki/extensions/Translate/i18n/core/xsy.json
new file mode 100644
index 00000000..8994a078
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/xsy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lalotahes"
+ ]
+ },
+ "translate-documentation-language": "kapakSekla’ kina:at"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/yi.json b/www/wiki/extensions/Translate/i18n/core/yi.json
index 816d1258..85f722a5 100644
--- a/www/wiki/extensions/Translate/i18n/core/yi.json
+++ b/www/wiki/extensions/Translate/i18n/core/yi.json
@@ -8,11 +8,6 @@
},
"translate": "פֿארטײַטשן",
"translate-desc": "[[Special:Translate|באזונדערער בלאט]] פֿאר פֿארטײַטשן מעדיעוויקי און ווײַטער",
- "translate-taskui-view": "ווײַזן אלע מעלדונגען",
- "translate-taskui-untranslated": "ווײַזן די נישט איבערגעזעצטע מעלדונגען",
- "translate-taskui-optional": "ווײַזן אפציאנאלע מעלדונגען.",
- "translate-taskui-acceptqueue": "נאר מעלדונגען וואס איך קען מארקירן רעצענזירט",
- "translate-taskui-reviewall": "איבערקוקן אלע איבערזעצונגען",
"translate-taskui-export-to-file": "עקספארטירן אין סיסטעם פֿארמאט",
"translate-taskui-export-as-po": "עקספארטירן פאר אפֿליין איבערזעצונג",
"translate-taction-translate": "פֿאַרטײַטשן",
@@ -34,13 +29,13 @@
"translate-page-navigation-legend": "נאוויגאציע",
"translate-page-showing": "ווײַזן מעלדונגען $1 ביז $2 פֿון $3.",
"translate-page-showing-all": "ווײַזן $1 {{PLURAL:$1|מעלדונג|מעלדונגען}}.",
+ "translate-page-showing-none": "נישטא קיין מעלדונגען צו ווײַזן.",
"translate-next": "קומענדיגער בלאט",
"translate-prev": "פֿריערדיגער בלאט",
"translate-page-description-legend": "אינפֿארמאציע וועגן דער גרופע",
"translate-page-description-hasoptional": "די מעלדונג גרופע אנטהאלט אפציאנאלע מעלדונגען.\nאפציאנאלע מעלדונגען זאל מען נאר איבערזעצן ווען אייער שפראך האט באזונדערע באדארפונגען\nווי למשל נישט ניצן שפייצן אדער טראנסקריפציע פון פרט־נעמען. $1",
"translate-page-description-hasoptional-open": "ווײַזן אפציאנאלע מעלדונגען.",
"translate-page-edit": "רעדאַקטירן",
- "translate-ext-url": "<hr />וועבזײַטל: $1",
"translate-optional": "(ברירהדיק)",
"translate-ignored": "(איגנאָרירט)",
"translate-edit-title": "רעדאַקטירן\"$1\"",
@@ -56,6 +51,10 @@
"translate-use-suggestion": "פֿארבייטן לויפֿיקע איבערזעצונג מיט דעם פֿארשלאג.",
"translate-edit-nopermission": "איר דארפֿט איבערזעץ־רעכטן איבערצוזעצן מעלדונגען.",
"translate-edit-askpermission": "באקומען רשות",
+ "exporttranslations": "עקספארטירן איבערזעצונגען",
+ "translate-export-form-format": "פֿאָרמאַט",
+ "translate-export-invalid-format": "זייט אזוי גוט און ספעציפֿירט א גילטיקן פֿארמאט.",
+ "translate-export-not-supported": "איבערזעצונג עקספארט נישט געשטיצט.",
"translate-magic-pagename": "פֿאַרברײטערטע מעדיעוויקי איבערזעצונג",
"translate-magic-help": "איר קענט איבערזעצן אליאסן פאר באזונדערע בלעטער, מאגישע ווערטער און נאמענטייל נעמען.\n\nבאזונדערע בלעטער אליאסן און מאגישע ווערטער קענען האבן עטלעכע איבערזעצונגען.\nמעט צעטיילט די איבערזעצונגען מיט א קאמע (,).\nנאמענטיילן קענען האבן נאר איין איבערזעצונג.\n\nאיבערזעצן דעם פראיעקט רעדן נאמענטייל <code dir=\"ltr\">$1 talk</code> קען זיין קאמפליצירט.\n<code>$1</code> ווערט פארביטן מיטן נאמען פונעם וועבזײַטל, למשל (<code>{{ns:project_talk}}</code>).\nטאמער אין אײַער שפראך איז נישט מעגלעך צו שאפֿן א קארעקטן אויסדרוק אן צו ענדערן דעם וועבזײַטל־נאמען, זײַט מודיע אונז בײַ [[Support]].\n\nאיר דארפט זײַן אן איבערזעצער כדי אויפהיטן ענדערונגען.\nדי ענדערונגען ווערן נישט אויפגעהיטן ביז איר דרוקט דאס אויפֿהיטן קנעפל אונטן.",
"translate-magic-module": "מאדול:",
@@ -82,6 +81,7 @@
"translate-checks-links-missing": "{{PLURAL:$2|דער פֿאלגנדער לינק פֿעלט|די פֿאלגנדע $2 לינקס פֿעלן}}:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-xhtml": "ביטע פֿארבײַטן די פֿאלגנדע {{PLURAL:$2|טאג|טאגן}} מיט געהעריקע:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-plural": "דעפֿיניציע ניצט <nowiki>{{PLURAL:}}</nowiki>, די איבערזעצונג אבער נישט.",
+ "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",
@@ -99,7 +99,12 @@
"right-translate-import": "אימפארטירן אפֿליין איבערזעצונגען",
"action-translate-import": "אימפארטירן אפֿליין איבערזעצונגען",
"right-translate-messagereview": "איבערקוקן איבערזעצונגען",
+ "action-translate-messagereview": "רעצענזירן איבערזעצונגען",
"right-translate-groupreview": "ענדערן ארבעטשטראם סטאטוס פון מעלדונג גרופעס",
+ "translate-rcfilters-translations": "איבערזעצונגען",
+ "translate-rcfilters-translations-only-label": "איבערזעצונגען",
+ "translate-rcfilters-translations-only-desc": "ענדערונגען צו איבערגעזעצטע בלעטער.",
+ "translate-rcfilters-translations-filter-label": "נישט איבערזעצונגען",
"translate-rc-translation-filter": "פֿילטערן איבערזעצונגען:",
"translate-rc-translation-filter-no": "גאָרנישט",
"translate-rc-translation-filter-only": "ווײַזן נאר איבערזעצונגען",
@@ -171,7 +176,7 @@
"translate-mgs-noempty": "נישט ווײַזן שפראכן וואס האבן נאכנישט קיין איבערזעצונגען",
"translate-mgs-submit": "ווײַזן סטאטיסטיק",
"translate-mgs-column-language": "שפראַך",
- "translate-mgs-totals": "אלע שפראכן צוזאמען",
+ "translate-mgs-totals": "{{PLURAL:$1|איין שפראך|אלע $1 שפראכן צוזאמען}}",
"translate-mgs-invalid-group": "די ספעציפֿירטע גרופע $1 איז נישט פֿאראן.",
"translate-mgs-nothing": "נישט פאראן וואס צו ווײַזן פאר די פארלאנגטע סטאטיסטיק.",
"supportedlanguages": "געשטיצטע שפראַכן",
@@ -181,6 +186,7 @@
"supportedlanguages-recenttranslations": "לעצטיקע איבערזעצונגען",
"supportedlanguages-count": "$1 {{PLURAL:$1|שפראך|שפראכן}} אינגאנצן.",
"supportedlanguages-activity": "$1 : $2 {{PLURAL:$2| רעדאַגירונג | רעדאַגירונגען}} - לעצטע רעדאַגירונג $3 {{PLURAL:$3| טאָג | טעג}} צוריק",
+ "abusefilter-edit-builder-vars-translate-source-text": "קוואלטעקסט פון איבערזעצונג איינהייט",
"translate-save": "אויפֿהיטן ($1)",
"translate-jssti-add": "צולייגן צו ליסטע",
"managemessagegroups": "מעלדונג גרופּע אַדמיניסטראַציע",
@@ -211,9 +217,7 @@
"translate-js-summary": "רעזומע:",
"translate-js-save": "אויפֿהיטן",
"translate-js-next": "אײַנשפייכלערן און עפֿענען נעקסטע",
- "translate-js-nonext": "דאָס איז געווען די לעצטע מעלדונג אויף דעם בלאַט.",
"translate-js-skip": "ווײַטער צום נעקסטן",
- "translate-js-save-failed": "אײַנשפײַכלערן דורכגעפֿאַלן. ביטע גיט א באריכט וועגן דעם גרײַז.",
"translate-js-history": "איבערזעצונג געשיכטע",
"translate-js-support": "פֿרעגן א שאלה",
"translate-js-support-title": "בעטן הילף אויב עס איז ניט פֿאראן גענוג אינפֿאָרמאַציע איבערצוזעצן די מעלדונג געהעריק.",
@@ -232,24 +236,13 @@
"translate-searchprofile-tooltip": "זוכן אין אלע איבערזעצונגען",
"translate-search-languagefilter": "פֿילטערן לויט שפראך:",
"translate-search-nofilter": "קיין פֿילטערן",
- "translate-messagereview-submit": "מארקירן רעצענזירט",
- "translate-messagereview-progress": "מארקירן רעצענזירט …",
- "translate-messagereview-failure": "מארקירן רעצענזירט דורכגעפאלן: $1",
- "translate-messagereview-done": "רעצענזירט",
- "translate-messagereview-reviews": "איבערגעקוקט דורך {{PLURAL:$1|איין באניצער|$1 באניצער}}",
- "translate-messagereview-reviewswithyou": "איבערגעקוקט דורך {{PLURAL:$1|אײַך|$1 באניצער כולל אײַך}}",
- "api-error-invalidrevision": "איבערזעצונג נישט געטראפן",
- "api-error-unknownmessage": "מעלדונג נישט געטראפן",
- "api-error-fuzzymessage": "איבערזעצונג מארקירט פארעלטערט",
- "api-error-owntranslation": "איר קען נישט מארקירן אײַערע אייגענע איבערזעצונגען ווי רעצענזירט",
- "translate-messagereview-no-own": "איר קען נישט מארקירן אײַערע אייגענע איבערזעצונגען ווי רעצענזירט.",
- "translate-messagereview-doit": "מארקירן די איבערזעצונג ווי רעצענזירט.",
"log-name-translationreview": "איבערזעצונג רעצענזיע לאגבוך",
"logentry-translationreview-message": "$1 {{GENDER:$2|האט רעצענזירט}} איבערזעצונג $3",
"logentry-translationreview-group": "$1 {{GENDER:$2|האט געענדערט}} דעם סטאטוס פון $4 איבערזעצונגען פון $3 פון $6 צו $7",
"group-translate-sandboxed": "אומבאשטעטיקטע איבערזעצער",
"group-translate-sandboxed-member": "{{GENDER:$1|אומבאשטעטיקטער איבערזעצער| אומבאשטעטיקטע איבערזעצערין}}",
"right-translate-sandboxmanage": "פארוואלטן זאמדקאסטן באניצער",
+ "action-translate-sandboxmanage": "פֿארוואלטן זאמדקאסטן באניצער",
"translate-workflow-state-": "(נישט געשטעלט)",
"translate-workflowstatus": "סטאַטוס: $1",
"translate-workflow-set-doing": "אײַנשטעלן…",
@@ -261,7 +254,6 @@
"translate-dynagroup-recent-desc": "די דאָזיקע מעלדונג גרופע ווײַזט אַלע לעצטיקע איבערזעצונגען צו דער דאָזיקער שפראַך.\nניצלעכסטן פֿאר די רעצענזירן אויפֿגאַבעס.",
"translate-dynagroup-additions-label": "לעצטיגע הוספות",
"translate-dynagroup-additions-desc": "די מעלדונג גרופע ווײַזט נײַע און געענדערטע מעלדונגען.",
- "translate-gethelp": "הילף",
"translate-msggroupselector-projects": "מעלדונג גרופע",
"translate-msggroupselector-search-placeholder": "זוכן גרופעס",
"translate-msggroupselector-search-all": "אַלע",
@@ -280,14 +272,17 @@
"tux-status-translated": "איבערגעזעצט",
"tux-status-saving": "אויפהיטנדיק…",
"tux-status-unsaved": "נישט אויפגעהיטן",
+ "tux-save-unknown-error": "אַן אומבאַקאַנט טעות איז פֿארגעקומען.",
"tux-editor-placeholder": "אײַער איבערזעצונג",
+ "tux-editor-editsummary-placeholder": "אפציאנאלע רעזומע",
"tux-editor-paste-original-button-label": "ארײַנקלעבן מקור טעקסט",
"tux-editor-discard-changes-button-label": "אוועקווארפן ענדערונגען",
"tux-editor-save-button-label": "אויפֿהיטן איבערזעצונג",
"tux-editor-skip-button-label": "ווײַטער צום נעקסטן",
"tux-editor-cancel-button-label": "אַנולירן",
"tux-editor-confirm-button-label": "באשטעטיקן איבערזעצונג",
- "tux-editor-shortcut-info": "דרוקט \"$1\" אויפצוהיטן אדער \"$2\" איבערצוהיפן צו דער נעקסטער מעלדונג אדער \"$3\" פאר אנדערע דורכוועגן.",
+ "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": "הצעות",
@@ -342,13 +337,16 @@
"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": "אויסמעקן",
"tux-editor-message-tools-translations": "אַלע איבערזעצונגען",
+ "tux-editor-message-tools-linktothis": "לינקען צו דער דאזיגער מעלדונג",
"tux-editor-loading": "לאָדט…",
"translate-search-more-languages-info": "נאך {{PLURAL:$1|איין שפראך|$1 שפראכן}}",
"translate-statsbar-tooltip": "$1% איבערגעזעצט, $2% איבערגעקוקט",
"translate-statsbar-tooltip-with-fuzzy": "$1% איבערגעזעצט, $2% איבערגעקוקט, $3% פֿארעלטערט",
"translate-search-more-groups-info": "נאך {{PLURAL:$1|גרופע|גרופעס}}: $1",
- "translate-ulsdep-title": "קאנפיגוראציע גרײַז"
+ "translate-ulsdep-title": "קאנפיגוראציע גרײַז",
+ "tux-nojs": "דער דאזיקער געצייג ארבעט נישט אן JavaScript .JavaScript איז אומאקטיווירט, אדער ארבעט נישט, אדער דער דאזיקער בלעטערער איז נישט געשטיצט."
}
diff --git a/www/wiki/extensions/Translate/i18n/core/yo.json b/www/wiki/extensions/Translate/i18n/core/yo.json
new file mode 100644
index 00000000..4ada6f2f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/yo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wikicology"
+ ]
+ },
+ "translate-documentation-language": "Àkọsílẹ̀ ìfiránṣẹ́"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/yue.json b/www/wiki/extensions/Translate/i18n/core/yue.json
index c9c6cc67..66b2af06 100644
--- a/www/wiki/extensions/Translate/i18n/core/yue.json
+++ b/www/wiki/extensions/Translate/i18n/core/yue.json
@@ -2,11 +2,18 @@
"@metadata": {
"authors": [
"Shinjiman",
- "Yueman"
+ "Yueman",
+ "Ktchankt",
+ "Obonggi",
+ "Hello903hello"
]
},
"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": "設定",
@@ -22,15 +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-committed": "而家響軟件嘅翻譯",
+ "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": "擷取",
@@ -45,10 +59,29 @@
"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>",
"translate-checks-plural": "用 <nowiki>{{PLURAL:}}</nowiki> 嘅解解釋但係翻譯無用到。",
- "translate-documentation-language": "訊息說明文檔"
+ "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/www/wiki/extensions/Translate/i18n/core/zgh.json b/www/wiki/extensions/Translate/i18n/core/zgh.json
new file mode 100644
index 00000000..c36f91e4
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/core/zgh.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amara-Amaziɣ",
+ "Mdb897"
+ ]
+ },
+ "translate": "ⵙⵙⵓⵖⵍ",
+ "translate-desc": "[[Special:Translate|ⵜⴰⵙⵏⴰ ⵉⵥⵍⵉⵏ]] ⵃⵎⴰ ⴰⵙⵓⵖⵍ ⵏ ⵎⵉⴷⵢⴰⵡⵉⴽⵉ ⴷ ⵓⴳⴳⴰⵔ",
+ "translate-fuzzybot-desc": "ⵡⴰⴷ ⵉⴳⴰ ⴰⵏⴳⵔⴰⵡ ⵉⵣⵍⵉⵏ ⵉⵜⵜⵡⴰⵙⵙⵎⵔⵙ ⴳ ⵎⵉⴷⵢⴰⵡⵉⴽⵉ [https://www.mediawiki.org/wiki/Extension:Translate Translate extension] ⵉⵜⵜⵡⴰⵙⵎⵔⵙ ⵃⵎⴰ ⴰⵏⵀⵍⵍⴰ ⵏ ⵜⵙⵓⵖⴰⵍ.\nⴰⵎⵉⴹⴰⵏ ⴰⴷ ⵉⴳⴰ ⵙⴳ ⵓⵖⴰⵡⴰⵙ ⵏ ⵎⵉⴷⵢⴰⵡⵉⴽⵉ ⴷ ⵓⵔ ⵉⴳⵉ ⵡⵉⵏ ⵃⵜⵜⴰ ⴽⵔⴰ ⵏ ⵓⵏⵙⵙⵎⵔⵙ.",
+ "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-page-language": "ⵜⵓⵜⵍⴰⵢⵜ",
+ "translate-page-limit": "ⴰⵡⵜⵜⵓ",
+ "translate-pref-nonewsletter": "ⴰⴷ ⵢⵢⵉ ⵏ ⵓⵔ ⵜⵚⵚⵉⴼⵉⴹⴷ ⵜⵉⵎⵢⴰⵣⴰⵏⵉⵏ ⵏ ⵉⵏⵖⵎⵉⵙⵏ",
+ "right-translate": "ⵙⵏⴼⵍ ⵙ ⵓⵏⴳⵔⵓⴷⵎ ⵏ ⵓⵙⵓⵖⵍ",
+ "translate-statsf-count-registrations": "ⵉⵏⵙⵙⵎⵔⵙⵏ ⵉⵎⴰⵢⵏⵓⵜⵏ",
+ "translate-manage-import-new": "ⵜⵓⵣⵉⵏⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ $1",
+ "translate-manage-import-summary": "ⴰⵙⴽⵛⵎ ⵏ ⵜⵓⵏⵖⵉⵍⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ ⵙⴳ ⵓⵙⴰⴳⵎ ⴰⴱⵔⵔⴰⵏⵉ",
+ "translate-js-support-title": "ⵜⵜⵔ ⵜⵉⵡⵉⵙⵉ ⵉⵖ ⵓⵔ ⵜⵓⴼⵉⵜ ⵉⵏⵖⵎⵉⵙⵏ ⵢⵓⴷⴰⵏ ⵃⵎⴰ ⴰⵙⵓⵖⵍ ⵉⵎⵉⴷⵉ ⵏ ⵜⵓⵣⵉⵏⵜ ⴰⴷ.",
+ "translate-documentation-language": "ⴰⵏⵜⴰⵎ ⵏ ⵜⵓⵣⵉⵏⵜ",
+ "translate-dynagroup-additions-desc": "ⵜⴰⴳⵔⴰⵡⵜ ⴰⴷ ⴰⵔ ⵜⵙⵎⴰⵍ ⵜⵉⵎⵢⴰⵣⴰⵏⵉⵏ ⵜⵉⵎⴰⵢⵏⵓⵜⵉⵏ ⴷ ⵜⵉⴷ ⵉⵜⵜⵡⴰⵙⵏⴼⵍⵏ",
+ "tux-languageselector": "ⵙⵙⵓⵖⵍ ⵙ",
+ "tux-empty-list-translated-action": "ⵙⵙⵓⵖⵍ",
+ "tux-empty-you-can-help-providing": "ⵜⵣⵎⵔⴷ ⴰⴷ ⵜⴰⵡⵙⴷ ⴳ ⵓⵎⵔⵏⵉⵡ ⵏ ⵜⵙⵓⵖⴰⵍ ⵜⵉⵎⴰⵢⵏⵓⵜⵉⵏ"
+}
diff --git a/www/wiki/extensions/Translate/i18n/core/zh-hans.json b/www/wiki/extensions/Translate/i18n/core/zh-hans.json
index 980f9114..947677a2 100644
--- a/www/wiki/extensions/Translate/i18n/core/zh-hans.json
+++ b/www/wiki/extensions/Translate/i18n/core/zh-hans.json
@@ -29,16 +29,16 @@
"Hudafu",
"Fengchao",
"Duolaimi",
- "LNDDYL"
+ "LNDDYL",
+ "Wmr",
+ "A Chinese Wikipedian",
+ "Zazzzz"
]
},
"translate": "翻译",
+ "translate-extensionname": "翻译",
"translate-desc": "用于翻译MediaWiki和其他软件界面信息的[[Special:Translate|特殊页面]]",
- "translate-taskui-view": "显示所有信息",
- "translate-taskui-untranslated": "显示未翻译的信息",
- "translate-taskui-optional": "显示可选信息",
- "translate-taskui-acceptqueue": "仅显示我可以标记为已复核的消息",
- "translate-taskui-reviewall": "复核所有译文",
+ "translate-fuzzybot-desc": "这是由MediaWiki[https://www.mediawiki.org/wiki/Extension:Translate 翻译扩展]使用的特殊系统账户,用于维护翻译。此账户是MediaWiki软件的一部分,不由任何用户所拥有。",
"translate-taskui-export-to-file": "以原始格式导出",
"translate-taskui-export-as-po": "导出离线翻译文件",
"translate-taction-translate": "翻译",
@@ -50,10 +50,9 @@
"translate-page-no-such-language": "指定语言无效。",
"translate-page-no-such-group": "指定信息组无效。",
"translate-page-disabled": "本信息组该语言的翻译已经停用。原因:\n\n<em>$1</em>",
- "translate-page-disabled-source": "$1是该页面的源语言。",
"translate-language-disabled": "至该语言的翻译已停用。",
"translate-page-settings-legend": "设置",
- "translate-page-group": "信息组",
+ "translate-page-group": "组",
"translate-page-language": "语言",
"translate-page-limit": "限制",
"translate-page-limit-option": "每页$1个信息",
@@ -61,28 +60,33 @@
"translate-page-navigation-legend": "导航",
"translate-page-showing": "显示第$1条至第$2条信息,共$3个信息。",
"translate-page-showing-all": "显示$1条信息。",
+ "translate-page-showing-none": "没有可以显示的信息。",
"translate-next": "下一页",
"translate-prev": "上一页",
"translate-page-description-legend": "关于本信息组的信息",
"translate-page-description-hasoptional": "本信息组包含可选信息。可选信息应该只在您的语言有特殊需要,如不使用空格或音译合适名称时才被翻译。$1",
"translate-page-description-hasoptional-open": "显示可选信息。",
"translate-page-edit": "编辑",
- "translate-ext-url": "<hr />网站:$1",
"translate-optional": "(可选)",
"translate-ignored": "(已忽略)",
"translate-edit-title": "编辑“$1”",
"translate-edit-definition": "信息定义",
"translate-edit-translation": "翻译",
"translate-edit-contribute": "贡献",
- "translate-edit-no-information": "<em>这条消息没有文档。\n如果您知道这条消息用于何处或如何使用,您可以通过添加文档至这条消息以帮助其他译者。</em>",
+ "translate-edit-no-information": "<em>这条消息没有文档。如果您知道这条消息用于何处或如何使用,您可以通过添加文档至这条消息以帮助其他译者。</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-nopermission": "您需要有翻译权限才能翻译信息。",
"translate-edit-askpermission": "获取权限",
+ "exporttranslations": "导出翻译",
+ "translate-export-form-format": "格式",
+ "translate-export-invalid-format": "请指定一个有效格式。",
+ "translate-export-not-supported": "翻译导出不被支持。",
+ "translate-export-format-notsupported": "指定的导出格式不被消息组支持。",
"translate-magic-pagename": "扩展MediaWiki翻译",
"translate-magic-help": "您可以翻译特殊页面别名、魔术字和名字空间名称。\n\n特殊页面别名和魔术字可以有多个翻译。多个翻译请用半角逗号(,)分隔。名字空间只能有一个翻译。\n\n翻译项目讨论名字空间<code>$1 talk</code>可能有些复杂。<code>$1</code>会被替换为项目名称(例如<code>{{ns:project_talk}}</code>)。如果不更改网站名称时不能用你的语言形成有效的表达,请在[[Support]]联系我们。\n\n您需要成为译者以保存更改。在点击下面的保存按钮之前,更改不会被保存。",
"translate-magic-module": "模块:",
@@ -99,7 +103,7 @@
"translate-magic-special": "特殊页面别名",
"translate-magic-words": "魔术字",
"translate-magic-namespace": "名字空间名称",
- "translate-magic-notsaved": "你的编辑还没有保存!",
+ "translate-magic-notsaved": "您的编辑还没有保存!",
"translate-magic-errors": "请修正翻译中的以下$1处错误:",
"translate-magic-saved": "您的更改已保存。",
"translate-checks-parameters": "以下$2个参数未使用:<strong><nowiki>$1</nowiki></strong>",
@@ -128,7 +132,16 @@
"right-translate-import": "导入线下翻译",
"action-translate-import": "导入线下翻译",
"right-translate-messagereview": "复核翻译",
+ "action-translate-messagereview": "复核翻译",
"right-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": "MediaWiki名字空间中的网站消息自定义。",
"translate-rc-translation-filter": "过滤翻译:",
"translate-rc-translation-filter-no": "不过滤",
"translate-rc-translation-filter-only": "仅显示翻译",
@@ -167,7 +180,7 @@
"translate-translations-no-message": "“$1”不是可翻译信息",
"translate-translations-none": "没有“$1”的翻译",
"translate-translations-count": "找到$1个翻译。",
- "translate-translations-fieldset-title": "信息",
+ "translate-translations-fieldset-title": "消息",
"translate-translations-messagename": "名称:",
"translate-translations-project": "项目:",
"translate-translations-including-no-param": "请在子页面参数指定有效的信息关键词",
@@ -187,10 +200,11 @@
"translate-suppress-complete": "隐藏完全翻译的信息组",
"translate-ls-noempty": "隐藏完全未翻译的信息组",
"translate-language": "语言",
- "translate-total": "信息数",
+ "translate-total": "消息数",
"translate-untranslated": "未翻译数",
"translate-percentage-complete": "完成度",
"translate-percentage-fuzzy": "已过时",
+ "translate-percentage-proofread": "已巡查",
"translate-languagestats-overall": "所有信息组总计",
"translate-ls-submit": "显示统计",
"translate-ls-column-group": "信息组",
@@ -201,20 +215,22 @@
"translate-mgs-noempty": "不显示没有任何翻译的语言",
"translate-mgs-submit": "显示统计",
"translate-mgs-column-language": "语言",
- "translate-mgs-totals": "所有语言总计",
+ "translate-mgs-totals": "所有$1种{{PLURAL:$1|语言}}总计",
"translate-mgs-invalid-group": "指定的组$1不存在。",
"translate-mgs-nothing": "请求的统计没有内容显示。",
"supportedlanguages": "支持的语言",
"supportedlanguages-summary": "本页面显示{{SITENAME}}支持的所有语言的列表以及工作于每种语言的译者的名称。译者的名称越大,其编辑越多。下划线的颜色表明译者最后活跃距现在的时间。",
"supportedlanguages-colorlegend": "颜色说明:最后翻译于$1天前。",
+ "supportedlanguages-sqlite-error": "SQLite不受支持",
"supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|译者}}}}:$1",
"supportedlanguages-recenttranslations": "最近翻译",
"supportedlanguages-count": "共计$1种语言。",
"supportedlanguages-activity": "$1:$2个编辑 - 最后编辑于$3天前",
+ "abusefilter-edit-builder-vars-translate-source-text": "翻译单元的原始文本",
"translate-save": "保存($1)",
"translate-jssti-add": "添加至列表",
"managemessagegroups": "信息组管理",
- "translate-smg-notallowed": "你不能执行该操作。",
+ "translate-smg-notallowed": "您不被允许执行该操作。",
"translate-smg-nochanges": "没有要处理的更改。",
"translate-smg-submit": "提交要处理的更改",
"translate-smg-submitted": "信息定义已经更新。更改正在后台处理。",
@@ -235,7 +251,7 @@
"translate-manage-import-summary": "导入新版本自外部来源",
"translate-manage-conflict-summary": "导入新版本自外部来源。请检查。",
"translate-manage-submit": "执行",
- "translate-manage-intro-other": "下面是$1翻译更改列表。请复查更改并选择你想要为每个更新执行的操作。如果你选择忽略更改,该操作只是暂时的。",
+ "translate-manage-intro-other": "下面是$1翻译更改列表。请复查更改并选择您想要为每个更新执行的操作。如果您选择忽略更改,该操作只是暂时的。",
"translate-manage-import-ok": "已导入:$1",
"translate-manage-import-done": "导入完成!",
"importtranslations": "导入翻译",
@@ -247,17 +263,15 @@
"translate-import-err-no-such-file": "文件<nowiki>$1</nowiki>不存在或未被本地上传。",
"translate-import-err-stale-group": "该文件属于的信息组不存在。",
"translate-import-err-no-headers": "文件不是翻译扩展程序所需格式的Gettext文件:无法从文件头确定信息组和语言。",
- "translate-import-err-warnings": "该文件格式不正确。请确保你的编辑器不会删除msgctxt字段。详细信息:$1",
+ "translate-import-err-warnings": "该文件格式不正确。请确保您的编辑器不会移除msgctxt字段。详细信息:$1",
"translate-js-summary": "摘要:",
"translate-js-save": "保存",
"translate-js-next": "保存并打开下一条",
- "translate-js-nonext": "这是本页的最后信息。",
"translate-js-skip": "跳至下一条",
- "translate-js-save-failed": "保存失败。请报告该错误。",
"translate-js-history": "翻译历史",
"translate-js-support": "提问",
"translate-js-support-title": "如果没有足够的资料帮助正确翻译该信息,请要求帮助。",
- "translate-js-support-unsaved-warning": "你有未保存的翻译。",
+ "translate-js-support-unsaved-warning": "您有未保存的翻译。",
"translate-gs-pos": "位置",
"translate-gs-code": "代码",
"translate-gs-continent": "洲",
@@ -270,21 +284,9 @@
"translate-documentation-language": "消息文档",
"translate-searchprofile": "翻译",
"translate-searchprofile-tooltip": "搜索所有译文",
+ "translate-searchprofile-note": "更多搜索选项可通过[$1 翻译搜索]找到。",
"translate-search-languagefilter": "按语言过滤:",
"translate-search-nofilter": "无过滤",
- "translate-messagereview-submit": "标记为已复核",
- "translate-messagereview-progress": "正在标记为已复核...",
- "translate-messagereview-failure": "标记为已复核失败:$1",
- "translate-messagereview-done": "已复核",
- "translate-messagereview-reviews": "已被{{PLURAL:$1|$1个用户}}复核",
- "translate-messagereview-reviewswithyou": "已被{{PLURAL:$1|您|$1个用户(包括您)}}复核",
- "api-error-invalidrevision": "翻译未找到",
- "api-error-unknownmessage": "信息未找到",
- "api-error-fuzzymessage": "翻译被标记为模糊翻译",
- "api-error-owntranslation": "你不能标记自己的翻译为已复核",
- "translate-messagereview-no-fuzzy": "模糊翻译不能标记为已复核。",
- "translate-messagereview-no-own": "你不能标记自己的翻译为已复核。",
- "translate-messagereview-doit": "标记该翻译为已复核。",
"log-name-translationreview": "翻译复核日志",
"log-description-translationreview": "所有对翻译和信息组的复核的日志。",
"logentry-translationreview-message": "$1{{GENDER:$2|复核}}翻译$3",
@@ -324,7 +326,9 @@
"tux-status-translated": "已翻译",
"tux-status-saving": "正在保存...",
"tux-status-unsaved": "未保存",
+ "tux-save-unknown-error": "发生未知错误。",
"tux-editor-placeholder": "您的翻译",
+ "tux-editor-editsummary-placeholder": "可选摘要",
"tux-editor-paste-original-button-label": "粘贴源文本",
"tux-editor-discard-changes-button-label": "放弃更改",
"tux-editor-save-button-label": "保存翻译",
@@ -332,7 +336,7 @@
"tux-editor-cancel-button-label": "取消",
"tux-editor-confirm-button-label": "确认翻译",
"tux-editor-proofread-button-label": "标记为已复核",
- "tux-editor-shortcut-info": "按“$1”保存,“$2”跳至下一条信息,按住“$3”使用其他快捷方式。",
+ "tux-editor-shortcut-info": "按“$1”保存,“$2”跳至下一条消息,“$4”提供摘要,或“$3”使用其他快捷方式。",
"tux-editor-edit-desc": "编辑文档",
"tux-editor-add-desc": "添加文档",
"tux-editor-suggestions-title": "建议",
@@ -365,12 +369,12 @@
"tux-message-filter-result": "找到“$2”的$1个结果",
"tux-message-filter-advanced-button": "高级搜索",
"tux-message-filter-optional-messages-label": "可选信息",
- "tux-proofread-translated-by-self": "你的翻译",
+ "tux-proofread-translated-by-self": "您的翻译",
"tux-empty-list-all": "本信息组为空",
"tux-empty-list-all-guide": "请选择其他信息组翻译",
"tux-translate-page-no-such-group": "<strong>指定的信息组不存在。</strong>请选择其他信息组。",
"tux-empty-list-translated": "没有已翻译信息",
- "tux-empty-list-translated-guide": "你可以帮助翻译",
+ "tux-empty-list-translated-guide": "您可以帮助翻译",
"tux-empty-list-translated-action": "翻译",
"tux-empty-no-messages-to-display": "没有要显示的信息。",
"tux-empty-there-are-optional": "有可选择信息未显示在列表中",
@@ -387,9 +391,11 @@
"tux-editor-close-tooltip": "关闭",
"tux-editor-expand-tooltip": "展开",
"tux-editor-collapse-tooltip": "折叠",
+ "tux-editor-message-tools-show-editor": "在wiki编辑器中显示",
"tux-editor-message-tools-history": "历史",
"tux-editor-message-tools-delete": "删除",
"tux-editor-message-tools-translations": "所有翻译",
+ "tux-editor-message-tools-linktothis": "链至此消息的链接",
"tux-editor-loading": "正在载入...",
"translate-search-more-languages-info": "还有$1种{{PLURAL:$1|语言}}",
"translate-statsbar-tooltip": "$1%已翻译,$2%已复核",
@@ -398,5 +404,5 @@
"translate-ulsdep-title": "配置错误",
"translate-ulsdep-body": "翻译扩展依赖[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector 通用语言选择器扩展]。",
"tux-session-expired": "您不再保持登录状态。请在单独的选项卡登录。或者制作未保存翻译的副本、登录、返回此页面并再次输入您的翻译。",
- "tux-nojs": "此页面需要JavaScript。"
+ "tux-nojs": "此页面在没有JavaScript的情况下不能工作。JavaScript已禁用、无法工作或该浏览器不支持JavaScript。"
}
diff --git a/www/wiki/extensions/Translate/i18n/core/zh-hant.json b/www/wiki/extensions/Translate/i18n/core/zh-hant.json
index c4751202..c43bf7e1 100644
--- a/www/wiki/extensions/Translate/i18n/core/zh-hant.json
+++ b/www/wiki/extensions/Translate/i18n/core/zh-hant.json
@@ -17,20 +17,19 @@
"Wrightbus",
"Liuxinyu970226",
"LNDDYL",
- "EagerLin"
+ "EagerLin",
+ "Wehwei",
+ "Hello903hello",
+ "Kly"
]
},
"translate": "翻譯",
- "translate-desc": "用來翻譯 MediaWiki 以及其他專案訊息的 [[Special:Translate|特殊頁面]]",
- "translate-taskui-view": "顯示所有訊息",
- "translate-taskui-untranslated": "顯示未翻譯的訊息",
- "translate-taskui-optional": "顯示可選填訊息",
- "translate-taskui-acceptqueue": "只顯示我可以標記為已檢閱的訊息",
- "translate-taskui-reviewall": "檢閱所有翻譯",
+ "translate-desc": "用來翻譯 MediaWiki 以及其他專案訊息的[[Special:Translate|特殊頁面]]",
+ "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-proofread": "審查",
"translate-taction-lstats": "語言統計",
"translate-taction-mstats": "訊息群組統計",
"translate-taction-export": "匯出",
@@ -48,13 +47,13 @@
"translate-page-navigation-legend": "導覽",
"translate-page-showing": "顯示第 $1 至 $2 筆訊息,共 $3 筆。",
"translate-page-showing-all": "顯示 $1 筆訊息。",
+ "translate-page-showing-none": "沒有任何訊息。",
"translate-next": "下一頁",
"translate-prev": "上一頁",
"translate-page-description-legend": "關於該群組的資訊",
"translate-page-description-hasoptional": "此訊息群組含有可選填訊息。\n可選填訊息只在您的語言有特殊需求時才需要翻譯 (例如:文中不使用空格或要轉寫成合適的名稱等)。$1",
"translate-page-description-hasoptional-open": "顯示可選填訊息。",
"translate-page-edit": "編輯",
- "translate-ext-url": "<hr />網站:$1",
"translate-optional": "(選填)",
"translate-ignored": "(已略過)",
"translate-edit-title": "編輯 \"$1\"",
@@ -70,6 +69,11 @@
"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": "進階 MediaWiki 翻譯",
"translate-magic-help": "您可以使用本特殊頁面翻譯特殊頁面別名、魔術字及命名空間名稱。\n\n特殊頁面別名與保留字可以有多個翻譯。\n不同翻譯間請以逗號(,)隔開,\n命名空間只能有一種翻譯。\n\n翻譯專案討論的命名空間時 <code>$1 talk</code> 可能較複雜,\n<code>$1 talk</code> 會取代為專案的網站名稱 (如:<code>{{ns:project_talk}}</code>),\n如果不更改網站名稱無法有效的用您語言表達,請在 [[Support]] 通知我們。\n\n您需要成為翻譯人員才能儲存變更。\n變更在您尚未點選儲存按鈕之前不會儲存。",
"translate-magic-module": "模組:",
@@ -88,7 +92,7 @@
"translate-magic-namespace": "命名空間名稱",
"translate-magic-notsaved": "您的編輯尚未儲存!",
"translate-magic-errors": "請修復翻譯訊息中下列{{PLURAL:$1|錯誤}}:",
- "translate-magic-saved": "已經成功儲存你的更動。",
+ "translate-magic-saved": "已儲存您的變更。",
"translate-checks-parameters": "未使用以下 $2 個參數:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-parameters-unknown": "未定義以下 $2 個參數:\n<strong><nowiki>$1</nowiki></strong>",
"translate-checks-balance": "不完整的{{PLURAL:$2|括號|括號}}:\n<strong><nowiki>$1</nowiki></strong>",
@@ -110,22 +114,32 @@
"translate-pref-editassistlang-help": "以逗號分隔語言代碼。\n當您翻譯的時,會隨著顯示這些語言的訊息。\n預設會使用您的語言。",
"translate-pref-editassistlang-bad": "清單中的語言代碼無效:\n<nowiki>$1</nowiki>。",
"right-translate": "使用翻譯介面編輯",
+ "action-translate": "使用翻譯介面編輯",
"right-translate-manage": "管理訊息群組",
"action-translate-manage": "管理訊息群組",
"right-translate-import": "匯入離線翻譯",
"action-translate-import": "匯入離線翻譯",
- "right-translate-messagereview": "檢閱翻譯",
+ "right-translate-messagereview": "審查翻譯",
+ "action-translate-messagereview": "檢閱翻譯",
"right-translate-groupreview": "變更訊息群組的工作流程狀態",
- "translate-rc-translation-filter": "搜尋翻譯:",
+ "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": "在 MediaWiki 命名空間的自訂站台訊息。",
+ "translate-rc-translation-filter": "篩選翻譯:",
"translate-rc-translation-filter-no": "無",
"translate-rc-translation-filter-only": "只顯示翻譯",
- "translate-rc-translation-filter-filter": "不顯示翻譯",
+ "translate-rc-translation-filter-filter": "篩選掉翻譯",
"translate-rc-translation-filter-site": "只顯示有更動的網站訊息",
"translationstats": "翻譯統計",
"translate-stats-edits": "編輯",
"translate-stats-users": "翻譯人員",
"translate-stats-registrations": "註冊",
- "translate-stats-reviews": "檢閱",
+ "translate-stats-reviews": "審查",
"translate-stats-reviewers": "複審員",
"translate-statsf-intro": "您可以填寫此表格,以產生簡單的統計資料。\n所有值都有上限和下限。",
"translate-statsf-options": "圖表選項",
@@ -142,7 +156,7 @@
"translate-statsf-count-edits": "編輯次數",
"translate-statsf-count-users": "活躍的翻譯人員人數",
"translate-statsf-count-registrations": "新使用者人數",
- "translate-statsf-count-reviews": "翻譯複審次數",
+ "translate-statsf-count-reviews": "翻譯審查次數",
"translate-statsf-count-reviewers": "複審員人數",
"translate-statsf-language": "語言代碼 (以逗號分隔):",
"translate-statsf-group": "群組代碼 (以逗號分隔):",
@@ -158,7 +172,7 @@
"translate-translations-messagename": "訊息名稱:",
"translate-translations-project": "專案:",
"translate-translations-including-no-param": "請在子頁面參數指定一個有效的訊息關鍵字",
- "translate-translations-history-short": "記錄",
+ "translate-translations-history-short": "歷",
"languagestats": "語言統計",
"languagestats-summary": "此頁面顯示了所有訊息群組語言翻譯的統計資料。",
"messagegroupstats-summary": "此頁顯示訊息組統計。",
@@ -178,6 +192,7 @@
"translate-untranslated": "未翻譯",
"translate-percentage-complete": "完成度",
"translate-percentage-fuzzy": "已過時",
+ "translate-percentage-proofread": "已審查",
"translate-languagestats-overall": "所有訊息群組合計",
"translate-ls-submit": "顯示統計",
"translate-ls-column-group": "訊息群組",
@@ -188,16 +203,18 @@
"translate-mgs-noempty": "不顯示全部未翻譯的語言",
"translate-mgs-submit": "顯示統計",
"translate-mgs-column-language": "語言",
- "translate-mgs-totals": "所有語言合計",
+ "translate-mgs-totals": "所有$1種{{PLURAL:$1|語言}}合計",
"translate-mgs-invalid-group": "指定的群組 $1 不存在。",
"translate-mgs-nothing": "所請求的統計資訊沒有任何內容可以顯示。",
"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 語言",
"supportedlanguages-activity": "$1:$2 次編輯 - 最近一次編輯於 $3 天前",
+ "abusefilter-edit-builder-vars-translate-source-text": "翻譯單元的來源文字",
"translate-save": "儲存 ($1)",
"translate-jssti-add": "新增至清單",
"managemessagegroups": "訊息群組管理",
@@ -206,7 +223,7 @@
"translate-smg-submit": "送出要處理更動",
"translate-smg-submitted": "訊息原文已更新,正在背景執行變更處理。",
"translate-smg-more": "送出這些更動後,會有更多更動要處理。",
- "translate-smg-left": "Wiki 中訊息內容",
+ "translate-smg-left": "wiki 內的訊息內容",
"translate-smg-right": "發生的更動",
"translate-manage-import-diff": "訊息 $1 | 操作:$2",
"translate-manage-import-new": "新訊息 $1",
@@ -229,7 +246,7 @@
"translate-import-from-local": "上傳本地檔案:",
"translate-import-load": "讀取檔案",
"translate-import-err-dl-failed": "無法擷取檔案:\n$1",
- "translate-import-err-ul-failed": "檔案上傳不成功",
+ "translate-import-err-ul-failed": "檔案上傳失敗",
"translate-import-err-invalid-title": "無效的檔案名稱 <nowiki>$1</nowiki>。",
"translate-import-err-no-such-file": "檔案 <nowiki>$1</nowiki> 不存在或尚未上傳。",
"translate-import-err-stale-group": "此檔案所屬的訊息群組不存在。",
@@ -238,10 +255,8 @@
"translate-js-summary": "摘要:",
"translate-js-save": "儲存",
"translate-js-next": "儲存並開啟下一筆",
- "translate-js-nonext": "這是本頁面的最後一則訊息。",
"translate-js-skip": "跳至下一筆",
- "translate-js-save-failed": "儲存失敗,請報告此錯誤。",
- "translate-js-history": "翻譯歷史記錄",
+ "translate-js-history": "翻譯歷史",
"translate-js-support": "提出問題",
"translate-js-support-title": "若此處沒有足夠的資訊讓您可以正確的翻譯此訊息,請提出問題。",
"translate-js-support-unsaved-warning": "您有尚未儲存的翻譯。",
@@ -257,24 +272,12 @@
"translate-documentation-language": "訊息說明文件",
"translate-searchprofile": "翻譯",
"translate-searchprofile-tooltip": "搜尋所有翻譯",
- "translate-search-languagefilter": "依語言搜尋:",
+ "translate-searchprofile-note": "[$1 翻譯搜尋] 中有更多可用的搜尋選項。",
+ "translate-search-languagefilter": "依語言篩選:",
"translate-search-nofilter": "無",
- "translate-messagereview-submit": "標記為已檢閱",
- "translate-messagereview-progress": "標記為已檢閱...",
- "translate-messagereview-failure": "標記為已檢閱失敗:$1",
- "translate-messagereview-done": "已檢閱",
- "translate-messagereview-reviews": "已由{{PLURAL:$1|一位使用者| $1 位使用者}}檢閱",
- "translate-messagereview-reviewswithyou": "已被{{PLURAL:$1|您檢閱| $1 個使用者 (包括您) 檢閱}}",
- "api-error-invalidrevision": "找不到翻譯",
- "api-error-unknownmessage": "找不到訊息",
- "api-error-fuzzymessage": "翻譯被標記為模糊翻譯",
- "api-error-owntranslation": "您無法標記您自己的翻譯為已檢閱",
- "translate-messagereview-no-fuzzy": "模糊翻譯無法被標記為已檢閱。",
- "translate-messagereview-no-own": "您無法標記您自己的翻譯為已檢閱。",
- "translate-messagereview-doit": "標記此翻譯為已檢閱。",
- "log-name-translationreview": "翻譯檢閱日誌",
+ "log-name-translationreview": "翻譯審查日誌",
"log-description-translationreview": "所有翻譯與訊息群組的檢閱日誌。",
- "logentry-translationreview-message": "$1 {{GENDER:$2|已檢閱}} 翻譯 $3",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|已審查}}翻譯 $3",
"logentry-translationreview-group": "$1 {{GENDER:$2|變更}} $3 的 $4 翻譯狀態由 $6 變更為 $7",
"group-translate-sandboxed": "未核准的翻譯人員",
"group-translate-sandboxed-member": "{{GENDER:$1|未核准的翻譯人員}}",
@@ -290,9 +293,9 @@
"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-dynagroup-additions-desc": "此訊息群組顯示新的與已變更的訊息。",
"translate-msggroupselector-projects": "訊息群組",
"translate-msggroupselector-search-placeholder": "搜尋群組",
"translate-msggroupselector-search-all": "所有",
@@ -303,22 +306,25 @@
"tux-tab-untranslated": "未翻譯",
"tux-tab-outdated": "已過時",
"tux-tab-translated": "已翻譯",
- "tux-tab-unproofread": "未檢閱",
+ "tux-tab-unproofread": "未審查",
"tux-edit": "編輯",
"tux-status-optional": "可選填",
"tux-status-fuzzy": "已過時",
- "tux-status-proofread": "已檢閱",
+ "tux-status-proofread": "已審查",
"tux-status-translated": "已翻譯",
"tux-status-saving": "儲存中...",
"tux-status-unsaved": "未儲存",
+ "tux-save-unknown-error": "發生不明的錯誤。",
"tux-editor-placeholder": "您的翻譯",
+ "tux-editor-editsummary-placeholder": "選填摘要",
"tux-editor-paste-original-button-label": "貼上原文",
"tux-editor-discard-changes-button-label": "取消修改",
"tux-editor-save-button-label": "儲存翻譯",
"tux-editor-skip-button-label": "跳至下一筆",
"tux-editor-cancel-button-label": "取消",
"tux-editor-confirm-button-label": "確認翻譯",
- "tux-editor-shortcut-info": "使用 \"$1\" 儲存,或 \"$2\" 跳至下一則訊息或 \"$3\" 使用其他捷徑。",
+ "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": "建議",
@@ -333,11 +339,11 @@
"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-action-tooltip": "標記為已審查",
"tux-proofread-edit-label": "編輯",
"tux-editor-page-mode": "頁面",
"tux-editor-outdated-warning": "此翻譯可能要更新。",
@@ -347,7 +353,7 @@
"tux-editor-doc-editor-cancel": "取消",
"tux-messagetable-more-messages": "還有 $1 則訊息",
"tux-messagetable-loading-messages": "讀取 $1 筆訊息中...",
- "tux-message-filter-placeholder": "搜尋清單",
+ "tux-message-filter-placeholder": "篩選清單",
"tux-message-filter-result": "找到 $1 筆包含 \"$2\" 的結果",
"tux-message-filter-advanced-button": "進階搜尋",
"tux-message-filter-optional-messages-label": "可選填訊息",
@@ -362,26 +368,29 @@
"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-message-tools-history": "歷史記錄",
+ "tux-editor-message-tools-show-editor": "顯示於 wiki 編輯器",
+ "tux-editor-message-tools-history": "歷史",
"tux-editor-message-tools-delete": "刪除",
"tux-editor-message-tools-translations": "所有翻譯",
+ "tux-editor-message-tools-linktothis": "連至此訊息之連結",
"tux-editor-loading": "正在讀取...",
"translate-search-more-languages-info": "還有 $1 種{{PLURAL:$1|語言|語言}}",
- "translate-statsbar-tooltip": "$1% 已翻譯,$2% 已檢閱",
+ "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": "翻譯擴充套件需要相依 [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:UniversalLanguageSelector 通用語言選擇器擴充套件]。",
- "tux-session-expired": "您已不在登入狀態,請使用另一個頁籤登入。或者,備份您尚未儲存的翻譯,登入後再返回此頁。"
+ "tux-session-expired": "您已不在登入狀態,請使用另一個頁籤登入。或者備份您尚未儲存的翻譯,登入返回此頁然後再輸入您的翻譯一次。",
+ "tux-nojs": "此工具在沒有 JavaScript 時無法運作。JavaScript 已停用、運作失敗,或者此瀏覽器不受支援。"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/abs.json b/www/wiki/extensions/Translate/i18n/pagetranslation/abs.json
new file mode 100644
index 00000000..ef8541a3
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/abs.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anok kutai jang"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2 terjemahan)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ace.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ace.json
new file mode 100644
index 00000000..9b9169e4
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ace.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Si Gam Acèh"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% geuteujeumah)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/af.json b/www/wiki/extensions/Translate/i18n/pagetranslation/af.json
index 96838eab..083ed871 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/af.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/af.json
@@ -8,12 +8,9 @@
},
"pagetranslation": "Bladsyvertaling",
"right-pagetranslation": "Merk weergawes van bladsye vir vertaling",
- "tpt-desc": "Uitbreiding vir die vertaal van wikibladsye",
"tpt-section": "Vertaaleenheid $1",
"tpt-section-new": "Nuwe vertaaleenheid.\nNaam: $1",
"tpt-section-deleted": "Vertaaleenheid $1",
- "tpt-template": "Bladsysjabloon",
- "tpt-templatediff": "Die bladsysjabloon was gewysig.",
"tpt-diff-old": "Vorige teks",
"tpt-diff-new": "Nuwe teks",
"tpt-submit": "Merk die weergawe vir vertaling",
@@ -26,7 +23,6 @@
"tpt-oldrevision": "$2 is nie die nuutste weergawe van die bladsy [[:$1]] nie.\nSlegs die nuutste weergawe kan vir vertaling gemerk word.",
"tpt-notsuitable": "Die bladsy $1 is nie geskik om vir vertaling gemerk te word nie.\nSorg dat dit die etiket <nowiki><translate></nowiki> bevat en dat die sintaks daarvan korrek is.",
"tpt-saveok": "Die bladsy [[:$1]] is gemerk vir vertaling met $2 uitstaande {{PLURAL:$2|vertaaleenheid|vertaaleenhede}}.\nDie bladsy kan nou <span class=\"plainlinks\">[$3 vertaal]</span> word.",
- "tpt-badsect": "\"$1\" is nie 'n geldige naam vir vertaaleenheid $2 nie.",
"tpt-showpage-intro": "Hieronder word nuwe, bestaande en verwyderde afdelings gelys.\nAlvorens u die weergawe vir vertaling merk, maak seker dat die veranderinge geminimeer word om onnodig werk vir vertalers te voorkom.",
"tpt-mark-summary": "Merk die weergawe vir vertaling",
"tpt-edit-failed": "Die bladsy \"$1\" kon nie bygewerk word nie.",
@@ -53,6 +49,7 @@
"translate-tag-markthisagain": "Hierdie bladsy is <span class=\"plainlinks\">[$1 kere gewysig]</span> sedert dit laas <span class=\"plainlinks\">[$2 vir vertaling gemerk was]</span>.",
"translate-tag-hasnew": "Daar is <span class=\"plainlinks\">[$1 wysigings]</span> aan die bladsy gemaak wat nie vir vertaling gemerk is nie.",
"tpt-translation-intro": "Die bladsy is 'n <span class=\"plainlinks\">[$1 vertaalde weergawe]</span> van bladsy [[$2]]. Die vertaling van die bladsy is $3% voltooi.",
+ "tpt-translation-intro-fuzzy": "Verouderde vertalings word so weergegee.",
"tpt-languages-legend": "Ander tale:",
"tpt-languages-nonzero": "$1 ($2% vertaal)",
"tpt-tab-translate": "Vertaal",
@@ -60,7 +57,6 @@
"tpt-unknown-page": "Hierdie naamruimte is gereserveer vir die vertalings van bladsye.\nDie bladsy wat u probeer wysig kom nie ooreen met een wat vir vertaling gemerk is nie.",
"tpt-discouraged-language-reason": "Rede: $1",
"tpt-render-summary": "Besig met bewerkings vanweë 'n nuwe basisweergawe van die bronblad",
- "tpt-download-page": "Eksporteer bladsy met vertalings",
"tpt-aggregategroup-save": "Stoor",
"tpt-aggregategroup-new-name": "Naam:",
"tpt-aggregategroup-new-description": "Beskrywing (opsioneel):",
@@ -78,8 +74,6 @@
"pt-deletepage-reason": "Rede:",
"pm-savepages-button-label": "Stoor",
"pm-cancel-button-label": "Kanselleer",
- "pm-pagename-placeholder": "Verskaf die bladsynaam",
- "pm-langcode-placeholder": "Taalkode",
"pm-page-does-not-exist": "$1 bestaan nie.",
"pm-old-translations-missing": "$1 bevat nie ou vertalings nie.",
"pp-save-button-label": "Stoor",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ais.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ais.json
new file mode 100644
index 00000000..aa8e31fa
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ais.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Benel"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% mabelih tuway)",
+ "tpt-aggregategroup-add": "cunus"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ami.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ami.json
new file mode 100644
index 00000000..d2df9d87
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ami.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vickylin77s"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% macoyakay to)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ar.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ar.json
index 4f34df36..78883939 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ar.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ar.json
@@ -6,11 +6,13 @@
"ترجمان05",
"روخو",
"Bibas",
- "محمد أحمد عبد الفتاح"
+ "محمد أحمد عبد الفتاح",
+ "ديفيد",
+ "Hhaboh162002"
]
},
"pagetranslation": "ترجمة صفحة",
- "right-pagetranslation": "عّلم نسخًا م هذه الصفحة للترجمة",
+ "right-pagetranslation": "تعليم نسخًا من الصفحات للترجمة",
"action-pagetranslation": "إدارة الصفحات القابلة للترجمة",
"tpt-section": "وحدة الترجمة $1",
"tpt-section-new": "وحدة ترجمة جديدة.\nالاسم: $1",
@@ -21,94 +23,194 @@
"tpt-sections-oldnew": "وحدات الترجمة الجديدة والموجودة",
"tpt-sections-deleted": "وحدات الترجمة المحذوفة",
"tpt-sections-template": "قالب صفحة ترجمة",
+ "tpt-action-nofuzzy": "لا تجعل حالة الترجمات غير صحيحة",
"tpt-badtitle": "اسم الصّفحة المعطى ($1) ليس عنوانا صحيحا",
"tpt-nosuchpage": "الصفحة $1 غير موجودة",
"tpt-oldrevision": "$2 ليست آخر نسخة للصّفحة [[:$1]].\nفقط آخر النسخ يمكن أن تؤشّر للترجمة.",
"tpt-notsuitable": "الصفحة $1 غير مناسبة للترجمة.\nتأكد أن لها وسم <nowiki><translate></nowiki> وأن لها صياغة صحيحة.",
"tpt-saveok": "الصفحة [[:$1]] تم التعليم عليها للترجمة ب $2 {{PLURAL:$2|وحدة ترجمة|وحدات ترجمة}}.\nالصفحة يمكن الآن <span class=\"plainlinks\">[$3 ترجمتها]</span>.",
+ "tpt-saveok-first": "يمكنك [[Special:PageMigration|استيراد ترجمة موجودة مسبقا]] لهذه الصفحة (إن وُجِدت).",
+ "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": "آخر نسخة من هذه الصفحة مُعلّمة بالفعل للترجمة.",
"tpt-unmarked": "الصفحة $1 لم تعد مُعلّمة للترجمة",
"tpt-list-nopages": "لا صفحات مُعلّمة للترجمة أو جاهزة للتعليم للترجمة.",
"tpt-new-pages-title": "صفحات مقترحة للترجمة",
"tpt-old-pages-title": "صفحات تحت الترجمة",
"tpt-other-pages-title": "صفحات مكسورة",
+ "tpt-discouraged-pages-title": "صفحات غير مشجع عليها",
"tpt-new-pages": "{{PLURAL:$1|هذه الصفحة تحتوي|هذه الصفحات تحتوي}} على نص بوسوم ترجمة، لكن لا نسخة من {{PLURAL:$1|هذه الصفحة|هذه الصفحات}} معلمة حاليا للترجمة.",
"tpt-old-pages": "إحدى نسخ {{PLURAL:$1||هذه الصفحة|هاتان الصفحتان|هذه الصفحات}} عُلّمت للترجمة.",
+ "tpt-other-pages": "{{PLURAL:$1|نسخة قديمة من هذه الصفحة|نسخ قديمة من هذه الصفحات}} معلمة للترجمة،\nلكن آخر {{PLURAL:$1|نسخة|نسخ}} لا يمكن تعليمها للترجمة.",
+ "tpt-discouraged-pages": "{{PLURAL:$1|هذه الصفحة تمت|هذه الصفحات تمت}} تثبيطها من المزيد من الترجمة.",
+ "tpt-select-prioritylangs": "قائمة بأكواد اللغات التي لها الأولوية مفصولة بفاصلة:",
+ "tpt-select-prioritylangs-force": "امنع الترجمات للغات غير اللغات التي لها الأولوية",
"tpt-select-prioritylangs-reason": "السبب:",
"tpt-sections-prioritylangs": "اللغات ذات الأولوية",
"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": "استعد هذه الصفحة للترجمة العادية.",
"translate-tag-translate-link-desc": "ترجم هذه الصفحة",
"translate-tag-markthis": "علّم هذه الصفحة للترجمة",
"translate-tag-markthisagain": "هذه الصفحة بها <span class=\"plainlinks\">[$1 تغيير]</span> منذ تم <span class=\"plainlinks\">[$2 تعليمها للترجمة]</span> لآخر مرة.",
"translate-tag-hasnew": "هذه الصفحة تحتوي على <span class=\"plainlinks\">[$1 تغييرات]</span> غير معلمة للترجمة.",
- "tpt-translation-intro": "هذه الصفحة هي <span class=\"plainlinks\">[$1 نسخة مترجمة]</span> لصفحة [[$2]] والترجمة مكتملة ومحدثة بنسبة $3%.",
+ "tpt-translation-intro": "هذه الصفحة هي <span class=\"plainlinks\">[$1 نسخة مترجمة]</span> من صفحة [[$2]] والترجمة مكتملة بنسبة $3%.",
+ "tpt-translation-intro-fuzzy": "الترجمات غير المُحدّثة مُعلّمة بما يشبه هذه.",
"tpt-languages-legend": "لغات أخرى:",
"tpt-languages-zero": "ابدأ الترجمة لهذه اللغة",
- "tpt-languages-nonzero": "$1 (قد ترجمت بنسبة $2%)",
+ "tpt-languages-nonzero": "$1 (قد تُرجمت بنسبة $2%)",
"tpt-tab-translate": "ترجم",
"tpt-target-page": "لا يمكن تحديث هذه الصفحة يدويًا.\nهذه الصفحة ترجمة لصفحة [[$1]] ويمكن تحديث الترجمة باستخدام [$2 أداة الترجمة].",
+ "tpt-patrolling-blocked": "هذه الصفحة لا يمكن خفرها. بدلا من ذلك، استخدم فعل translate لمراجعتها.",
"tpt-unknown-page": "هذا النطاق محجوز لترجمات صفحات المحتوى.\nالصفحة التي تحاول تعديلها لا يبدو أنها تتبع أي صفحة معلمة للترجمة.",
+ "tpt-translation-restricted": "ترجمة هذه الصفحة لهذه اللغة تم منعها بواسطة إداري ترجمة.\n\nالسبب: $1",
"tpt-discouraged-language-force-header": "هذه الصفحة لا يمكن ترجمتها إلى $1.",
+ "tpt-discouraged-language-force-content": "قرر إداري ترجمة أن هذه الصفحة يمكن ترجمتها فقط إلى $1.",
"tpt-discouraged-language-header": "الترجمة إلى $1 ليست أولوية لهذه الصفحة.",
+ "tpt-discouraged-language-content": "قرر إداري ترجمة تركيز جهود الترجمة على $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",
+ "tpt-priority-languages": "إداري ترجمة ضبط لغات الأولوية لهذه المجموعة إلى $1.",
"tpt-render-summary": "تحديث لمطابقة نسخة صفحة المصدر الجديدة",
"aggregategroups": "المجموعة الإجمالية",
"tpt-aggregategroup-add": "أضف",
- "tpt-aggregategroup-save": "احفظ",
+ "tpt-aggregategroup-save": "حفظ",
+ "tpt-aggregategroup-add-new": "أضف مجموعة مجمعة جديدة",
"tpt-aggregategroup-new-name": "الاسم:",
"tpt-aggregategroup-new-description": "الوصف (اختياري):",
+ "tpt-aggregategroup-remove-confirm": "هل أنت متأكد أنك تريد حذف هذه المجموعة المجمعة؟",
"tpt-aggregategroup-invalid-group": "المجموعة غير موجودة",
"tpt-aggregategroup-edit-name": "الاسم:",
"tpt-aggregategroup-edit-description": "الوصف:",
- "tpt-aggregategroup-update": "احفظ",
+ "tpt-aggregategroup-update": "حفظ",
"tpt-aggregategroup-update-cancel": "ألغ",
"tpt-invalid-group": "مجموعة غير صالحة",
+ "pt-parse-open": "وسم &lt;translate> غير متوازن.\nقالب الترجمة: <pre>$1</pre>",
+ "pt-parse-close": "وسم &lt;/translate> غير متوازن.\nقالب الترجمة: <pre>$1</pre>",
+ "pt-parse-nested": "وحدات الترجمة &lt;translate> المتداخلة غير مسموح بها.\nنص الوسم: <pre>$1</pre>",
+ "pt-shake-multiple": "علامات وحدات ترجمة متعددة لوحدة ترجمة واحدة.\nنص وحدة الترجمة: <pre>$1</pre>",
+ "pt-shake-position": "علامات وحدات الترجمة في موضع غير متوقع.\nنص وحدة الترجمة: <pre>$1</pre>",
+ "pt-shake-empty": "وحدة ترجمة فارغة للعلامة \"$1\".",
+ "log-description-pagetranslation": "سجل بالأحداث المرتبطة بنظام ترجمة الصفحات",
"log-name-pagetranslation": "سجل ترجمة الصفحات",
"logentry-pagetranslation-mark": "{{GENDER:$2|حدد|حددت}} $1 $3 للترجمة",
- "logentry-pagetranslation-unmark": "{{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",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|فشل|فشلت}} في حذف $3 والتي تنتمي للصفحة القابلة للترجمة $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|أكمل|أكملت}} حذف صفحة الترجمة $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|فشل|فشلت}} في حذف $3 والتي تنتمي لصفحة الترجمة $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|شجع|شجعت}} ترجمة $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|لم يشجع|لم تشجع}} ترجمة $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|أزال|أزالت}} لغات الأولوية من الصفحة القابلة للترجمة $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|ضبط|ضبطت}} لغات الأولوية للصفحة القابلة للترجمة $3 إلى $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|حدد|حددت}} اللغات للصفحة القابلة للترجمة $3 إلى $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|أضاف|أضافت}} الصفحة القابلة للترجمة $3 إلى المجموعة المجمعة $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|أزال|أزالت}} الصفحة القابلة للترجمة $3 من المجموعة المجمعة $4",
+ "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-encourage": "تشجيع الترجمة",
+ "log-action-filter-pagetranslation-discourage": "عدم تشجيع الترجمة",
+ "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]]\" موجودة.",
+ "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-subpage-exists": "الصفحة الفرعية الهدف \"[[:$2]]\" موجودة.",
+ "pt-movepage-block-subpage-invalid": "عنوان الصفحة الفرعية الهدف ل\"[[:$1]]\" سيكون غير صحيح (طويل جدا؟).",
"pt-movepage-list-pages": "قائمة الصفحات التي ستنقل",
- "pt-movepage-list-translation": "صفحات الترجمة",
- "pt-movepage-list-other": "صفحات فرعية أخرى",
+ "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": "الاسم الحالي:",
"pt-movepage-new": "الاسم الجديد:",
"pt-movepage-reason": "السبب:",
"pt-movepage-subpages": "انقل جميع الصفحات الفرعية",
- "pt-movepage-action-check": "تحقق اذا كان النقل ممكنا",
+ "pt-movepage-action-check": "تحقق ما إذا كان النقل ممكنا",
"pt-movepage-action-perform": "لا تنقل",
"pt-movepage-action-other": "تغيير الهدف",
+ "pt-movepage-intro": "هذه الصفحة الخاصة تسمح لك بنقل الصفحات التي تم تعليمها للترجمة.\nفعل النقل لن يكون فوريا، لأن الكثير من الصفحات ستحتاج إلى أن يتم نقلها.\nأثناء عملية نقل الصفحات، فلن يكون التفاعل ممكنا مع الصفحات المعينة.\nعمليات الفشل سوف تسجل في [[Special:Log/pagetranslation|سجل ترجمة الصفحات]] وستحتاج إلى أن يتم إصلاحها يدويا.",
+ "pt-movepage-logreason": "جزء من الصفحة القابلة للترجمة \"$1\"",
+ "pt-movepage-started": "من فضلك تحقق من [[Special:Log/pagetranslation|سجل ترجمة الصفحات]] للأخطاء ورسالة الإكمال.",
+ "pt-locked-page": "هذه الصفحة مقفلة لأن الصفحة القابلة للترجمة يتم نقلها حاليا.",
+ "pt-deletepage-lang-title": "حذف صفحة الترجمة \"$1\"",
+ "pt-deletepage-full-title": "حذف صفحة الترجمة \"$1\"",
+ "pt-deletepage-invalid-title": "الصفحة المحددة غير صحيحة.",
+ "pt-deletepage-invalid-text": "الصفحة المحددة ليست صفحة قابلة للترجة ولا صفحة ترجمة.",
+ "pt-deletepage-action-check": "عرض الصفحات للحذف",
"pt-deletepage-action-perform": "نفذ الحذف",
"pt-deletepage-action-other": "غيّر الهدف",
"pt-deletepage-lang-legend": "احذف صفحة الترجمة",
+ "pt-deletepage-full-legend": "حذف الصفحة القابلة للترجمة",
+ "pt-deletepage-any-legend": "حذف الصفحة القابلة للترجمة أو صفحة الترجمة",
"pt-deletepage-current": "اسم الصفحة:",
"pt-deletepage-reason": "السبب:",
"pt-deletepage-subpages": "أحذف جميع الصفحات الفرعية",
+ "pt-deletepage-list-pages": "قائمة الصفحات للحذف",
"pt-deletepage-list-translation": "صفحات الترجمة",
+ "pt-deletepage-list-section": "صفحات وحدة الترجمة",
"pt-deletepage-list-other": "صفحات فرعية أخرى",
+ "pt-deletepage-list-count": "إجمالا $1 {{PLURAL:$1|صفحة|صفحات}} للحذف.",
+ "pt-deletepage-full-logreason": "جزء من الصفحة القابلة للترجمة \"$1\"",
+ "pt-deletepage-lang-logreason": "جزء من صفحة الترجمة \"$1\"",
+ "pt-deletepage-started": "من فضلك تحقق من [[Special:Log/pagetranslation|سجل ترجمة الصفحات]] للأخطاء ورسائل الإكمال.",
+ "pt-deletepage-intro": "هذه الصفحة الخاصة تسمح لك بحذف صفحة قابلة للترجمة كاملة، أو صفحة ترجمة فردية في لغة.\nفعل الحذف لن يكون فوريا، لأن كل الصفحات التي تعتمد عليها سيتم حذفها أيضا.\nعمليات الفشل سوف يتم تسجيلها في [[Special:Log/pagetranslation|سجل ترجمة الصفحات]] وستحتاج إلى أن يتم إصلاحها يدويا.",
"pagemigration": "تحويل صفحة الترجمة",
+ "pagemigration-summary": "حدد صفحة ترجمة واستعد أي ترجمة تمت قبل تفعيل نظام الترجمة على هذه الصفحة.",
"pm-import-button-label": "استورد",
- "pm-savepages-button-label": "احفظ",
+ "pm-savepages-button-label": "حفظ",
"pm-cancel-button-label": "ألغ",
"pm-page-does-not-exist": "$1 غير موجودة",
"pm-old-translations-missing": "$1 لا يحتوي ترجمات قديمة.",
+ "pm-extra-units-warning": "ربما تكون هناك وحدات إضافية. من فضلط طابق المصد ووحدات الترجمة جيدا.",
+ "pm-pagename-missing": "من فضلك أدخل اسم الصفحة.",
"pm-add-icon-hover-text": "أضف وحدة في الأسفل",
+ "pm-swap-icon-hover-text": "بدل مع الوحدة بالأسفل",
"pm-delete-icon-hover-text": "حذف الوحدة",
"pm-pagetitle-placeholder": "أدخل اسم الصفحة",
+ "pm-pagetitle-invalid": "من فضلك أدخل عنوان صفحة صحيح. ينبغي أن يكون بصيغة <page-name>/<language-code>.",
+ "pm-pagetitle-missing": "من فضلك أدخل عنوان الصفحة.",
+ "pm-langcode-missing": "كود اللغة يبدو مفقودا في العنوان. من فضلك أدخل عنوان الصفحة بالصيغة <page-name>/<language-code>.",
+ "pm-summary-import": "استورد الترجمة باستخدام [[Special:PageMigration|هجرة الصفحات]]",
+ "pm-on-import-message-text": "الترجمات القديمة تم استيرادها. استخدام اختيارات add, swap و delete لتعديل وحدات الترجمة واضغط على زر \"{{int:pm-savepages-button-label}}\" لحفظها. اضغط على زر \"{{int:pm-cancel-button-label}}\" للتجاهل.",
+ "pm-on-save-message-text": "وحدات الترجمة تم حفظها. أنت يمكك الآن إدخال عنوان صفحة ترجمة جديدة لهجرتها، أو عمل التغييرات للوحدات بالأسفل وحفظ مراجعة جديدة.",
"tpt-translate-title": "اسمح بترجمة عنوان الصفحة",
+ "pp-save-summary": "جهز الصفحة للترجمة",
"pagepreparation": "تحضير الصفحة للترجمة",
"pp-pagename-placeholder": "أدخل اسم الصفحة",
"pp-prepare-button-label": "جهز",
- "pp-save-button-label": "احفظ",
+ "pp-save-button-label": "حفظ",
"pp-cancel-button-label": "ألغ",
+ "pp-save-message": "الصفحة تم حفظها. أنت يمكنك [$1 تعديلها].",
+ "pp-prepare-message": "الصفحة تم تحضيرها للترجمة. انظر الفرق بالأسفل. اضغط على زر \"{{int:pp-save-button-label}}\" لو موافق!",
+ "pp-already-prepared-message": "يبدو أن الصفحة قد تم بالفعل تحضيرها للترجمة. لا توجد تغييرات بالمقارنة مع النسخة السابقة.",
"pp-pagename-missing": "من فضلك أدخل اسم الصفحة.",
"pp-diff-old-header": "نص المصدر",
+ "pp-diff-new-header": "جهز النص",
+ "tpt-unlink-confirm": "من فضلك تأكد من أك تريد فعلا إزالة هذه الصفحة من نظام الترجمة.\nأداة اختيار اللغة وأسماء الصفحة المترجمة سيتوفقون عن العمل.\nصفحات الترجمة ستصبح قابلة للتعديل.",
"tpt-unlink-button": "أزل من الترجمة",
"tpt-unlink-summary": "إزالة هذه الصفحة من الترجمة",
"tpt-generic-confirm": "برجاء تأكيد الفعل",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/arz.json b/www/wiki/extensions/Translate/i18n/pagetranslation/arz.json
index f686af56..0b1348af 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/arz.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/arz.json
@@ -7,12 +7,9 @@
},
"pagetranslation": "ترجمه صفحة",
"right-pagetranslation": "عّلم نسخًا م هذه الصفحه للترجمة",
- "tpt-desc": "امتداد لترجمه محتويات الصفحات",
"tpt-section": "وحده الترجمه $1",
"tpt-section-new": "وحده ترجمه جديده.\nالاسم: $1",
"tpt-section-deleted": "وحده الترجمه $1",
- "tpt-template": "قالب صفحة",
- "tpt-templatediff": "تغيّر قالب الصفحه.",
"tpt-diff-old": "نص سابق",
"tpt-diff-new": "نص جديد",
"tpt-submit": "علّم هذه النسخه للترجمة",
@@ -23,7 +20,6 @@
"tpt-oldrevision": "$2 ليست آخر نسخه للصّفحه [[:$1]].\nفقط آخر النسخ يمكن أن تؤشّر للترجمه.",
"tpt-notsuitable": "الصفحه $1 غير مناسبه للترجمه.\nتأكد أن لها وسم <nowiki><translate></nowiki> وأن لها صياغه صحيحه.",
"tpt-saveok": "الصفحه [[:$1]] تم التعليم عليها للترجمه ب $2 {{PLURAL:$2|وحده ترجمة|وحدات ترجمة}}.\nالصفحه يمكن الآن <span class=\"plainlinks\">[$3 ترجمتها]</span>.",
- "tpt-badsect": "\"$1\" ليس اسمًا صحيحًا لوحده الترجمه $2.",
"tpt-showpage-intro": "أدناه تُسرد الأقسام الجديده والموجوده والمحذوفه.\nقبل تعليم هذه النسخه للترجمه، تحقق من أن التغييرات على الأقسام مُقلّله لتفادى العمل غير الضرورى من المترجمين.",
"tpt-mark-summary": "علَّم هذه النسخه للترجمة",
"tpt-edit-failed": "تعذّر تحديث الصفحة: $1",
@@ -36,10 +32,10 @@
"translate-tag-markthisagain": "هذه الصفحه بها <span class=\"plainlinks\">[$1 تغيير]</span> منذ تم <span class=\"plainlinks\">[$2 تعليمها للترجمة]</span> لآخر مره.",
"translate-tag-hasnew": "هذه الصفحه تحتوى على <span class=\"plainlinks\">[$1 تغييرات]</span> غير معلمه للترجمه.",
"tpt-translation-intro": "هذه الصفحه هى <span class=\"plainlinks\">[$1 نسخه مترجمة]</span> لصفحه [[$2]] والترجمه مكتمله ومحدثه بنسبه $3%.",
+ "tpt-translation-intro-fuzzy": "الترجمات غير المُحدّثه مُعلّمه هكذا.",
"tpt-languages-legend": "لغات أخرى:",
"tpt-languages-nonzero": "$1 (اترجمت بنسبة $2%)",
"tpt-target-page": "لا يمكن تحديث هذه الصفحه يدويًا.\nهذه الصفحه ترجمه لصفحه [[$1]] ويمكن تحديث الترجمه باستخدام [$2 أداه الترجمة].",
"tpt-unknown-page": "هذا النطاق محجوز لترجمات صفحات المحتوى.\nالصفحه التى تحاول تعديلها لا يبدو أنها تتبع أى صفحه معلمه للترجمه.",
- "tpt-render-summary": "تحديث لمطابقه نسخه صفحه المصدر الجديدة",
- "tpt-download-page": "صدّر الصفحه مع الترجمات"
+ "tpt-render-summary": "تحديث لمطابقه نسخه صفحه المصدر الجديدة"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/as.json b/www/wiki/extensions/Translate/i18n/pagetranslation/as.json
index e12133de..82bf8073 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/as.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/as.json
@@ -8,7 +8,6 @@
]
},
"pagetranslation": "পৃষ্ঠা ভাঙনি",
- "tpt-template": "পৃষ্ঠা সাঁচ",
"tpt-diff-old": "আগৰ পাঠ্য",
"tpt-diff-new": "নতুন পাঠ্য",
"tpt-submit": "এই সংস্কৰণ ভাঙনিৰ বাবে বাচক",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ast.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ast.json
index 820cc76a..74e5def9 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ast.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ast.json
@@ -20,9 +20,9 @@
"tpt-action-nofuzzy": "Nun invalidar les traducciones",
"tpt-badtitle": "El nome que-y disti a la páxina (\"$1\") nun ye un títulu válidu",
"tpt-nosuchpage": "La páxina $1 nun esiste",
- "tpt-oldrevision": "$2 nun y la cabera versión de la páxina [[:$1]].\nSólo les caberes versiones se puen marcar pa traducir.",
+ "tpt-oldrevision": "$2 nun ye la cabera versión de la páxina [[:$1]].\nSólo les caberes versiones pueden marcase pa traducir.",
"tpt-notsuitable": "La páxina \"$1\" nun ye válida pa traducir.\nComprueba que tenga les etiquetes <nowiki><translate></nowiki> y una sintaxis válida.",
- "tpt-saveok": "A páxina [[:$1]] marcose pa traducir con {{PLURAL:$2|una unidá de traducción|$2 unidaes de traducción}}.\nLa páxina agora se pue <span class=\"plainlinks\">[$3 traducir]</span>.",
+ "tpt-saveok": "A páxina [[:$1]] marcose pa traducir con {{PLURAL:$2|una unidá de traducción|$2 unidaes de traducción}}.\nLa páxina agora puede <span class=\"plainlinks\">[$3 traducise]</span>.",
"tpt-offer-notify": "Pue <span class=\"plainlinks\">[$1 avisar a los traductores]</span> sobre esta páxina.",
"tpt-showpage-intro": "Abaxo ta la llista de les unidaes de traducción nueves, esistentes y desaniciaes.\nEnantes de marcar esta versión pa traducir, comprueba que los cambios fechos nes unidaes de traducción seyan mínimos pa evitar trabayu innecesariu de los traductores.",
"tpt-mark-summary": "Marcó esta versión pa traducir",
@@ -57,6 +57,7 @@
"translate-tag-markthisagain": "Esta páxina tien <span class=\"plainlinks\">[$1 cambios]</span> dende que se <span class=\"plainlinks\">[$2 marcó pa traducir]</span> la última vegada.",
"translate-tag-hasnew": "Esta páxina contien <span class=\"plainlinks\">[$1 cambios]</span> que nun tan marcaos pa traducir.",
"tpt-translation-intro": "Esta páxina ye una <span class=\"plainlinks\">[$1 versión traducida]</span> de la páxina [[$2]] y la traducción ta completada nún $3%.",
+ "tpt-translation-intro-fuzzy": "Les traducciones anticuaes márquense d'esta manera.",
"tpt-languages-legend": "Otres llingües:",
"tpt-languages-zero": "Principiar la traducción nesta llingua",
"tpt-languages-nonzero": "$1 ($2% traducío)",
@@ -65,7 +66,7 @@
"tpt-patrolling-blocked": "Esta páxina nun puede patrullase. Usa meyor l'aición traducir pa revisala.",
"tpt-unknown-page": "Esti espaciu de nomes ta acutáu pa les traducciones de les páxines de conteníu.\nLa páxina que tas intentando editar paez que nun correspuende con denguna páxina marcada pa traducir.",
"tpt-translation-restricted": "Un alministrador de traducciones torgó la traducción d'esta páxina a esta llingua.\n\nMotivu: $1",
- "tpt-discouraged-language-force-header": "Esta páxina nun pue traducise al $1.",
+ "tpt-discouraged-language-force-header": "Esta páxina nun puede traducise al $1.",
"tpt-discouraged-language-force-content": "Un alministrador de traducciones decidió qu'esta páxina sólo pue traducise al $1.",
"tpt-discouraged-language-header": "La traducción al $1 nun ye prioritaria pa esta páxina.",
"tpt-discouraged-language-content": "Un alministrador de traducciones decidió concentrar el trabayu de traducción nel $1.",
@@ -110,6 +111,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|llimitó}} les llingües pa la páxina traducible $3 a $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|amestó}} la páxina traducible $3 al grupu agregáu $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|desanició}} la páxina traducible $3 del grupu agregáu $4",
+ "log-action-filter-pagetranslation": "Tipu d'acción:",
+ "log-action-filter-pagetranslation-mark": "Marcar pa traducir",
+ "log-action-filter-pagetranslation-unmark": "Desaniciar de la traducción",
+ "log-action-filter-pagetranslation-move": "Tresllaos de páxina",
+ "log-action-filter-pagetranslation-delete": "Desanicios de páxines",
+ "log-action-filter-pagetranslation-encourage": "Invitación a traducir",
+ "log-action-filter-pagetranslation-discourage": "Invitación a nun traducir",
+ "log-action-filter-pagetranslation-prioritylanguages": "Cambéu d'idiomes prioritarios",
+ "log-action-filter-pagetranslation-aggregategroups": "Cambéu de grupos agregáu",
"pt-movepage-title": "Treslladar la páxina traducible $1",
"pt-movepage-blockers": "Nun se pue treslladar la páxina traducible a un nome nuevu {{PLURAL:$1|pol siguiente error|polos siguientes errores}}:",
"pt-movepage-block-base-exists": "La páxina traducible de destín «[[:$1]]» yá esiste.",
@@ -134,8 +144,8 @@
"pt-movepage-action-perform": "Facer el treslláu",
"pt-movepage-action-other": "Camudar el destín",
"pt-movepage-intro": "Esta páxina especial te permite treslladar páxines que tan marcaes pa traducir.\nL'aición de treslláu nun sedrá inmediata, porque ye necesario mover munches páxines.\nMentanto se treslladen les páxines, nun ye posible interactuar coles mesmes.\nLos fallos quedarán rexistraos nel [[Special:Log/pagetranslation|rexistru de traducción de páxines]] y tendrán de reparase a mano.",
- "pt-movepage-logreason": "Parte de la páxina traducible $1.",
- "pt-movepage-started": "La páxina base ta treslladada.\nPor favor, mira nel [[Special:Log/pagetranslation|rexistru de traducción de páxines]] pa ver los errores y mensaxe de completáu.",
+ "pt-movepage-logreason": "Parte de la páxina traducible «$1».",
+ "pt-movepage-started": "Mira nel [[Special:Log/pagetranslation|rexistru de traducción de páxines]] dientro d'un momentu pa ver los errores y mensaxe de completáu.",
"pt-locked-page": "Esta páxina ta bloquiada porque ta treslladandose la páxina traducible.",
"pt-deletepage-lang-title": "Desaniciando la páxina de traducción «$1».",
"pt-deletepage-full-title": "Desaniciando la páxina traducible «$1».",
@@ -155,8 +165,8 @@
"pt-deletepage-list-section": "Páxines de la unidá de traducción",
"pt-deletepage-list-other": "Otres subpáxines",
"pt-deletepage-list-count": "En total $1 {{PLURAL:$1|páxina|páxines}} a desaniciar.",
- "pt-deletepage-full-logreason": "Parte de la páxina traducible $1.",
- "pt-deletepage-lang-logreason": "Parte de la páxina de traducción $1.",
+ "pt-deletepage-full-logreason": "Parte de la páxina traducible «$1».",
+ "pt-deletepage-lang-logreason": "Parte de la páxina de traducción «$1».",
"pt-deletepage-started": "Por favor, mira nel [[Special:Log/pagetranslation|rexistru de traducción de páxines]] pa ver los errores y mensaxe de completáu.",
"pt-deletepage-intro": "Esta páxina especial te permite desaniciar una páxina traducible entera o una páxina individual de traducción a una llingua.\nL'aición de desaniciu nun sedrá inmediata, porque tamién se desaniciarán toles páxines que dependan d'elles.\nLos fallos quedarán rexistraos nel [[Special:Log/pagetranslation|rexistru de traducción de páxines]] y tendrán de reparase a mano.",
"pagemigration": "Migración de la páxina de traducción",
@@ -176,6 +186,8 @@
"pm-pagetitle-missing": "Escribe'l títulu de la páxina.",
"pm-langcode-missing": "Paez que falta'l códigu de llingua nel títulu. Escribe'l títulu de la páxina col formatu <nome-de-páxina>/<códigu-de-llingua>.",
"pm-summary-import": "Traducción importada usando [[Special:PageMigration|migración de páxina]]",
+ "pm-on-import-message-text": "Importáronse les traducciones antigües. Usa les opciones añadir, cambiar y desaniciar p'axustar les unidaes de traducción y fai click nel botón \"{{int:pm-savepages-button-label}}\" pa guardales. Fai click nel botón \"{{int:pm-cancel-button-label}}\" pa descartales.",
+ "pm-on-save-message-text": "Guardáronse les unidaes de traducción. Agora puedes escribir el títulu d'una nueva páxina de traducción pa migrales o facer cambios nes unidaes de más abaxo y guardar una nueva revisión.",
"tpt-translate-title": "Permitir traducir el títulu de la páxina",
"pp-save-summary": "Preparada la páxina pa traducción",
"pagepreparation": "Preparar la páxina pa traducción",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/atj.json b/www/wiki/extensions/Translate/i18n/pagetranslation/atj.json
new file mode 100644
index 00000000..2b37068d
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/atj.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Benoit Rochon",
+ "Nehirowisiw"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% nisisatamowisanihikatew)",
+ "tpt-aggregategroup-new-description": "Kotak matci avant e witcikemakak",
+ "tpt-aggregategroup-edit-description": "E witcikemakak:",
+ "pt-deletepage-current": "Icinikatamowin Ickwemakinikan:"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/av.json b/www/wiki/extensions/Translate/i18n/pagetranslation/av.json
index 225c1a9d..d4079328 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/av.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/av.json
@@ -1,10 +1,13 @@
{
"@metadata": {
"authors": [
- "Gazimagomedov"
+ "Gazimagomedov",
+ "Аль-Гимравий"
]
},
"tpt-invalid-group": "Данде кколареб къокъа",
+ "pt-movepage-new": "ЦІияб цІар:",
+ "pt-deletepage-action-perform": "Нахъе бацІцІине",
"pp-prepare-button-label": "ХIадурабизе",
"pp-save-button-label": "ЦIунизе",
"pp-diff-old-header": "Бахчараб текст",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/avk.json b/www/wiki/extensions/Translate/i18n/pagetranslation/avk.json
new file mode 100644
index 00000000..9e1cf219
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/avk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Axel xadolik"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ( $2% kalavayan )"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/awa.json b/www/wiki/extensions/Translate/i18n/pagetranslation/awa.json
index a2c8db85..e020cfb7 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/awa.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/awa.json
@@ -4,6 +4,5 @@
"1AnuraagPandey"
]
},
- "tpt-languages-nonzero": "$1 ($2% अनूदित)",
- "pm-langcode-placeholder": "भाषा कय कोड"
+ "tpt-languages-nonzero": "$1 ($2% अनूदित)"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/az.json b/www/wiki/extensions/Translate/i18n/pagetranslation/az.json
index b0d3c0c4..968ceb61 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/az.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/az.json
@@ -9,12 +9,9 @@
"pagetranslation": "Tərcümə səhifəsi",
"right-pagetranslation": "Tərcümə üçün səhifənin versiyalarını işarələ",
"action-pagetranslation": "tərcümə oluna bilən səhifələri idarə et",
- "tpt-desc": "Məzmun səhifələrin tərcüməsi üçün əlavə olundu",
"tpt-section": "Tərcümə bölümü $1",
"tpt-section-new": "Yeni tərcümə bölümü.\nAd: $1",
"tpt-section-deleted": "Tərcümə bölümü $1",
- "tpt-template": "Səhifə şablonu",
- "tpt-templatediff": "Səhifə şablonu dəyişdirildi.",
"tpt-diff-old": "Əvvəlki mətn",
"tpt-diff-new": "Yeni mətn",
"tpt-submit": "Bu versiyanı tərcümə üçün işarələ",
@@ -27,7 +24,6 @@
"tpt-oldrevision": "$2 [[:$1]] səhifəsinin son versiyası deyil.\nYalnız ən son versiyalar tərcümə üçün işarə oluna bilər.",
"tpt-languages-nonzero": "$1 ($2% tərcümə edilib)",
"tpt-discouraged-language-reason": "Təsvir: $1",
- "tpt-download-page": "Tərcüməli səhifələri köçür",
"aggregategroups": "Aqreqat qrupları",
"tpt-aggregategroup-add": "Əlavə et",
"tpt-aggregategroup-save": "Saxla",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/azb.json b/www/wiki/extensions/Translate/i18n/pagetranslation/azb.json
index 9ef7d5d2..203644b5 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/azb.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/azb.json
@@ -10,12 +10,9 @@
"pagetranslation": "صحیفه چئویرمه‌سی",
"right-pagetranslation": "صحیفه‌لرین نوسخه‌لرینی چئویرمک اوچون نیشانلا",
"action-pagetranslation": "چئویرمه‌لی صحیفه‌لری ایداره ائت",
- "tpt-desc": "مقاله‌لری چئویرمک اوچون اوزانتی",
"tpt-section": "چئویرمه بیریمی $1",
"tpt-section-new": "یئنی چئویرمه بیریمی.\nآد: $1",
"tpt-section-deleted": "چئویرمه بیریمی $1",
- "tpt-template": "صحیفه شابلونو",
- "tpt-templatediff": "صحیفه شابلونو دَییشدیریلیب‌دیر.",
"tpt-diff-old": "قاباقکی یازی",
"tpt-diff-new": "یئنی یازی",
"tpt-submit": "بو نوسخه‌نی چئویرمگه نیشانلا",
@@ -24,11 +21,10 @@
"tpt-sections-template": "چئویرمک صحیفه‌سی شابلونو",
"tpt-action-nofuzzy": "چئویرمه‌لری اعتیبارسیز ائتمه",
"tpt-badtitle": "وئریلمیش صحیفه آدی ($1) گئچرلی بیر باشلیق دئییل",
- "tpt-nosuchpage": "$1 صحیفه‌سی یوخدور",
+ "tpt-nosuchpage": "$1 صفحه‌سی یوخدور",
"tpt-oldrevision": "$2، [[:$1]] صحیفه‌سینین سون نوسخه‌سی دئییل.\nیالنیز سون وئرسیالاری چئویرمگه نیشانلاماق اولا بیلر.",
"tpt-notsuitable": "$1 صحیفه‌سی چئویرمگه اویغون دئییل.\nآرخایین اولون اونون <nowiki><translate></nowiki> اِتیکِتلری و گئچرلی سینتکسی واردیر.",
"tpt-saveok": "[[:$1]] صحیفه‌سی {{PLURAL:$2|بیر|$2}} چئویرمک بیریمی‌له چئویرمگه نیشانلانیب‌دیر.\nبو صحیفه‌نی ایندی <span class=\"plainlinks\">[$3 چئویرمک اولا بیلر]</span>.",
- "tpt-badsect": "$2 چئویرمک بیریمی اوچون «$1» اویغون آد دئییل.",
"tpt-showpage-intro": "آشاغیدا یئنی، اولان و سیلینن چئویرمه بیریملری لیست اولوبلار.\nبو نوسخه‌نی چئویرمگه نیشانلاماقدان قاباق، باخین کی چئویرمک بیریملرینه اولان دَییشیکلیکلر ان آز اولسون کی چئویرنلره آرتیق گرکسیز ایشین قاباغی آلینسین.",
"tpt-mark-summary": "بو نوسخه‌نی چئویرمگه نیشانلادی",
"tpt-edit-failed": "صحیفه گونجل‌لننمه‌دی: $1",
@@ -61,6 +57,7 @@
"translate-tag-markthisagain": "بو صحیفه‌نین سون دفعه <span class=\"plainlinks\">[$2 چئویرمگه نیشانلان]</span>اندان بویانا <span class=\"plainlinks\">[$1 دَییشیکلیکلر]</span>ی واردیر.",
"translate-tag-hasnew": "بو صحیفه‌نین <span class=\"plainlinks\">[$1 دَییشیکلیکلری]</span> واردیر کی چئویرمگه نیشانلانماییب‌لار.",
"tpt-translation-intro": "بو صحیفه [[$2]] صحیفه‌سینین <span class=\"plainlinks\">[$1 چئویریلمیش نوسخه‌سی]</span>‌دیر و $3٪ چئویرمگی قاباغا گئدیب‌دیر.",
+ "tpt-translation-intro-fuzzy": "تاریخی گئچمیش چئویرمه‌لر بونون کیمی نیشانلانیبلار.",
"tpt-languages-legend": "آیری دیل‌لر:",
"tpt-languages-zero": "بو دیله چئویرمگه باشلا",
"tpt-languages-nonzero": "$1 ($2% ترجومه اولوب)",
@@ -72,10 +69,9 @@
"tpt-discouraged-language-reason": "ندن: $1",
"tpt-priority-languages": "بیر چئویرمک ایداره‌چیسی، بو قروپون اؤنجه‌لیک دیلینی $1 سئچیب‌دیر.",
"tpt-render-summary": "قایناق صحیفه‌نین یئنی نوسخه‌سی ایله تطبیق اوچون گونجل‌لنیر",
- "tpt-download-page": "صحیفه‌نی چئویرمه‌لرله ائشیگه چیخارت",
"aggregategroups": "بیرلشدیریلمیش قروپلار",
"tpt-aggregategroup-add": "آرتیر",
- "tpt-aggregategroup-save": "قئید ائت",
+ "tpt-aggregategroup-save": "ذخیره ائت",
"tpt-aggregategroup-add-new": "بیر یئنی بیرلشمه قروپو آرتیر",
"tpt-aggregategroup-new-name": "آد:",
"tpt-aggregategroup-new-description": "توضیح (ایستگه باغلی):",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ba.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ba.json
index 38ddae62..e4d0283d 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ba.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ba.json
@@ -2,9 +2,13 @@
"@metadata": {
"authors": [
"Haqmar",
- "Рустам Нурыев"
+ "Рустам Нурыев",
+ "Kaganer"
]
},
+ "translate-tag-translate-link-desc": "Был битте тәржемә итергә",
+ "tpt-translation-intro": "Был бит — [[$2]] бите <span class=\"plainlinks\">[$1 тәржемәһе]</span>. Тәржемә $3% үтәлгән",
+ "tpt-languages-legend": "Башҡа телдәр:",
"tpt-languages-nonzero": "$1 ($2% тәржемә ителгән)",
"pt-movepage-list-other": "Башҡа эске биттәр",
"pt-movepage-legend": "Тәржемә итеп булған биттәрҙең исемен үҙгәртергә",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/bar.json b/www/wiki/extensions/Translate/i18n/pagetranslation/bar.json
index 44646752..ce25b15a 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/bar.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/bar.json
@@ -6,12 +6,9 @@
},
"pagetranslation": "Seiten ywersétzen",
"right-pagetranslation": "Seitenversión fyr d' Ywersétzung markirn",
- "tpt-desc": "Daméglichts Ywersétzen voh Inhoidsseiten",
"tpt-section": "Ywersétzungsoahheit $1",
"tpt-section-new": "Neiche Ywersétzungsoahheit. Nåm $1",
"tpt-section-deleted": "Ywersétzungsoahheit $1",
- "tpt-template": "Seitenvurlog",
- "tpt-templatediff": "Dé Seitenvurlog hod sé gänderd.",
"tpt-diff-old": "Vuriger Text",
"tpt-diff-new": "Neicher Text",
"tpt-submit": "Dé Versión do zur Ywersétzung markirn",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/bcl.json b/www/wiki/extensions/Translate/i18n/pagetranslation/bcl.json
index 4200f857..015f0cd1 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/bcl.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/bcl.json
@@ -1,17 +1,15 @@
{
"@metadata": {
"authors": [
- "Geopoet"
+ "Geopoet",
+ "ShimunUfesoj"
]
},
"pagetranslation": "Dakit-taramon kan pahina",
"right-pagetranslation": "Markahi an mga bersyon kan mga pahina para sa dakit-taramon",
- "tpt-desc": "Ekstensyon para sa pagdadakit-taramon kan mga laman nin mga pahina",
"tpt-section": "Yunit kan dakit-taramon $1",
"tpt-section-new": "Bagong yunit kan dakit-taramon.\nPangaran: $1",
"tpt-section-deleted": "Yunit kan dakit-taramon $1",
- "tpt-template": "Panguyog kan pahina",
- "tpt-templatediff": "An panguyog kan pahina pinagbago.",
"tpt-diff-old": "Dating teksto",
"tpt-diff-new": "Baguhong teksto",
"tpt-submit": "Markahi ining bersyon para sa pagdakit-taramon",
@@ -24,7 +22,6 @@
"tpt-oldrevision": "An $2 bako an pinakabaguhong bersyon kan pahina [[:$1]].\nAn mga pinakabaguhong bersyon sana an puwedeng markahan para sa dakit-taramon.",
"tpt-notsuitable": "An pahina $1 bakong naaangay para sa dakit-taramon.\nHimoong segurado na ini igwang <nowiki><translate></nowiki> mga tatak asin igwa nin balidong sintaks.",
"tpt-saveok": "An pahina [[:$1]] pinagmarkahan pra sa dakit-taramon na igwang $2 {{PLURAL:$2|yunit kan dakit-taramon|mga yunit kan dakit-taramon}}.\nAn pahina mapuwede ngunyan na magin <span class=\"plainlinks\">[$3 pinagdakit-taramon]</span>.",
- "tpt-badsect": "An \"$1\" bakong balidong ngaran para sa yunit kan dakit-taramon $2.",
"tpt-showpage-intro": "Yaon sa ibaba an bago, dati na asin pinagburang yunit nin mga dakit-taramon an nagkarilista.\nBago mamarkahan nin bersyon para sa pagdakit-taramon, aramon mo na an mga kaliwatan pasiring sa mga yunit nin dakit-taramon pinagminimisa tanganing likayan an bakong kaipuhanan na trabaho para sa mga translador.",
"tpt-mark-summary": "Markado ining bersyon para sa pagdakit-taramon",
"tpt-edit-failed": "Dae mapanumpayan an pahina: $1",
@@ -57,8 +54,10 @@
"translate-tag-markthisagain": "Ining pahina igwa nin <span class=\"plainlinks\">[$1 mga kaliwatan]</span> poon pa kaitong huri ining <span class=\"plainlinks\">[$2 pinagmarkahan para ipagdakit-taramon]</span>.",
"translate-tag-hasnew": "Ining pahina igwa nin <span class=\"plainlinks\">[$1 mga kaliwatan]</span> na dae pinagmarkahan para ipagdakit-taramon.",
"tpt-translation-intro": "Ining pahina sarong <span class=\"plainlinks\">[$1 pinagdakit-taramon na bersyon]</span> kan pahina [[$2]] asin an pagdakit-taramon na $3% nakumpleto na.",
+ "tpt-translation-intro-fuzzy": "An luwas sa panahon na mga pinagdakit-taramon pinagmarkahan nin arog kaini.",
"tpt-languages-legend": "Ibang mga lengguwahe:",
"tpt-languages-zero": "Magpoon sa pagdakit-taramon para sa lengguwaheng ini",
+ "tpt-languages-nonzero": "$1 ($2% an pigsalin-tataramon)",
"tpt-target-page": "Ining pahina dae puwedeng manwal na pagpanumpayan.\nIning pahina sarong dakit-taramon kan pahina [[$1]] asin an pinagdakit-taramon mapuwedeng panumbayan na gamit an [$2 an gamit sa pagdakit-taramon].",
"tpt-unknown-page": "Ining espasyong ngaran nakareserba para sa pahina kan laman nin mga dakit-taramon.\nAn pahina na saimong boot na pagliliwaton garo habong magtutugot sa arinman na pahinang markado para ipagdakit-taramon.",
"tpt-translation-restricted": "An pagdakit-taramon kaining pahina sa lengguwaheng ini pinagpupugulan kan administrador nin pagdakit-taramon.\n\nRason: $1",
@@ -67,7 +66,6 @@
"tpt-discouraged-language-reason": "Rason: $1",
"tpt-priority-languages": "An administrador kan pagdakit-taramon ikinaag an prayoridad na mga lengguwahe para kaining grupo sa $1.",
"tpt-render-summary": "Panunumpayan tanganing ipagtugma sa baguhong bersyon kan ginikanang pahina",
- "tpt-download-page": "Salimbagong pahina na igwang mga pinagdakit-taramon",
"aggregategroups": "Sinurumpay na mga grupo",
"tpt-aggregategroup-add": "Dugangan",
"tpt-aggregategroup-save": "Ipagtagama",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/be-tarask.json b/www/wiki/extensions/Translate/i18n/pagetranslation/be-tarask.json
index 66bffdab..7328cc1c 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/be-tarask.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/be-tarask.json
@@ -9,14 +9,11 @@
]
},
"pagetranslation": "Пераклад старонкі",
- "right-pagetranslation": "пазначаць вэрсіяў старонак для перакладу",
+ "right-pagetranslation": "пазначэньне вэрсіяў старонак для перакладу",
"action-pagetranslation": "кіраваньне перакладам старонак",
- "tpt-desc": "Пашырэньне для перакладу старонак зьместу",
"tpt-section": "Адзінка перакладу $1",
"tpt-section-new": "Новая адзінка перакладу. Назва: $1",
"tpt-section-deleted": "Адзінка перакладу $1",
- "tpt-template": "Старонка шаблёну",
- "tpt-templatediff": "Старонка шаблёну была зьменена.",
"tpt-diff-old": "Папярэдні тэкст",
"tpt-diff-new": "Новы тэкст",
"tpt-submit": "Пазначыць гэту вэрсію для перакладу",
@@ -30,9 +27,9 @@
"tpt-notsuitable": "Старонка $1 ня можа быць перакладзеная.\nУпэўніцеся, што яна ўтрымлівае тэгі <nowiki><translate></nowiki> і мае слушны сынтаксіс.",
"tpt-saveok": "Старонка «$1» была пазначаная для перакладу з $2 {{PLURAL:$2|адзінкай перакладу|адзінкамі перакладу|адзінкамі перакладу}}.\nЗараз старонка можа быць <span class=\"plainlinks\">[$3 перакладзеная]</span>.",
"tpt-offer-notify": "Вы можаце <span class=\"plainlinks\">[$1 паведаміць перакладчыкам]</span> пра гэтую старонку.",
- "tpt-badsect": "«$1» не зьяўляецца слушнай назвай для адзінкі перакладу $2.",
- "tpt-showpage-intro": "Ніжэй знаходзяцца новыя, існуючыя і выдаленыя сэкцыі.\nПерад пазначэньнем гэтай вэрсіі для перакладу, праверце зьмены ў сэкцыях для таго, каб пазьбегнуць непатрэбнай працы для перакладчыкаў.",
+ "tpt-showpage-intro": "Ніжэй знаходзяцца новыя, існуючыя і выдаленыя сэкцыі.\nПерад пазначэньнем гэтай вэрсіі для перакладу праверце зьмены ў сэкцыях для таго, каб пазьбегнуць непатрэбнай працы для перакладчыкаў.",
"tpt-mark-summary": "Пазначыў гэтую вэрсію для перакладу",
+ "tpt-mark-nochanges": "Няма зьмяненьняў для прагляду. Пазначэньне гэтай старонкі для перакладу не адрэдагуе ні яе, ні любыя модулі перакладу.",
"tpt-edit-failed": "Немагчыма абнавіць старонку: $1",
"tpt-duplicate": "Назва адзінкі перакладу «$1» скарыстаная больш за адзін раз.",
"tpt-already-marked": "Апошняя вэрсія гэтай старонкі ўжо была пазначана для перакладу.",
@@ -63,19 +60,21 @@
"translate-tag-markthisagain": "Гэта старонка ўтрымлівае <span class=\"plainlinks\">[$1 зьмены]</span> пасьля апошняй <span class=\"plainlinks\">[$2 пазнакі для перакладу]</span>.",
"translate-tag-hasnew": "Гэта старонка ўтрымлівае <span class=\"plainlinks\">[$1 зьмены]</span>, не пазначаныя для перакладу.",
"tpt-translation-intro": "Гэтая старонка — <span class=\"plainlinks\">[$1 перакладзеная вэрсія]</span> старонкі [[$2]]. Пераклад завершаны на $3%.",
+ "tpt-translation-intro-fuzzy": "Гэтак пазначаныя састарэлыя пераклады.",
"tpt-languages-legend": "Іншыя мовы:",
"tpt-languages-zero": "Пачаць пераклад на гэтую мову",
"tpt-languages-nonzero": "$1 ($2% перакладзена)",
"tpt-tab-translate": "Перакладаць",
"tpt-target-page": "Гэта старонка ня можа быць абноўлена ўручную.\nГэта старонка зьяўляецца перакладам старонкі [[$1]], пераклад можа быць абноўлены з выкарыстаньнем [$2 інструмэнта перакладу].",
- "tpt-unknown-page": "Гэта прастора назваў зарэзэрваваная для перакладаў старонак зьместу.\nСтаронка, якую Вы спрабуеце рэдагаваць, верагодна не зьвязана зь якой-небудзь старонкай пазначанай для перакладу.",
+ "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",
"tpt-priority-languages": "Адміністратар перакладаў вызначыў прыярытэтныя мовы для гэтай групы: $1.",
"tpt-render-summary": "Абнаўленьне для адпаведнасьці новай вэрсіі крынічнай старонкі",
- "tpt-download-page": "Экспартаваць старонку з перакладамі",
"aggregategroups": "Абагульняльныя групы",
"tpt-aggregategroup-add": "Дадаць",
"tpt-aggregategroup-save": "Захаваць",
@@ -84,6 +83,11 @@
"tpt-aggregategroup-new-description": "Апісаньне (неабавязкова):",
"tpt-aggregategroup-remove-confirm": "Вы ўпэўненыя, што жадаеце выдаліць гэтую абагульняльную групу?",
"tpt-aggregategroup-invalid-group": "Група не існуе",
+ "tpt-aggregategroup-edit-name": "Назва:",
+ "tpt-aggregategroup-edit-description": "Апісаньне:",
+ "tpt-aggregategroup-update": "Захаваць",
+ "tpt-aggregategroup-update-cancel": "Скасаваць",
+ "tpt-invalid-group": "Няслушная група",
"pt-parse-open": "Незбалянсаваны тэг &lt;translate>.\nШаблён перакладу: <pre>$1</pre>",
"pt-parse-close": "Незбалянсаваны тэг &lt;/translate>.\nШаблён перакладу: <pre>$1</pre>",
"pt-parse-nested": "Укладзеныя сэкцыі &lt;translate> не дазволеныя.\nТэкст тэгу: <pre>$1</pre>",
@@ -93,7 +97,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",
@@ -131,8 +135,8 @@
"pt-movepage-action-perform": "Перанесьці",
"pt-movepage-action-other": "Зьмяніць мэту",
"pt-movepage-intro": "Гэтая спэцыяльная старонка дазваляе пераносіць старонкі, пазначаныя да перакладу.\nПеранос не адбудзецца імгненна, таму што спатрэбіцца пераносіць шмат старонак.\nПадчас пераносу маніпуляцыя са старонкамі будзе немагчымая.\nУсе памылкі падчас пераносу будуць занесеныя ў [[Special:Log/pagetranslation|журнал перакладу старонак]], і будзе патрэбная іх ручная апрацоўка.",
- "pt-movepage-logreason": "Частка старонкі $1, якую магчыма перакласьці.",
- "pt-movepage-started": "Асноўная старонка перанесеная.\nПраверце [[Special:Log/pagetranslation|журнал перакладаў старонак]] наконт памылак і паведамленьня пра выкананьне.",
+ "pt-movepage-logreason": "Частка старонкі для перакладу «$1»",
+ "pt-movepage-started": "Калі ласка, праверце [[Special:Log/pagetranslation|журнал перакладаў старонак]] наконт памылак і паведамленьня пра выкананьне.",
"pt-locked-page": "Гэтая старонка заблякаваная з-за працэсу пераносу старонкі, якую магчыма перакласьці.",
"pt-deletepage-lang-title": "Выдаленьне старонкі перакладу «$1».",
"pt-deletepage-full-title": "Выдаленьне старонкі «$1», якую магчыма перакладаць.",
@@ -152,8 +156,9 @@
"pt-deletepage-list-section": "Старонкі адзінкі перакладу",
"pt-deletepage-list-other": "Іншыя падстаронкі",
"pt-deletepage-list-count": "Агулам $1 {{PLURAL:$1|старонка|старонкі|старонак}} да выдаленьня.",
- "pt-deletepage-full-logreason": "Частка старонкі $1, якую магчыма перакласьці.",
- "pt-deletepage-lang-logreason": "Частка перакладзенай старонкі $1.",
+ "pt-deletepage-full-logreason": "Частка старонкі для перакладу «$1»",
+ "pt-deletepage-lang-logreason": "Частка старонкі для перакладу «$1»",
"pt-deletepage-started": "Калі ласка, праверце [[Special:Log/pagetranslation|старонку журнала перакладаў]] адносна памылак і паведамленьняў пра выкананьне.",
- "pt-deletepage-intro": "Гэтая спэцыяльная старонка дазваляе Вам выдаляць цэлыя перакладальныя старонкі, альбо перакладзеныя на іншыя мовы.\nВыдаленьне ня здарыцца хутка, таму што залежныя старонкі таксама будуць выдаленыя.\nПамылкі будуць запратакаляваныя на [[Special:Log/pagetranslation|старонцы журналу перакладаў]] і патрабуюць выпраўленьня ўручную."
+ "pt-deletepage-intro": "Гэтая спэцыяльная старонка дазваляе Вам выдаляць цэлыя перакладальныя старонкі, альбо перакладзеныя на іншыя мовы.\nВыдаленьне ня здарыцца хутка, таму што залежныя старонкі таксама будуць выдаленыя.\nПамылкі будуць запратакаляваныя на [[Special:Log/pagetranslation|старонцы журналу перакладаў]] і патрабуюць выпраўленьня ўручную.",
+ "tpt-translate-title": "Дазволіць пераклад назвы старонкі"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/be.json b/www/wiki/extensions/Translate/i18n/pagetranslation/be.json
index dd3c5f26..e527f27b 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/be.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/be.json
@@ -5,16 +5,16 @@
"Mikalai Udodau",
"Unomano",
"Artificial123",
- "Чаховіч Уладзіслаў"
+ "Чаховіч Уладзіслаў",
+ "Artsiom91"
]
},
+ "tpt-languages-legend": "Іншыя мовы:",
"tpt-languages-nonzero": "$1 ($2% перакладзена)",
"pt-movepage-reason": "Прычына:",
"pm-import-button-label": "Імпартаваць",
"pm-savepages-button-label": "Запісаць",
"pm-cancel-button-label": "Адмяніць",
- "pm-pagename-placeholder": "Увядзіце назву старонкі",
- "pm-langcode-placeholder": "Код мовы",
"pm-add-icon-hover-text": "Дадаць блок ніжэй",
"pm-swap-icon-hover-text": "Замяніць блокам ніжэй",
"pm-delete-icon-hover-text": "Выдаліць блок"
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/bg.json b/www/wiki/extensions/Translate/i18n/pagetranslation/bg.json
index c5325fb6..e68c2cd5 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/bg.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/bg.json
@@ -3,24 +3,35 @@
"authors": [
"DCLXVI",
"පසිඳු කාවින්ද",
- "StanProg"
+ "StanProg",
+ "Termininja",
+ "ShockD"
]
},
+ "pagetranslation": "Превод на страници",
"tpt-diff-old": "Предишен текст",
"tpt-diff-new": "Нов текст",
"tpt-nosuchpage": "Страницата „$1“ не съществува",
+ "tpt-new-pages-title": "Страници предложени за превод",
"tpt-other-pages-title": "Счупени страници",
+ "tpt-discouraged-pages-title": "Непрепоръчителни страници",
+ "tpt-discouraged-pages": "Препоръчва се {{PLURAL:$1|тази страница да не се превежда|тези страници да не се превеждат}} повече.",
"tpt-select-prioritylangs-reason": "Причина:",
+ "tpt-sections-prioritylangs": "Приоритетни езици",
"translate-tag-translate-link-desc": "Превеждане на тази страница",
+ "tpt-translation-intro": "Тази страница е <span class=\"plainlinks\">[$1 преведена версия]</span> на страницата [[$2]] и преводът е завършен на $3%.",
"tpt-languages-legend": "Други езици:",
"tpt-languages-nonzero": "$1 ($2% преведено)",
"tpt-discouraged-language-reason": "Причина: $1",
- "tpt-download-page": "Изнасяне на страница с преводите",
"tpt-aggregategroup-add": "Добавяне",
"tpt-aggregategroup-save": "Съхраняване",
"tpt-aggregategroup-new-name": "Име:",
"tpt-aggregategroup-new-description": "Описание (незадължително):",
"tpt-aggregategroup-invalid-group": "Групата не съществува",
+ "tpt-aggregategroup-update": "Съхраняване",
+ "tpt-aggregategroup-update-cancel": "Отказ",
+ "log-action-filter-pagetranslation": "Тип на действието:",
+ "log-action-filter-pagetranslation-delete": "Изтриване на страници",
"pt-movepage-list-other": "{{PLURAL:$1|Друга подстраница|Други подстраници}}",
"pt-movepage-current": "Текущо име:",
"pt-movepage-new": "Ново име:",
@@ -29,5 +40,14 @@
"pt-deletepage-action-perform": "Извършване на изтриването",
"pt-deletepage-reason": "Причина:",
"pt-deletepage-subpages": "Изтриване на всички подстраници",
- "pt-deletepage-list-other": "Други подстраници"
+ "pt-deletepage-list-other": "Други подстраници",
+ "pm-import-button-label": "Внасяне",
+ "pm-savepages-button-label": "Съхраняване",
+ "pm-cancel-button-label": "Отказ",
+ "tpt-translate-title": "Позволяване превод на заглавието на страницата",
+ "pp-save-button-label": "Съхраняване",
+ "pp-cancel-button-label": "Отказ",
+ "pp-diff-old-header": "Изходен текст",
+ "pp-diff-new-header": "Подготвен текст",
+ "tpt-generic-confirm": "Моля, потвърдете действието."
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/bho.json b/www/wiki/extensions/Translate/i18n/pagetranslation/bho.json
new file mode 100644
index 00000000..2370d2af
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/bho.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "SatyamMishra"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% अनुवाद पूरा)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/bn.json b/www/wiki/extensions/Translate/i18n/pagetranslation/bn.json
index 89da5da6..47c3996f 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/bn.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/bn.json
@@ -3,24 +3,49 @@
"authors": [
"Aftab1995",
"Bellayet",
- "Aftabuzzaman"
+ "Aftabuzzaman",
+ "আফতাবুজ্জামান"
]
},
"pagetranslation": "পাতা অনুবাদ",
+ "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-action-nofuzzy": "অনুবাদগুলি অকার্যকর করবেন না",
"tpt-nosuchpage": "$1 পাতাটির অস্তিত্ব নেই",
+ "tpt-saveok": "$2টি {{PLURAL:$2|অনুবাদের উপাদানসহ}} [[:$1]] পাতাটি অনুবাদের জন্য চিহ্নিত করা হয়েছে। পাতাটি এখন <span class=\"plainlinks\">[$3 অনুবাদ করা]</span> যাবে।",
+ "tpt-mark-summary": "এই সংস্করণ অনুবাদের জন্য চিহ্নিত করা হয়েছে",
+ "tpt-already-marked": "এই পাতার সর্বশেষ সংস্করণটি ইতিমধ্যে অনুবাদের জন্য চিহ্নিত করা হয়েছে।",
+ "tpt-old-pages-title": "অনুবাদে থাকা পাতা",
+ "tpt-other-pages-title": "ভাঙ্গা পাতা",
+ "tpt-discouraged-pages-title": "নিরুৎসাহিত করা পাতা",
+ "tpt-old-pages": "{{PLURAL:$1|এই পাতাটির|এই পাতাগুলির}} কিছু সংস্করণ অনুবাদের জন্য চিহ্নিত করা হয়েছে।",
"tpt-select-prioritylangs-reason": "কারণ:",
+ "tpt-sections-prioritylangs": "অগ্রাধিকারের ভাষাগুলি",
+ "tpt-rev-mark": "অনুবাদের জন্য চিহ্নিত করুন",
+ "tpt-rev-unmark": "অনুবাদ থেকে সরান",
+ "tpt-rev-discourage": "নিরুৎসাহিত করুন",
"tpt-rev-encourage": "পুনরুদ্ধার",
+ "tpt-rev-mark-tooltip": "অনুবাদের জন্য এই পৃষ্ঠার সর্বশেষ সংস্করণ চিহ্নিত করুন।",
+ "tpt-rev-unmark-tooltip": "অনুবাদ থেকে এই পাতাটি সরান।",
"translate-tag-translate-link-desc": "এই পাতা অনুবাদ করুন",
"translate-tag-markthis": "অনুবাদের জন্য এই পাতা চিহ্নিত করুন",
"translate-tag-hasnew": "এই পাতায় <span class=\"plainlinks\">[$1 পরিবর্তন]</span> রয়েছে যা অনুবাদ করার জন্য চিহ্নিত করা হয় নি।",
"tpt-translation-intro": "এই পাতাটি [[$2]] পাতার একটি <span class=\"plainlinks\">[$1 অনূদিত সংস্করণ]</span> এবং অনুবাদ $3% সম্পূর্ণ হয়েছে।",
+ "tpt-translation-intro-fuzzy": "পুরাতন অনুবাদ এটির মত চিহ্নিত করা হয়েছে।",
"tpt-languages-legend": "অন্য ভাষা:",
"tpt-languages-zero": "এই ভাষায় অনুবাদ শুরু করুন",
"tpt-languages-nonzero": "$1 ($2% অনূদিত)",
"tpt-tab-translate": "অনুবাদ",
+ "tpt-target-page": "এই পাতাটি ম্যানুয়ালি হালনাগাদ করা যাবে না।\nএই পাতাটি [[$1]] পাতার একটি অনুবাদ এবং [$2 অনুবাদ সরঞ্জাম] ব্যবহার করে অনুবাদ হালনাগাদ করা যাবে।",
"tpt-discouraged-language-reason": "কারণ: $1",
+ "tpt-render-summary": "উৎস পাতার নতুন সংস্করণের সাথে মেলাতে হালনাগাদ করা হচ্ছে",
"tpt-aggregategroup-add": "যোগ",
"tpt-aggregategroup-save": "সংরক্ষণ",
"tpt-aggregategroup-new-name": "নাম:",
@@ -29,16 +54,33 @@
"tpt-aggregategroup-edit-description": "বিবরণ:",
"tpt-aggregategroup-update": "সংরক্ষণ",
"tpt-aggregategroup-update-cancel": "বাতিল",
- "log-name-pagetranslation": "পাতা অনুবাদ লগ্",
+ "log-name-pagetranslation": "পাতা অনুবাদ লগ",
"logentry-pagetranslation-mark": "$1 $3 অনুবাদের জন্য {{GENDER:$2|চিহ্নিত করেছেন}}",
+ "logentry-pagetranslation-unmark": "$1 অনুবাদ থেকে $3 {{GENDER:$2|সরিয়ে ফেলেছেন}}",
+ "logentry-pagetranslation-deletefok": "$1 অনুবাদযোগ্য $3 পাতার অপসারণ {{GENDER:$2|সম্পন্ন}} করেছেন",
+ "logentry-pagetranslation-deletelok": "$1 অনুবাদের পাতা $3 অপসারণ {{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-encourage": "অনুবাদের জন্য অনুপ্রেরণা",
+ "log-action-filter-pagetranslation-discourage": "অনুবাদের জন্য নিরুৎসাহ",
+ "log-action-filter-pagetranslation-prioritylanguages": "অগ্রাধিকারের ভাষায় পরিবর্তন",
+ "log-action-filter-pagetranslation-aggregategroups": "সমষ্টিগত দল পরিবর্তন",
+ "pt-movepage-title": "অনুবাদযোগ্য পাতা $1 স্থানান্তর করুন",
"pt-movepage-current": "বর্তমান নাম:",
"pt-movepage-new": "নতুন নাম:",
"pt-movepage-reason": "কারণ:",
+ "pt-movepage-logreason": "অনুবাদযোগ্য পাতা \"$1\"-এর অংশ",
"pt-deletepage-current": "পাতার নাম:",
"pt-deletepage-reason": "কারণ:",
+ "pt-deletepage-full-logreason": "অনুবাদযোগ্য পাতা \"$1\"-এর অংশ",
+ "pt-deletepage-lang-logreason": "অনুবাদ পাতা \"$1\"-এর অংশ",
"pm-import-button-label": "আমদানি",
"pm-savepages-button-label": "সংরক্ষণ",
"pm-cancel-button-label": "বাতিল",
+ "tpt-translate-title": "পাতার শিরোনাম অনুবাদের অনুমোদন দিন",
"pp-save-button-label": "সংরক্ষণ",
"pp-cancel-button-label": "বাতিল",
"tpt-generic-button": "নিশ্চিত করুন"
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/bqi.json b/www/wiki/extensions/Translate/i18n/pagetranslation/bqi.json
new file mode 100644
index 00000000..3997310e
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/bqi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mogoeilor"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ڤورگٱنیڌاْ ڤابیڌاْ)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/br.json b/www/wiki/extensions/Translate/i18n/pagetranslation/br.json
index 1640b14f..f14595bb 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/br.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/br.json
@@ -9,12 +9,9 @@
"pagetranslation": "Troidigezh ur bajenn",
"right-pagetranslation": "Merkañ stummoù pajennoù evit ma vefent troet",
"action-pagetranslation": "Merañ ar pajennoù a c'haller treiñ",
- "tpt-desc": "Astenn evit treiñ pajennoù gant danvez",
"tpt-section": "Unanenn treiñ $1",
"tpt-section-new": "Unvez treiñ nevez.\nAnv : $1",
"tpt-section-deleted": "Unanenn dreiñ $1",
- "tpt-template": "Patrom pajenn",
- "tpt-templatediff": "Kemmet eo patrom ar bajenn.",
"tpt-diff-old": "Testenn gent",
"tpt-diff-new": "Testenn nevez",
"tpt-submit": "Merkañ ar stumm-mañ da vezañ troet",
@@ -25,9 +22,8 @@
"tpt-badtitle": "N'eo ket reizh titl anv ar bajenn ($1) zo bet lakaet",
"tpt-nosuchpage": "N'eus ket eus ar bajenn $1.",
"tpt-oldrevision": "N'eo ket $2 stumm diwezhañ ar bajenn [[:$1]].\nN'eus nemet ar stummoù diwezhañ a c'hall bezañ merket evit bezañ troet.",
- "tpt-notsuitable": "N'haller ket treiñ ar bajenn $1.\nGwiria ez eus balizennoù <nowiki><translate></nowiki> enni hag ez eo reizh an ereadurezh anezhi.",
+ "tpt-notsuitable": "N'haller ket treiñ ar bajenn $1.\nGwiria ez eus tikedennoù <nowiki><translate></nowiki> enni hag ez eo reizh an ereadurezh anezhi.",
"tpt-saveok": "Merket eo bet ar bajenn [[:$1]] evit bezañ troet gant $2 {{PLURAL:$2|unanenn dreiñ|unanenn dreiñ}}.\nGallout a ra ar bajenn bezañ <span class=\"plainlinks\">[$3 troet]</span> bremañ.",
- "tpt-badsect": "Direizh eo an anv \"$1\" evit un unanenn dreiñ $2.",
"tpt-showpage-intro": "A-is emañ rollet an troidigezhioù nevez, ar re zo anezho hag ar re bet diverket.\nKent merkañ ar stumm-mañ evit an treiñ, gwiriait mat n'eus ket bet nemeur a gemmoù er rannbennadoù kuit da bourchas labour aner d'an droourien.",
"tpt-mark-summary": "Merket eo bet ar stumm-mañ da vezañ troet",
"tpt-edit-failed": "N'eus ket bet gallet hizivaat ar bajenn : $1",
@@ -39,7 +35,7 @@
"tpt-old-pages-title": "Pajennoù emeur o treiñ",
"tpt-other-pages-title": "Pajennoù torr",
"tpt-discouraged-pages-title": "Pajennoù dizerbedet",
- "tpt-new-pages": "{{PLURAL:$1|Er bajenn-mañ|Er pajennoù-mañ}} ez eus testennoù enno balizennoù treiñ, met stumm ebet eus ar {{PLURAL:$1|bajenn-mañ|pajennoù-mañ}} n'eo bet merket da vezañ troet.",
+ "tpt-new-pages": "{{PLURAL:$1|Er bajenn-mañ|Er pajennoù-mañ}} ez eus testennoù enno tikedennoù treiñ, met stumm ebet eus ar {{PLURAL:$1|bajenn-mañ|pajennoù-mañ}} n'eo bet merket da vezañ troet evit poent.",
"tpt-old-pages": "Stummoù zo eus ar {{PLURAL:$1|bajenn-mañ|pajennoù-mañ}} zo bet merket da vezañ troet.",
"tpt-other-pages": "Merket ez eus bet da vezañ troet {{PLURAL:$1|ur stumm kozh eus ar bajenn-mañ|stummoù koshoc'h eus ar pajennoù-mañ}};\nar {{PLURAL:$1|stumm|stummoù}} diwezhañ avat n'hallont ket bezañ merket da vezañ troet.",
"tpt-discouraged-pages": "Dizerbedet eo treiñ ar {{PLURAL:$1|bajenn-mañ|pajennoù-mañ}} pelloc'h.",
@@ -59,6 +55,7 @@
"translate-tag-markthisagain": "Er bajenn-mañ ez eus bet <span class=\"plainlinks\">[$1 kemm]</span> abaoe m'eo bet <span class=\"plainlinks\">[$2 merket da vezañ troet]</span>.",
"translate-tag-hasnew": "Er bajenn-mañ ez eus <span class=\"plainlinks\">[$1 kemm]</span> ha n'int ket bet merket da vezañ troet.",
"tpt-translation-intro": "Ur stumm <span class=\"plainlinks\">[$1 troet]</span> eus ar bajenn [[$2]] eo ar bajenn-mañ; kaset ez eus bet da benn $3% eus an droidigezh anezhi, ha diouzh an deiz emañ.",
+ "tpt-translation-intro-fuzzy": "An troidigezhioù diamzeret zo merket evel-henn.",
"tpt-languages-legend": "Yezhoù all :",
"tpt-languages-zero": "Stagañ gant an troidigezhioù evit ar yezh-se",
"tpt-languages-nonzero": "$1 ($2% troet)",
@@ -66,16 +63,15 @@
"tpt-unknown-page": "Miret eo an esaouenn anv-mañ evit troidigezh ar pajennoù.\nAr bajenn hoc'h eus klasket kemm ne seblant ket klotañ gant pajenn ebet bet merket evit bezañ troet.",
"tpt-discouraged-language-reason": "Abeg : $1",
"tpt-render-summary": "Hizivadenn da glotañ gant stumm nevez mammenn ar bajenn",
- "tpt-download-page": "Ezporzhiañ ar bajenn gant an troidigezhioù",
"tpt-aggregategroup-add": "Ouzhpennañ",
"tpt-aggregategroup-save": "Enrollañ",
"tpt-aggregategroup-new-name": "Anv :",
"tpt-aggregategroup-new-description": "Deskrivadur (diret) :",
"tpt-aggregategroup-invalid-group": "N'eus ket eus ar strollad-mañ",
"tpt-invalid-group": "Strollad direizh",
- "pt-parse-open": "Balizenn &lt;translate> digempouez.\nPatrom treiñ : <pre>$1</pre>",
- "pt-parse-close": "Balizenn &lt;/translate> digempouez.\nPatrom treiñ <pre>$1</pre>",
- "pt-parse-nested": "N'eo ket aotreet ar rannbennadoù &lt;translate> empret an eil en egile.\nTestenn ar valizenn : <pre>$1</pre>",
+ "pt-parse-open": "Tikedenn &lt;translate> digempouez.\nPatrom treiñ : <pre>$1</pre>",
+ "pt-parse-close": "Tikedenn &lt;/translate> digempouez.\nPatrom treiñ <pre>$1</pre>",
+ "pt-parse-nested": "N'eo ket aotreet ar rannbennadoù &lt;translate> empret an eil en egile.\nTestenn an dikedenn : <pre>$1</pre>",
"pt-shake-multiple": "Merkerioù rannbennadoù lies evit ur rannbennad.\nTestenn ar rannbennad : <pre>$1</pre>",
"pt-shake-position": "Merkerioù rannbennad lec'hiet drol.\nTestenn ar rannbennad : <pre>$1</pre>",
"pt-shake-empty": "Rannbennad c'houllo evit ar merker $1.",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/bs.json b/www/wiki/extensions/Translate/i18n/pagetranslation/bs.json
index 143a438a..a5f8ce7e 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/bs.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/bs.json
@@ -4,17 +4,16 @@
"CERminator",
"Edinwiki",
"Palapa",
- "Semso98"
+ "Semso98",
+ "Srdjan m"
]
},
"pagetranslation": "Prijevod stranice",
"right-pagetranslation": "Označanje verzija stranica za prevođenje",
- "tpt-desc": "Proširenje za prevođenje stranica sadržaja",
+ "action-pagetranslation": "upravljate prevodivim stranicama",
"tpt-section": "Jedinica prevođenja $1",
"tpt-section-new": "Nova jedinica prevođenja. Naziv: $1",
"tpt-section-deleted": "Jedinica prevođenja $1",
- "tpt-template": "Šablon stranice",
- "tpt-templatediff": "Šablon stranice se izmijenio.",
"tpt-diff-old": "Prethodni tekst",
"tpt-diff-new": "Novi tekst",
"tpt-submit": "Označi ovu verziju za prevođenje",
@@ -25,52 +24,119 @@
"tpt-badtitle": "Zadano ime stranice ($1) nije valjan naslov",
"tpt-nosuchpage": "Stranica $1 ne postoji",
"tpt-oldrevision": "$2 nije posljednja verzija stranice [[:$1]].\nJedino posljednje verzije se mogu označiti za prevođenje.",
- "tpt-notsuitable": "Stranica $1 nije pogodna za prevođenje.\nProvjerite da postoje oznake <nowiki><translate></nowiki> i da ima valjanu sintaksu.",
+ "tpt-notsuitable": "Stranica $1 nije pogodna za prevođenje.\nProvjerite da postoje oznake <nowiki><translate></nowiki> i da ima ispravnu sintaksu.",
"tpt-saveok": "Stranica [[:$1]] je označena za prevođenje sa $2 {{PLURAL:$2|prevodilačkom jedinicom|prevodilačke jedinice|prevodilačkih jedinica}}.\nStranica se sad može <span class=\"plainlinks\">[$3 prevoditi]</span>.",
- "tpt-badsect": "\"$1\" nije valjano ime za jedinicu prevođenja $2.",
- "tpt-showpage-intro": "Ispod su navedene nove, postojeće i obrisane sekcije.\nPrije nego što označite ovu verziju za prevođenje, provjerite da su izmjene sekcija minimizirane da bi se spriječio nepotrebni rad prevodioca.",
+ "tpt-offer-notify": "Možete <span class=\"plainlinks\">[$1 obavijestiti prevodioce]</span> o ovoj stranici.",
+ "tpt-showpage-intro": "Ispod su navedene nove, postojeće i obrisane prevodne jedinice.\nPrije nego što označite ovu verziju za prevođenje, provjerite da su izmjene prevodnih jedinica svedene na minimum da bi se spriječio nepotrebni rad prevodioca.",
"tpt-mark-summary": "Ova vezija označena za prevođenje",
+ "tpt-mark-nochanges": "Nema izmjena za pregled. Ako ovu stranicu označite za prevođenje, ona se neće izmijeniti, a isto važi za bilo koju postojeću prevodilačku jedinicu.",
"tpt-edit-failed": "Nije moguće ažurirati stranicu: $1",
+ "tpt-duplicate": "Prevodilačka jedinica $1 koristi se više od jednom.",
"tpt-already-marked": "Posljednja verzija ove stranice je već označena za prevođenje.",
"tpt-unmarked": "Stranica $1 više nije označena za prevođenje.",
"tpt-list-nopages": "Nijedna stranica nije označena za prevođenje niti je spremna za označavanje.",
+ "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 sa oznakama prijevoda, ali nijedna od verzija {{PLURAL:$1|ove stranice|ovih stranica}} nije trenutno označena za prevođenje.",
"tpt-old-pages": "Neke verzije {{PLURAL:$1|ove stranice|ovih stranica}} su označene za prevođenje.",
"tpt-other-pages": "{{PLURAL:$1|Stara verzija ove stranice je označena|Stare verzije ovih stranica su označene}} za prevođenje,\nali {{PLURAL:$1|posljednja verzija ne može|posljednje verzije ne mogu}} biti {{PLURAL:$1|označena|označene}} za prevođenje.",
+ "tpt-discouraged-pages": "Preporučeno je da se {{PLURAL:$1|ova stranica više ne prevodi|ove stranice više ne prevode}}.",
+ "tpt-select-prioritylangs": "Spisak kôdova prioritetnih jezika razdvojenih zarezom:",
+ "tpt-select-prioritylangs-force": "Spriječ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 prevođenja",
+ "tpt-rev-discourage": "nepreporučeno",
+ "tpt-rev-encourage": "vrati",
+ "tpt-rev-mark-tooltip": "Označi posljednju verziju stranice za prevođenje.",
+ "tpt-rev-unmark-tooltip": "Ukloni stranicu iz prijevoda.",
+ "tpt-rev-discourage-tooltip": "Postavi stranicu kao nepreporučenu za daljnje prevođenje.",
+ "tpt-rev-encourage-tooltip": "Vrati stranicu na normalno prevođenje.",
"translate-tag-translate-link-desc": "Prevedi ovu stranicu",
"translate-tag-markthis": "Označi ovu stranicu za prevođenje",
"translate-tag-markthisagain": "Ova stranica ima <span class=\"plainlinks\">[$1 izmjena]</span> od kako je posljednji put <span class=\"plainlinks\">[$2 označena za prevođenje]</span>.",
"translate-tag-hasnew": "Ova stranica sadrži <span class=\"plainlinks\">[$1 izmjena]</span> koje nisu označene za prevođenje.",
- "tpt-translation-intro": "Ova stranica je <span class=\"plainlinks\">[$1 prevedena verzija]</span> stranice [[$2]] a prijevod je $3% dovršen i ažuriran.",
+ "tpt-translation-intro": "Ovo je <span class=\"plainlinks\">[$1 prevedena verzija]</span> stranice [[$2]], a prijevod je $3% dovršen.",
+ "tpt-translation-intro-fuzzy": "Zastarijeli prijevodi su označeni ovako.",
"tpt-languages-legend": "Drugi jezici:",
+ "tpt-languages-zero": "Počnite prijevod na ovaj jezik",
"tpt-languages-nonzero": "$1 ($2% prevedeno)",
+ "tpt-tab-translate": "Prevedi",
"tpt-target-page": "Ova stranica ne može biti ručno ažurirana.\nOva stranica je prijevod stranice [[$1]] a prijevodi se mogu ažurirati putem [$2 alata za prevođenje].",
+ "tpt-patrolling-blocked": "Stranica se ne može patrolirati. Umjesto toga, pregledajte je preko alata za prevođenje.",
"tpt-unknown-page": "Ovaj imenski prostor je rezervisan za prevode stranica sadržaja.\nStranica koju pokušavate uređivati ne odgovara nekoj od stranica koje su označene za prevođenje.",
+ "tpt-translation-restricted": "Prevodilački administrator spriječio je prevođenje stranice na ovaj jezik.\n\nRazlog: $1",
+ "tpt-discouraged-language-force-header": "Stranica se ne može prevesti na $1.",
+ "tpt-discouraged-language-force-content": "Prevodilački administrator odlučio je da se stranica može prevesti samo na $1.",
+ "tpt-discouraged-language-header": "Prevođenje na $1 nije prioritet za ovu stranicu.",
+ "tpt-discouraged-language-content": "Prevodilački administrator odlučio je da se prevođenje treba usredotočiti na $1.",
+ "tpt-discouraged-language-force": "<strong>Stranica se ne može prevesti na $2.</strong>\n\nPrevodilački administrator odlučio je da se stranica može prevesti samo na $3.",
+ "tpt-discouraged-language": "<strong>Prevođenje ove stranice na $2 nije prioritet.</strong>\n\nPrevodilački administrator odlučio je da se treba usredotočiti na $3.",
+ "tpt-discouraged-language-reason": "Razlog: $1",
+ "tpt-priority-languages": "Prevodilački administrator ovoj grupi je postavio sljedeće prioritetne jezike: $1.",
"tpt-render-summary": "Ažuriram na novu verziju izvorne stranice",
- "tpt-download-page": "Izvezi stranicu sa prijevodima",
+ "aggregategroups": "Zbirne grupe",
+ "tpt-aggregategroup-add": "Dodaj",
+ "tpt-aggregategroup-save": "Sačuvaj",
+ "tpt-aggregategroup-add-new": "Dodaj novu zbirnu grupu",
+ "tpt-aggregategroup-new-name": "Naziv:",
+ "tpt-aggregategroup-new-description": "Opis (neobavezno):",
+ "tpt-aggregategroup-remove-confirm": "Jeste li sigurni da želite obrisati ovu zbirnu grupu?",
+ "tpt-aggregategroup-invalid-group": "Grupa ne postoji",
+ "tpt-aggregategroup-edit-name": "Naziv:",
+ "tpt-aggregategroup-edit-description": "Opis:",
+ "tpt-aggregategroup-update": "Sačuvaj",
+ "tpt-aggregategroup-update-cancel": "Otkaži",
+ "tpt-invalid-group": "Neispravna grupa",
"pt-parse-open": "Neuravnotežena &lt;translate> oznaka.\nŠablon za prevođenje: <pre>$1</pre>",
"pt-parse-close": "Neuravnotežena &lt;/translate> oznaka.\nŠablon za prevođenje: <pre>$1</pre>",
- "pt-parse-nested": "Uklopljene &lt;translate> sekcije nisu dozvoljene.\nTekst oznake: <pre>$1</pre>",
- "pt-shake-multiple": "Veći broj oznaka sekcija za istu sekciju.\nTekst sekcije: <pre>$1</pre>",
- "pt-shake-position": "Oznake sekcija na nepredviđenoj poziciji.\nTekst sekcije: <pre>$1</pre>",
- "pt-shake-empty": "Prazna sekcija za marker $1.",
+ "pt-parse-nested": "Uklopljene &lt;translate> prevodne jedinice nisu dozvoljene.\nTekst oznake: <pre>$1</pre>",
+ "pt-shake-multiple": "Veći broj prevodnih jedinica za istu prevodnu jedinicu.\nTekst prevodne jedinice: <pre>$1</pre>",
+ "pt-shake-position": "Markeri prevodne jedinice na nepredviđenoj poziciji.\nTekst prevodne jedinice: <pre>$1</pre>",
+ "pt-shake-empty": "Prazna prevodna jedinica za marker \"$1\".",
"log-description-pagetranslation": "Zapisnik akcije vezanih za sistem prevođenja stranica",
"log-name-pagetranslation": "Zapisnik prijevoda stranice",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|označio|označila}} je $3 za prevođenje",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|uklonio|uklonila}} je $3 iz prijevoda",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|završio|završila}} je preimenovanje prevodive stranice $3 na $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|naišao|naišla}} je na problem pri premještanju stranice $3 na $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|završio|završila}} je brisanje prevodive stranice $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|nije uspio|nije uspjela}} obrisati stranicu $3 koja pripada prevodivoj stranici $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|završio|završila}} je brisanje prevodive stranice $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|nije uspio|nije uspjela}} obrisati stranicu $3 koja pripada prevodivoj stranici $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|preporučio|preporučila}} je da se prevede $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|preporučio|preporučila}} je da se ne prevodi $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|uklonio|uklonila}} je prioritetne jezike s prevodive stranice $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|postavio|postavila}} je prioritetne jezike $5 za prevodivu stranicu $3",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ograničio|ograničila}} je jezike prevodive stranice $3 na $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|dodao|dodala}} je prevodivu stranicu $3 u zbirnu grupu $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|uklonio|uklonila}} je prevodivu stranicu $3 iz zbirne grupe $4",
+ "log-action-filter-pagetranslation": "Vrsta radnje:",
+ "log-action-filter-pagetranslation-mark": "Označavanje za prevođenje",
+ "log-action-filter-pagetranslation-unmark": "Uklanjanje iz prijevoda",
+ "log-action-filter-pagetranslation-move": "Premještanje stranica",
+ "log-action-filter-pagetranslation-delete": "Brisanje 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": "Promjena prioritetnih jezika",
+ "log-action-filter-pagetranslation-aggregategroups": "Promjena zbirnih grupa",
"pt-movepage-title": "Premještanje stranice za prevođenje $1",
"pt-movepage-blockers": "Stranica koja se može prevoditi ne može biti premještena na novo ime zbog {{PLURAL:$1|slijedeće greške|slijedećih grešaka}}:",
- "pt-movepage-block-base-exists": "Ciljna bazna stranica [[:$1]] postoji.",
- "pt-movepage-block-base-invalid": "Ciljna bazna stranica nije valjan naslov.",
+ "pt-movepage-block-base-exists": "Ciljna prevodiva stranica \"[[:$1]]\" postoji.",
+ "pt-movepage-block-base-invalid": "Ciljna prevodiva stranica ne predstavlja ispravan naziv.",
"pt-movepage-block-tp-exists": "Ciljna stranica za prijevod [[:$2]] postoji.",
"pt-movepage-block-tp-invalid": "Naslov ciljne stranice za prijevod za [[:$1]] bi bio nevaljan (predugačak?).",
- "pt-movepage-block-section-exists": "Ciljna sekcija stranice [[:$2]] postoji.",
- "pt-movepage-block-section-invalid": "Naslov ciljne sekcije za [[:$1]] bi bio nevaljan (predugačak?).",
+ "pt-movepage-block-section-exists": "Ciljna stranica \"[[:$2]]\" za prevodnu jedinicu postoji.",
+ "pt-movepage-block-section-invalid": "Naslov ciljne stranice za \"[[:$1]]\" za prevodnu jedinicu bio bi neispravan (predugačak?).",
"pt-movepage-block-subpage-exists": "Ciljna podstranica [[:$2]] postoji.",
"pt-movepage-block-subpage-invalid": "Naslov ciljne podstranice za [[:$1]] bi bio nevaljan (predugačak?).",
"pt-movepage-list-pages": "Spisak stranica za premještanje",
- "pt-movepage-list-translation": "Stranice za prijevod",
- "pt-movepage-list-section": "Stranice sekcije",
- "pt-movepage-list-other": "Druge podstranice",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Stranica|Stranice}} za prijevod",
+ "pt-movepage-list-section": "{{PLURAL:$1|Stranica|Stranice}} za prevodnu jedinicu",
+ "pt-movepage-list-other": "{{PLURAL:$1|Druga podstranica|Druge podstranice}}",
"pt-movepage-list-count": "Ukupno $1 {{PLURAL:$1|stranica|stranice|stranica}} za premještanje.",
"pt-movepage-legend": "Premjesti stranicu koja se prevodi",
"pt-movepage-current": "Trenutni naziv:",
@@ -81,20 +147,66 @@
"pt-movepage-action-perform": "Izvrši premještanje",
"pt-movepage-action-other": "Promijeni cilj",
"pt-movepage-intro": "Ova posebna stranica vam omogućava da premještate stranice koje su obilježene za prevođenje.\nAkcija premještanja neće biti odmah, jer mnoge stranice trebaju biti premještene.\nDok se stranice premještaju, neće biti mogućnosti koristiti se s tim stranicama.\nGreške će biti zapisane u [[Special:Log/pagetranslation|zapisnik prevođenja stranice]] te se one moraju ispravljati ručno.",
- "pt-movepage-logreason": "Dio stranice koja se prevodi $1.",
- "pt-movepage-started": "Osnovna stranica se sad premješta.\nMolimo provjerite [[Special:Log/pagetranslation|zapisnik prevoda stranice]] za greške i poruke završetka.",
+ "pt-movepage-logreason": "Dio stranice koja se prevodi \"$1\"",
+ "pt-movepage-started": "Provjerite [[Special:Log/pagetranslation|zapisnik prijevoda stranice]] malo kasnije za greške i poruke završetka.",
"pt-locked-page": "Ova stranica je zaključana jer se stranica za prevođenje sada premješta.",
- "pt-deletepage-lang-title": "Brisanje stranice za prevođenje $1.",
+ "pt-deletepage-lang-title": "Brisanje stranice za prevođenje \"$1\"",
+ "pt-deletepage-full-title": "Brisanje prevodive stranice \"$1\"",
+ "pt-deletepage-invalid-title": "Navedena stranica nije ispravna.",
+ "pt-deletepage-invalid-text": "Navedena stranica nije prevodiva, niti je stranica prijevoda.",
"pt-deletepage-action-check": "Spisak stranica za brisanje",
"pt-deletepage-action-perform": "Izvrši brisanje",
"pt-deletepage-action-other": "Promijeni cilj",
+ "pt-deletepage-lang-legend": "Obriši stranicu prijevoda",
+ "pt-deletepage-full-legend": "Obriši prevodivu stranicu",
+ "pt-deletepage-any-legend": "Obriši prevodivu stranicu ili stranicu prijevoda",
"pt-deletepage-current": "Naslov stranice:",
"pt-deletepage-reason": "Razlog:",
"pt-deletepage-subpages": "Obriši sve podstranice",
"pt-deletepage-list-pages": "Spisak stranica za brisanje",
"pt-deletepage-list-translation": "Stranice za prijevod",
- "pt-deletepage-list-section": "Stranice sekcije",
+ "pt-deletepage-list-section": "Stranice za prevodnu jedinicu",
"pt-deletepage-list-other": "Druge podstranice",
- "pt-deletepage-full-logreason": "Dio stranice koja se prevodi $1.",
- "pt-deletepage-lang-logreason": "Dio stranice za prevođenje $1."
+ "pt-deletepage-list-count": "Ukupno $1 {{PLURAL:$1|stranica|stranice|stranica}} za brisanje.",
+ "pt-deletepage-full-logreason": "Dio stranice koja se prevodi \"$1\"",
+ "pt-deletepage-lang-logreason": "Dio stranice za prevođenje \"$1\"",
+ "pt-deletepage-started": "Provjerite [[Special:Log/pagetranslation|zapisnik prijevoda stranica]] za greške i poruke pri završetku.",
+ "pt-deletepage-intro": "Ova posebna stranica omogućava Vam brisanje cijele prevodive stranice ili pojedinačne stranice prijevoda na nekom jeziku.\nBrisanje neće biti obavljeno istog trena jer će se obrisati sve stranice koje ovise o stranici koja se briše.\nGreške će se evidentirati u [[Special:Log/pagetranslation|zapisniku prijevoda stranica]] i morat će se ručno ispraviti.",
+ "pagemigration": "Migracija stranica prijevoda",
+ "pagemigration-summary": "Navedite stranicu prijevoda i vratite sve prijevode napravljene prije aktiviranja sistema za prevođenje na toj stranici.",
+ "pm-import-button-label": "Uvezi",
+ "pm-savepages-button-label": "Sačuvaj",
+ "pm-cancel-button-label": "Otkaži",
+ "pm-page-does-not-exist": "$1 ne postoji.",
+ "pm-old-translations-missing": "$1 ne sadrži stare prijevode.",
+ "pm-extra-units-warning": "Možda ima dodatnih jedinica. Pobrinite se da je izvorni tekst u skladu s prijevodom.",
+ "pm-pagename-missing": "Upišite naziv stranice.",
+ "pm-add-icon-hover-text": "Dodaj jedinicu ispod",
+ "pm-swap-icon-hover-text": "Zamijeni s jedinicom ispod",
+ "pm-delete-icon-hover-text": "Obriši jedinicu",
+ "pm-pagetitle-placeholder": "Upišite naziv stranice",
+ "pm-pagetitle-invalid": "Upišite ispravan naziv stranice. Treba biti u formatu <page-name>/<language-code>.",
+ "pm-pagetitle-missing": "Upišite naziv stranice.",
+ "pm-langcode-missing": "U nazivu nedostaje jezički kôd. Upišite naziv stranice u formatu <page-name>/<language-code>.",
+ "pm-summary-import": "Uvezen prijevod pomoću [[Special:PageMigration|migracije stranica]]",
+ "pm-on-import-message-text": "Stari prijevodi su uvezeni. Poslužite se opcijama za dodavanje, zamjenu i brisanje da biste prilagodili prevodilačke jedinice i kliknite na dugme \"{{int:pm-savepages-button-label}}\" da biste ih sačuvali. Kliknite na dugme \"{{int:pm-cancel-button-label}}\" da biste ih odbacili.",
+ "pm-on-save-message-text": "Prevodilačke jedinice su sačuvane. Sad možete upisati naziv nove stranice da biste je migrirali ili ispod promijenite jedinice i sačuvajte novu izmjenu.",
+ "tpt-translate-title": "Dozvoli prijevod naziva stranice",
+ "pp-save-summary": "Stranica je pripremljena za prijevod",
+ "pagepreparation": "Priprema stranica za prijevod",
+ "pp-pagename-placeholder": "Upišite naziv stranice",
+ "pp-prepare-button-label": "Pripremi",
+ "pp-save-button-label": "Sačuvaj",
+ "pp-cancel-button-label": "Otkaži",
+ "pp-save-message": "Stranica je sačuvana. Možete je [$1 urediti].",
+ "pp-prepare-message": "Stranica je pripremljena za prevođenje. Pogledajte donju razliku izmjena. Kliknite na \"{{int:pp-save-button-label}}\" ako je sve u redu!",
+ "pp-already-prepared-message": "Izgleda da je ova stranica već spremna za prevođenje. Nema izmjena u odnosu na prethodnu verziju.",
+ "pp-pagename-missing": "Upišite naziv stranice.",
+ "pp-diff-old-header": "Izvorni tekst",
+ "pp-diff-new-header": "Pripremljeni tekst",
+ "tpt-unlink-confirm": "Potvrdite da zaista želite ukloniti ovu stranicu iz sistema za prevođenje.\nJezički selektor i prevedeni nazivi stranica prestat će raditi.\nStranice prijevoda neće se moći uređivati.",
+ "tpt-unlink-button": "Ukloni iz prijevoda",
+ "tpt-unlink-summary": "Uklonjena stranica iz prijevoda",
+ "tpt-generic-confirm": "Potvrdite radnju.",
+ "tpt-generic-button": "Potvrdi"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/btm.json b/www/wiki/extensions/Translate/i18n/pagetranslation/btm.json
new file mode 100644
index 00000000..54579d06
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/btm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Simartampua"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% iartion)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ca.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ca.json
index 66497f25..d086ffb5 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ca.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ca.json
@@ -19,12 +19,9 @@
"pagetranslation": "Traducció d'una pàgina",
"right-pagetranslation": "Marcar versions de pàgines per a traduir",
"action-pagetranslation": "gestiona les pàgines traduïbles",
- "tpt-desc": "Extensió per a traduir les pàgines de contingut",
"tpt-section": "Unitat de traducció $1",
"tpt-section-new": "Nova unitat de traducció. Nom: $1",
"tpt-section-deleted": "Unitat de traducció $1",
- "tpt-template": "Plantilla de la pàgina",
- "tpt-templatediff": "La plantilla de la pàgina ha canviat",
"tpt-diff-old": "Text anterior",
"tpt-diff-new": "Text nou",
"tpt-submit": "Marca aquesta versió per traduir",
@@ -35,14 +32,39 @@
"tpt-badtitle": "El nom de pàgina donat ($1) no és un títol vàlid",
"tpt-nosuchpage": "La pàgina $1 no existeix",
"tpt-notsuitable": "La pàgina $1 no està preparada per a la seva traducció.\nAssegureu-vos que té les etiquetes <nowiki><translate></nowiki> i una sintaxi vàlida.",
+ "tpt-mark-summary": "S'ha marcat aquesta versió per traduir",
+ "tpt-edit-failed": "No s'ha pogut actualitzar la pàgina: $1",
+ "tpt-old-pages-title": "Pàgines en traducció",
+ "tpt-other-pages-title": "Pàgines trencades",
+ "tpt-discouraged-pages-title": "Pàgines desaconsellades",
+ "tpt-new-pages": "{{PLURAL:$1|Aquesta pàgina conté|Aquestes pàgines contenen}} text amb etiquetes de traducció, però cap versió d'{{PLURAL:$1|aquesta pàgina està|aquestes pàgines estan}} marcades actualment per traduir.",
+ "tpt-old-pages": "S'ha marcat per traduir alguna versió d'{{PLURAL:$1|aquesta pàgina|aquestes pàgines}}.",
+ "tpt-select-prioritylangs-reason": "Motiu:",
+ "tpt-sections-prioritylangs": "Llengües prioritàries",
+ "tpt-rev-mark": "marca per traduir",
+ "tpt-rev-unmark": "suprimeix de la traducció",
+ "tpt-rev-discourage": "desaconsella",
"tpt-rev-encourage": "restaura",
"translate-tag-translate-link-desc": "Traduïu aquesta pàgina",
+ "translate-tag-hasnew": "Aquesta pàgina conté <span class=\"plainlinks\">[$1 modificacions]</span> que no estan marcats per la traducció.",
+ "tpt-translation-intro": "Aquesta pàgina és una <span class=\"plainlinks\">[$1 versió traduïda]</span> de la pàgina [[$2]] i la traducció és completada al $3&nbsp;%.",
+ "tpt-translation-intro-fuzzy": "Les traduccions obsoletes es marquen així.",
"tpt-languages-legend": "Altres idiomes:",
"tpt-languages-nonzero": "$1 ($2% traduït)",
+ "tpt-tab-translate": "Tradueix",
+ "tpt-target-page": "Aquesta pàgina no es pot editar manualment.\nÉs una traducció de la pàgina [[$1]] i la traducció es realitza amb [$2 l'eina de traducció].",
+ "tpt-discouraged-language-reason": "Motiu: $1",
"tpt-aggregategroup-add": "Afegeix",
"tpt-aggregategroup-save": "Desa",
"tpt-aggregategroup-new-name": "Nom:",
+ "tpt-aggregategroup-edit-name": "Nom:",
+ "tpt-aggregategroup-edit-description": "Descripció:",
+ "tpt-aggregategroup-update": "Desa",
+ "tpt-aggregategroup-update-cancel": "Cancel·la",
"tpt-invalid-group": "El grup no és vàlid",
+ "log-action-filter-pagetranslation": "Tipus d'acció:",
+ "log-action-filter-pagetranslation-mark": "Marca per traduir",
+ "log-action-filter-pagetranslation-unmark": "Supressió de la traducció",
"pt-movepage-title": "Mou la pàgina traduïble $1",
"pt-movepage-blockers": "La pàgina traduïble no pot ser reanomenada a causa {{PLURAL:$1|de l'error següent|dels errors següents}}:",
"pt-movepage-block-base-exists": "La pàgina base de traaducció [[:$1]] ja existeix.",
@@ -69,17 +91,27 @@
"pt-movepage-intro": "Aquesta pàgina especial permet desplaçar pàgines que estan marcades per a la traducció.\nEl trasllat no serà instantani, perquè moltes pàgines hauran de ser mogudes.\nMentre s'estiguin traslladant les pàgines no serà possible interaccionar amb les pàgines en qüestió.\nEls errors sortiran indicats al [[Special:Log/pagetranslation|registre de traducció de pàgines]] i hauran d'ésser reparats a mà.",
"pt-movepage-logreason": "Part de la pàgina a traduir $1.",
"pt-movepage-started": "La pàgina base està traslladada.\nComproveu el [[Special:Log/pagetranslation|registre de traducció de pàgines]] pels errors i el missatge de finalització.",
- "pt-locked-page": "Aquesta pàgina està bloquejada perquè la pàgina a traduir està en un procés de trasllat.",
+ "pt-locked-page": "Aquesta pàgina està blocada perquè la pàgina a traduir està en un procés de trasllat.",
+ "pt-deletepage-current": "Nom de la pàgina:",
"pt-deletepage-reason": "Raó:",
+ "pt-deletepage-list-translation": "Pàgines de traducció",
"pt-deletepage-list-other": "Altres subpàgines",
"pm-import-button-label": "Importa",
"pm-savepages-button-label": "Desa",
"pm-cancel-button-label": "Cancel·la",
- "pm-pagename-placeholder": "Introduïu el nom de la pàgina",
- "pm-langcode-placeholder": "Codi d’idioma",
- "pm-langcode-missing": "Introduïu el codi de l’idioma",
+ "pm-page-does-not-exist": "$1 no existeix.",
+ "pm-delete-icon-hover-text": "Elimina la unitat",
+ "pm-pagetitle-placeholder": "Introduïu el títol de la pàgina",
"pm-pagetitle-invalid": "Introduïu un títol vàlid per la pàgina",
+ "pm-langcode-missing": "Introduïu el codi de l’idioma",
+ "pagepreparation": "Prepareu la pàgina per traduir",
+ "pp-pagename-placeholder": "Introduïu el nom de la pàgina",
+ "pp-prepare-button-label": "Prepara",
"pp-save-button-label": "Desa",
"pp-cancel-button-label": "Cancel·la",
- "pp-pagename-missing": "Introduïu el nom de la pàgina."
+ "pp-pagename-missing": "Introduïu el nom de la pàgina.",
+ "pp-diff-old-header": "Text font",
+ "pp-diff-new-header": "Text preparat",
+ "tpt-generic-confirm": "Confirmeu l'acció.",
+ "tpt-generic-button": "Confirma"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/cdo.json b/www/wiki/extensions/Translate/i18n/pagetranslation/cdo.json
new file mode 100644
index 00000000..851efd45
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/cdo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Davidzdh"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% gó muôi huăng-ĭk)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ce.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ce.json
index 4cf8ec98..1a41677a 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ce.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ce.json
@@ -14,6 +14,7 @@
"tpt-new-pages": "{{PLURAL:$1|1=ХӀокху агӀона чулацам бу|ХӀокху агӀонийн чулацам бу}} гочан тегашца йоза, амма {{PLURAL:$1|1=хӀокху агӀона|хӀокху агӀонийн}} цхьа верси билгалйина яц гочян.",
"tpt-old-pages": "{{PLURAL:$1|1=хӀокху агӀона|хӀокху агӀонийн}} цхьайолу версеш гочян билгалйина ю.",
"tpt-discouraged-pages": "{{PLURAL:$1|1=ХӀара агӀо|ХӀара агӀонаш}} кхий гочйира яц аьлла сацам бина.",
+ "tpt-select-prioritylangs-reason": "Бахьана:",
"tpt-languages-legend": "Кхин меттанаш:",
"tpt-languages-nonzero": "$1 ($2% гочдина)",
"aggregategroups": "Вовшаштоьхна тобанаш",
@@ -32,10 +33,11 @@
"pt-deletepage-action-perform": "Кхочушдé дӀаяккхар",
"pt-deletepage-action-other": "Хийца Ӏалашо",
"pt-deletepage-current": "АгӀонан цӀе:",
+ "pt-deletepage-reason": "Бахьана:",
"pagemigration": "АгӀонийн миграци",
"pm-import-button-label": "Импорт ян",
"pm-savepages-button-label": "Ӏалашдан",
- "pm-cancel-button-label": "Цаоьшу",
+ "pm-cancel-button-label": "Юхаяккхар",
"pm-page-does-not-exist": "«$1» яц",
"pm-old-translations-missing": "$1 шира гочдарш чохь дац",
"pm-pagename-missing": "Дехар до, дӀаязъе агӀона цӀе:",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ckb.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ckb.json
index 8fcab39b..ba78e5fe 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ckb.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ckb.json
@@ -5,12 +5,11 @@
"Calak",
"Marmzok",
"Muhammed taha",
- "رزگار"
+ "رزگار",
+ "Sarchia"
]
},
"pagetranslation": "وەرگێڕانی پەڕە",
- "tpt-template": "داڕێژەی پەڕە",
- "tpt-templatediff": "داڕێژەی لاپەڕەکە گۆڕاوە.",
"tpt-diff-old": "دەقی پێشوو",
"tpt-diff-new": "دەقی نوێ",
"tpt-submit": "نیشان‌کردنی ئەم وەشانە بۆ وەرگێڕان",
@@ -27,8 +26,10 @@
"tpt-aggregategroup-add": "زێدەبکە",
"tpt-aggregategroup-save": "پاشەکەوتی بکە",
"tpt-aggregategroup-new-name": "ناو:",
+ "tpt-aggregategroup-update-cancel": "ھەڵوەشاندنەوە",
"pt-movepage-new": "ناوی نوێ:",
"pt-movepage-reason": "هۆکار:",
"pt-deletepage-current": "ناوی پەڕە:",
- "pt-deletepage-reason": "هۆکار:"
+ "pt-deletepage-reason": "هۆکار:",
+ "pm-cancel-button-label": "ھەڵوەشاندنەوە"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/cs.json b/www/wiki/extensions/Translate/i18n/pagetranslation/cs.json
index 3e646567..14654b83 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/cs.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/cs.json
@@ -9,7 +9,10 @@
"Mormegil",
"Vks",
"H4nek",
- "Kvetoslav47"
+ "Kvetoslav47",
+ "Dvorapa",
+ "Patriccck",
+ "Want"
]
},
"pagetranslation": "Překlad stránek",
@@ -61,6 +64,7 @@
"translate-tag-markthisagain": "Tato stránka byla <span class=\"plainlinks\">[$1 změněna]</span> od posledního <span class=\"plainlinks\">[$2 označení pro překlad]</span>.",
"translate-tag-hasnew": "Tato stránka obsahuje <span class=\"plainlinks\">[$1 změny]</span>, které nebyly označeny pro překlad.",
"tpt-translation-intro": "Toto je <span class=\"plainlinks\">[$1 přeložená verze]</span> stránky [[$2]], překlad je hotový z $3 %.",
+ "tpt-translation-intro-fuzzy": "Takto jsou označeny zastaralé části překladu.",
"tpt-languages-legend": "Jiné jazyky:",
"tpt-languages-zero": "Začít překlad do tohoto jazyka",
"tpt-languages-nonzero": "$1 ({{PLURAL:$2|přeloženo|přeložena|přeloženo}} $2 %)",
@@ -90,11 +94,11 @@
"log-description-pagetranslation": "Protokol úkonů souvisejících se systémem překladu stránek",
"log-name-pagetranslation": "Kniha překladů stránek",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|označil|označila}} stránku $3 k překladu",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|vyjmul|vyjmula}} stránku $3 z překládání",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|vyjmul|vyjmula}} stránku $3 ze systému překládání",
"pt-movepage-list-pages": "Seznam stránek k přesunutí",
"pt-movepage-list-translation": "Překlad {{PLURAL:$1|stránky|stránek}}",
"pt-movepage-list-section": "{{PLURAL:$1|Stránka s částí překladu|Stránky s částmi překladu}}",
- "pt-movepage-list-other": "Další {{PLURAL:$1|podstránka|podstránky}}",
+ "pt-movepage-list-other": "{{PLURAL:$1|Jiná podstránka|Jiné podstránky}}",
"pt-movepage-list-count": "Celkem $1 {{PLURAL:$1| stránka|stránek}} k přesunutí.",
"pt-movepage-legend": "Přesunout přeložitelnou stránku",
"pt-movepage-current": "Současný název:",
@@ -104,6 +108,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í",
@@ -111,8 +116,8 @@
"pt-deletepage-list-section": "Stránky s částmi překladu",
"pt-deletepage-list-other": "Další podstránky",
"pt-deletepage-list-count": "Celkem $1 {{PLURAL:$1|stránky|stránky|stránek}} ke smazání.",
- "pt-deletepage-full-logreason": "Část přeložitelné stránky „$1“.",
- "pt-deletepage-lang-logreason": "Část překladové stránky „$1“.",
+ "pt-deletepage-full-logreason": "Část přeložitelné stránky „$1“",
+ "pt-deletepage-lang-logreason": "Část překladové stránky „$1“",
"pagemigration": "Migrace překladových stránek",
"pm-import-button-label": "Importovat",
"pm-savepages-button-label": "Uložit",
@@ -121,10 +126,10 @@
"pm-old-translations-missing": "Stránka $1 neobsahuje staré překlady",
"pm-extra-units-warning": "Mohou existovat přebytečné části překladu. Zarovnejte prosím správně zdrojové a cílové části",
"pm-pagename-missing": "Zadejte prosím název stránky",
- "pm-langcode-missing": "Zadejte prosím kód jazyka",
"pm-add-icon-hover-text": "Přidat část níže",
"pm-swap-icon-hover-text": "Prohodit s částí níže",
"pm-delete-icon-hover-text": "Smazat položku",
+ "pm-langcode-missing": "Vypadá to, že za názvem stránky schází kód jazyka. Zadejte prosím název stránky ve tvaru <název-stránky>/<kód-jazyka>.",
"tpt-translate-title": "Umožnit překlad názvu stránky",
"pp-prepare-button-label": "Připravit",
"pp-save-button-label": "Uložit",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/csb.json b/www/wiki/extensions/Translate/i18n/pagetranslation/csb.json
new file mode 100644
index 00000000..fb0e25cb
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/csb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaszeba"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 (zdolmaczono $2%)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/da.json b/www/wiki/extensions/Translate/i18n/pagetranslation/da.json
index 9b3e9a76..7566c994 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/da.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/da.json
@@ -6,18 +6,16 @@
"Emilkris33",
"Kaare",
"Peter Alberti",
- "Purodha"
+ "Purodha",
+ "Saederup92"
]
},
"pagetranslation": "Sideoversættelse",
"right-pagetranslation": "Markere versioner af sider for oversættelse",
"action-pagetranslation": "håndter oversætbare sider",
- "tpt-desc": "Udvidelse til oversættelse af indholdssider",
"tpt-section": "Oversættelsesenhed $1",
"tpt-section-new": "Ny oversættelsesenhed.\nNavn: $1",
"tpt-section-deleted": "Oversættelsesenhed $1",
- "tpt-template": "Sideskabelon",
- "tpt-templatediff": "Sideskabelonen er blevet ændret.",
"tpt-diff-old": "Forrige tekst",
"tpt-diff-new": "Ny tekst",
"tpt-submit": "Markér denne version for oversættelse",
@@ -31,7 +29,6 @@
"tpt-notsuitable": "Siden $1 er ikke parat til oversættelse.\nSørg for at den har <nowiki><translate></nowiki>-tags og en gyldig syntaks.",
"tpt-saveok": "Siden [[:$1]] er blevet markeret til oversættelse med $2 {{PLURAL:$2|oversættelsesenhed|oversættelsesenheder}}.\nSiden kan nu <span class=\"plainlinks\">[$3 oversættes]</span>.",
"tpt-offer-notify": "Du kan <span class=\"plainlinks\">[$1 underrette oversættere]</span> om denne side.",
- "tpt-badsect": "\"$1\" er ikke et gyldig navn for oversættelsesenhed $2.",
"tpt-showpage-intro": "Herunder listes der nye, eksisterende og slettede oversættelsesenheder.\nFør denne version markeres til oversættelse, skal du kontrollere, at ændringerne i oversættelsesenhederne er minimeret for at undgå at give oversætterne unødigt arbejde.",
"tpt-mark-summary": "Markerede denne version for oversættelse",
"tpt-edit-failed": "Kunne ikke opdatere siden: $1",
@@ -64,6 +61,7 @@
"translate-tag-markthisagain": "Denne side er <span class=\"plainlinks\">[$1 ændret]</span> siden den sidst blev <span class=\"plainlinks\">[$2 markeret for oversættelse]</span>.",
"translate-tag-hasnew": "Denne side indeholder <span class=\"plainlinks\">[$1 ændringer]</span> som ikke er markeret for oversættelse.",
"tpt-translation-intro": "Denne side er en <span class=\"plainlinks\">[$1 oversat version]</span> af siden [[$2]], og oversættelsen er $3 % komplet.",
+ "tpt-translation-intro-fuzzy": "Forældede oversættelser er markeret sådan her.",
"tpt-languages-legend": "Andre sprog:",
"tpt-languages-zero": "Begynd på oversættelsen til dette sprog",
"tpt-languages-nonzero": "$1 ($2% oversat)",
@@ -71,12 +69,13 @@
"tpt-target-page": "Denne side kan ikke opdateres manuelt.\nSiden er en oversættelse af siden [[$1]] og oversættelsen kan opdateres ved at bruge [$2 oversættelsesværktøjet].",
"tpt-unknown-page": "Dette navnerum er reserveret til oversættelser af indholdssider.\nSiden som du prøver at redigere, ser ikke ud til at svare til nogen side markeret for oversættelse.",
"tpt-translation-restricted": "Oversættelse af denne side til dette sprog blev forhindret af en oversættelsesadministrator.\n\nÅrsag: $1",
+ "tpt-discouraged-language-force-header": "Denne side kan ikke oversættes til $1.",
+ "tpt-discouraged-language-header": "Oversættelser til $1 er ikke en prioritet for denne side.",
"tpt-discouraged-language-force": "<strong>Denne side kan ikke oversættes til $2.</strong>\n\nEn oversættelsesadministrator besluttede at denne side kun kan oversættes til $3.",
"tpt-discouraged-language": "<strong>Oversættelse til $2 er ikke en prioritet for denne side.</strong>\n\nEn oversættelsesadministrator besluttede at fokusere oversættelsesarbejdet på $3.",
"tpt-discouraged-language-reason": "Begrundelse: $1",
"tpt-priority-languages": "En oversættelsesadministrator har sat prioritetssprogene for denne gruppe til $1.",
"tpt-render-summary": "Opdaterer for at passe til en ny version af kildesiden",
- "tpt-download-page": "Eksportér side med oversættelser",
"aggregategroups": "Samlegrupper",
"tpt-aggregategroup-add": "Tilføj",
"tpt-aggregategroup-save": "Gem",
@@ -85,6 +84,11 @@
"tpt-aggregategroup-new-description": "Beskrivelse (valgfri):",
"tpt-aggregategroup-remove-confirm": "Er du sikker på, at du vil slette denne samlegruppe?",
"tpt-aggregategroup-invalid-group": "Gruppen findes ikke",
+ "tpt-aggregategroup-edit-name": "Navn:",
+ "tpt-aggregategroup-edit-description": "Beskrivelse:",
+ "tpt-aggregategroup-update": "Gem",
+ "tpt-aggregategroup-update-cancel": "Annullér",
+ "tpt-invalid-group": "Ugyldig gruppe",
"pt-parse-open": "Ubalanceret &lt;translate> tag.\nOversættelse skabelon: <pre>$1</pre>",
"pt-parse-close": "Ubalanceret &lt;/translate> tag.\nOversættelse skabelon: <pre>$1</pre>",
"pt-parse-nested": "Indlejrede &lt;translate>-oversættelsesenheder er ikke tilladt.\nTagtekst: <pre>$1</pre>",
@@ -94,7 +98,7 @@
"log-description-pagetranslation": "Log for handlinger i forbindelse med side oversættelses systemet",
"log-name-pagetranslation": "Sideoversættelseslog",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|markerede}} $3 til oversættelse",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|fjernede}} $3 fra oversættelse",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|fjernede}} $3 fra oversættersystem",
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|afsluttede}} omdøbning af den oversætbare side $3 til $4",
"logentry-pagetranslation-movenok": "$1 {{GENDER:$2|stødte på}} et problem under flytning af siden $3 til $4",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|afsluttede}} sletning af den oversætbare side $3",
@@ -108,6 +112,10 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|begrænsede}} sprogene for den oversætbare side $3 til $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|tilføjede}} den oversætbare side $3 til den samlede gruppe $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|fjernede}} den oversætbare side $3 fra den samlede gruppe $4",
+ "log-action-filter-pagetranslation": "Handlingtype:",
+ "log-action-filter-pagetranslation-mark": "Mærk for oversættelse",
+ "log-action-filter-pagetranslation-move": "Sideflytninger",
+ "log-action-filter-pagetranslation-delete": "Sidesletninger",
"pt-movepage-title": "Flyt oversætbare side $1",
"pt-movepage-blockers": "Den oversætbare side kan ikke flyttes til et nyt navn på grund af følgende {{PLURAL:$1|fejl|fejl}}:",
"pt-movepage-block-base-exists": "Den oversætbare målside \"[[:$1]]\" findes.",
@@ -121,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",
@@ -132,11 +142,11 @@
"pt-movepage-action-perform": "Gennemfør flytningen",
"pt-movepage-action-other": "Skift mål",
"pt-movepage-intro": "Denne speciale side tillader dig at flytte sider, der er markeret til oversættelse.\nFlytningen vil ikke være øjeblikkelig, fordi mange sider skal flyttes.\nMens siderne bliver flyttet, er det ikke muligt at interagere med de omtalte sider.\nFejl vil blive logget på [[Special:Log/pagetranslation|sideoversættelsesloggen]], og de skal repareres manuelt.",
- "pt-movepage-logreason": "Del af oversætbar side $1.",
+ "pt-movepage-logreason": "Del af oversætbar side \"$1\"",
"pt-movepage-started": "Base siden er nu flyttet.\nHusk at tjekke [[Special:Log/pagetranslation|siden oversættelsen log]] for fejl og færdiggørelses besked.",
"pt-locked-page": "Denne side er låst, fordi den oversætbare side, der aktuelt er ved at blive flyttet.",
- "pt-deletepage-lang-title": "Sletter oversættelses side $1.",
- "pt-deletepage-full-title": "Sletter oversætbar side $1.",
+ "pt-deletepage-lang-title": "Sletter oversættelses side \"$1\"",
+ "pt-deletepage-full-title": "Sletter oversætbar side \"$1\"",
"pt-deletepage-invalid-title": "Den angivne side er ikke gyldig.",
"pt-deletepage-invalid-text": "Den angivne side er ikke en oversætbar side eller en oversættelsesside.",
"pt-deletepage-action-check": "List sider der skal slettes",
@@ -153,8 +163,28 @@
"pt-deletepage-list-section": "Oversættelsesenhedssider",
"pt-deletepage-list-other": "Andre undersider",
"pt-deletepage-list-count": "I alt $1 {{PLURAL:$1|side|sider}} til at slette.",
- "pt-deletepage-full-logreason": "Del af oversætbar side $1.",
- "pt-deletepage-lang-logreason": "En del af oversættelses side $1 .",
+ "pt-deletepage-full-logreason": "Del af oversætbar side \"$1\"",
+ "pt-deletepage-lang-logreason": "En del af oversættelses side \"$1\"",
"pt-deletepage-started": "Tjek venligst [[Special:Log/pagetranslation|side oversættelses log]] for fejl og færdiggørelses besked.",
- "pt-deletepage-intro": "Med denne specielle side kan du slette en hel oversætbar side eller en individuel oversættelsesside.\nSletningen vil ikke ske med det samme, fordi mange afhængige sider også vil blive slettet.\nFejl vil blive registreret i [[Special:Log/pagetranslation|side oversættelses log]], og de skal repareres i manuelt."
+ "pt-deletepage-intro": "Med denne specielle side kan du slette en hel oversætbar side eller en individuel oversættelsesside.\nSletningen vil ikke ske med det samme, fordi mange afhængige sider også vil blive slettet.\nFejl vil blive registreret i [[Special:Log/pagetranslation|side oversættelses log]], og de skal repareres i manuelt.",
+ "pm-import-button-label": "Importer",
+ "pm-savepages-button-label": "Gem",
+ "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",
+ "pp-cancel-button-label": "Annullér",
+ "pp-diff-old-header": "Kildetekst",
+ "pp-diff-new-header": "Forberedt tekst",
+ "tpt-unlink-button": "Fjern fra oversættelse",
+ "tpt-unlink-summary": "Fjernede siden fra oversættelse.",
+ "tpt-generic-button": "Bekræft"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/de.json b/www/wiki/extensions/Translate/i18n/pagetranslation/de.json
index 782de6c6..369654ae 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/de.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/de.json
@@ -33,6 +33,7 @@
"tpt-oldrevision": "$2 ist nicht die letzte Version der Seite [[:$1]].\nNur die letzte Version kann zur Übersetzung freigegeben werden.",
"tpt-notsuitable": "Die Seite $1 ist nicht zum Übersetzen geeignet.\nStelle sicher, dass ein <nowiki><translate></nowiki>-Tag und gültige Syntax verwendet wird.",
"tpt-saveok": "Die Seite [[:$1]] wurde mit {{PLURAL:$2|einem übersetzbaren Abschnitt|$2 übersetzbaren Abschnitten}} zur Übersetzung freigegeben.\nDiese Seite kann nun <span class=\"plainlinks\">[$3 übersetzt]</span> werden.",
+ "tpt-saveok-first": "Du kannst [[Special:PageMigration|bereits vorhandene Übersetzungen]] für diese Seite importieren (falls vorhanden).",
"tpt-offer-notify": "Du kannst über diese Seite <span class=\"plainlinks\">[$1 Übersetzer benachrichtigen]</span>.",
"tpt-showpage-intro": "Untenstehend sind neue, vorhandene und gelöschte Übersetzungseinheiten aufgelistet.\nBevor du diese Version zur Übersetzung freigibst, stelle bitte sicher, dass die Änderungen an den Übersetzungseinheiten minimal sind. Damit verhinderst du unnötige Arbeit für die Übersetzer.",
"tpt-mark-summary": "Diese Seite wurde zum Übersetzen freigegeben",
@@ -67,9 +68,10 @@
"translate-tag-markthisagain": "Diese Seite wurde <span class=\"plainlinks\">[$1 bearbeitet]</span>, nachdem sie zuletzt <span class=\"plainlinks\">[$2 zur Übersetzung freigegeben]</span> wurde.",
"translate-tag-hasnew": "Diese Seite enthält <span class=\"plainlinks\">[$1 Bearbeitungen]</span>, die nicht zum Übersetzen freigegeben sind.",
"tpt-translation-intro": "Diese Seite ist eine <span class=\"plainlinks\">[$1 übersetzte Version]</span> der Seite [[$2]] und die Übersetzung ist zu $3 % abgeschlossen sowie aktuell.",
+ "tpt-translation-intro-fuzzy": "Veraltete Übersetzungen werden wie dieser Text markiert.",
"tpt-languages-legend": "Sprachen:",
"tpt-languages-zero": "Mit dem Übersetzen in diese Sprache anfangen",
- "tpt-languages-nonzero": "$1 ($2% übersetzt)",
+ "tpt-languages-nonzero": "$1 ($2 % übersetzt)",
"tpt-tab-translate": "Übersetzen",
"tpt-target-page": "Diese Seite kann nicht manuell aktualisiert werden.\nDiese Seite ist eine Übersetzung der Seite [[$1]] und die Übersetzung kann mithilfe des [$2 Übersetzungswerkzeuges] aktualisiert werden.",
"tpt-patrolling-blocked": "Diese Seite kann nicht kontrolliert werden. Verwende zur Überprüfung stattdessen die Übersetzungsaktion.",
@@ -120,6 +122,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|begrenzte}} die Sprachen für die übersetzbare Seite $3 auf $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|fügte}} die übersetzbare Seite $3 zur zusammenfassenden Gruppe „$4“ hinzu",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|entfernte}} die übersetzbare Seite $3 von der zusammengefassten Gruppe $4",
+ "log-action-filter-pagetranslation": "Typ der Aktion:",
+ "log-action-filter-pagetranslation-mark": "Zur Übersetzung markiert",
+ "log-action-filter-pagetranslation-unmark": "Von der Übersetzung entfernt",
+ "log-action-filter-pagetranslation-move": "Seitenverschiebungen",
+ "log-action-filter-pagetranslation-delete": "Seitenlöschungen",
+ "log-action-filter-pagetranslation-encourage": "Ermutigung zur Übersetzung",
+ "log-action-filter-pagetranslation-discourage": "Entmutigung zur Übersetzung",
+ "log-action-filter-pagetranslation-prioritylanguages": "Veränderung der priorisierten Sprachen",
+ "log-action-filter-pagetranslation-aggregategroups": "Veränderung der zusammengefassten Gruppen",
"pt-movepage-title": "Die Übersetzungsseite $1 verschieben",
"pt-movepage-blockers": "Die zum Übersetzen vorgesehene Seite konnte aufgrund {{PLURAL:$1|folgendes Fehlers|folgender Fehler}} nicht zur neuen Bezeichnung verschoben werden:",
"pt-movepage-block-base-exists": "Die übersetzbare Zielseite „[[:$1]]“ existiert bereits.",
@@ -133,7 +144,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:",
@@ -144,8 +157,8 @@
"pt-movepage-action-perform": "Verschiebung durchführen",
"pt-movepage-action-other": "Ziel ändern",
"pt-movepage-intro": "Diese Spezialseite ermöglicht es Seiten zu verschieben, die zur Übersetzung gekennzeichnet wurden.\nDie Verschiebung wird nicht unverzüglich erfolgen, da dabei viele Seiten zu verschieben sind.\nWährend des Verschiebevorgangs ist es nicht möglich, die entsprechenden Seiten zu nutzen.\nVerschiebefehler werden im [[Special:Log/pagetranslation|Übersetzungs-Logbuch]] aufgezeichnet und müssen manuell korrigiert werden.",
- "pt-movepage-logreason": "Teil der übersetzbaren Seite $1.",
- "pt-movepage-started": "Die Basisseite wurde nunmehr verschoben.\nBitte prüfe das [[Special:Log/pagetranslation|Übersetzungs-Logbuch]] auf Fehlermeldungen, bzw. die Vollzugsnachricht.",
+ "pt-movepage-logreason": "Teil der übersetzbaren Seite „$1“",
+ "pt-movepage-started": "Bitte überprüfe kurz das [[Special:Log/pagetranslation|Seitenübersetzungs-Logbuch]] auf Fehler und die Vollzugsnachricht.",
"pt-locked-page": "Diese Seite ist gesperrt, da die Übersetzungsseite momentan verschoben wird.",
"pt-deletepage-lang-title": "Löschen der übersetzten Seite „$1“",
"pt-deletepage-full-title": "Löschen der übersetzbaren Seite „$1“",
@@ -165,8 +178,8 @@
"pt-deletepage-list-section": "Seiten der Übersetzungseinheiten",
"pt-deletepage-list-other": "Weitere Unterseiten",
"pt-deletepage-list-count": "Insgesamt gibt es $1 zu löschende {{PLURAL:$1|Seite|Seiten}}.",
- "pt-deletepage-full-logreason": "Teil der übersetzbaren Seite $1.",
- "pt-deletepage-lang-logreason": "Teil der übersetzten Seite $1.",
+ "pt-deletepage-full-logreason": "Teil der übersetzbaren Seite „$1“",
+ "pt-deletepage-lang-logreason": "Teil der übersetzbaren Seite „$1“",
"pt-deletepage-started": "Bitte das [[Special:Log/pagetranslation|Übersetzungs-Logbuch]] nach Fehlern und Ausführungsnachrichten prüfen.",
"pt-deletepage-intro": "Diese Spezialseite ermöglicht die Löschung einer ganzen übersetzbaren Seite oder einer individuellen Übersetzungsseite in einer Sprache.\nDie Ausführung erfolgt nicht unmittelbar, da auch alle dazugehörigen Seiten gelöscht werden.\nFehler werden im [[Special:Log/pagetranslation|Übersetzungs-Logbuch]] aufgezeichnet und müssen nachträglich manuell berichtigt werden.",
"pagemigration": "Übersetzungsseitenmigration",
@@ -178,14 +191,16 @@
"pm-old-translations-missing": "$1 enthält keine alten Übersetzungen",
"pm-extra-units-warning": "Es könnten zusätzliche Einheiten verfügbar sein. Bitte die Quell- und Übersetzungseinheiten ordnungsgemäß anpassen.",
"pm-pagename-missing": "Bitte den Seitennamen eingeben",
- "pm-langcode-missing": "Es scheint, als ob der Sprachcode im Titel fehlt. Bitte gib den Seitentitel im Format <Seitenname>/<Sprachcode> ein.",
"pm-add-icon-hover-text": "Unten eine Einheit hinzufügen",
"pm-swap-icon-hover-text": "Mit der unteren Einheit tauschen",
"pm-delete-icon-hover-text": "Einheit löschen",
"pm-pagetitle-placeholder": "Gib den Seitentitel ein",
"pm-pagetitle-invalid": "Bitte einen gültigen Seitentitel eingeben. Dieser sollte im Format <Seitenname>/<Sprachcode> sein.",
"pm-pagetitle-missing": "Bitte gib den Seitentitel ein.",
+ "pm-langcode-missing": "Es scheint, als ob der Sprachcode im Titel fehlt. Bitte gib den Seitentitel im Format <Seitenname>/<Sprachcode> ein.",
"pm-summary-import": "Übersetzung importiert mithilfe der [[Special:PageMigration|Seitenmigration]]",
+ "pm-on-import-message-text": "Die alten Übersetzungen wurden importiert. Verwende die Hinzufügungs-, Tausch- und Löschoptionen, um die Übersetzungseinheiten anzupassen und klicke auf die Schaltfläche „{{int:pm-savepages-button-label}}“, um sie zu speichern oder zum Verwerfen auf die Schaltfläche „{{int:pm-cancel-button-label}}“.",
+ "pm-on-save-message-text": "Die Übersetzungseinheiten wurden gespeichert. Du kannst jetzt zur Migration den Titel einer neuen Übersetzungsseite eingeben oder unten Änderungen an den Einheiten durchführen und eine neue Version speichern.",
"tpt-translate-title": "Übersetzung eines Seitentitels erlauben",
"pp-save-summary": "Bereitete die Seite zur Übersetzung vor",
"pagepreparation": "Seite zur Übersetzung vorbereiten",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/diq.json b/www/wiki/extensions/Translate/i18n/pagetranslation/diq.json
index afc782d6..53239893 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/diq.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/diq.json
@@ -3,10 +3,13 @@
"authors": [
"Erdemaslancan",
"Mirzali",
- "Marmase"
+ "Marmase",
+ "Kumkumuk",
+ "Asmen",
+ "Orbot707"
]
},
- "pagetranslation": "Pela açarnayışi",
+ "pagetranslation": "Çarnayışê pele",
"tpt-section": "Yewronê açarnayışê $1",
"tpt-section-new": "Yewena Açarnayış de newan.\nName: $1",
"tpt-section-deleted": "Yewronê açarnayışê $1",
@@ -24,17 +27,26 @@
"tpt-aggregategroup-add": "Cı ke",
"tpt-aggregategroup-save": "Qeyd ke",
"tpt-aggregategroup-new-name": "Name:",
+ "tpt-aggregategroup-new-description": "Şınasnayış (opsiyonel):",
+ "tpt-aggregategroup-edit-name": "Name:",
+ "tpt-aggregategroup-edit-description": "Şınasnayış:",
+ "tpt-aggregategroup-update": "Qeyd ke",
+ "tpt-aggregategroup-update-cancel": "Bıtexelne",
+ "tpt-invalid-group": "Nêraverdi grub",
"log-name-pagetranslation": "Qeydê açarnayışê pele",
"pt-movepage-list-translation": "{{PLURAL:$1|Pera|Perê}} açarnayışi",
"pt-movepage-list-other": "{{PLURAL:$1|Pera bin|Perê bini}}",
"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",
"pt-deletepage-list-other": "Bınpelê bini",
+ "pm-savepages-button-label": "Qeyd ke",
+ "pm-cancel-button-label": "Bıtexelne",
"pp-save-button-label": "Qeyd ke",
+ "pp-cancel-button-label": "Bıtexelne",
"pp-diff-old-header": "Metnê çımey"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/dsb.json b/www/wiki/extensions/Translate/i18n/pagetranslation/dsb.json
index 38a256e3..4b3a8962 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/dsb.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/dsb.json
@@ -7,12 +7,9 @@
"pagetranslation": "Pśełožowanje bokow",
"right-pagetranslation": "Wersije bokow za pśełožowanje markěrowaś",
"action-pagetranslation": "pśełožujobne boki zastojaś",
- "tpt-desc": "Rozšyrjenje za pśełožowanje wopśimjeśowych bokow",
"tpt-section": "Pśełožowańska jadnotka $1",
"tpt-section-new": "Nowa pśełožowańska jadnotka. Mě: $1",
"tpt-section-deleted": "Pśełožowańska jadnotka $1",
- "tpt-template": "Bokowa pśedłoga",
- "tpt-templatediff": "Bokowa pśedłoga jo se změniła.",
"tpt-diff-old": "Pśedchadny tekst",
"tpt-diff-new": "Nowy tekst",
"tpt-submit": "Toś tu wersiju za pśełožowanje markěrowaś",
@@ -26,7 +23,6 @@
"tpt-notsuitable": "Bok $1 njejo gódny za pśełožowanje.\nZawěsć, až ma toflicki <nowiki><translate></nowiki> a płaśiwu syntaksu.",
"tpt-saveok": "Bok [[:$1]] jo se markěrował za pśełožowanje z $2 {{PLURAL:$2|pśełožujobneju jadnotku|pśełožujobnyma jadnotkoma|pśełožujobnymi jadnotkami|pśełožujobnymi jadnotkami}}. Bok móže se něnto <span class=\"plainlinks\">[$3 pśełožowaś]</span>.",
"tpt-offer-notify": "Móžoš wó toś tom boku <span class=\"plainlinks\">[$1 pśełožowarjow informěrowaś]</span>.",
- "tpt-badsect": "\"$1\" njejo płaśiwe mě za pśełožowańsku jadnotku $2.",
"tpt-showpage-intro": "Dołojce su nowe, eksistěrujuce a wulašowane pśełožowańske jadnotki nalicone.\nNježli až markěrujoš toś tu wersiju za pśełožowanje, pśekontrolěruj, lěc změny na pśełožowańskich jadnotkach su zminiměrowane, aby se wobinuł njetrěbne źěło za pśełožowarjow.",
"tpt-mark-summary": "Jo toś tu wersiju za pśełožowanje markěrował",
"tpt-edit-failed": "Toś ten bok njejo se dał aktualizěrowaś: $1",
@@ -59,6 +55,7 @@
"translate-tag-markthisagain": "Toś ten bok ma <span class=\"plainlinks\">[$1 {{PLURAL:$1|změnu|změnje|změny|změnow}}]</span>, wót togo casa, ako jo se slědny raz <span class=\"plainlinks\">[$2 za pśełožowanje markěrował]</span>.",
"translate-tag-hasnew": "Toś ten bok wopśimujo <span class=\"plainlinks\">[$1 {{PLURAL:$1|změnu, kótaraž njejo markěrowana|změnje, kótarejž njejstej markěrowanej|změny, kótare njejsu markěrowane|změnow, kótarež njejsu markěrowane}}]</span> za pśełožowanje.",
"tpt-translation-intro": "Toś ten bok jo <span class=\"plainlinks\">[$1 pśełožona wersija]</span> boka [[$2]] a $3 % pśełožka jo dogótowane a pśełožk jo aktualny.",
+ "tpt-translation-intro-fuzzy": "Zestarjone pśełožki su kaž toś ten markěrowany.",
"tpt-languages-legend": "Druge rěcy:",
"tpt-languages-zero": "Pśełožowanje za toś tu rěc zachopiś",
"tpt-tab-translate": "Pśełožyś",
@@ -70,7 +67,6 @@
"tpt-discouraged-language-reason": "Pśicyna: $1",
"tpt-priority-languages": "Pśełožowański administrator jo primarne rěcy za toś tu kupku ako $1 nastajił.",
"tpt-render-summary": "Aktualizacija pó nowej wersiji žrědłowego boka",
- "tpt-download-page": "Bok z pśełožkami eksportěrowaś",
"aggregategroups": "Metakupki",
"tpt-aggregategroup-add": "Pśidaś",
"tpt-aggregategroup-save": "Składowaś",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/el.json b/www/wiki/extensions/Translate/i18n/pagetranslation/el.json
index d01ff007..e2a68b87 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/el.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/el.json
@@ -8,7 +8,8 @@
"Protnet",
"ZaDiak",
"Geraki",
- "Evropi"
+ "Evropi",
+ "Nikosgranturismogt"
]
},
"pagetranslation": "Μετάφραση σελίδων",
@@ -63,6 +64,7 @@
"translate-tag-markthisagain": "Αυτή η σελίδα έχει <span class=\"plainlinks\">[$1 αλλαγές]</span> από την τελευταία φορά που είχε <span class=\"plainlinks\">[$2 σημανθεί για μετάφραση]</span>.",
"translate-tag-hasnew": "Αυτή η σελίδα περιέχει <span class=\"plainlinks\">[$1 αλλαγές]</span> που δεν έχουν σημανθεί για μετάφραση.",
"tpt-translation-intro": "Αυτή η σελίδα είναι μια <span class=\"plainlinks\">[$1 μεταφρασμένη έκδοση]</span> της σελίδας [[$2]] και η μετάφραση είναι $3% ολοκληρωμένη.",
+ "tpt-translation-intro-fuzzy": "Ξεπερασμένες μεταφράσεις σημειώνονται όπως αυτό.",
"tpt-languages-legend": "Άλλες γλώσσες:",
"tpt-languages-zero": "Έναρξη μετάφρασης για αυτήν τη γλώσσα",
"tpt-languages-nonzero": "$1 ($2% μεταφρασμένο)",
@@ -116,6 +118,14 @@
"logentry-pagetranslation-prioritylanguages-force": "{{GENDER:$2|Ο|Η}} $1 περιόρισε τις γλώσσες για την προς μετάφραση σελίδα $3 στα $5",
"logentry-pagetranslation-associate": "{{GENDER:$2|Ο|Η}} $1 προσέθεσε την προς μετάφραση σελίδα $3 στη συγκεντρωτική ομάδα $4",
"logentry-pagetranslation-dissociate": "{{GENDER:$2|Ο|Η}} $1 αφαίρεσε την προς μετάφραση σελίδα $3 από τη συγκεντρωτική ομάδα $4",
+ "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-encourage": "Ενθάρρυνση για μετάφραση",
+ "log-action-filter-pagetranslation-discourage": "Αποθάρρυνση για μετάφραση",
+ "log-action-filter-pagetranslation-prioritylanguages": "Τροποποίηση γλωσσών προτεραιότητας",
"pt-movepage-title": "Μετακίνηση της προς μετάφραση σελίδας «$1»",
"pt-movepage-blockers": "Η προς μετάφραση σελίδα δεν μπορεί να μετακινηθεί σε νέο όνομα λόγω {{PLURAL:$1|του ακόλουθου σφάλματος|των ακόλουθων σφαλμάτων}}:",
"pt-movepage-block-base-exists": "Η προς μετάφραση σελίδα προορισμού «[[:$1]]» υπάρχει.",
@@ -161,7 +171,7 @@
"pt-deletepage-list-section": "Σελίδες μεταφραστικών ενοτήτων",
"pt-deletepage-list-other": "Άλλες υποσελίδες",
"pt-deletepage-list-count": "Συνολικά $1 {{PLURAL:$1|σελίδα|σελίδες}} προς διαγραφή.",
- "pt-deletepage-full-logreason": "Τμήμα της προς μετάφραση σελίδας «$1».",
+ "pt-deletepage-full-logreason": "Τμήμα της μεταφράσιμης σελίδας «$1».",
"pt-deletepage-lang-logreason": "Τμήμα της σελίδας μετάφρασης «$1».",
"pt-deletepage-started": "Παρακαλούμε ελέγξτε το [[Special:Log/pagetranslation|αρχείο καταγραφών των σελίδων μετάφρασης]] για σφάλματα και μήνυμα ολοκλήρωσης.",
"pt-deletepage-intro": "Αυτή η ειδική σελίδα σας επιτρέπει να διαγράψετε είτε ολόκληρη σελίδα προς μετάφραση, είτε μια μεμονωμένη σελίδα μετάφρασης σε κάποια γλώσσα.\nΗ ενέργεια διαγραφής δεν θα είναι άμεση, επειδή θα διαγραφούν επίσης και όλες οι σελίδες που εξαρτώνται από αυτές.\nΟι αποτυχίες θα καταγραφούν στο [[Special:Log/pagetranslation|αρχείο καταγραφών των σελίδων μετάφρασης]] και θα πρέπει να επιδιορθωθούν με το χέρι.",
@@ -177,6 +187,7 @@
"pm-add-icon-hover-text": "Προσθήκη μιας μεταφραστικής μονάδας παρακάτω",
"pm-swap-icon-hover-text": "Εναλλαγή με τη μεταφραστική μονάδα παρακάτω",
"pm-delete-icon-hover-text": "Διαγραφή μεταφραστικής μονάδας",
+ "pm-pagetitle-placeholder": "Εισαγάγετε το τίτλο της σελίδας",
"pm-pagetitle-invalid": "Παρακαλούμε εισαγάγετε έγκυρη σελίδα τίτλου",
"pm-langcode-missing": "Παρακαλούμε εισαγάγετε τον κωδικό γλώσσας.",
"pm-summary-import": "Εισήγαγε μετάφραση χρησιμοποιώντας τη [[Special:PageMigration|σελίδα μεταφοράς]]",
@@ -195,5 +206,7 @@
"pp-diff-new-header": "Προετοιμασμένο κείμενο",
"tpt-unlink-confirm": "Παρακαλούμε επιβεβαιώστε ότι θέλετε πραγματικά να καταργήσετε αυτήν τη σελίδα από το σύστημα μετάφρασης.\nΟ επιλογέας γλώσσας και τα μεταφρασμένα ονόματα της σελίδας θα σταματήσουν να λειτουργούν.\nΟι σελίδες μετάφρασης θα γίνουν επεξεργάσιμες.",
"tpt-unlink-button": "Αφαίρεση από τη μετάφραση",
- "tpt-unlink-summary": "Σελίδα που έχει αφαιρεθεί από τη μετάφραση"
+ "tpt-unlink-summary": "Σελίδα που έχει αφαιρεθεί από τη μετάφραση",
+ "tpt-generic-confirm": "Παρακαλούμε επιβεβαιώστε αυτή τη δράση.",
+ "tpt-generic-button": "Επιβεβαίωση"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/en.json b/www/wiki/extensions/Translate/i18n/pagetranslation/en.json
index c7623740..501a4d8b 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/en.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/en.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Nike",
- "BPositive"
+ "BPositive",
+ "Zoranzoki21"
]
},
"pagetranslation": "Page translation",
@@ -23,6 +24,7 @@
"tpt-oldrevision": "$2 is not the latest version of the page [[:$1]].\nOnly latest versions can be marked for translation.",
"tpt-notsuitable": "Page $1 is not suitable for translation.\nMake sure it has <nowiki><translate></nowiki> tags and has a valid syntax.",
"tpt-saveok": "The page [[:$1]] has been marked up for translation with $2 {{PLURAL:$2|translation unit|translation units}}.\nThe page can now be <span class=\"plainlinks\">[$3 translated]</span>.",
+ "tpt-saveok-first": "You can [[Special:PageMigration|import pre-existing translation]] for this page (if any).",
"tpt-offer-notify": "You can <span class=\"plainlinks\">[$1 notify translators]</span> about this page.",
"tpt-showpage-intro": "Below new, existing and deleted translation units are listed.\nBefore marking this version for translation, check that the changes to translation units are minimized to avoid unnecessary work for translators.",
"tpt-mark-summary": "Marked this version for translation",
@@ -52,11 +54,13 @@
"tpt-rev-unmark-tooltip": "Remove this page from translation.",
"tpt-rev-discourage-tooltip": "Discourage further translations on this page.",
"tpt-rev-encourage-tooltip": "Restore this page to normal translation.",
+ "translate-edit-tag-warning": "",
"translate-tag-translate-link-desc": "Translate this page",
"translate-tag-markthis": "Mark this page for translation",
"translate-tag-markthisagain": "This page has <span class=\"plainlinks\">[$1 changes]</span> since it was last <span class=\"plainlinks\">[$2 marked for translation]</span>.",
"translate-tag-hasnew": "This page contains <span class=\"plainlinks\">[$1 changes]</span> which are not marked for translation.",
"tpt-translation-intro": "This page is a <span class=\"plainlinks\">[$1 translated version]</span> of the page [[$2]] and the translation is $3% complete.",
+ "tpt-translation-intro-fuzzy": "Outdated translations are marked like this.",
"tpt-languages-legend": "Other languages:",
"tpt-languages-separator": "&#160;•&#32;",
"tpt-languages-zero": "Start translation for this language",
@@ -97,7 +101,7 @@
"log-description-pagetranslation": "Log for actions related to the page translation system",
"log-name-pagetranslation": "Page translation log",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|marked}} $3 for translation",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|removed}} $3 from translation",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|removed}} $3 from the translation system",
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|completed}} renaming of translatable page $3 to $4",
"logentry-pagetranslation-movenok": "$1 {{GENDER:$2|encountered}} a problem while moving page $3 to $4",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|completed}} deletion of translatable page $3",
@@ -111,6 +115,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|limited}} languages for translatable page $3 to $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|added}} translatable page $3 to aggregate group $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|removed}} translatable page $3 from aggregate group $4",
+ "log-action-filter-pagetranslation": "Type of action:",
+ "log-action-filter-pagetranslation-mark": "Mark for translation",
+ "log-action-filter-pagetranslation-unmark": "Removal from translation",
+ "log-action-filter-pagetranslation-move": "Page moves",
+ "log-action-filter-pagetranslation-delete": "Page deletions",
+ "log-action-filter-pagetranslation-encourage": "Translation encouragement",
+ "log-action-filter-pagetranslation-discourage": "Translation discouragement",
+ "log-action-filter-pagetranslation-prioritylanguages": "Priority languages modification",
+ "log-action-filter-pagetranslation-aggregategroups": "Aggregate groups modification",
"pt-movepage-title": "Move translatable page \"$1\"",
"pt-movepage-blockers": "The translatable page cannot be moved to a new name because of the following {{PLURAL:$1|error|errors}}:",
"pt-movepage-block-base-exists": "The target translatable page \"[[:$1]]\" exists.",
@@ -124,7 +137,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:",
@@ -135,8 +150,8 @@
"pt-movepage-action-perform": "Do the move",
"pt-movepage-action-other": "Change target",
"pt-movepage-intro": "This special page allows you to move pages which are marked for translation.\nThe move action will not be instant, because many pages will need to be moved.\nWhile the pages are being moved, it is not possible to interact with the pages in question.\nFailures will be logged in the [[Special:Log/pagetranslation|page translation log]] and they need to be repaired by hand.",
- "pt-movepage-logreason": "Part of translatable page \"$1\".",
- "pt-movepage-started": "The base page is now moved.\nPlease check the [[Special:Log/pagetranslation|page translation log]] for errors and completion message.",
+ "pt-movepage-logreason": "Part of translatable page \"$1\"",
+ "pt-movepage-started": "Please check the [[Special:Log/pagetranslation|page translation log]] in a while for errors and completion message.",
"pt-locked-page": "This page is locked because the translatable page is currently being moved.",
"pt-deletepage-lang-title": "Deleting translation page \"$1\"",
"pt-deletepage-full-title": "Deleting translatable page \"$1\"",
@@ -156,8 +171,8 @@
"pt-deletepage-list-section": "Translation unit pages",
"pt-deletepage-list-other": "Other subpages",
"pt-deletepage-list-count": "In total $1 {{PLURAL:$1|page|pages}} to delete.",
- "pt-deletepage-full-logreason": "Part of translatable page \"$1\".",
- "pt-deletepage-lang-logreason": "Part of translation page \"$1\".",
+ "pt-deletepage-full-logreason": "Part of translatable page \"$1\"",
+ "pt-deletepage-lang-logreason": "Part of translation page \"$1\"",
"pt-deletepage-started": "Please check the [[Special:Log/pagetranslation|page translation log]] for errors and completion message.",
"pt-deletepage-intro": "This special page allows you delete a whole translatable page, or an individual translation page in a language.\nThe delete action will not be instant, because all the pages depending on them will also be deleted.\nFailures will be logged in the [[Special:Log/pagetranslation|page translation log]] and they need to be repaired by hand.",
"pagemigration": "Translation page migration",
@@ -177,6 +192,8 @@
"pm-pagetitle-missing": "Please enter the page title.",
"pm-langcode-missing": "The language code seems to be missing in the title. Please enter the page title in the format <page-name>/<language-code>.",
"pm-summary-import": "Imported translation using [[Special:PageMigration|page migration]]",
+ "pm-on-import-message-text": "The old translations have been imported. Use the add, swap and delete options to adjust the translation units and click the \"{{int:pm-savepages-button-label}}\" button to save them. Click the \"{{int:pm-cancel-button-label}}\" button to discard.",
+ "pm-on-save-message-text": "The translation units have been saved. You can now enter the title of a new translation page to migrate it, or make changes to the units below and save a new revision.",
"tpt-translate-title": "Allow translation of page title",
"pp-save-summary": "Prepared the page for translation",
"pagepreparation": "Prepare page for translation",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/eo.json b/www/wiki/extensions/Translate/i18n/pagetranslation/eo.json
index 584fe5a0..d626d56c 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/eo.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/eo.json
@@ -100,6 +100,7 @@
"pt-deletepage-lang-logreason": "Pato de la tradukpaĝo \"$1\".",
"pt-deletepage-started": "Bonvolu rekontroli la [[Special:Log/pagetranslation|protokolon pri paĝotradukado]] por eraroj kaj mesaĝo pri kompletiĝo.",
"pt-deletepage-intro": "En tiu ĉi speciala paĝo vi povas forigi tutan tradukeblan paĝon aŭ individuan tradukpaĝon en iu lingvo.\nLa forigo ne efektiviĝos tuj, ĉar ĉiuj dependaj paĝoj estos ankaŭ forigitaj.\nFiaskoj estos protokolitaj en la [[Special:Log/pagetranslation|protokolo pri paĝotradukado]] kaj ilin necesos ripari permane.",
+ "pm-import-button-label": "Enporti",
"pm-cancel-button-label": "Nuligi",
"pp-cancel-button-label": "Nuligi",
"tpt-generic-button": "Konfirmi"
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/es.json b/www/wiki/extensions/Translate/i18n/pagetranslation/es.json
index b3a72140..88b73164 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/es.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/es.json
@@ -18,10 +18,13 @@
"Fitoschido",
"Macofe",
"JasterTDC",
- "Mgpena"
+ "Mgpena",
+ "GamemOfAnime",
+ "Dgstranz",
+ "Cuatro Remos"
]
},
- "pagetranslation": "Traducción de página",
+ "pagetranslation": "Traducción de páginas",
"right-pagetranslation": "Marcar versiones de páginas para traducción",
"action-pagetranslation": "administrar páginas traducibles",
"tpt-section": "Unidad de traducción $1",
@@ -73,11 +76,12 @@
"translate-tag-markthisagain": "Esta página tiene <span class=\"plainlinks\">[$1 cambios]</span> desde la última vez que fue <span class=\"plainlinks\">[$2 marcada para traducción]</span>.",
"translate-tag-hasnew": "Esta página contiene <span class=\"plainlinks\">[$1 cambios]</span> que no se han marcado para su traducción.",
"tpt-translation-intro": "Esta página es una <span class=\"plainlinks\">[$1 versión traducida]</span> de la página [[$2]]. La traducción está completa al $3 %.",
+ "tpt-translation-intro-fuzzy": "Las traducciones desactualizadas están marcadas así.",
"tpt-languages-legend": "Otros idiomas:",
"tpt-languages-zero": "Iniciar la traducción para este idioma",
- "tpt-languages-nonzero": "$1 ($2% traducido)",
+ "tpt-languages-nonzero": "$1 ($2 % traducido)",
"tpt-tab-translate": "Traducir",
- "tpt-target-page": "Esta página no puede ser actualizada manualmente.\nEsta página es una traducción de la página [[$1]] y la traducción puede ser actualizada usando [$2 la herramienta de traducción].",
+ "tpt-target-page": "No se puede actualizar esta página manualmente.\nEsta página es una traducción de la página [[$1]] y puedes actualizar la traducción mediante [$2 la herramienta correspondiente].",
"tpt-patrolling-blocked": "Esta página no puede patrullarse. En su lugar, usa la acción de traducción para revisarla.",
"tpt-unknown-page": "Este espacio de nombres está reservado para traducciones de páginas de contenido.\nLa página que estás tratando de editar no parece corresponder con ninguna página marcada para traducción.",
"tpt-translation-restricted": "La traducción de esta página a este idioma ha sido impedida por un administrador de traducción.\n\nMotivo: $1",
@@ -102,7 +106,7 @@
"tpt-aggregategroup-edit-description": "Descripción:",
"tpt-aggregategroup-update": "Guardar",
"tpt-aggregategroup-update-cancel": "Cancelar",
- "tpt-invalid-group": "Grupo inválido",
+ "tpt-invalid-group": "El grupo no es válido",
"pt-parse-open": "Etiqueta &lt;translate> desequilibrada.\nPlantilla de traducción: <pre>$1</pre>",
"pt-parse-close": "Etiqueta &lt;/translate> desequilibrada.\nPlantilla de traducción: <pre>$1</pre>",
"pt-parse-nested": "No se permiten unidades de traducción &lt;translate> anidadas.\nTexto de etiqueta: <pre>$1</pre>",
@@ -126,6 +130,12 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|limitó}} los idiomas para la página traducible $3 a $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|agregó}} la página traducible $3 al grupo agregado $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|eliminó}} la página traducible $3 del grupo agregado $4",
+ "log-action-filter-pagetranslation": "Tipo de acción:",
+ "log-action-filter-pagetranslation-mark": "Marcar para su traducción",
+ "log-action-filter-pagetranslation-move": "Traslados de página",
+ "log-action-filter-pagetranslation-delete": "Eliminación de páginas",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modificación de idiomas prioritarios",
+ "log-action-filter-pagetranslation-aggregategroups": "Modificación de grupos del agregado",
"pt-movepage-title": "Trasladar la página traducible $1",
"pt-movepage-blockers": "La página traducible no puede ser movida a un nuevo nombre por {{PLURAL:$1|el siguiente error|los siguientes errores}}:",
"pt-movepage-block-base-exists": "Existe la página traducible de destino \"[[:$1]]\".",
@@ -150,8 +160,8 @@
"pt-movepage-action-perform": "Hacer el traslado",
"pt-movepage-action-other": "Cambiar destino",
"pt-movepage-intro": "Esta página especial permite trasladar páginas que están marcadas para su traducción.\nLa acción de traslado no será instantánea, porque necesitarán trasladarse muchas páginas.\nMientras las páginas estén siendo trasladadas, no es posible interactuar con las páginas en cuestión.\nLos fallos serán registrados en el [[Special:Log/pagetranslation|registro de traducción de páginas]] y necesitarán ser reparados manualmente.",
- "pt-movepage-logreason": "Parte de la página traducible \"$1\".",
- "pt-movepage-started": "La página base se ha trasladado.\nPor favor verifica el [[Special:Log/pagetranslation|registro de traducción de página]] para errores y mensaje de conclusión.",
+ "pt-movepage-logreason": "Parte de la página traducible «$1»",
+ "pt-movepage-started": "Verifica el [[Special:Log/pagetranslation|registro de traducción de página]] en un momento en busca de errores y mensaje de conclusión.",
"pt-locked-page": "Esta página está bloqueada porque la página traducible está siendo trasladada actualmente.",
"pt-deletepage-lang-title": "Eliminación de la página de traducción \"$1\"",
"pt-deletepage-full-title": "Eliminación de la página traducible \"$1\"",
@@ -171,12 +181,12 @@
"pt-deletepage-list-section": "Páginas de unidades de traducción",
"pt-deletepage-list-other": "Otras subpáginas",
"pt-deletepage-list-count": "En total $1 {{PLURAL:$1|página|páginas}} a eliminar.",
- "pt-deletepage-full-logreason": "Parte de la página traducible \"$1\".",
- "pt-deletepage-lang-logreason": "Parte de la página de traducción \"$1\".",
+ "pt-deletepage-full-logreason": "Parte de la página traducible «$1»",
+ "pt-deletepage-lang-logreason": "Parte de la página de traducción «$1»",
"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/www/wiki/extensions/Translate/i18n/pagetranslation/et.json b/www/wiki/extensions/Translate/i18n/pagetranslation/et.json
index 1b9e6834..9593ff80 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/et.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/et.json
@@ -10,12 +10,9 @@
"pagetranslation": "Lehekülje tõlkimine",
"right-pagetranslation": "Märkida lehekülje versioone tõlkimiseks",
"action-pagetranslation": "tõlgitavaid lehekülgi hallata",
- "tpt-desc": "Sisulehekülgede tõlkimise lisa",
"tpt-section": "Tõlkeüksus $1",
"tpt-section-new": "Uus tõlkeüksus.\nNimi: $1",
"tpt-section-deleted": "Tõlkeüksus $1",
- "tpt-template": "Lehekülje mall",
- "tpt-templatediff": "Leheküljemall on muutunud.",
"tpt-diff-old": "Eelnev tekst",
"tpt-diff-new": "Uus tekst",
"tpt-submit": "Märgi see versioon tõlkimiseks",
@@ -27,7 +24,6 @@
"tpt-oldrevision": "$2 pole lehekülje [[:$1]] uusim versioon.\nAinult uusimaid versioone saab märkida tõlkimiseks.",
"tpt-notsuitable": "Lehekülg $1 ei sobi tõlkimiseks.\nVeendu, et see sisaldab <nowiki><translate></nowiki>-silte ja selle süntaks on õige.",
"tpt-saveok": "{{PLURAL:$2|Ühe|$2}} tõlkeüksusega lehekülg [[:$1]] on märgitud tõlkimiseks.\nLehekülge saab nüüd <span class=\"plainlinks\">[$3 tõlkida]</span>.",
- "tpt-badsect": "\"$1\" ei sobi tõlkeüksuse $2 nimeks.",
"tpt-showpage-intro": "Allpool on loetletud uued, olemasolevad ja kustutatud tõlkeüksused.\nEnne selle versiooni märkimist tõlkimiseks, veendu palun, et tõlkeüksustes tehtud muudatused on võimalikult väikesed, et tõlkijad ei peaks tegema tarbetut tööd.",
"tpt-mark-summary": "See versioon on märgitud tõlkimiseks",
"tpt-edit-failed": "Lehekülje uuendamine ei õnnestunud: $1",
@@ -59,6 +55,7 @@
"translate-tag-markthisagain": "Seda lehekülge on <span class=\"plainlinks\">[$1 muudetud]</span> pärast seda, kui see viimati <span class=\"plainlinks\">[$2 tõlkimiseks märgiti]</span>.",
"translate-tag-hasnew": "See lehekülg sisaldab <span class=\"plainlinks\">[$1 muudatusi]</span>, mida pole märgitud tõlkimiseks.",
"tpt-translation-intro": "See on lehekülje [[$2]] <span class=\"plainlinks\">[$1 tõlgitud versioon]</span> ja tõlkest on valmis $3%.",
+ "tpt-translation-intro-fuzzy": "Iganenud tõlkeid märgitakse nii.",
"tpt-languages-legend": "Teistes keeltes:",
"tpt-languages-zero": "Alusta sellesse keelde tõlkimist",
"tpt-languages-nonzero": "$1 ($2% tõlgitud)",
@@ -90,7 +87,7 @@
"log-description-pagetranslation": "Lehekülgede tõlkesüsteemiga seotud toimingute logi",
"log-name-pagetranslation": "Lehekülgede tõlkelogi",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|märkis}} lehekülje \"$3\" tõlkimiseks",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|eemaldas}} lehekülje \"$3\" tõlkimiselt",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|eemaldas}} lehekülje \"$3\" tõlkesüsteemist",
"pt-movepage-title": "Tõlgitava lehekülje \"$1\" teisaldamine",
"pt-movepage-blockers": "{{PLURAL:$1|Järgmise tõrke|Järgmiste tõrgete}} tõttu ei saa tõlgitavat lehekülge uue pealkirja alla teisaldada:",
"pt-movepage-block-base-exists": "Sihtkohaks määratud tõlgitav lehekülg \"[[:$1]]\" on olemas.",
@@ -115,8 +112,8 @@
"pt-movepage-action-perform": "Teisalda",
"pt-movepage-action-other": "Muuda sihtkohta",
"pt-movepage-intro": "See erilehekülg võimaldab teisaldada lehekülgi, mis on märgitud tõlkimiseks.\nToiming pole kohene, sest teisaldada tuleb palju lehekülgi.\nTeisaldamise ajal pole võimalik kõnealustel lehekülgedel midagi teha.\nNurjumised logitakse [[Special:Log/pagetranslation|lehekülgede tõlkelogisse]] ja need tuleb käsitsi parandada.",
- "pt-movepage-logreason": "Osa tõlgitavast leheküljest $1.",
- "pt-movepage-started": "See põhilehekülg on nüüd teisaldatud.\nPalun kontrolli, kas [[Special:Log/pagetranslation|lehekülgede tõlkelogis]] on tõrkeid ja teade lõpulejõudmise kohta.",
+ "pt-movepage-logreason": "Osa tõlgitavast leheküljest \"$1\"",
+ "pt-movepage-started": "Palun kontrolli natukese aja pärast, kas [[Special:Log/pagetranslation|lehekülgede tõlkelogis]] on tõrkeid ja teade lõpulejõudmise kohta.",
"pt-locked-page": "See lehekülg on lukus, sest tõlgitavat lehekülge teisaldatakse parasjagu.",
"pt-deletepage-lang-title": "Tõlkelehekülje \"$1\" kustutamine",
"pt-deletepage-full-title": "Tõlgitava lehekülje \"$1\" kustutamine",
@@ -136,14 +133,12 @@
"pt-deletepage-list-section": "Tõlkeüksuse leheküljed",
"pt-deletepage-list-other": "Muud alamlehed",
"pt-deletepage-list-count": "Kustutamisele {{PLURAL:$1|kuulub kokku üks lehekülg|kuuluvad kokku $1 lehekülge}}.",
- "pt-deletepage-full-logreason": "Osa tõlgitavast leheküljest $1.",
- "pt-deletepage-lang-logreason": "Osa tõlkeleheküljest $1.",
+ "pt-deletepage-full-logreason": "Osa tõlgitavast leheküljest \"$1\"",
+ "pt-deletepage-lang-logreason": "Osa tõlkeleheküljest \"$1\"",
"pt-deletepage-started": "Palun kontrolli, kas [[Special:Log/pagetranslation|lehekülgede tõlkelogis]] on tõrkeid ja teade lõpulejõudmise kohta.",
"pt-deletepage-intro": "See erilehekülg võimaldab kustutada terve tõlgitava lehekülje või ühe keele üksiku tõlkelehekülje.\nToiming pole kohene, sest kõik neist sõltuvad leheküljed kustutatakse samuti.\nNurjumised logitakse [[Special:Log/pagetranslation|lehekülgede tõlkelogisse]] ja need tuleb käsitsi parandada.",
"pm-import-button-label": "Impordi",
"pm-savepages-button-label": "Salvesta",
"pm-cancel-button-label": "Loobu",
- "pm-pagename-placeholder": "Sisesta lehekülje pealkiri",
- "pm-langcode-placeholder": "Keelekood",
- "pm-pagetitle-invalid": "Palun sisesta korrektne lehekülje pealkiri"
+ "pm-pagetitle-invalid": "Palun sisesta korrektne lehekülje pealkiri. See peaks olema kujul <lehekülje-pealkiri>/<keelekood>."
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/eu.json b/www/wiki/extensions/Translate/i18n/pagetranslation/eu.json
index 1d80b51c..a94aeb96 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/eu.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/eu.json
@@ -10,7 +10,6 @@
"pagetranslation": "Orrialdearen itzulpena",
"tpt-section-new": "Itzulpen unitate berria.\nIzena: $1",
"tpt-section-deleted": "$1 itzulpen unitatea",
- "tpt-template": "Orrialde txantiloia",
"tpt-diff-old": "Aurreko testua",
"tpt-diff-new": "Testu berria",
"tpt-edit-failed": "Ezin izan da orrialdea eguneratu: $1",
@@ -20,6 +19,7 @@
"translate-tag-translate-link-desc": "Itzuli orri hau",
"tpt-languages-legend": "Beste hizkuntzak:",
"tpt-languages-nonzero": "$1 (%$2 itzulita)",
+ "tpt-tab-translate": "Itzuli",
"tpt-discouraged-language-reason": "Arrazoia: $1",
"tpt-aggregategroup-add": "Gehitu",
"tpt-aggregategroup-save": "Gorde",
@@ -39,9 +39,9 @@
"pt-movepage-subpages": "Azpiorrialde guztiak mugitu",
"pt-deletepage-current": "Orriaren izena:",
"pt-deletepage-reason": "Arrazoia:",
+ "pm-import-button-label": "Inportatu",
"pm-savepages-button-label": "Gorde",
"pm-cancel-button-label": "Utzi",
- "pm-langcode-placeholder": "Hizkuntza-kodea",
"pm-page-does-not-exist": "$1 ez da existitzen.",
"pp-save-button-label": "Gorde"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/fa.json b/www/wiki/extensions/Translate/i18n/pagetranslation/fa.json
index 0ca0c46d..0ed9f3be 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/fa.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/fa.json
@@ -20,12 +20,12 @@
"right-pagetranslation": "علامت‌گذاری نسخه‌های صفحه برای ترجمه",
"action-pagetranslation": "مدیریت صفحه‌های ترجمه‌پذیر",
"tpt-section": "واحد ترجمهٔ $1",
- "tpt-section-new": "واحد جدید ترجمه.\nنام: $1",
+ "tpt-section-new": "واحد ترجمهٔ تازه.\nنام: $1",
"tpt-section-deleted": "واحد ترجمهٔ $1",
"tpt-diff-old": "متن قبلی",
"tpt-diff-new": "متن تازه",
"tpt-submit": "علامت‌گذاری این نسخه برای ترجمه",
- "tpt-sections-oldnew": "واحدهای تازه و موجود ترجمه",
+ "tpt-sections-oldnew": "واحدهای ترجمهٔ تازه و موجود",
"tpt-sections-deleted": "واحدهای حذف‌شدهٔ ترجمه",
"tpt-sections-template": "الگوی ترجمهٔ صفحه",
"tpt-action-nofuzzy": "عدم ابطال ترجمه‌ها",
@@ -33,104 +33,114 @@
"tpt-nosuchpage": "صفحهٔ $1 وجود ندارد",
"tpt-oldrevision": "$2 آخرین نسخهٔ صفحهٔ [[:$1]] نیست.\nفقط آخرین نسخه‌ها می‌توانند برای ترجمه علامت‌گذاری شوند.",
"tpt-notsuitable": "صفحهٔ $1 برای ترجمه مناسب نیست.\nمطمئن شوید برچسب <nowiki><translate></nowiki> و نحو مناسبی دارد.",
- "tpt-saveok": "صفحه [[:$1]] برای ترجمه با $2 {{PLURAL:$2|translation unit|translation units}} مشخص شده‌است.\nاکنون صفحه می‌تواند <span class=\"plainlinks\">[$3 ترجمه شده]</span> باشد.",
- "tpt-offer-notify": "شما می‌توانید <span class=\"plainlinks\">[$1 notify translators]</span> درباره این صفحه.",
+ "tpt-saveok": "صفحه [[:$1]] برای ترجمه با $2 {{PLURAL:$2|واحد ترجمه}} مشخص شده‌است.\nاکنون صفحه می‌تواند <span class=\"plainlinks\">[$3 ترجمه شود]</span>.",
+ "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-edit-failed": "ناتوان از به‌روزرسانی صفحه: $1",
+ "tpt-duplicate": "نام واحد ترجمهٔ $1 بیشتر از یک بار استفاده شده‌است.",
"tpt-already-marked": "آخرین نسخهٔ این صفحه برای ترجمه مشخص شده‌است.",
"tpt-unmarked": "صفحهٔ $1 دیگر برای ترجمه مشخص نشده‌است.",
"tpt-list-nopages": "هیچ صفحه‌ای برای ترجمه مشخص نشده یا برای ترجمه آماده علامت‌گذاری نیست.",
"tpt-new-pages-title": "صفحات پیشنهاد شده برای ترجمه",
- "tpt-old-pages-title": "صفحات در صفحه",
- "tpt-other-pages-title": "صفحات غلط",
- "tpt-discouraged-pages-title": "صفحات دلسرد",
- "tpt-new-pages": "{{PLURAL:$1|این صفحه شامل|این صفحات شامل}} متن با برچسب‌های ترجمه،\nاما هیچ نسخه‌ {{PLURAL:$1|این صفحه|این صفحات}} در حال حاضر برای ترجمه علامت‌گذاری نشده‌است.",
- "tpt-old-pages": "چند نسخه {{PLURAL:$1|این صفحه|این صفحات}} برای ترجمه علامت‌گذاری شده‌است.",
- "tpt-other-pages": "{{PLURAL:$1|ورژن قدیمی این صفحه|ورژن‌های قدیمی‌تر این صفحه}} برای ترجمه علامت‌گذاری شده‌اند،\nاما آخرین {{PLURAL:$1|نسخه|نسخه‌ها}} نمی‌توانند برای ترجمه علامت‌گذاری شوند.",
- "tpt-discouraged-pages": "{{PLURAL:$1|این صفحه|این صفحات}} از ترجمه بیشتر دلسرد شده‌اند.",
- "tpt-select-prioritylangs": "فهرست اولیه کدهای زبان جدا شده با کاما:",
+ "tpt-old-pages-title": "صفحات در حال ترجمه",
+ "tpt-other-pages-title": "صفحات خراب",
+ "tpt-discouraged-pages-title": "صفحات بازداشته",
+ "tpt-new-pages": "{{PLURAL:$1|این صفحه شامل|این صفحه‌ها شامل}} متن با برچسب‌های ترجمه هستند،\nاما هیچ نسخه‌ای از {{PLURAL:$1|این صفحه|این صفحه‌ها}} در حال حاضر برای ترجمه علامت‌گذاری نشده‌است.",
+ "tpt-old-pages": "چند نسخه از {{PLURAL:$1|این صفحه|این صفحه‌ها}} برای ترجمه علامت‌گذاری شده‌است.",
+ "tpt-other-pages": "{{PLURAL:$1|یک نسخهٔ قدیمی این صفحه|نسخه‌های قدیمی‌تر این صفحه‌ها}} برای ترجمه علامت‌گذاری {{PLURAL:$1|شده‌است|شده‌اند}}،\nاما آخرین {{PLURAL:$1|نسخه نمی‌تواند|نسخه‌ها نمی‌توانند}} برای ترجمه علامت‌گذاری {{PLURAL:$1|شود|شوند}}.",
+ "tpt-discouraged-pages": "{{PLURAL:$1|این صفحه|این صفحه‌ها}} از ترجمهٔ بیشتر بازداشته {{PLURAL:$1|شده‌است|شده‌اند}}.",
+ "tpt-select-prioritylangs": "فهرست کد زبان‌های دارای اولویت جدا شده با کاما:",
"tpt-select-prioritylangs-force": "جلوگیری از ترجمه به زبان‌هایی غیر از زبان‌های اولویت",
"tpt-select-prioritylangs-reason": "دلیل:",
- "tpt-sections-prioritylangs": "زبان‌های با اولویت بالا",
+ "tpt-sections-prioritylangs": "زبان‌های دارای اولویت",
"tpt-rev-mark": "علامت‌گذاری برای ترجمه",
"tpt-rev-unmark": "حذف از ترجمه",
- "tpt-rev-discourage": "دلسرد",
+ "tpt-rev-discourage": "بازداشتن",
"tpt-rev-encourage": "احیا",
"tpt-rev-mark-tooltip": "علامت‌گذاری آخرین نسخهٔ این صفحه برای ترجمه.",
"tpt-rev-unmark-tooltip": "حذف این صفحه از ترجمه.",
- "tpt-rev-discourage-tooltip": "دلسرد شدن از ترجمه‌های بیشتر در این صفحه",
+ "tpt-rev-discourage-tooltip": "بازاشتن از ترجمه‌های بیشتر در این صفحه.",
"tpt-rev-encourage-tooltip": "بازگرداندن این صفحه به ترجمه عادی.",
- "translate-tag-translate-link-desc": "ترجمهٔ این پروژه",
+ "translate-tag-translate-link-desc": "ترجمهٔ این صفحه",
"translate-tag-markthis": "علامت‌گذاری این صفحه برای ترجمه",
"translate-tag-markthisagain": "این صفحه از آخرین باری که <span class=\"plainlinks\">[$2 برای ترجمه علامت‌گذاری]</span> شده بود <span class=\"plainlinks\">[$1 تغییراتی]</span> داشته است.",
"translate-tag-hasnew": "این صفحه شامل <span class=\"plainlinks\">[$1 تغییراتی]</span> است که برای ترجمه علامت‌گذاری نشده‌اند.",
- "tpt-translation-intro": "این صفحه <span class=\"plainlinks\">[$1 نسخهٔ ترجمه‌شدهٔ]</span> صفحهٔ [[$2]] است و ترجمهٔ آن $3٪ کامل شده‌است.",
+ "tpt-translation-intro": "این صفحه <span class=\"plainlinks\">[$1 نسخهٔ ترجمه‌شدهٔ]</span> صفحهٔ [[$2]] است و ترجمهٔ آن ٪$3 کامل شده‌است.",
+ "tpt-translation-intro-fuzzy": "ترجمه‌های تاریخ‌گذشته این گونه مشخص می‌شوند.",
"tpt-languages-legend": "زبان‌های دیگر:",
"tpt-languages-zero": "شروع ترجمه برای این زبان",
- "tpt-languages-nonzero": "$1 ($2% ترجمه‌شده)",
+ "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دلیلː $1",
+ "tpt-unknown-page": "این فضای نام برای محتوای صفحه ترجمه‌ها محفوظ شده‌است.\nصفحه‌ای که شما سعی به ویرایش آن دارید، به نظر نمی‌رسد با هیچ صفحه‌ای که برای ترجمه علامت‌گذاری شده مطابقت داشته باشد.",
+ "tpt-translation-restricted": "ترجمه این صفحه به این زبان توسط یک مدیر ترجمه منع شده‌است.\n\nدلیل: $1",
"tpt-discouraged-language-force-header": "این صفحه را نمی‌توان به $1 ترجمه کرد.",
"tpt-discouraged-language-force-content": "یک مدیر ترجمه تصمیم گرفته که این صفحه تنها به $1 ترجمه‌پذیر باشد.",
"tpt-discouraged-language-header": "ترجمه به $1 برای این صفحه اولویت ندارد.",
"tpt-discouraged-language-content": "یک مدیر ترجمه تصمیم گرفته که تلاش‌های ترجمه را به $1 متمرکز کند.",
- "tpt-discouraged-language-force": "<strong> این صفحه نمی‌تواند به $2 ترجمه شود.</strong>\nسرپرست ترجمه تصمیم گرفت که این صفحه می‌تواند تنها به $3 ترجمه شود.",
- "tpt-discouraged-language": "<strong> ترجمه به $2 اولویت برای این صفحه نیست.<strong>\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",
- "tpt-priority-languages": "سرپرست ترجمه اولویت زبان‌ها را برای این گروه به $1 تنظیم کرده‌است.",
+ "tpt-priority-languages": "مدیر ترجمه اولویت زبان‌ها را برای این گروه به $1 تنظیم کرده‌است.",
"tpt-render-summary": "به روز رسانی برای مطابقت نسخه تازه صفحه منبع",
- "aggregategroups": "گروه‌های انبوه",
+ "aggregategroups": "گروه‌های تجمیعی",
"tpt-aggregategroup-add": "افزودن",
"tpt-aggregategroup-save": "ذخیره",
- "tpt-aggregategroup-add-new": "افزودن گروه تازه جمع‌شده",
+ "tpt-aggregategroup-add-new": "افزودن گروه تجمیعی تازه",
"tpt-aggregategroup-new-name": "نام:",
"tpt-aggregategroup-new-description": "توضیحات (اختیاری):",
- "tpt-aggregategroup-remove-confirm": "آیا مطمئن هستید که می‌خواهید این گروه جمع شده را حذف کنید؟",
+ "tpt-aggregategroup-remove-confirm": "آیا مطمئن هستید که می‌خواهید این گروه تجمیعی را حذف کنید؟",
"tpt-aggregategroup-invalid-group": "گروه وجود ندارد",
"tpt-aggregategroup-edit-name": "نام:",
- "tpt-aggregategroup-edit-description": "شرح:",
+ "tpt-aggregategroup-edit-description": "توضیحات:",
"tpt-aggregategroup-update": "ذخیره",
"tpt-aggregategroup-update-cancel": "انصراف",
"tpt-invalid-group": "گروه نامعتبر",
- "pt-parse-open": "نامتعادل و‌ ال‌تی؛ ترجمه> برچسب.\nالگو ترجمهː <pre>$1</pre>",
- "pt-parse-close": "نامتعادل &lt; /ترجمه > برچسب.\nالگو ترجمه: <pre>$1</pre>",
- "pt-parse-nested": "تو در تو &lt; ترجمه> واحدهای ترجمه مجاز نیست.\nبرچسب متن: <pre>$1</pre>",
- "pt-shake-multiple": "چند نشانگر واحد ترجمه برای یک واحد ترجمه.\nمتن واحد ترجمهː <pre>$1</pre>",
- "pt-shake-position": "نشانگرهای واحد ترجمه در وضعیت غیرمنتظره.\nمتن واحد ترجمهː <pre>$1</pre>",
- "pt-shake-empty": "واحد ترجمه خالی برای نشانگر \"$1\".",
+ "pt-parse-open": "برچسب &lt;translate> نامتعادل.\nالگوی ترجمه: <pre>$1</pre>",
+ "pt-parse-close": "برچسب &lt;/translate> نامتعادل\nالگو ترجمه: <pre>$1</pre>",
+ "pt-parse-nested": "واحدهای ترجمهٔ &lt;translate> تودرتو مجاز نیست.\nبرچسب متن: <pre>$1</pre>",
+ "pt-shake-multiple": "چند نشانگر واحد ترجمه برای یک واحد ترجمه.\nمتن واحد ترجمه: <pre>$1</pre>",
+ "pt-shake-position": "نشانگرهای واحد ترجمه در موقعیت غیرمنتظره.\nمتن واحد ترجمه: <pre>$1</pre>",
+ "pt-shake-empty": "واحد ترجمه خالی برای نشانگر «$1».",
"log-description-pagetranslation": "سیاههٔ اعمال مربوط به سامانهٔ ترجمهٔ صفحه",
"log-name-pagetranslation": "سیاههٔ ترجمهٔ صفحه",
- "logentry-pagetranslation-mark": "$1، $3 را برای ترجمه {{GENDER:$2|علامت گذاری کرد}}",
- "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",
- "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|عدم موفقیت}} برای حذف $3 که به ترجمه صفحه $4 متعلق است",
- "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|کامل شده}} حذف صفحه ترجمه $3",
- "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|عدم موفقیت}} برای حذف $3 که به ترجمه صفحه $4 تعلق دارد",
- "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|ترغیب کرده}} ترجمه $3",
- "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|دلسرد کرده}} ترجمه $3",
- "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|حذف شده}} اولویت‌های زبان‌ها از صفحه قابل ترجمه $3",
- "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|تنظیم}} اولویت زبان‌ها برای صفحه قابل ترجمه $3 به $5",
- "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|نحدود شده}} زبان‌ها برای صفحه قابل ترجمه $3 به $5",
- "logentry-pagetranslation-associate": "$1 {{GENDER:$2|افزوده شده}} صفحه قابل ترجمه $3 برای جمع کردن گروه $4",
- "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|حذف شده}} صفحه قابل ترجمه $3 از گروه جمع شده $4",
- "pt-movepage-title": "انتقال صفحهٔ ترجمه \"$1\"",
+ "logentry-pagetranslation-mark": "$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|کامل کرد}}",
+ "logentry-pagetranslation-deletefnok": "$1 در حذف $3 که به صفحهٔ قابل ترجمهٔ $4 متعلق است {{GENDER:$2|شکست خورد}}",
+ "logentry-pagetranslation-deletelok": "$1 حذف صفحهٔ ترجمهٔ $3 را {{GENDER:$2|کامل کرد}}",
+ "logentry-pagetranslation-deletelnok": "$1 در حذف $3 که به ترجمهٔ صفحهٔ $4 تعلق دارد {{GENDER:$2|شکست خورد}}",
+ "logentry-pagetranslation-encourage": "$1 ترجمهٔ $3 را {{GENDER:$2|ترغیب کرد}}",
+ "logentry-pagetranslation-discourage": "$1 ترجمه $3 را {{GENDER:$2|بازداشت}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 اولویت‌های زبان را از صفحهٔ قابل ترجمهٔ $3 {{GENDER:$2|حذف کرد}}",
+ "logentry-pagetranslation-prioritylanguages": "$1 اولویت‌های زبان را برای صفحه قابل ترجمه $3 به $5 {{GENDER:$2|تنظیم کرد}}",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 زبان‌های صفحهٔ قابل ترجمهٔ $3 را به $5 {{GENDER:$2|محدود کرد}}",
+ "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-encourage": "تشویق به ترجمه",
+ "log-action-filter-pagetranslation-discourage": "بازداشتن از ترجمه",
+ "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]]\" وجود دارد.",
"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-subpage-exists": "زیر صفحه موردنظر \"[[:$2]]\" وجود دارد.",
- "pt-movepage-block-subpage-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|صفحهٔ|صفحه‌های}} واحد ترجمه",
@@ -145,14 +155,14 @@
"pt-movepage-action-perform": "منتقل کن",
"pt-movepage-action-other": "تغییر هدف",
"pt-movepage-intro": "این صفحه خاص به شما برای حذف صفحاتی که برای ترجمه مشخص شده‌اند اجازه می دهد.\nبه دلیل صفحات بسیار که نیاز به انتقال خواهند داشت، عمل انتقال فوری نخواهد‌بود.\nهنگامی که صفحات منتقل می‌شوند، امکان ارتباط برقرار کردن با صفحات در سوال نیست.\nشکست‌ها در [[Special:Log/pagetranslation|سیاهه صفحه ترجمه]] وارد خواهند‌شد و نیاز به تعمیر با دست دارند.",
- "pt-movepage-logreason": "قسمتی از صفحه ترجمه \"$1\".",
- "pt-movepage-started": "صفحه پایه منتقل نشده‌است.\nلطفاً [[Special:Log/pagetranslation|سیاهه صفحه ترجمه]] را برای خطاها و پیام تکمیل بررسی کنید.",
+ "pt-movepage-logreason": "قسمتی از صفحهٔ قابل ترجمه «$1»",
+ "pt-movepage-started": "لطفاً گاهی [[Special:Log/pagetranslation|سیاهه صفحه ترجمه]] را برای خطاها و تکمیل پیام بررسی کنید.",
"pt-locked-page": "این صفحه قفل شده‌است زیرا صفحه قابل ترجمه در حال حاضر منتقل شده‌است.",
"pt-deletepage-lang-title": "حذف صفحهٔ ترجمهٔ «$1»",
"pt-deletepage-full-title": "حذف صفحهٔ قابل ترجمهٔ «$1»",
"pt-deletepage-invalid-title": "صفحه مشخص شده معتبر نیست.",
"pt-deletepage-invalid-text": "صفحه مشخص شده نه یک صفحه قابل ترجمه است نه یک صفحه ترجمه.",
- "pt-deletepage-action-check": "فهرست صفحات برای حذف",
+ "pt-deletepage-action-check": "فهرست صفحه‌ها برای حذف",
"pt-deletepage-action-perform": "انجام حذف",
"pt-deletepage-action-other": "تغییر هدف",
"pt-deletepage-lang-legend": "حذف صفحهٔ ترجمه",
@@ -166,10 +176,10 @@
"pt-deletepage-list-section": "صفحه‌های واحد ترجمه",
"pt-deletepage-list-other": "زیرصفحه‌های دیگر",
"pt-deletepage-list-count": "در کل $1 {{PLURAL:$1|صفحه|صفحه}} حذف می‌شوند.",
- "pt-deletepage-full-logreason": "قسمتی از صفحهٔ ترجمه \"$1\".",
- "pt-deletepage-lang-logreason": "قسمتی از صفحهٔ ترجمه \"$1\".",
+ "pt-deletepage-full-logreason": "قسمتی از صفحهٔ قابل ترجمه «$1».",
+ "pt-deletepage-lang-logreason": "قسمتی از ترجمه «$1»",
"pt-deletepage-started": "لطفاً [[Special:Log/pagetranslation|سیاهه صفحه ترجمه]] را برای خطاها و پیام تکمیل بررسی کنید.",
- "pt-deletepage-intro": "این صفحه خاص به شما برای حذف تمام یک صفحه ترجمه ،یا یک صفحه ترجمه فردی در یک زبان اجازه می‌دهد.\nبه دلیل صفحات بسیار که در حال انتظار برای حذف خواهند بود، عمل حذف فوری نخواهد‌بود.\nهنگامی که صفحات منتقل می‌شوند, امکان ارتباط برقرار کردن با صفحات در سوال نیست.\nشکست‌ها در [[Special:Log/pagetranslation|سیاهه صفحه ترجمه]] وارد خواهند‌شد و آنها نیاز به تعمیر با دست دارند.",
+ "pt-deletepage-intro": "این صفحه خاص به شما اجازه می‌دهد تمام یک صفحهٔ ترجمه، یا یک صفحهٔ ترجمهٔ منفرد را حذف کنید.\nعمل حذف فوری نخواهد‌بود زیرا تمام صفحه‌های وابسته به آن‌ها نیز باید حذف شوند.\nشکست‌ها در [[Special:Log/pagetranslation|سیاههٔ صفحهٔ ترجمه]] وارد خواهند‌شد و نیاز به تعمیر دستی خواهند داشت.",
"pagemigration": "مهاجرت صفحهٔ ترجمه",
"pagemigration-summary": "یک صفحهٔ ترجمه را مشخص کنید و تمام ترجمه‌هایی برای آن صفحه را که پیش از فعال شدن سامانهٔ ترجمه انجام شده‌اند احیا کنید.",
"pm-import-button-label": "درون‌ریزی شود",
@@ -182,9 +192,13 @@
"pm-add-icon-hover-text": "واحدی در زیر اضافه کنید",
"pm-swap-icon-hover-text": "واحدی را در زیر جایگزین کنید",
"pm-delete-icon-hover-text": "حذف واحد",
- "pm-pagetitle-invalid": "لطفا یک عنوان صفحه معتبر وارد کنید",
- "pm-langcode-missing": "لطفاً کد زبان را وارد کنید.",
+ "pm-pagetitle-placeholder": "نام صفحه را وارد کنید",
+ "pm-pagetitle-invalid": "لطفا یک عنوان صفحهٔ معتبر وارد کنید. عنوان باید دارای قالب <عنوان-صفحه>/<کد-زبان> باشد.",
+ "pm-pagetitle-missing": "عنوان صفحه را وارد کنید.",
+ "pm-langcode-missing": "به نظر می‌رسد کد زبان از عنوان جا افتاده باشد. عنوان باید دارای قالب <عنوان-صفحه>/<کد-زبان> باشد.",
"pm-summary-import": "ترجمه با استفاده از [[Special:PageMigration|مهاجرت صفحه]] وارد شده‌است",
+ "pm-on-import-message-text": "ترجمه‌های قدیمی درون‌ریزی شدند. از گزینه‌های افزودن، جایگزینی و حذف استفاده کنید تا واحدهای ترجمه را تنظیم کنید و روی «{{int:pm-savepages-button-label}}» کلیک کنید تا ذخیره‌شان کنید. روی «{{int:pm-cancel-button-label}}» کلیک کنید تا تغییرات دور انداخته شوند.",
+ "pm-on-save-message-text": "واحدهای ترجمه ذخیره شدند. اکنون شما می‌توانید عنوان یک صفحهٔ ترجمه را وارد کنید تا منتقلش کنید، یا در واحدهای ترجمهٔ زیر تغییری ایجاد کنید و نسخهٔ جدیدی را ذخیره کنید.",
"tpt-translate-title": "اجازهٔ ترجمهٔ عنوان صفحه را بدهید",
"pp-save-summary": "صفحه را برای ترجمه آماده کرد",
"pagepreparation": "صفحه را برای ترجمه آماده کنید",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/fi.json b/www/wiki/extensions/Translate/i18n/pagetranslation/fi.json
index 4de8fa6a..5710b680 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/fi.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/fi.json
@@ -11,7 +11,9 @@
"Silvonen",
"VezonThunder",
"ZeiP",
- "Pxos"
+ "Pxos",
+ "Valtlait",
+ "Pyscowicz"
]
},
"pagetranslation": "Sivujen kääntäminen",
@@ -35,7 +37,7 @@
"tpt-offer-notify": "Voit <span class=\"plainlinks\">[$1 lähettää ilmoituksen kääntäjille]</span> tästä sivusta.",
"tpt-showpage-intro": "Alempana listattu uusia, olemassa olevia ja poistettuja osioita.\nEnnen kuin merkitset tämän version käännettäväksi, tarkista että muutokset osioihin ovat mahdollisimman vähäisiä, jotta kääntäjille ei aiheudu tarpeetonta työtä.",
"tpt-mark-summary": "Tämä versio merkittiin käännettäväksi",
- "tpt-mark-nochanges": "Tämän version ja edellisen käännettäväksi merkitän version välillä ei ole eroa.",
+ "tpt-mark-nochanges": "Ei tarkistettavia muutoksia. Tämän sivun merkitseminen käännettäväksi ei muokkaa sivua eikä olemassa olevia käännösyksiköitä.",
"tpt-edit-failed": "Sivun päivittäminen epäonnistui: $1",
"tpt-duplicate": "Käännösosion nimeä $1 on käytetty useammin kuin kerran.",
"tpt-already-marked": "Viimeisin versio tästä sivusta on jo merkitty käännettäväksi.",
@@ -66,11 +68,13 @@
"translate-tag-markthisagain": "Tähän sivuun on tehty <span class=\"plainlinks\">[$1 muutoksia]</span> sen jälkeen kun se viimeksi <span class=\"plainlinks\">[$2 merkittiin käännettäväksi]</span>.",
"translate-tag-hasnew": "Tämä sivu sisältää <span class=\"plainlinks\">[$1 muutoksia],</span> joita ei ole merkitty käännettäväksi.",
"tpt-translation-intro": "Tämä on <span class=\"plainlinks\">[$1 käännetty versio]</span> sivusta [[$2]], ja käännös on $3 % valmis.",
+ "tpt-translation-intro-fuzzy": "Vanhentuneet käännökset on merkitty näin.",
"tpt-languages-legend": "Muut kielet:",
"tpt-languages-zero": "Aloita käännös tälle kielelle",
"tpt-languages-nonzero": "$1 ($2 % käännetty)",
"tpt-tab-translate": "Käännä",
"tpt-target-page": "Tätä sivua ei voi muokata tavalliseen tapaan.\nTämä sivu on käännös sivusta [[$1]] ja käännöstä voi päivittää käyttämällä [$2 käännöstyökalua].",
+ "tpt-patrolling-blocked": "Tätä sivua ei voi tarkastaa. Käytä käännöstyökalua sen oikolukemiseen.",
"tpt-unknown-page": "Tämä nimiavaruus on varattu sisältösivujen käännöksille.\nSivu, jota yrität muokata, ei näytä vastaavan mitään sivua, joka on merkitty käännettäväksi.",
"tpt-translation-restricted": "Käännösylläpitäjä on estänyt tämän sivun kääntämisen tälle kielelle.\n\nSyy: $1",
"tpt-discouraged-language-force-header": "Tätä sivua ei voi kääntää kielelle $1.",
@@ -113,19 +117,32 @@
"logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|epäonnistui}} käännössivuun $4 liittyvän sivun $3 poistamisessa",
"logentry-pagetranslation-encourage": "$1 {{GENDER:$2|kumosi}} sivun $3 käännösrajoituksen",
"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 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:",
+ "log-action-filter-pagetranslation-mark": "Merkitty käännettäväksi",
+ "log-action-filter-pagetranslation-unmark": "Poistettu käännettävistä sivuista",
+ "log-action-filter-pagetranslation-move": "Siirto",
+ "log-action-filter-pagetranslation-delete": "Poisto",
+ "log-action-filter-pagetranslation-prioritylanguages": "Ensisijaisten kielten muuttaminen",
+ "log-action-filter-pagetranslation-aggregategroups": "Koottavien ryhmien muuttaminen",
"pt-movepage-title": "Käännettävän sivun $1 siirtäminen",
"pt-movepage-blockers": "Käännettävää sivua ei voi siirtää uudelle nimelle {{PLURAL:$1|seuraavasta syystä|seuraavista syistä}}:",
- "pt-movepage-block-base-exists": "Kohdesivu [[:$1]] on olemassa.",
- "pt-movepage-block-base-invalid": "Kohdesivun nimi ei ole kelvollinen.",
+ "pt-movepage-block-base-exists": "Käännettävä sivu [[:$1]] on olemassa.",
+ "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]] on olemassa.",
- "pt-movepage-block-section-invalid": "Käännösosiosivun [[:$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-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",
@@ -137,11 +154,11 @@
"pt-movepage-action-perform": "Tee siirto",
"pt-movepage-action-other": "Vaihda kohde",
"pt-movepage-intro": "Tällä toimintosivulla voit siirtää käännettäväksi merkittyjä sivuja.\nSiirto ei tapahdu heti, koska useita sivuja täytyy siirtää.\nSivut ovat lukittuna siirron ajan.\nEpäonnistuneet siirrot tallennetaan [[Special:Log/pagetranslation|sivunkääntölokiin]] ja ne täytyy korjata käsin.",
- "pt-movepage-logreason": "Osa käännettävää sivua $1.",
- "pt-movepage-started": "Käännettävän sivun perussivu on siirretty.\nTarkista mahdolliset virheet ja valmistumisviestit [[Special:Log/pagetranslation|sivunkääntölokista]].",
+ "pt-movepage-logreason": "Osa käännettävää sivua ”$1”",
+ "pt-movepage-started": "Tarkista sillä aikaa [[Special:Log/pagetranslation|sivunkääntölokista]]. mahdolliset virheet ja valmistumisviestit.",
"pt-locked-page": "Tämä sivu on lukittu, koska käännettävän sivun siirtäminen on kesken.",
- "pt-deletepage-lang-title": "Poistetaan käännössivu $1.",
- "pt-deletepage-full-title": "Poistetaan käännettävissä oleva sivu $1.",
+ "pt-deletepage-lang-title": "Käännössivun $1 poisto",
+ "pt-deletepage-full-title": "Käännettävän sivun $1 poisto",
"pt-deletepage-invalid-title": "Määritetty sivu ei kelpaa.",
"pt-deletepage-invalid-text": "Sivu ei ole käännettävissä oleva sivu tai sellaisen käännös.",
"pt-deletepage-action-check": "Luetteloi poistettavat sivut",
@@ -158,8 +175,8 @@
"pt-deletepage-list-section": "Käännösosiosivut",
"pt-deletepage-list-other": "Muut alasivut",
"pt-deletepage-list-count": "Yhteensä $1 {{PLURAL:$1|poistettava sivu|poistettavaa sivua}}.",
- "pt-deletepage-full-logreason": "Osa käännettävää sivua $1.",
- "pt-deletepage-lang-logreason": "Osa käännössivua $1.",
+ "pt-deletepage-full-logreason": "Osa käännettävää sivua ”$1”",
+ "pt-deletepage-lang-logreason": "Osa käännössivua ”$1”",
"pt-deletepage-started": "Virheet ja valmistusviesti löytyvät [[Special:Log/pagetranslation|sivunkääntölokista]].",
"pt-deletepage-intro": "Tämän toimintosivun avulla voit poistaa koko käännettävän sivun tai tietynkieliset käännökset.\nPoisto ei tapahdu välittömästi, sillä useita sivuja täytyy poistaa.\nVirheet merkitään [[Special:Log/pagetranslation|sivunkääntölokiin]] ja ne täytyy korjata käsin.",
"pagemigration": "Käännössivumigraatio",
@@ -174,8 +191,10 @@
"pm-swap-icon-hover-text": "Vaihda paikkaa alla olevan yksikön kanssa",
"pm-delete-icon-hover-text": "Poista yksikkö",
"pm-pagetitle-placeholder": "Anna sivun nimi",
- "pm-pagetitle-invalid": "Anna kelvollinen sivun otsikko",
- "pm-langcode-missing": "Anna kielikoodi.",
+ "pm-pagetitle-invalid": "Anna kelvollinen sivun otsikko. Sen pitäisi olla <page-name>/<language-code> muodossa.",
+ "pm-pagetitle-missing": "Anna sivun nimi.",
+ "pm-langcode-missing": "Kielikoodi näyttäisi puuttuvan otsikossa. \nAnna sivun otsikko muodossa <page-name>/<language-code>.",
+ "pm-summary-import": "Tuodut käännökset käyttäen [[Special:PageMigration|page migrationia]]",
"tpt-translate-title": "Salli sivun otsikon käännös",
"pp-save-summary": "Valmisteli sivun kääntämistä varten.",
"pagepreparation": "Valmista sivu kääntämistä varten",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/fr.json b/www/wiki/extensions/Translate/i18n/pagetranslation/fr.json
index 09efcf0b..ca05d8fb 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/fr.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/fr.json
@@ -23,7 +23,10 @@
"Element303",
"TomT0m",
"Wladek92",
- "Mattho69"
+ "Mattho69",
+ "Yasten",
+ "Trial",
+ "Frigory"
]
},
"pagetranslation": "Traduction de pages",
@@ -44,6 +47,7 @@
"tpt-oldrevision": "$2 n’est pas la dernière version de la page [[:$1]].\nSeule la dernière version de la page peut être marquée pour être traduite.",
"tpt-notsuitable": "La page $1 n’est pas susceptible d’être traduite.\nAssurez-vous qu’elle contienne la balise <nowiki><translate></nowiki> et qu’elle ait une syntaxe correcte.",
"tpt-saveok": "La page [[:$1]] a été marquée pour être traduite avec $2 {{PLURAL:$2|unité|unités}} de traduction.\nLa page peut être <span class=\"plainlinks\">[$3 traduite]</span> dès maintenant.",
+ "tpt-saveok-first": "Vous pouvez [[Special:PageMigration|importer une traduction pré-existante]] pour cette page (si elle existe).",
"tpt-offer-notify": "Vous pouvez <span class=\"plainlinks\">[$1 notifier les traducteurs]</span> au sujet de cette page.",
"tpt-showpage-intro": "Ci-dessous, les nouvelles traductions, celles existantes et supprimées.\nAvant de marquer ces versions pour être traduites, vérifier que les modifications aux sections sont minimisées pour éviter du travail inutile aux traducteurs.",
"tpt-mark-summary": "Cette version a été marquée pour être traduite",
@@ -78,13 +82,14 @@
"translate-tag-markthisagain": "Cette page a eu <span class=\"plainlinks\">[$1 des modifications]</span> depuis qu’elle a été dernièrement <span class=\"plainlinks\">[$2 marquée pour être traduite]</span>.",
"translate-tag-hasnew": "Cette page contient <span class=\"plainlinks\">[$1 des modifications]</span> qui ne sont pas marquées pour la traduction.",
"tpt-translation-intro": "Cette page est une <span class=\"plainlinks\">[$1 version traduite]</span> de la page [[$2]] et la traduction est complétée à $3 %.",
+ "tpt-translation-intro-fuzzy": "Les traductions désuètes sont identifiées ainsi.",
"tpt-languages-legend": "Autres langues :",
"tpt-languages-separator": "&nbsp;•&#32;",
"tpt-languages-zero": "Commencer la traduction pour cette langue",
"tpt-languages-nonzero": "$1 ($2% traduit)",
"tpt-tab-translate": "Traduire",
"tpt-target-page": "Cette page ne peut pas être mise à jour manuellement.\nElle est une version traduite de [[$1]] et la traduction peut être mise à jour en utilisant [$2 l’outil de traduction].",
- "tpt-patrolling-blocked": "Cette page ne peut pas être surveillée. Utilisez l'action traduire pour l'examiner.",
+ "tpt-patrolling-blocked": "Cette page ne peut pas être surveillée. Utilisez l’action « traduire » pour l’examiner.",
"tpt-unknown-page": "Cet espace de noms est réservé pour la traduction de pages.\nLa page que vous essayez de modifier ne semble correspondre à aucune page marquée pour être traduite.",
"tpt-translation-restricted": "La traduction de cette page dans cette langue a été empêchée par un administrateur des traductions.\n\nMotif: $1",
"tpt-discouraged-language-force-header": "Cette page ne peut pas être traduite en $1.",
@@ -94,7 +99,7 @@
"tpt-discouraged-language-force": "<strong>Cette page ne peut pas être traduite en $2.</strong>\n\nUn administrateur des traductions a décidé que cette page ne peut être traduite qu’en $3.",
"tpt-discouraged-language": "<strong>Traduire en $2 n’est pas une priorité pour cette page.</strong>\n\nUn administrateur des traductions a décidé de concentrer l’effort de traduction sur $3.",
"tpt-discouraged-language-reason": "Raison : $1",
- "tpt-priority-languages": "Un administrateur de traduction a défini les langues prioritaire pour ce groupe : $1 .",
+ "tpt-priority-languages": "Un administrateur de traduction a défini les langues prioritaires pour ce groupe : $1.",
"tpt-render-summary": "Mise à jour pour être en accord avec la nouvelle version de la source de la page",
"aggregategroups": "Groupes d'agrégation",
"tpt-aggregategroup-add": "Ajouter",
@@ -118,7 +123,7 @@
"log-description-pagetranslation": "Journal des actions liées au système de traduction de pages",
"log-name-pagetranslation": "Journal des traductions de pages",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|a marqué}} $3 à traduire",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|a supprimé}} $3 des traductions à faire",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|a supprimé}} $3 du système de traduction",
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|a terminé}} le renommage d’une page traduisible $3 en $4",
"logentry-pagetranslation-movenok": "$1 {{GENDER:$2|a rencontré}} un problème en déplaçant la page $3 vers $4",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|a terminé}} la suppression d’une page traduisible $3",
@@ -132,6 +137,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|a limité}} les langues pour la page traduisible $3 à $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|a ajouté}} la page traduisible $3 au groupe agrégé $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|a supprimé}} la page traduisible $3 du groupe agrégé $4",
+ "log-action-filter-pagetranslation": "Type d'action :",
+ "log-action-filter-pagetranslation-mark": "Marquer à traduire",
+ "log-action-filter-pagetranslation-unmark": "Supprimer la traduction",
+ "log-action-filter-pagetranslation-move": "Déplacements de pages",
+ "log-action-filter-pagetranslation-delete": "Suppressions de pages",
+ "log-action-filter-pagetranslation-encourage": "Incitation à traduire",
+ "log-action-filter-pagetranslation-discourage": "Traduction non recomandée",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modification de la priorité des langues",
+ "log-action-filter-pagetranslation-aggregategroups": "Agréger la modification des groupes",
"pt-movepage-title": "Déplacer la page à traduire $1",
"pt-movepage-blockers": "La page à traduire ne peut pas être renommée à cause {{PLURAL:$1|de l’erreur suivante|des erreurs suivantes}} :",
"pt-movepage-block-base-exists": "La page traduisible cible \"[[:$1]]\" existe.",
@@ -145,7 +159,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 :",
@@ -156,8 +172,8 @@
"pt-movepage-action-perform": "Renommer",
"pt-movepage-action-other": "Changer la cible",
"pt-movepage-intro": "Cette page spéciale vous permet de renommer des pages qui sont marquées pour être traduites.\nL’action de renommage ne sera pas immédiate, car de nombreuses pages devront être déplacées.\nPendant que les pages sont déplacées, il n'est pas possible d’interagir avec elles.\nLes échecs seront enregistrés dans le [[Special:Log/pagetranslation|journal de traduction]] et devront être corrigés manuellement.",
- "pt-movepage-logreason": "Extrait de la page à traduire $1.",
- "pt-movepage-started": "La page de base est à présent renommée.\nVeuillez vérifier le [[Special:Log/pagetranslation|journal des traductions]] pour repérer d’éventuelles erreurs et lire le message de complétion.",
+ "pt-movepage-logreason": "Extrait de la page à traduire « $1 ».",
+ "pt-movepage-started": "Veuillez ouvrir le [[Special:Log/pagetranslation|journal des traductions de pages]] dans quelques instants pour vérifier les erreurs éventuelles et lire le message de complétion.",
"pt-locked-page": "Cette page est verrouillée parce que la page à traduire est en cours de renommage.",
"pt-deletepage-lang-title": "Suppression de la page de traduction \"$1\"",
"pt-deletepage-full-title": "Suppression de la page à traduire \"$1\"",
@@ -177,8 +193,8 @@
"pt-deletepage-list-section": "Pages d'unités de traduction",
"pt-deletepage-list-other": "Autres sous-pages",
"pt-deletepage-list-count": "Au total, $1 {{PLURAL:$1|page|pages}} à supprimer.",
- "pt-deletepage-full-logreason": "Partie de la page à traduire $1.",
- "pt-deletepage-lang-logreason": "Partie de la page de traduction $1.",
+ "pt-deletepage-full-logreason": "Partie de la page à traduire « $1 ».",
+ "pt-deletepage-lang-logreason": "Partie de la page de traduction « $1 ».",
"pt-deletepage-started": "Veuillez vérifier le [[Special:Log/pagetranslation|journal des traductions]] pour les erreurs et le message de la fin.",
"pt-deletepage-intro": "Cette page spéciale vous permet de supprimer une page traduisible entièrement, ou une page traduisible individuelle dans une langue.\nL'action de suppression n'est pas instantanée, car plusieurs pages dépendantes de celle-ci seront aussi supprimées.\nLes échecs seront inscrits dans le [[Special:Log/pagetranslation|journal des traductions]] et ils doivent être corrigés à la main.",
"pagemigration": "Migration de page de traduction",
@@ -190,14 +206,16 @@
"pm-old-translations-missing": "$1 ne contient pas d’anciennes traductions",
"pm-extra-units-warning": "Des unités supplémentaires peuvent être présentes. Veuillez faire correspondre correctement les unités source et de traduction",
"pm-pagename-missing": "Veuillez saisir le nom de la page",
- "pm-langcode-missing": "Le code de langue semble manquer dans le titre. Veuillez entrer le titre de la page au format <nom-page>/<code-langue>.",
"pm-add-icon-hover-text": "Ajouter une unité ci-dessous",
"pm-swap-icon-hover-text": "Échanger avec l’unité ci-dessous",
"pm-delete-icon-hover-text": "Supprimer l’unité",
"pm-pagetitle-placeholder": "Entrer le titre de la page",
"pm-pagetitle-invalid": "Veuillez entrer un titre de page valide. Il doit être de la forme <nom-page>/<code-langue>.",
"pm-pagetitle-missing": "Veuillez entrer le titre de la page.",
+ "pm-langcode-missing": "Le code de langue semble manquer dans le titre. Veuillez entrer le titre de la page au format <nom-page>/<code-langue>.",
"pm-summary-import": "Traduction importée en utilisant [[Special:PageMigration|la migration de page]]",
+ "pm-on-import-message-text": "Les anciennes traductions ont été importées. Utilisez les options ajouter, échanger et supprimer pour ajuster les unités de traduction et cliquez sur le bouton \"{{int:h-savepages-bouton-label}}\" pour les enregistrer. Cliquez sur le bouton \"{{int:h-annuler-bouton-label}}\" pour annuler.",
+ "pm-on-save-message-text": "Les unités de traduction ont été enregistrés. Vous pouvez maintenant entrer le titre d'une nouvelle page de traduction pour la migrer, ou modifier les unités ci-dessous et enregistrer une nouvelle révision.",
"tpt-translate-title": "Autoriser la traduction du titre de la page",
"pp-save-summary": "Page préparée pour la traduction",
"pagepreparation": "Préparer la page pour sa traduction",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/frp.json b/www/wiki/extensions/Translate/i18n/pagetranslation/frp.json
index 700bf70f..6bf9fddf 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/frp.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/frp.json
@@ -7,12 +7,9 @@
},
"pagetranslation": "Traduccion de pâges",
"right-pagetranslation": "Marcar des vèrsions de pâges por étre traduites",
- "tpt-desc": "Èxtension por traduire des pâges de contegnu",
"tpt-section": "Unitât de traduccion $1",
"tpt-section-new": "Novèla unitât de traduccion.\nNom : $1",
"tpt-section-deleted": "Unitât de traduccion $1",
- "tpt-template": "Modèlo de pâge",
- "tpt-templatediff": "Lo modèlo de pâge at changiê.",
"tpt-diff-old": "Tèxto devant",
"tpt-diff-new": "Tèxto novél",
"tpt-submit": "Marcar ceta vèrsion por étre traduita",
@@ -25,7 +22,6 @@
"tpt-oldrevision": "$2 est pas la dèrriére vèrsion de la pâge [[:$1]].\nSolament la dèrriére vèrsion de la pâge pôt étre marcâye por étre traduita.",
"tpt-notsuitable": "La pâge $1 sè préte pas por étre traduita.\nAssurâd-vos que contegne la balisa <nowiki><translate></nowiki> et pués qu’èye na sintaxa justa.",
"tpt-saveok": "La pâge [[:$1]] est étâye marcâye por étre traduita avouéc $2 unitât{{PLURAL:$2||s}} de traduccion.\nLa pâge pôt étre <span class=\"plainlinks\">[$3 traduita]</span> dês ora.",
- "tpt-badsect": "« $1 » est pas un nom valido por na unitât de traduccion $2.",
"tpt-showpage-intro": "Ce-desot les novèles traduccions, celes ègzistentes et pués celes suprimâyes.\nDevant que marcar ceta vèrsion por étre traduita, controlâd que los changements a les sèccions sont petiôts por èvitar de travâly inutilo ux traductors.",
"tpt-mark-summary": "Ceta vèrsion est étâye marcâye por étre traduita",
"tpt-edit-failed": "Empossiblo de betar a jorn la pâge : $1",
@@ -49,12 +45,13 @@
"translate-tag-markthisagain": "Ceta pâge at avu des <span class=\"plainlinks\">[$1 changements]</span> dês qu’est étâye <span class=\"plainlinks\">[$2 marcâye dèrriérement por étre traduita]</span>.",
"translate-tag-hasnew": "Ceta pâge contint des <span class=\"plainlinks\">[$1 changements]</span> que sont pas marcâs por la traduccion.",
"tpt-translation-intro": "Ceta pâge est na <span class=\"plainlinks\">[$1 traduccion]</span> de la pâge [[$2]] et la traduccion est complètâye a $3 % et pués a jorn.",
+ "tpt-translation-intro-fuzzy": "Les traduccions dèpassâyes sont marcâyes d’ense.",
"tpt-languages-legend": "Ôtres lengoues :",
+ "tpt-languages-nonzero": "$1 ($2% traduit)",
"tpt-target-page": "Ceta pâge pôt pas étre betâye a jorn a la man.\nEl est na traduccion de la pâge [[$1]] et la traduccion pôt étre betâye a jorn en empleyent l’[$2 outil de traduccion].",
"tpt-unknown-page": "Cet’èspâço de noms est resèrvâ por la traduccion de pâges de contegnu.\nLa pâge que vos tâchiéd de changiér semble corrèspondre a gins de pâge marcâye por étre traduita.",
"tpt-discouraged-language-reason": "Rêson : $1",
"tpt-render-summary": "Misa a jorn por étre en acôrd avouéc la novèla vèrsion de la pâge sôrsa",
- "tpt-download-page": "Èxportar la pâge avouéc les sines traduccions",
"tpt-aggregategroup-add": "Apondre",
"tpt-aggregategroup-save": "Encartar",
"tpt-aggregategroup-new-name": "Nom :",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/fy.json b/www/wiki/extensions/Translate/i18n/pagetranslation/fy.json
index 16b3a57c..87c3dacf 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/fy.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/fy.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Robin0van0der0vliet"
+ "Robin0van0der0vliet",
+ "Robin van der Vliet"
]
},
"tpt-select-prioritylangs-reason": "Reden:",
@@ -16,6 +17,5 @@
"pt-movepage-reason": "Reden:",
"pt-deletepage-reason": "Reden:",
"pm-savepages-button-label": "Bewarje",
- "pm-cancel-button-label": "Annulearje",
- "pm-langcode-placeholder": "Taalkoade"
+ "pm-cancel-button-label": "Annulearje"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ga.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ga.json
index d0a5a5c0..326b622a 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ga.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ga.json
@@ -1,10 +1,12 @@
{
"@metadata": {
"authors": [
- "පසිඳු කාවින්ද"
+ "පසිඳු කාවින්ද",
+ "Tem"
]
},
"tpt-select-prioritylangs-reason": "Fáth:",
+ "tpt-languages-nonzero": "$1 ($2% aistrithe)",
"tpt-aggregategroup-save": "Sábháil",
"tpt-aggregategroup-new-name": "Ainm:",
"pt-deletepage-reason": "Fáth:"
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/gaa.json b/www/wiki/extensions/Translate/i18n/pagetranslation/gaa.json
new file mode 100644
index 00000000..ddcaf875
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/gaa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mybluberet"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 (atsake $2%)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/gcr.json b/www/wiki/extensions/Translate/i18n/pagetranslation/gcr.json
new file mode 100644
index 00000000..975805f7
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/gcr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "LeGuyanaisPure"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% tradjwi)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/gl.json b/www/wiki/extensions/Translate/i18n/pagetranslation/gl.json
index e5453fbb..d8058d35 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/gl.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/gl.json
@@ -59,6 +59,7 @@
"translate-tag-markthisagain": "Esta páxina sufriu <span class=\"plainlinks\">[$1 cambios]</span> desde que foi <span class=\"plainlinks\">[$2 marcada para a súa tradución]</span> por última vez.",
"translate-tag-hasnew": "Esta páxina contén <span class=\"plainlinks\">[$1 cambios]</span> que non están marcados para a súa tradución.",
"tpt-translation-intro": "Esta páxina é unha <span class=\"plainlinks\">[$1 versión traducida]</span> da páxina \"[[$2]]\" e a tradución está completada ao $3%.",
+ "tpt-translation-intro-fuzzy": "As traducións obsoletas están marcadas así.",
"tpt-languages-legend": "Outras linguas:",
"tpt-languages-zero": "Comezar a tradución nesta lingua",
"tpt-languages-nonzero": "$1 (traducida ao $2%)",
@@ -112,6 +113,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|limitou}} as linguas da páxina traducible \"$3\" a $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|engadiu}} a páxina traducible \"$3\" ao grupo de agregación \"$4\"",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|eliminou}} a páxina traducible \"$3\" do grupo de agregación \"$4\"",
+ "log-action-filter-pagetranslation": "Tipo de acción:",
+ "log-action-filter-pagetranslation-mark": "Marcar para traducir",
+ "log-action-filter-pagetranslation-unmark": "Eliminar de tradución",
+ "log-action-filter-pagetranslation-move": "Traslados da páxina",
+ "log-action-filter-pagetranslation-delete": "Borrado de páxinas",
+ "log-action-filter-pagetranslation-encourage": "Incitación á tradución",
+ "log-action-filter-pagetranslation-discourage": "Tradución non recomendada",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modificación da prioridade das linguas",
+ "log-action-filter-pagetranslation-aggregategroups": "Agregar a modificación dos grupos",
"pt-movepage-title": "Mover a páxina traducible \"$1\"",
"pt-movepage-blockers": "Non se pode trasladar a páxina traducible a un novo nome debido {{PLURAL:$1|ao seguinte erro|aos seguintes erros}}:",
"pt-movepage-block-base-exists": "Existe a páxina traducible de destino \"[[:$1]]\".",
@@ -136,8 +146,8 @@
"pt-movepage-action-perform": "Realizar o traslado",
"pt-movepage-action-other": "Cambiar o destino",
"pt-movepage-intro": "Esta páxina especial permite mover páxinas que están marcadas para a súa tradución.\nA acción de traslado non será inmediata porque é necesario mover moitas outras páxinas.\nMentres as páxinas son trasladadas, non é posible traballar nelas.\nOs erros quedarán rexistrados no [[Special:Log/pagetranslation|rexistro de páxinas de tradución]] e deberán ser reparados manualmente.",
- "pt-movepage-logreason": "Parte da páxina traducible \"$1\".",
- "pt-movepage-started": "Estase a mover a páxina base.\nComprobe o [[Special:Log/pagetranslation|rexistro de páxinas de tradución]] por se houbese algún erro e para ler as mensaxes de conclusión.",
+ "pt-movepage-logreason": "Parte da páxina traducible \"$1\"",
+ "pt-movepage-started": "Por favor, comprobe o [[Special:Log/pagetranslation|rexistro de páxinas de tradución]] nun momento por se houbese algún erro e para ler as mensaxes de conclusión.",
"pt-locked-page": "Esta páxina está bloqueada porque se está a mover a páxina traducible.",
"pt-deletepage-lang-title": "Borrar a páxina de tradución \"$1\"",
"pt-deletepage-full-title": "Borrar a páxina traducible \"$1\"",
@@ -157,8 +167,8 @@
"pt-deletepage-list-section": "Páxinas de unidade de tradución",
"pt-deletepage-list-other": "Outras subpáxinas",
"pt-deletepage-list-count": "En total, $1 {{PLURAL:$1|páxina|páxinas}} a borrar.",
- "pt-deletepage-full-logreason": "Parte da páxina traducible \"$1\".",
- "pt-deletepage-lang-logreason": "Parte da páxina de tradución \"$1\".",
+ "pt-deletepage-full-logreason": "Parte da páxina traducible \"$1\"",
+ "pt-deletepage-lang-logreason": "Parte da páxina de tradución \"$1\"",
"pt-deletepage-started": "Comprobe os erros e as mensaxes de conclusión no [[Special:Log/pagetranslation|rexistro de páxinas de tradución]].",
"pt-deletepage-intro": "Esta páxina especial permite borrar por completo páxinas traducibles ou páxinas de tradución individuais nunha lingua.\nA acción de borrado non será inmediata porque cómpre eliminar todas as páxinas dependentes delas.\nOs erros quedarán rexistrados no [[Special:Log/pagetranslation|rexistro de páxinas de tradución]] e terán que arranxarse manualmente.",
"pagemigration": "Migración da páxina de tradución",
@@ -178,6 +188,8 @@
"pm-pagetitle-missing": "Por favor, insira o título da páxina.",
"pm-langcode-missing": "O código de lingua parece faltar no título. Escriba o título da páxina no formato <nombe-de-páxina>/<código-de-lingua>.",
"pm-summary-import": "Importouse a tradución usando [[Special:PageMigration|migración de páxina]]",
+ "pm-on-import-message-text": "As traducións antigas foron importadas. Use as opcións engadir, cambiar e borrar para axustar as unidades de tradución e prema no botón \"{{int:pm-savepages-button-label}}\" para gardalas. Prema o botón \"{{int:pm-cancel-button-label}}\" para cancelar.",
+ "pm-on-save-message-text": "As unidades de tradución foron gardadas. Agora pode indicar o título dunha nova páxina de tradución a migrar ou facer cambios ás unidades de abaixo e gardar unha nova revisión.",
"tpt-translate-title": "Permitir a tradución do título da páxina",
"pp-save-summary": "Preparo a páxina para a súa tradución",
"pagepreparation": "Preparar a páxina para a tradución",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/glk.json b/www/wiki/extensions/Translate/i18n/pagetranslation/glk.json
new file mode 100644
index 00000000..59628a86
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/glk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "شیخ"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2٪ واگردان بۊبؤ)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/gom-latn.json b/www/wiki/extensions/Translate/i18n/pagetranslation/gom-latn.json
index ec35a5f0..8ee5fcc9 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/gom-latn.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/gom-latn.json
@@ -4,5 +4,10 @@
"The Discoverer"
]
},
- "tpt-languages-nonzero": "$1 ($2% onkarla)"
+ "tpt-languages-nonzero": "$1 ($2% onkarla)",
+ "pt-movepage-list-other": "{{PLURAL:$1|Dusrem up-pan|Her up-panam}}",
+ "pt-movepage-current": "Sodhyachem nanv:",
+ "pt-movepage-new": "Novem nanv:",
+ "pt-movepage-reason": "Karonn:",
+ "pt-movepage-subpages": "Sogllim up-panam haloi"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/gor.json b/www/wiki/extensions/Translate/i18n/pagetranslation/gor.json
new file mode 100644
index 00000000..8c2699c4
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/gor.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Marwan Mohamad"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% terjemahan)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/got.json b/www/wiki/extensions/Translate/i18n/pagetranslation/got.json
new file mode 100644
index 00000000..980cd482
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/got.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gothicspeaker"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% 𐌲𐌰𐍃𐌺𐌴𐌹𐍂𐌹𐌸)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/gsw.json b/www/wiki/extensions/Translate/i18n/pagetranslation/gsw.json
index 1ee96358..c3c72739 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/gsw.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/gsw.json
@@ -9,12 +9,9 @@
"pagetranslation": "Sytenibersetzig",
"right-pagetranslation": "D Syte, wu sotte ibersetzt wäre, markiere",
"action-pagetranslation": "ibersetzbari Syte z verwalte",
- "tpt-desc": "Erwyterig fir d Iberstzig vu Inhaltssyte",
"tpt-section": "Iberstzigs-Abschnitt $1",
"tpt-section-new": "Neje Iberstzigs-Abschnitt. Name: $1",
"tpt-section-deleted": "Ibersetzigs-Abschnitt $1",
- "tpt-template": "Sytevorlag",
- "tpt-templatediff": "D Sytevorlag het sich gänderet.",
"tpt-diff-old": "Vorige Tekscht",
"tpt-diff-new": "Neje Tekscht",
"tpt-submit": "Die Version zum Ibersetze markiere",
@@ -27,7 +24,6 @@
"tpt-oldrevision": "$2 isch nit di letscht Version vu dr Syte [[:$1]].\nNume di letschte Versione chenne zum Iberseze markiert wäre.",
"tpt-notsuitable": "D Syte $1 cha nit iberstez wäre.\nStell sicher, ass si <nowiki><translate></nowiki>-Markierige un e giltige Syntax het.",
"tpt-saveok": "D Syte [[:$1]] isch zum Ibersetze markiert wore mit $2 {{PLURAL:$2|Ibersetzigs-Abschnitt|Ibersetzigs-Abschnitt}}.\nD Syte cha jetz <span class=\"plainlinks\">[$3 ibersetzt]</span> wäre.",
- "tpt-badsect": "\"$1\" isch kei giltige Name fir dr Iberstzigs-Abschnitt $2.",
"tpt-showpage-intro": "Unte sin Abschnitt ufglischtet, wu nej sin, sonigi wu s git un sonigi wu s nit git.\nVoreb Du die Version zum Ibersetze frejgisch, iberprief, ass d Änderige an dr Abschnitt gring ghalte sin go uunetigi Arbed bi dr Ibersetzig vermyde.",
"tpt-mark-summary": "het die Versione zum Ibersetze markiert",
"tpt-edit-failed": "Cha d Syte nit aktualisiere: $1",
@@ -60,6 +56,7 @@
"translate-tag-markthisagain": "An däre Syte het s <span class=\"plainlinks\">[$1 Änderige]</span> gee, syt si s lescht Mol <span class=\"plainlinks\">[$2 zum Ibersetze markiert wore isch]</span>.",
"translate-tag-hasnew": "In däre Syte het s <span class=\"plainlinks\">[$1 Änderige]</span>, wu nit zum Ibersetze markiert sin.",
"tpt-translation-intro": "Die Syte isch e <span class=\"plainlinks\">[$1 ibersetzti Version]</span> vun ere Syte [[$2]] un d Ibersetzig isch zue $3% vollständig un aktuäll.",
+ "tpt-translation-intro-fuzzy": "Nit aktuälli Ibersetzige wäre wie dää Tekscht markiert.",
"tpt-languages-legend": "Anderi Sproche:",
"tpt-languages-zero": "Mit em Ibersetze in die Sproch aafange",
"tpt-languages-nonzero": "$1 ($2% ibersetzt)",
@@ -71,7 +68,6 @@
"tpt-discouraged-language-reason": "Grund: $1",
"tpt-priority-languages": "En Ibersetzigsadministrator het di priorisierte Sproche fir die Nochrichtegruppe uf $1 feschtgleit.",
"tpt-render-summary": "Aktualisiere zum e neji Version vu dr Quällsyte z finde",
- "tpt-download-page": "Syte mit Ibersetzige exportiere",
"aggregategroups": "Sammelgruppe",
"tpt-aggregategroup-add": "Zuefiege",
"tpt-aggregategroup-save": "Spychere",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/gu.json b/www/wiki/extensions/Translate/i18n/pagetranslation/gu.json
index 458cf77d..3646559b 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/gu.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/gu.json
@@ -13,8 +13,6 @@
"tpt-section": "ભાષાંતર એકમ $1",
"tpt-section-new": "નવું ભાષાંતર એકમ. નામ: $1",
"tpt-section-deleted": "ભાષાંતર એકમ $1",
- "tpt-template": "પાનાં ઢાંચો",
- "tpt-templatediff": "પાનાંનો ઢાંચો બદલાયો છે.",
"tpt-diff-old": "પહેલાંનું લખાણ",
"tpt-diff-new": "નવું લખાણ",
"tpt-submit": "આ સંસ્કરણને ભાષાંતર માટે ચિહ્નિત કરો",
@@ -24,7 +22,6 @@
"tpt-badtitle": "પાનાને અપાયેલું ($1) નામ પ્રમાણભૂત મથાળું નથી",
"tpt-oldrevision": "$2 એ પાનાં [[:$1]] નું આધુનિક સંસ્કરણ નથી.\n\nફક્ત આધુનિક સંસ્કરણનેજ ભાષાંતર માટે ચિહ્નિત કરી શકાશે.",
"tpt-notsuitable": "પાનું $1 ભાષાંતર માટે યોગ્ય નથી.\n\nખાતરી કરો કે તે <nowiki><translate></nowiki> ટેગ અને પ્રમાણભૂત વાક્યરચના ધરાવે છે.",
- "tpt-badsect": "\"$1\" એ ભાષાંતર એકમ $2 માટેનું પ્રમાણભૂત નામ નથી.",
"tpt-mark-summary": "આ સંસ્કરણને ભાષાંતર માટે ચિહ્નિત કરાયું",
"tpt-edit-failed": "પાનાં: $1 ને અદ્યતન બનાવી શકાયું નહીં.",
"tpt-already-marked": "આ પાનાનું આધુનિક સંસ્કરણ અગાઉથીજ ભાષાંતર માટે ચિહ્નિત થઇ ચુક્યું છે.",
@@ -35,6 +32,7 @@
"tpt-rev-encourage": "ફરી સ્થાપિત કરો",
"translate-tag-translate-link-desc": "આ પાનાનું ભાષાંતર કરો",
"translate-tag-markthis": "આ પાનાંને ભાષાંતર માટે ચિહ્નિત કરો",
+ "tpt-translation-intro-fuzzy": "કાલગ્રસ્ત ભાષાંતરણો આ રીતે ચિહ્નિત થયેલાં.",
"tpt-languages-legend": "અન્ય ભાષાઓ:",
"tpt-languages-nonzero": "$1 ($2% ભાષાંતરીત)",
"tpt-tab-translate": "ભાષાંતર કરો",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/hak.json b/www/wiki/extensions/Translate/i18n/pagetranslation/hak.json
new file mode 100644
index 00000000..34c56945
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/hak.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hakka"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% yí-kîn fân-yi̍t)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/he.json b/www/wiki/extensions/Translate/i18n/pagetranslation/he.json
index bd76a519..62efebb1 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/he.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/he.json
@@ -10,7 +10,7 @@
]
},
"pagetranslation": "תרגום דפים",
- "right-pagetranslation": "סימון גרסאות של הדפים לתרגום",
+ "right-pagetranslation": "סימון גרסאות של דפים כגרסאות שצריך לתרגם",
"action-pagetranslation": "לנהל דפים שאפשר לתרגם",
"tpt-section": "יחידת תרגום $1",
"tpt-section-new": "יחידת תרגום חדשה.\nשם: $1",
@@ -25,8 +25,9 @@
"tpt-badtitle": "שם הדף שניתן ($1) אינו כותרת תקינה",
"tpt-nosuchpage": "הדף $1 אינו קיים",
"tpt-oldrevision": "$2 היא לא הגרסה האחרונה של הדף [[:$1]].\nרק הגרסאות האחרונות יכולות להיות מסומנות לתרגום.",
- "tpt-notsuitable": "הדף $1 אינו מתאים לתרגום.\nאנא ודאו שהוא מכיל תגיות <nowiki><translate></nowiki> ושהתחביר שלו תקין.",
+ "tpt-notsuitable": "הדף $1 אינו מתאים לתרגום.\nנא לוודא שהוא מכיל תגי <nowiki><translate></nowiki> ושהתחביר שלו תקין.",
"tpt-saveok": "הדף [[:$1]] סומן לתרגום עם {{PLURAL:$2|יחידת תרגום אחת|$2 יחידות תרגום}}.\nעכשיו אפשר <span class=\"plainlinks\">[$3 לתרגם]</span> את הדף.",
+ "tpt-saveok-first": "באפשרותך [[Special:PageMigration|לייבר תרגום שכבר קיים]] לדף הזה (אם יש כזה).",
"tpt-offer-notify": "באפשרותך <span class=\"plainlinks\">[$1 להודיע למתרגמים]</span> על הדף הזה.",
"tpt-showpage-intro": "להלן רשימת יחידות תרגום חדשות, קיימות ומחוקות.\nלפני סימון גרסה זו לתרגום, בדקו שהשינויים ליחידות התרגום קטנים ככל שאפשר, כדי למנוע עבודה מיותרת של מתרגמים.",
"tpt-mark-summary": "גרסה זו סומנה לתרגום",
@@ -40,7 +41,7 @@
"tpt-old-pages-title": "דפים בתרגום",
"tpt-other-pages-title": "דפים מקולקלים",
"tpt-discouraged-pages-title": "דפים לא מומלצים",
- "tpt-new-pages": "{{PLURAL:$1|הדף הזה מכיל|הדפים האלה מכילים}} טקסט עם תגי תרגום,\nאבל שום גרסה {{PLURAL:$1|דף זה|הדפים האלה}} מסומנת כעת לתרגום.",
+ "tpt-new-pages": "{{PLURAL:$1|הדף הזה מכיל|הדפים האלה מכילים}} טקסט עם תגי תרגום,\nאבל שום גרסה של {{PLURAL:$1|הדף הזה|הדפים האלה}} אינה מסומנת כעת לתרגום.",
"tpt-old-pages": "{{PLURAL:$1|גרסה מסוימת|גרסאות מסוימות}} של {{PLURAL:$1|דף זה סומנה|דפים אלה סומנו}} לתרגום.",
"tpt-other-pages": "{{PLURAL:$1|גרסה ישנה של דף זה סומנה|גרסאות ישנות של דפים אלה סומנו}} לתרגום,\nאבל {{PLURAL:$1|הגרסה האחרונה אינה יכולה להיות מסומנת|הגרסאות האחרונות אינן יכולות להיות מסומנות}} לתרגום.",
"tpt-discouraged-pages": "מומלץ לא לתרגם את {{PLURAL:$1|הדף הזה|הדפים האלה}}",
@@ -61,13 +62,14 @@
"translate-tag-markthisagain": "בדף הזה יש <span class=\"plainlinks\">[$1 שינויים]</span> שנעשו מאז שהוא <span class=\"plainlinks\">[$2 סומן לתרגום]</span> בפעם האחרונה.",
"translate-tag-hasnew": "דף זה מכיל <span class=\"plainlinks\">[$1 שינויים]</span> שאינם מסומנים לתרגום.",
"tpt-translation-intro": "הדף הזה הוא <span class=\"plainlinks\">[$1 גרסה מתורגמת]</span> של הדף [[$2]] והתרגום שלם ב־$3%.",
+ "tpt-translation-intro-fuzzy": "תרגומים שפג תוקפם מסומנים כך.",
"tpt-languages-legend": "שפות אחרות:",
"tpt-languages-zero": "להתחיל לתרגום לשפה הזאת",
"tpt-languages-nonzero": "$1 (מתורגם: $2%)",
"tpt-tab-translate": "תרגום",
"tpt-target-page": "לא ניתן לעדכן דף זה ידנית.\nדף זה הוא תרגום של הדף [[$1]] וניתן לעדכן את התרגום באמצעות [$2 כלי התרגום].",
"tpt-patrolling-blocked": "לא ניתן לנטר את הדף הזה. במקום זאת יש לבצע את פעולת translate כדי לסקור אותו.",
- "tpt-unknown-page": "מרחב שם זה שמור לצורך תרגומי דפי התוכן.\nהדף אותו אתם מנסים לערוך אינו תואם לאף דף המסומן לתרגום.",
+ "tpt-unknown-page": "מרחב השם הזה שמור לצורך תרגום דפי תוכן.\nהדף ש{{GENDER:|אתה מנסה לערוך|את מנסה לערוך|אתם מנסים לערוך}} אינו תואם לשום דף המסומן לתרגום.",
"tpt-translation-restricted": "מנהל תרגומים נעל את תרגום קבוצת ההודעות הזאת לשפה הזאת.\n\nסיבה להגבלה: $1",
"tpt-discouraged-language-force-header": "לא ניתן לתרגם את הדף הזה ל{{GRAMMAR:תחילית|$1}}.",
"tpt-discouraged-language-force-content": "מנהל התרגום החליט שאפשר לתרגם את הדף הזה רק ל{{GRAMMAR:תחילית|$1}}.",
@@ -100,7 +102,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",
@@ -114,6 +116,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|הגביל|הגבילה}} את התרגום של הדף $3 אל השפות הבאות: $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|הוסיף|הוסיפה}} את הדף הניתן לתרגום $3 לקבוצה המשולבת $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|הוציא|הוציאה}} את הדף הניתן לתרגום $3 מהקבוצה המשולבת $4",
+ "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-encourage": "עידודים של תרגומים",
+ "log-action-filter-pagetranslation-discourage": "המלצות לא לתרגם",
+ "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]].",
@@ -127,7 +138,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": "השם הנוכחי:",
@@ -138,8 +151,8 @@
"pt-movepage-action-perform": "לבצע את ההעברה",
"pt-movepage-action-other": "שינוי יעד",
"pt-movepage-intro": "דף מיוחד זה מאפשר לך להעביר דפים מסומנים לתרגום.\nפעולת ההעברה אינה מיידית, מכיוון שצריך להעביר דפים רבים.\nבזמן שהדפים מועברים, לא ניתן לקיים שום קשר איתם.\nפעולות שייכשלו יירשמו ב[[Special:Log/pagetranslation|יומן תרגום הדפים]], ויהיה צורך לתקן אותן באופן ידני.",
- "pt-movepage-logreason": "חלק מהדף הניתן לתרגום $1.",
- "pt-movepage-started": "עכשיו דף הבסיס הועבר.\nנא לבדוק את השגיאות ואת הודעת ההשלמה ב[[Special:Log/pagetranslation|יומן תרגום הדפים]].",
+ "pt-movepage-logreason": "חלק מהדף הניתן לתרגום \"$1\"",
+ "pt-movepage-started": "נא לבדוק שגיאות ב[[Special:Log/pagetranslation|יומן תרגום הדפים]] בעוד זמן־מה וכן את הודעת ההשלמה.",
"pt-locked-page": "הדף הזה נעול כי הדף הניתן לתרגום מועבר כעת.",
"pt-deletepage-lang-title": "מחיקת דף התרגום \"$1\".",
"pt-deletepage-full-title": "מחיקת הדף הניתן לתרגום \"$1\".",
@@ -159,8 +172,8 @@
"pt-deletepage-list-section": "דפי יחידת תרגום",
"pt-deletepage-list-other": "דפי משנה אחרים",
"pt-deletepage-list-count": "סך הכול {{PLURAL:$1|דף אחד|$1 דפים}} למחוק.",
- "pt-deletepage-full-logreason": "חלק מהדף הניתן לתרגום $1.",
- "pt-deletepage-lang-logreason": "חלק מדך התרגום $1.",
+ "pt-deletepage-full-logreason": "חלק מהדף הניתן לתרגום \"$1\"",
+ "pt-deletepage-lang-logreason": "חלק מדף התרגום \"$1\"",
"pt-deletepage-started": "נא לבדוק את השגיאות ואת הודעת ההשלמה ב[[Special:Log/pagetranslation|יומן תרגום הדפים]]",
"pt-deletepage-intro": "הדך המיוחד הזה מאפשר לך למחוק בשלמותם דפים ניתנים לתרגום או תרגומים שלהם לשפה כלשהי.\nפעולת המחיקה לא תהיה מיידית, כי יש למחוק את כל הדפים התלויים בהם.\nפעולות שייכשלו יירשמו ב[[Special:Log/pagetranslation|יומן תרגום הדפים]] ויהיה צורך לתקן אותן ידנית.",
"pagemigration": "העברת דף מתורגם",
@@ -180,6 +193,8 @@
"pm-pagetitle-missing": "נא להזין את שם הדף.",
"pm-langcode-missing": "נראה שקוד השפה חסר בכותרת. נא להזין את שם הדף בצורת <שם הדף>/<קוד השפה>",
"pm-summary-import": "דף מיובא באמצעות [[Special:PageMigration|העברת דף מתורגם]]",
+ "pm-on-import-message-text": "התרגומים הישנים יובאו. יש להשתמש באפשרויות ההוספה, ההחלפה והמחיקה כדי להתאים את יחידות התרגום וללחוץ על כפתור \"{{int:pm-savepages-button-label}}\" כדי לשמור אותם. יש ללחוץ על כפתור \"{{int:pm-cancel-button-label}}\" כדי לזרוק.",
+ "pm-on-save-message-text": "יחידות התרגום נשמרו. עכשיו אפשר להזין את כותרת התרגום החדש כדי להעביר אותו, או לעשות שינויים ליחידות להלן ולשמור גרסה חדשה.",
"tpt-translate-title": "לאפשר תרגום של כותרת הדף",
"pp-save-summary": "הדף הוכן לתרגום",
"pagepreparation": "הכנת דף",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/hi.json b/www/wiki/extensions/Translate/i18n/pagetranslation/hi.json
index 4a57813e..51682a47 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/hi.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/hi.json
@@ -10,7 +10,6 @@
},
"pagetranslation": "पृष्ठ अनुवाद",
"tpt-section": "अनुवाद यूनिट $1",
- "tpt-template": "पृष्ठ साँचा",
"tpt-diff-old": "पूर्व लेख",
"tpt-diff-new": "नया लेख",
"tpt-oldrevision": "$2, [[:$1]] का नवीनतम संस्करण नहीं है।\nकेवल नवीनतम संस्करण को अनुवाद के लिए चिह्नित किया जा सकता है।",
@@ -30,14 +29,15 @@
"tpt-aggregategroup-save": "सहेजे",
"tpt-aggregategroup-new-name": "नाम:",
"tpt-aggregategroup-new-description": "विवरण (ऐच्छिक)",
+ "tpt-aggregategroup-invalid-group": "समूह मौजूद नहीं है",
"tpt-aggregategroup-edit-name": "नाम:",
"tpt-aggregategroup-edit-description": "विवरण :",
"tpt-aggregategroup-update": "सहेजें",
"tpt-aggregategroup-update-cancel": "रद्द करें",
"tpt-invalid-group": "अमान्य दल",
- "pt-movepage-list-translation": "अनुवाद {{PLURAL:$1|पृष्ठ|पृष्ठ}}",
- "pt-movepage-list-section": "अनुभाग इकाई {{PLURAL:$1|पृष्ठ|पृष्ठ}}",
- "pt-movepage-list-other": "अन्य उप{{PLURAL:$1|पृष्ठ|पृष्ठ}}",
+ "pt-movepage-list-translation": "अनुवाद {{PLURAL:$1|पृष्ठ}}",
+ "pt-movepage-list-section": "अनुवाद इकाई {{PLURAL:$1|पृष्ठ}}",
+ "pt-movepage-list-other": "अन्य उप{{PLURAL:$1|पृष्ठ}}",
"pt-movepage-current": "सद्य सदस्यनाम:",
"pt-movepage-new": "नया नाम:",
"pt-movepage-reason": "कारण:",
@@ -52,11 +52,12 @@
"pm-import-button-label": "आयात करें",
"pm-savepages-button-label": "सहेजें",
"pm-cancel-button-label": "रद्द करें",
- "pm-pagename-placeholder": "सदस्यनाम प्रदान करें",
- "pm-langcode-placeholder": "भाषा कोड",
"pm-page-does-not-exist": "$1 अस्तित्व में नहीं है।",
+ "pm-pagetitle-placeholder": "पृष्ठ का शीर्षक लिखें",
+ "pm-pagetitle-missing": "कृपया पृष्ठ का नाम लिखें।",
"pp-save-button-label": "सहेजें",
"pp-cancel-button-label": "रद्द करें",
+ "pp-diff-old-header": "स्रोत पाठ",
"tpt-unlink-confirm": "कृपया पुष्टि करें कि आप वास्तव में इस पृष्ठ को अनुवाद निकाय से हटाना चाहते हो।\nभाषा चयनकर्ता और अनुवादित पृष्ठ नाम काम करना बन्द कर देंगे। अनुवाद पृष्ठ सम्पादनीय हो जायेगा।",
"tpt-unlink-button": "अनुवाद से निकालें",
"tpt-unlink-summary": "अनुवाद से निकाला गया पृष्ठ"
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/hif-latn.json b/www/wiki/extensions/Translate/i18n/pagetranslation/hif-latn.json
new file mode 100644
index 00000000..ea48f1fd
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/hif-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abdul Kadir"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% translate kar dewa gais)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/hr.json b/www/wiki/extensions/Translate/i18n/pagetranslation/hr.json
index 3b4327b5..6204f9aa 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/hr.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/hr.json
@@ -5,30 +5,70 @@
"Herr Mlinka",
"SpeedyGonsales",
"Roberta F.",
- "MaGa"
+ "MaGa",
+ "Bugoslav"
]
},
"pagetranslation": "Prijevod stranice",
"right-pagetranslation": "Označi inačice stranica za prijevod",
- "tpt-desc": "Proširenje za prevođenje sadržaja stranica",
+ "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",
- "tpt-template": "Predložak stranice",
- "tpt-templatediff": "Predložak stranice je promijenjen.",
"tpt-diff-old": "Prethodni tekst",
"tpt-diff-new": "Novi tekst",
"tpt-submit": "Označi ovu verziju za prijevod",
"tpt-sections-oldnew": "Novi i postojeći prijevodi",
"tpt-sections-deleted": "Obrisane grupe prijevoda",
"tpt-sections-template": "Predložak stranice za prijevod",
+ "tpt-action-nofuzzy": "Ne obeskrepljuj prijevode",
+ "tpt-badtitle": "Dano ime stranice ($1) nije valjani naslov",
"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.",
+ "tpt-translation-intro": "Ova je stranica <span class=\"plainlinks\">[$1 prevedena inačica]</span> stranice [[$2]], a prijevod je $3 % dovršen.",
+ "tpt-translation-intro-fuzzy": "Zastarjeli prijevodi označeni su na ovaj način.",
"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": "Ostale podstranice",
+ "pt-movepage-list-other": "{{PLURAL:$1|Druga podstranica|Druge podstranice}}",
"pt-movepage-current": "Trenutačni naziv:",
"pt-movepage-new": "Novi naziv:",
"pt-movepage-reason": "Razlog:",
@@ -36,8 +76,8 @@
"pt-movepage-action-check": "Provjeri je li premještanje moguće",
"pt-movepage-action-perform": "Premjesti",
"pt-movepage-action-other": "Promijeni cilj",
- "pt-movepage-intro": "Ova posebna stranica omogućava vam premještanje stranica koje su označene za prijevod.\nPremještanje nije trenutačno, jer mnoge stranice treba premjestiti.\nRed poslova će se koristiti za premještanje stranica.\nDok se stranice premještaju, nije moguće raditi na stranicama u pitanju.\nKvarovi/pogreške biti će prijavljene u evidenciji prijevoda i trebaju se ručno popraviti.",
- "pt-movepage-logreason": "Dio prevodive stranice $1.",
+ "pt-movepage-intro": "Ova posebna stranica omogućava Vam premještanje stranica koje su označene prevođenje.\nPremještanje nije trenutno, jer će biti potrebno premjestiti mnoge stranice.\nDok se stranice premještaju, nije moguća interakcija sa stranicama u pitanju.\nPogreške će biti evidentirane u [[Special:Log/pagetranslation|evidenciji prijevoda]] i trebaju se ručno popraviti.",
+ "pt-movepage-logreason": "Dio prevodive stranice »$1«.",
"pm-savepages-button-label": "Spremi",
"pp-save-button-label": "Spremi",
"pp-save-message": "Stranica je spremljena. Možete je [$1 uređivati]."
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/hsb.json b/www/wiki/extensions/Translate/i18n/pagetranslation/hsb.json
index a2611e29..1f2c2776 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/hsb.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/hsb.json
@@ -8,12 +8,9 @@
"pagetranslation": "Přełožowanje strony",
"right-pagetranslation": "Wersije strony za přełožowanje markěrować",
"action-pagetranslation": "přełožujomne strony zrjadować",
- "tpt-desc": "Rozšěrjenje za přełožowanje wobsahowych stronow",
"tpt-section": "Přełožowanska jednotka $1",
"tpt-section-new": "Nowa přełožowanska jednotka. Mjeno: $1",
"tpt-section-deleted": "Přełožowanska jednotka $1",
- "tpt-template": "Předłoha strony",
- "tpt-templatediff": "Předłoha strony je so změniła.",
"tpt-diff-old": "Předchadny tekst",
"tpt-diff-new": "Nowy tekst",
"tpt-submit": "Tutu wersiju za přełožowanje markěrować",
@@ -27,7 +24,6 @@
"tpt-notsuitable": "Strona $1 za přełožowanje přihódna njeje.\nZaswěsć, zo ma taflički <nowiki><translate></nowiki> a płaćiwu syntaksu.",
"tpt-saveok": "Strona [[:$1]] je so za přełožowanje z $2 {{PLURAL:$2|přełožujomnej jednotku|přełožujomnej jednotkomaj|přełožujomnymi jednotkami|přełožujomnymi jednotkami}} markěrowała.\nStrona hodźi so nětko <span class=\"plainlinks\">[$3 přełožować]</span>.",
"tpt-offer-notify": "Móžeš wo tutej stronje <span class=\"plainlinks\">[$1 přełožowarjow informować]</span>.",
- "tpt-badsect": "\"$1\" płaćiwe mjeno za přełožowansku jednotku $2 njeje.",
"tpt-showpage-intro": "Deleka su nowe, eksistowace a zhašane přełožowanske jednotki nalistowane.\nPrjedy hač tutu wersiju za přełožowanje markěruješ, kontroluj, hač změny přełožowanskich jednotkow su miniměrowane, zo by njetrěbne dźěło za přełožowarjow wobešoł.",
"tpt-mark-summary": "Je tutu wersiju za přełožowanje markěrował",
"tpt-edit-failed": "Strona njeda so aktualizować: $1",
@@ -60,6 +56,7 @@
"translate-tag-markthisagain": "Tuta strona ma <span class=\"plainlinks\">[$1 {{PLURAL:$1|změnu|změnje|změny|změnow}}]</span>, wot toho zo, bu posledni raz <span class=\"plainlinks\">[$2 za přełožowanje markěrowana]</span>.",
"translate-tag-hasnew": "Tuta strona wobsahuje <span class=\"plainlinks\">[$1 {{PLURAL:$1|změna, kotraž njeje markěrowana|změnje, kotrejž njejstej markěrowanej|změny, kotrež njejsu markěrowane|změnow, kotrež njejsu markěrowane}}]</span> za přełožowanje.",
"tpt-translation-intro": "Tuta strona je <span class=\"plainlinks\">[$1 přełožena wersija]</span> strony [[$2]] a $3 % přełožka je dokónčene a přełožk je aktualny.",
+ "tpt-translation-intro-fuzzy": "Zestarjene přełožki su kaž tutón markěrowane.",
"tpt-languages-legend": "Druhe rěče:",
"tpt-languages-zero": "Přełožowanje za tutu rěč započeć",
"tpt-languages-nonzero": "$1 ($2% přełožene)",
@@ -72,7 +69,6 @@
"tpt-discouraged-language-reason": "Přičina: $1",
"tpt-priority-languages": "Přełožowanski administrator je primarne rěče za tutu skupinu jako $1 nastajił.",
"tpt-render-summary": "Aktualizacija po nowej wersiji žórłoweje strony",
- "tpt-download-page": "Stronu z přełožkami eksportować",
"aggregategroups": "Skupiny zjednoćić",
"tpt-aggregategroup-add": "Přidać",
"tpt-aggregategroup-save": "Składować",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ht.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ht.json
index 5c3e288f..d93805ab 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ht.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ht.json
@@ -7,12 +7,9 @@
},
"pagetranslation": "Tradiksyon paj yo",
"right-pagetranslation": "Make vèsyon paj yo pou tradui",
- "tpt-desc": "Ekstansyon pou tradui paj kontni yo",
"tpt-section": "Inite tradiksyon $1",
"tpt-section-new": "Nouvo inite tradiksyon.\nNon: $1",
"tpt-section-deleted": "Inite tradiksyon $1",
- "tpt-template": "Modèl pou paj",
- "tpt-templatediff": "Modèl pou paj la chanje",
"tpt-diff-old": "Teks presedan",
"tpt-diff-new": "Nouvo tèks",
"tpt-submit": "Make vèsyon sa pou tradui",
@@ -25,7 +22,6 @@
"tpt-oldrevision": "$2 se pa dènye vèsyon paj [[:$1]].\nSe sèlman dènye vèsyon ki kapab make pou tradui.",
"tpt-notsuitable": "Paj $1 pa bon pou tradui.\nAsire w li gen etikèt <nowiki><translate></nowiki> epi ke li gen yon sentaks ki bon.",
"tpt-saveok": "Paj [[:$1]] te make pou yo tradui l ak 2 {{PLURAL:$2|inite tradiksyon|inite tradiksyon yo}}.\nPaj sa kapab <span class=\"plainlinks\">[$3 tradui]</span> kounye a.",
- "tpt-badsect": "\"$1\" pa yon bon non pou inite tradiksyon $2.",
"tpt-showpage-intro": "Anba, gen yon lis tout sèksyon ki nouvo, sa ki egzsite ak sa ki te efase yo.\nAnvan ou make vèsyon sa pou yo tradui, verifye ki chanjman nan seksyon yo pa anpil, yon fason pou pa bay tradiktè yo travay ki pa nesesè.",
"tpt-mark-summary": "Make vèsyon sa pou tradui",
"tpt-edit-failed": "Pa t kapab mete paj sa ajou: $1",
@@ -41,12 +37,12 @@
"translate-tag-markthisagain": "Paj sa te <span class=\"plainlinks\">[$1 chanje]</span> depi li te <span class=\"plainlinks\">[$2 make pou tradui]</span>.",
"translate-tag-hasnew": "Paj sa genyen <span class=\"plainlinks\">[$1 chanjman]</span> ki pa make pou tradui.",
"tpt-translation-intro": "Paj sa a, se yon <span class=\"plainlinks\">[$1 vèsyon ki tradui]</span> de paj [[$2]], epi tradiksyon a fèt a $3%.",
+ "tpt-translation-intro-fuzzy": "Tradiksyon ki ansyen yo make konsa.",
"tpt-languages-legend": "Lòt lang yo:",
"tpt-languages-nonzero": "$1 ($2 tradui)",
"tpt-target-page": "Paj sa a, se yon tradiksyon paj [[$1]] epi ou kapab mete a jou tradiksyon an lè ou itilize [$2 zouti tradiksyon an].",
"tpt-unknown-page": "Espas non sa a rezève pou tradiksyon paj yo.\nPaj w ap eseye modifye pa sanble koresponn ak yon paj ki make pou tradiksyon.",
"tpt-render-summary": "N ap mete ajou pou nou genyen nouvo vèsyon paj sous la.",
- "tpt-download-page": "Ekspòte paj ki gen tradiksyon",
"pt-parse-open": "Baliz &lt;translate> pa balanse.\nModèle tradiksyon: <pre>$1</pre>",
"pt-parse-close": "Baliz &lt;/translate> pa balanse.\nModèle tradiksyon: <pre>$1</pre>",
"pt-parse-nested": "Seksyon enbrike &lt;translate> pa otorize.\nTeks baliz la: <pre>$1</pre>",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/hu.json b/www/wiki/extensions/Translate/i18n/pagetranslation/hu.json
index f5e510d5..3298d37a 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/hu.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/hu.json
@@ -31,9 +31,12 @@
"tpt-oldrevision": "$2 nem a(z) [[:$1]] lap legutolsó változata.\nCsak a legfrissebb változatok jelölhetőek meg fordításra.",
"tpt-notsuitable": "A(z) $1 lap nem alkalmas a fordításra.\nEllenőrizd, hogy szerepelnek-e benne <nowiki><translate></nowiki> tagek, és helyes-e a szintaxisa.",
"tpt-saveok": "A(z) [[:$1]] lap $2 fordítási egységgel megjelölve fordításra.\nA lap mostantól <span class=\"plainlinks\">[$3 lefordítható]</span>.",
+ "tpt-offer-notify": "<span class=\"plainlinks\">[$1 Értesítheted a fordítókat]</span> erről a lapról.",
"tpt-showpage-intro": "Alább az új, már létező és törölt szakaszok felsorolása látható.\nMielőtt fordításra jelölöd ezt a változatot, ellenőrizd hogy a szakaszok változásai minimálisak, elkerülendő a felesleges munkát a fordítóknak.",
"tpt-mark-summary": "Változat megjelölve fordításra",
+ "tpt-mark-nochanges": "Nincs átnézendő változtatás. A lap megjelölése fordításra nem fogja módosítani se a lapot, sem bármilyen létező fordítási egységet.",
"tpt-edit-failed": "Nem sikerült frissíteni a lapot: $1",
+ "tpt-duplicate": "A(z) $1 név több fordítási egységhez is tartozik",
"tpt-already-marked": "A lap legutolsó verziója már meg van jelölve fordításra.",
"tpt-unmarked": "A(z) $1 lap most már nincs megjelölve fordításra.",
"tpt-list-nopages": "Nincsenek sem fordításra kijelölt, sem kijelölésre kész lapok.",
@@ -44,25 +47,39 @@
"tpt-new-pages": "{{PLURAL:$1|Ez a lap tartalmaz|Ezek a lapok tartalmaznak}} fordítási tagekkel ellátott szöveget, de jelenleg egyik {{PLURAL:$1|változata|változatuk}} sincs megjelölve fordításra.",
"tpt-old-pages": "{{PLURAL:$1|Ennek a lapnak|Ezeknek a lapoknak}} néhány változata meg van jelölve fordításra.",
"tpt-other-pages": "A lap korábbi {{PLURAL:$1|változata|változatai}} fordíthatónak voltak megjelölve, de a legutóbbi {{PLURAL:$1|változatot|változatokat}} nem lehet megjelölni fordításra.",
+ "tpt-discouraged-pages": "A {{PLURAL:$1|lap|lapok}} további fordítása nem javasolt.",
+ "tpt-select-prioritylangs": "A kiemelt nyelvek vesszővel elválasztott listája",
+ "tpt-select-prioritylangs-force": "A nem kiemelt nyelvekre történő fordítás megakadályozása",
"tpt-select-prioritylangs-reason": "Ok:",
"tpt-sections-prioritylangs": "Kiemelt nyelvek",
"tpt-rev-mark": "megjelölés fordításra",
"tpt-rev-unmark": "lap eltávolítása a fordításból",
"tpt-rev-discourage": "nem javasolt",
"tpt-rev-encourage": "visszaállít",
+ "tpt-rev-mark-tooltip": "A lap legutóbbi változatának megjelölése fordításra.",
+ "tpt-rev-unmark-tooltip": "A lap eltávolítása a fordításból.",
+ "tpt-rev-encourage-tooltip": "A lap visszaállítása a normális fordításra.",
"translate-tag-translate-link-desc": "A lap fordítása",
"translate-tag-markthis": "Lap megjelölése fordításra",
"translate-tag-markthisagain": "Ezen a lapon történtek <span class=\"plainlinks\">[$1 változtatások]</span>, mióta utoljára <span class=\"plainlinks\">[$2 megjelölték fordításra]</span>.",
"translate-tag-hasnew": "Ez a lap tartalmaz <span class=\"plainlinks\">[$1 változtatásokat]</span>, amelyek nincsenek fordításra jelölve.",
"tpt-translation-intro": "Ez a(z) [[$2]] lap egy <span class=\"plainlinks\">[$1 lefordított változata]</span>, és a fordítás $3%-a van kész.",
+ "tpt-translation-intro-fuzzy": "Az elavult fordítások így vannak jelölve.",
"tpt-languages-legend": "Más nyelvek:",
+ "tpt-languages-zero": "Fordítás indítása erre a nyelvre",
"tpt-languages-nonzero": "$1 (lefordítva: $2%)",
"tpt-tab-translate": "Fordítás",
"tpt-target-page": "Ezt a lapot nem lehet kézzel frissíteni.\nA(z) [[$1]] lap fordítása, és a fordítását [$2 a fordítás segédeszköz] segítségével lehet frissíteni.",
"tpt-unknown-page": "Ez a névtér a tartalmi lapok fordításainak van fenntartva.\nA lap, amit szerkeszteni próbálsz, úgy tűnik hogy nem egyezik egy fordításra jelölt lappal sem.",
+ "tpt-translation-restricted": "Ennek a lapnak a fordítását ezen nyelvre megakadályozta egy fordítási adminisztrátor.\n\nIndoklás: $1",
+ "tpt-discouraged-language-force-header": "Ez a lap nem fordítható $1 nyelvre.",
+ "tpt-discouraged-language-force-content": "Egy fordítási adminisztrátor úgy döntött, hogy ez a lap csak $1 nyelvre fordítható.",
"tpt-discouraged-language-header": "A fordítás $1 nyelvre nem a legfontosabb feladat ennél a lapnál.",
"tpt-discouraged-language-content": "Egy fordítási adminisztrátor úgy döntött, hogy elsődlegesen $1 nyelvre kell fordítani.",
+ "tpt-discouraged-language-force": "<strong>Ez a lap nem fordítható $2 nyelvre.</strong>\n\nEgy fordítási adminisztrátor úgy döntött, hogy ez a lap csak $3 nyelvre fordítható.",
"tpt-discouraged-language": "<strong>$2 — a fordítás erre a nyelvre nem a legfontosabb feladat.</strong>\n\nAz adminisztrátori javaslat szerint a legfontosabb nyelvek a következők: $3.\n\nKérjük, ha beszéled ezek közül valamelyiket, fontold meg, hogy inkább arra a nyelvre fordítasz előbb: munkádnak így többek láthatják hasznát.",
+ "tpt-discouraged-language-reason": "Indoklás: $1",
+ "tpt-priority-languages": "Egy fordítási adminisztrátor ennek a csoportnak a kiemelt célnyelveit a következő(k)re állította: $1",
"tpt-render-summary": "Frissítés, hogy megegyezzen a forráslap új változatával",
"aggregategroups": "Összesített csoportok",
"tpt-aggregategroup-add": "Hozzáad",
@@ -72,14 +89,48 @@
"tpt-aggregategroup-new-description": "Leírás (opcionális):",
"tpt-aggregategroup-remove-confirm": "Biztosan törölni szeretné ezt az összesített csoportot?",
"tpt-aggregategroup-invalid-group": "Csoport nem létezik",
+ "tpt-aggregategroup-edit-name": "Név:",
+ "tpt-aggregategroup-edit-description": "Leírás:",
+ "tpt-aggregategroup-update": "Mentés",
+ "tpt-aggregategroup-update-cancel": "Mégse",
+ "tpt-invalid-group": "Érvénytelen csoport",
"pt-parse-open": "Páratlan &lt;translate> tag.\nFordítási sablon: <pre>$1</pre>",
"pt-parse-close": "Páratlan &lt;/translate> tag.\nFordítási sablon: <pre>$1</pre>",
"pt-parse-nested": "Egymásba ágyazott &lt;translate> szakaszok nem engedélyezettek.\nElem szövege: <pre>$1</pre>",
+ "pt-shake-multiple": "Több fordításiegység-jelző egy fordítási egységhez.\nA fordítási egység szövege: <pre>$1</pre>",
+ "pt-shake-position": "Fordításiegység-jelzők váratlan helyen.\nA fordítási egység szövege: <pre>$1</pre>",
+ "pt-shake-empty": "Üres fordítási egység a(z) „$1” jelzőhöz.",
"log-description-pagetranslation": "A lapfordító rendszerhez kapcsolódó műveletek naplója",
"log-name-pagetranslation": "Oldalfordítási napló",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|megjelölte}} a(z) $3 lapot fordításra",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|eltávolította}} a(z) $3 lapot a fordításból",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|befejezte}} a(z) $3 fordítható lap átnevezését $4 névre",
+ "logentry-pagetranslation-movenok": "$1 hibát {{GENDER:$2|észlelt}} a(z) $3 lap $4 címre mozgatásakor",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|befejezte}} a(z) $3 lefordítható lap törlését",
+ "logentry-pagetranslation-deletefnok": "$1 nem tudta {{GENDER:$2|törölni}} a(z) $3 lapot, ami a(z) $4 lefordítható laphoz tartozik",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|befejezte}} a(z) $3 fordítási lap törlését",
+ "logentry-pagetranslation-deletelnok": "$1 nem tudta {{GENDER:$2|törölni}} a(z) $3 lapot, ami a(z) $4 fordítási laphoz tartozik",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|eltávolította}} az előnyben részesített nyelveket a(z) $3 lefordítható lapról",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|beállította}} a(z) $3 lefordítható lap előnyben részesített nyelveit a következőre: $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|hozzáadta}} a(z) $3 lefordítható lapot a(z) $4 összesített csoporthoz",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|eltávolította}} a(z) $3 lefordítható lapot a(z) $4 összesített csoportból",
+ "log-action-filter-pagetranslation": "Művelet típusa:",
+ "log-action-filter-pagetranslation-mark": "Fordításra jelölés",
+ "log-action-filter-pagetranslation-unmark": "Eltávolítás a fordításból",
+ "log-action-filter-pagetranslation-move": "Lapmozgatás",
+ "log-action-filter-pagetranslation-delete": "Laptörlés",
+ "log-action-filter-pagetranslation-prioritylanguages": "Előnyben részesített nyelvek módosítása",
+ "log-action-filter-pagetranslation-aggregategroups": "Összesített csoportok módosítása",
"pt-movepage-title": "A(z) $1 fordítható lap átnevezése",
"pt-movepage-blockers": "Nem lehet átnevezni a fordítható lapot az új névre a következő {{PLURAL:$1|hiba|hibák}} miatt:",
+ "pt-movepage-block-base-exists": "A(z) „[[:$1]]” cél-fordíthatólap létezik.",
+ "pt-movepage-block-base-invalid": "A cél-fordíthatólap címe érvénytelen.",
+ "pt-movepage-block-tp-exists": "A(z) „[[:$2]]” cél-fordításilap létezik.",
+ "pt-movepage-block-tp-invalid": "A(z) „[[:$1]]” cél-fordításilap címe érvénytelen lenne (túl hosszú?).",
+ "pt-movepage-block-section-exists": "A(z) „[[:$2]]” cél-fordításiegység létezik.",
+ "pt-movepage-block-section-invalid": "A(z) „[[:$1]]” cél-fordításiegységének címe érvénytelen lenne (túl hosszú?).",
+ "pt-movepage-block-subpage-exists": "A(z) „[[:$2]]” cél-allap létezik.",
+ "pt-movepage-block-subpage-invalid": "A(z) „[[:$1]]” cél-allapjának címe érvénytelen lenne (túl hosszú?).",
"pt-movepage-list-pages": "Átnevezendő lapok listája",
"pt-movepage-list-translation": "Fordítható {{PLURAL:$1|lap|lapok}}",
"pt-movepage-list-section": "Fordítási egység {{PLURAL:$1|lap|lapok}}",
@@ -93,18 +144,64 @@
"pt-movepage-action-check": "Ellenőrizze, hogy az átnevezés lehetséges-e",
"pt-movepage-action-perform": "Átnevezés végrehajtása",
"pt-movepage-action-other": "Cél megváltoztatása",
- "pt-movepage-logreason": "A(z) $1 fordítható lap része",
+ "pt-movepage-logreason": "A(z) „$1” fordítható lap része",
+ "pt-movepage-started": "Kérjük, ellenőrizd a [[Special:Log/pagetranslation|lapfordítási naplót]] egy idő múlva a hibaüzenetekért és a befejezésről szóló üzenetért.",
+ "pt-locked-page": "Ez a lap zárolva van, mert a fordítási lap jelenleg áthelyezés alatt áll.",
+ "pt-deletepage-lang-title": "A(z) „$1” fordítható lap törlése",
+ "pt-deletepage-full-title": "A(z) „$1” fordítható lap törlése",
+ "pt-deletepage-invalid-title": "A megadott lap érvénytelen.",
+ "pt-deletepage-invalid-text": "A megadott lap se nem fordítható, se nem fordítási lap.",
+ "pt-deletepage-action-check": "A törlendő lapok listázása",
"pt-deletepage-action-perform": "Törlés végrehajtása",
"pt-deletepage-action-other": "Cél megváltoztatása",
"pt-deletepage-lang-legend": "Fordítási lap törlése",
"pt-deletepage-full-legend": "Fordítható lap törlésre",
+ "pt-deletepage-any-legend": "Fordítható vagy fordítási lap törlése",
"pt-deletepage-current": "Lap neve:",
"pt-deletepage-reason": "Ok:",
"pt-deletepage-subpages": "Összes allap törlése",
"pt-deletepage-list-pages": "Törlendő lapok listája",
+ "pt-deletepage-list-translation": "Fordítási lapok",
+ "pt-deletepage-list-section": "Fordításiegység-lapok",
+ "pt-deletepage-list-other": "Egyéb allapok",
+ "pt-deletepage-list-count": "Összesen $1 lapot kell törölni.",
+ "pt-deletepage-full-logreason": "A(z) „$1” fordítható lap része",
+ "pt-deletepage-lang-logreason": "A(z) „$1” fordítási lap része",
+ "pt-deletepage-started": "Kérjük, ellenőrizd a [[Special:Log/pagetranslation|lapfordítási naplót]] a hibaüzenetekért és a befejezésről szóló üzenetért.",
"pagemigration": "Fordítási oldal migráció",
+ "pagemigration-summary": "Adj meg egy fordítási lapot a lapon a Translate-rendszer bevezetése előtt végzett fordítások helyreállításához.",
+ "pm-import-button-label": "Importálás",
+ "pm-savepages-button-label": "Mentés",
+ "pm-cancel-button-label": "Mégse",
+ "pm-page-does-not-exist": "A(z) $1 lap nem létezik.",
+ "pm-old-translations-missing": "A(z) $1 lap nem tartalmaz régi fordításokat.",
+ "pm-extra-units-warning": "Létezhetnek extra egységek. Kérjük, párosítsd a forrást a fordítási egységekkel.",
+ "pm-pagename-missing": "Írd be a lap címét.",
+ "pm-add-icon-hover-text": "Adj hozzá egy egységet lentebb",
"pm-swap-icon-hover-text": "Csere az alábbi egységgel",
"pm-delete-icon-hover-text": "Egység törlése",
+ "pm-pagetitle-placeholder": "Írd be a lap címét",
+ "pm-pagetitle-invalid": "Írj be egy érvényes címet. <code><lapcím>/<nyelvkód></code> formátumban kell lennie.",
+ "pm-pagetitle-missing": "Írd be a lap címét.",
+ "pm-langcode-missing": "Úgy tűnik, hiányzik a nyelvkód a címből. Kérjük, írd be a lap címét code><lapcím>/<nyelvkód></code> formátumban.",
+ "pm-summary-import": "Importálva a [[Special:PageMigration|lapmigráció]] segítségével",
+ "pm-on-save-message-text": "A fordítási egységek elmentve. Most beírhatod egy új fordítási lap címét a migrációhoz, vagy lentebb módosíthatod az egységeket a mentés előtt.",
+ "tpt-translate-title": "A lapcím fordításának engedélyezése",
+ "pp-save-summary": "Előkészítés a fordíáshoz",
+ "pagepreparation": "Lap előkészítése fordításra",
+ "pp-pagename-placeholder": "Írd be a lap címét",
+ "pp-prepare-button-label": "Előkészítés",
"pp-save-button-label": "Mentés",
- "pp-diff-old-header": "Forrás szöveg"
+ "pp-cancel-button-label": "Mégse",
+ "pp-save-message": "A lap el lett mentve. Mostantól [$1 szerkesztheted].",
+ "pp-prepare-message": "A lap elő lett készítve fordításra, lásd az eltéréseket alább. Kattints a „{{int:pp-save-button-label}}” gombra, ha minden rendben!",
+ "pp-already-prepared-message": "Úgy tűnik, a lap már elő lett készítve fordításra. Nem történtek változtatások az előző verzióhoz képest.",
+ "pp-pagename-missing": "Írd be a lap címét.",
+ "pp-diff-old-header": "Forrás szöveg",
+ "pp-diff-new-header": "Előkészített szöveg",
+ "tpt-unlink-confirm": "Kérjük, erősítsd meg, hogy valóban el akarod távolítani ezt a lapot a fordítási rendszerből.\nA nyelvválasztó és a lefordított lapcímek nem fognak működni.\nA lefordított lapok szabadon szerkeszthetővé válnak.",
+ "tpt-unlink-button": "Eltávolítás a fordításból",
+ "tpt-unlink-summary": "Lap eltávolítva a fordításból",
+ "tpt-generic-confirm": "Kérjük, erősítsd meg a műveletet.",
+ "tpt-generic-button": "Megerősítés"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/hyw.json b/www/wiki/extensions/Translate/i18n/pagetranslation/hyw.json
new file mode 100644
index 00000000..a987c740
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/hyw.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rajemian",
+ "Kareyac"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% թարգմանուած)",
+ "tpt-aggregategroup-update-cancel": "Չեղարկել"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ia.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ia.json
index ab02d29b..26fefa06 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ia.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ia.json
@@ -7,12 +7,9 @@
"pagetranslation": "Traduction de paginas",
"right-pagetranslation": "Marcar versiones de paginas pro traduction",
"action-pagetranslation": "gerer paginas traducibile",
- "tpt-desc": "Extension pro traducer paginas de contento",
"tpt-section": "Unitate de traduction $1",
"tpt-section-new": "Nove unitate de traduction. Nomine: $1",
"tpt-section-deleted": "Unitate de traduction $1",
- "tpt-template": "Patrono de pagina",
- "tpt-templatediff": "Le patrono del pagina ha cambiate.",
"tpt-diff-old": "Texto anterior",
"tpt-diff-new": "Texto nove",
"tpt-submit": "Marcar iste version pro traduction",
@@ -26,7 +23,6 @@
"tpt-notsuitable": "Le pagina $1 non es traducibile.\nAssecura que illo contine etiquettas <nowiki><translate></nowiki> e ha un syntaxe valide.",
"tpt-saveok": "Le pagina [[:$1]] ha essite marcate pro traduction con $2 {{PLURAL:$2|unitate|unitates}} de traduction.\nLe pagina pote ora esser <span class=\"plainlinks\">[$3 traducite]</span>.",
"tpt-offer-notify": "Tu pote <span class=\"plainlinks\">[$1 notificar le traductores]</span> sur iste pagina.",
- "tpt-badsect": "\"$1\" non es un nomine valide pro le unitate de traduction $2.",
"tpt-showpage-intro": "In basso es listate le unitates de traduction nove, existente e delite.\nAnte de marcar iste version pro traduction, verifica que le modificationes al unitates de traduction sia minimisate pro evitar labor innecessari pro traductores.",
"tpt-mark-summary": "Marcava iste version pro traduction",
"tpt-edit-failed": "Non poteva actualisar le pagina: $1",
@@ -59,6 +55,7 @@
"translate-tag-markthisagain": "Iste pagina ha <span class=\"plainlinks\">[$1 modificationes]</span> depost le ultime vice que illo esseva <span class=\"plainlinks\">[$2 marcate pro traduction]</span>.",
"translate-tag-hasnew": "Iste pagina contine <span class=\"plainlinks\">[$1 modificationes]</span> le quales non ha essite marcate pro traduction.",
"tpt-translation-intro": "Iste pagina es un <span class=\"plainlinks\">[$1 version traducite]</span> del pagina [[$2]] e le traduction es complete a $3%.",
+ "tpt-translation-intro-fuzzy": "Le traductiones obsolete es marcate assi.",
"tpt-languages-legend": "Altere linguas:",
"tpt-languages-zero": "Comenciar le traduction in iste lingua",
"tpt-languages-nonzero": "$1 ($2% traducite)",
@@ -75,7 +72,6 @@
"tpt-discouraged-language-reason": "Motivo: $1",
"tpt-priority-languages": "Un administrator de traduction ha definite le linguas prioritari pro iste gruppo como $1.",
"tpt-render-summary": "Actualisation a un nove version del pagina de origine",
- "tpt-download-page": "Exportar pagina con traductiones",
"aggregategroups": "Gruppos aggregate",
"tpt-aggregategroup-add": "Adder",
"tpt-aggregategroup-save": "Salveguardar",
@@ -96,7 +92,7 @@
"log-description-pagetranslation": "Registro de actiones ligate al systema de traduction de paginas",
"log-name-pagetranslation": "Registro de traduction de paginas",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|marcava}} $3 pro traduction",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|removeva}} $3 del paginas a traducer",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|removeva}} $3 del systema de traduction",
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|completava}} le renomination del pagina traducibile $3 a $4",
"logentry-pagetranslation-movenok": "$1 {{GENDER:$2|incontrava}} un problema durante le renomination del pagina $3 a $4",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|completava}} le deletion del pagina traducibile $3",
@@ -123,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:",
@@ -134,11 +130,11 @@
"pt-movepage-action-perform": "Facer le renomination",
"pt-movepage-action-other": "Cambiar destination",
"pt-movepage-intro": "Iste pagina special permitte renominar paginas marcate pro traduction.\nLe renomination non essera instantanee, proque il essera necessari renominar multe paginas.\nDurante le renomination del paginas, il non es possibile interager con le paginas in question.\nLe fallimentos essera registrate in le [[Special:Log/pagetranslation|registro de traduction de paginas]] e illos necessita reparation manual.",
- "pt-movepage-logreason": "Parte del pagina traducibile $1.",
- "pt-movepage-started": "Le pagina de base ha essite renominate.\nPer favor verifica le [[Special:Log/pagetranslation|registro de traductiones de paginas]] pro reparar eventual errores e leger le message de completion.",
+ "pt-movepage-logreason": "Parte del pagina traducibile \"$1\"",
+ "pt-movepage-started": "Per favor verifica le [[Special:Log/pagetranslation|registro de traductiones de paginas]] in un momento pro reparar eventual errores e leger le message de completion.",
"pt-locked-page": "Iste pagina es serrate proque le pagina traducibile es actualmente in curso de renomination.",
- "pt-deletepage-lang-title": "Le pagina traducite $1 es delite.",
- "pt-deletepage-full-title": "Le pagina traducibile $1 es delite.",
+ "pt-deletepage-lang-title": "Deletion del pagina traducite \"$1\"",
+ "pt-deletepage-full-title": "Deletion del pagina traducibile \"$1\"",
"pt-deletepage-invalid-title": "Le pagina specificate non es valide.",
"pt-deletepage-invalid-text": "Le pagina specificate es ni traducibile ni un traduction.",
"pt-deletepage-action-check": "Listar paginas a deler",
@@ -155,23 +151,21 @@
"pt-deletepage-list-section": "Paginas de unitate de traduction",
"pt-deletepage-list-other": "Altere subpaginas",
"pt-deletepage-list-count": "In total $1 {{PLURAL:$1|pagina|paginas}} a deler.",
- "pt-deletepage-full-logreason": "Parte del pagina traducibile $1.",
- "pt-deletepage-lang-logreason": "Parte del pagina traducite $1.",
+ "pt-deletepage-full-logreason": "Parte del pagina traducibile \"$1\"",
+ "pt-deletepage-lang-logreason": "Parte del pagina traducite \"$1\"",
"pt-deletepage-started": "Per favor verifica in le [[Special:Log/pagetranslation|registro de traduction de paginas]] le existentia de errores e del message de completion.",
"pt-deletepage-intro": "Iste pagina special permitte deler un tote pagina traducibile o un pagina de traduction individual in un certe lingua.\nLe deletion non essera instantanee perque tote le paginas que depende de illos essera delite tamben.\nFallimentos essera registrate in le [[Special:Log/pagetranslation|registro de traduction de paginas]] e requirera reparation manual.",
"pagemigration": "Migration de paginas de traduction",
"pm-import-button-label": "Importar",
"pm-savepages-button-label": "Salveguardar",
"pm-cancel-button-label": "Cancellar",
- "pm-pagename-placeholder": "Entra le nomine del pagina",
- "pm-langcode-placeholder": "Codice de lingua",
"pm-page-does-not-exist": "$1 non existe",
"pm-old-translations-missing": "$1 non contine ancian traductiones",
"pm-extra-units-warning": "Il pote haber additional unitates. Assecura te que le unitates de fonte e de traduction corresponde correctemente.",
"pm-pagename-missing": "Per favor entra le nomine del pagina",
- "pm-langcode-missing": "Per favor entra le codice de lingua",
"pm-add-icon-hover-text": "Adde un unitate hic infra",
"pm-swap-icon-hover-text": "Excambiar con le unitate hic infra",
"pm-delete-icon-hover-text": "Deler unitate",
+ "pm-langcode-missing": "Le codice de lingua manca in le titulo. Per favor, entra le titulo in formato <nomine-de-pagina>/<codice-de-lingua>.",
"tpt-translate-title": "Permitter le traduction del titulo del pagina"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/id.json b/www/wiki/extensions/Translate/i18n/pagetranslation/id.json
index e89a034a..bb2b8bc2 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/id.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/id.json
@@ -9,17 +9,16 @@
"Rex",
"පසිඳු කාවින්ද",
"Raynasution",
- "Iwan Novirion"
+ "Iwan Novirion",
+ "William Surya Permana",
+ "Pebaryan"
]
},
"pagetranslation": "Penerjemahan halaman",
"right-pagetranslation": "Menandai revisi-revisi halaman untuk diterjemahkan",
- "tpt-desc": "Ekstensi untuk menerjemahkan halaman-halaman isi",
"tpt-section": "Unit penerjemahan $1",
"tpt-section-new": "Unit penerjemahan baru. Nama: $1",
"tpt-section-deleted": "Unit penerjemahan $1",
- "tpt-template": "Templat halaman",
- "tpt-templatediff": "Templat halaman telah diubah.",
"tpt-diff-old": "Teks sebelumnya",
"tpt-diff-new": "Teks baru",
"tpt-submit": "Tandai revisi ini untuk diterjemahkan",
@@ -31,8 +30,8 @@
"tpt-nosuchpage": "Halaman $1 tidak ada",
"tpt-oldrevision": "$2 bukan revisi terakhir dari halaman [[:$1]].\nHanya revisi terakhir yang dapat ditandai untuk diterjemahkan.",
"tpt-notsuitable": "Halaman $1 tidak dapat diterjemahkan.\nPastikan bahwa halaman ini memiliki tag <nowiki><translate></nowiki> dan memiliki sintaksis yang valid.",
- "tpt-saveok": "Halaman [[:$1]] telah ditandai untuk diterjemahkan dengan $2 {{PLURAL:$2|unit penerjemahan|unit penerjemahan}}.\nHalaman ini sekarang dapat <span class=\"plainlinks\"[$3 diterjemahkan]</span>.",
- "tpt-badsect": "\"$1\" bukanlah nama yang valid untuk unit penerjemahan $2.",
+ "tpt-saveok": "Halaman [[:$1]] telah ditandai untuk diterjemahkan dengan $2 {{PLURAL:$2|unit penerjemahan|unit penerjemahan}}.\nHalaman ini sekarang dapat <span class=\"plainlinks\">[$3 diterjemahkan]</span>.",
+ "tpt-saveok-first": "Anda dapat [[Special:PageMigration|mengimpor terjemahan yang sudah tersedia]] untuk halaman ini (jika ada).",
"tpt-showpage-intro": "Berikut adalah daftar bagian baru, bagian yang telah ada, dan bagian yang dihapus.\nSebelum menandai revisi ini untuk diterjemahkan, harap periksa agar perubahan ke bagian-bagian dapat diminimalisasi guna menghindarkan para penerjemah dari melakukan pekerjaan yang tidak diperlukan.",
"tpt-mark-summary": "Menandai revisi ini untuk diterjemahkan",
"tpt-edit-failed": "Tidak dapat memperbarui halaman: $1",
@@ -48,17 +47,17 @@
"translate-tag-markthisagain": "Halaman ini telah diubah <span class=\"plainlinks\">[$1 kali]</span> sejak terakhir <span class=\"plainlinks\">[$2 ditandai untuk diterjemahkan]</span>.",
"translate-tag-hasnew": "Halaman ini berisikan <span class=\"plainlinks\">[$1 revisi]</span> yang tidak ditandai untuk diterjemahkan.",
"tpt-translation-intro": "Halaman ini adalah sebuah <span class=\"plainlinks\">[$1 versi terjemahan]</span> dari halaman [[$2]] dan terjemahannya telah selesai $3% dari sumber terkini.",
+ "tpt-translation-intro-fuzzy": "Terjemahan usang ditandai seperti ini.",
"tpt-languages-legend": "Bahasa lain:",
"tpt-languages-nonzero": "$1 ($2% terjemahan)",
"tpt-target-page": "Halaman ini tidak dapat diperbarui secara manual.\nHalaman ini adalah terjemahan dari halaman [[$1]] dan terjemahannya dapat diperbarui menggunakan [$2 peralatan penerjemahan].",
"tpt-unknown-page": "Ruang nama ini dicadangkan untuk terjemahan halaman isi.\nHalaman yang ingin Anda sunting ini tampaknya tidak memiliki hubungan dengan halaman mana pun yang ditandai untuk diterjemahkan.",
"tpt-render-summary": "Memperbarui ke revisi terbaru halaman sumber",
- "tpt-download-page": "Ekspor halaman dengan terjemahan",
"pt-parse-open": "Tag &lt;translate> tidak seimbang.\nTemplat terjemahan: <pre>$1</pre>",
"pt-parse-close": "Tag &lt;/translate> tidak seimbang.\nTemplat terjemahan: <pre>$1</pre>",
"pt-parse-nested": "Bagian &lt;translate> bersarang tidak diizinkan.\nTeks tanda: <pre>$1</pre>",
"pt-shake-multiple": "Penanda bagian ganda untuk satu bagian.\nTeks bagian: <pre>$1</pre>",
- "pt-shake-position": "Penanda bagian di tempat tak terduka.\nTeks bagian: <pre>$1</pre>",
+ "pt-shake-position": "Penanda satuan terjemahan di tempat tak terduga.\nTeks satuan terjemahan: <pre>$1</pre>",
"pt-shake-empty": "Bagian kosong untuk penanda $1.",
"log-description-pagetranslation": "Log tindakan yang berhubungan dengan sistem penerjemahan halaman",
"log-name-pagetranslation": "Log penerjemahan halaman",
@@ -93,7 +92,5 @@
"pagemigration": "Perpindahan halaman",
"pm-import-button-label": "Impor",
"pm-savepages-button-label": "Simpan",
- "pm-cancel-button-label": "Batalkan",
- "pm-pagename-placeholder": "Masukkan nama halaman",
- "pm-langcode-placeholder": "Kode Bahasa"
+ "pm-cancel-button-label": "Batalkan"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ie.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ie.json
new file mode 100644
index 00000000..5dbee0fb
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ie.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Stavanger7"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% traductet)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ig.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ig.json
index 24dced7e..def7e449 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ig.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ig.json
@@ -1,16 +1,22 @@
{
"@metadata": {
"authors": [
- "Ukabia"
+ "Ukabia",
+ "Uzoma Ozurumba"
]
},
- "pagetranslation": "Ihü kuwariala na asụsụ ozor",
- "tpt-template": "Àtụ ihü",
- "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ụ ndi ozor:",
+ "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-reason": "Mgbághapụtà:"
+ "pt-movepage-current": "Áhà nke di ugbua:",
+ "pt-movepage-new": "Áhà ọhuru:",
+ "pt-movepage-reason": "Mgbághapụtà:",
+ "pm-savepages-button-label": "Doma",
+ "pm-cancel-button-label": "Kagbụo",
+ "pp-cancel-button-label": "Kagbụo"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/inh.json b/www/wiki/extensions/Translate/i18n/pagetranslation/inh.json
new file mode 100644
index 00000000..e3fb8ad1
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/inh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Adam-Yourist"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% таржам даьд)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/io.json b/www/wiki/extensions/Translate/i18n/pagetranslation/io.json
index 70466856..c160e1c2 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/io.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/io.json
@@ -1,8 +1,17 @@
{
"@metadata": {
"authors": [
- "Malafaya"
+ "Malafaya",
+ "Joao Xavier"
]
},
- "tpt-languages-legend": "Altra lingui:"
+ "tpt-select-prioritylangs-reason": "Motivo:",
+ "tpt-rev-encourage": "restaurar",
+ "tpt-languages-legend": "Altra lingui:",
+ "tpt-languages-nonzero": "$1 ($2% tradukita)",
+ "tpt-discouraged-language-reason": "Motivo: $1",
+ "tpt-aggregategroup-new-description": "Deskripto (fakultativa):",
+ "log-name-pagetranslation": "Protokolo ('log') pri tradukajo",
+ "pt-movepage-block-base-invalid": "La nova nomo quan vu deziras donar a la pagino ne esas valida.",
+ "tpt-generic-button": "Konfirmez"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/is.json b/www/wiki/extensions/Translate/i18n/pagetranslation/is.json
index d46acb61..3f93611a 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/is.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/is.json
@@ -3,13 +3,188 @@
"authors": [
"Snævar",
"Maxí",
- "Jonbg"
+ "Jonbg",
+ "Sveinn í Felli"
]
},
"pagetranslation": "Þýðing á síðu",
+ "right-pagetranslation": "Merkja útgáfu af síðum til þýðingar",
+ "action-pagetranslation": "sýsla með þýðanlegar síður",
+ "tpt-section": "Þýðingareining $1",
+ "tpt-section-new": "Ný þýðingareining.\nHeiti: $1",
+ "tpt-section-deleted": "Þýðingareining $1",
+ "tpt-diff-old": "Fyrri texti",
+ "tpt-diff-new": "Nýr texti",
+ "tpt-submit": "Merkja þessa útgáfu til þýðingar",
+ "tpt-sections-oldnew": "Nýjar og fyrirliggjandi þýðingareiningar",
+ "tpt-sections-deleted": "Eyddar þýðingareiningar",
+ "tpt-sections-template": "Sniðmát þýðingarsíðu",
+ "tpt-action-nofuzzy": "Ekki gera þýðingar ógildar",
+ "tpt-badtitle": "Uppgefið síðuheiti ($1) er ekki gildur titill",
+ "tpt-nosuchpage": "Síðan $1 er ekki til",
+ "tpt-oldrevision": "$2 er ekki síðasta útgáfa síðunnar [[:$1]].\nAðeins nýjustu útgáfur er hægt að merkja til þýðingar.",
+ "tpt-notsuitable": "Síðan $1 er ekki tilbúin til þýðingar.\nGakktu úr skugga um að hún sé með <nowiki><translate></nowiki> merki og sé með gilda málskipan (syntax).",
+ "tpt-saveok": "Síðan [[:$1]] hefur verið merkt upp til þýðinga með $2 {{PLURAL:$2|þýðingaeiningu|þýðingaeiningum}}.\nSíðuna er því hægt að <span class=\"plainlinks\">[$3 þýða]</span>.",
+ "tpt-offer-notify": "Þú getur <span class=\"plainlinks\">[$1 látið þýðendur vita]</span> um þessa síðu.",
+ "tpt-showpage-intro": "Fyrir neðan eru taldar upp nýjar, fyrirliggjandi og eyddar þýðingaeiningar.\nÁður en þessi útgáfa er merkt til þýðinga, skaltu athuga vel hvort breytingar á þýðingaeiningum séu ekki í algjöru lágmarki til að valda ekki óþarfa vinnu fyrir þýðendur.",
+ "tpt-mark-summary": "Merkti þessa útgáfu til þýðingar",
+ "tpt-mark-nochanges": "Engar breytingar til að yfirfara. Að merkja þessa síðu til þýðingar mun ekki breyta síðunni eða neinni fyrirliggjandi þýðingareiningu.",
+ "tpt-edit-failed": "Gat ekki uppfært síðuna: $1",
+ "tpt-duplicate": "Nafn þýðingareiningar $1 er notað oftar en einu sinni.",
+ "tpt-already-marked": "Síðasta útgáfa þessarar síðu er þegar merkt til þýðingar.",
+ "tpt-unmarked": "Síðan $1 er ekki lengur merkt til þýðingar.",
+ "tpt-list-nopages": "Engar síður eru merktar til þýðingar eða eru tilbúnar til að vera merktar til þýðingar.",
+ "tpt-new-pages-title": "Síður sem stungið er upp á að þýða",
+ "tpt-old-pages-title": "Síður í þýðingu",
+ "tpt-other-pages-title": "Rofnar síður",
+ "tpt-discouraged-pages-title": "Síður sem á að forðast",
+ "tpt-new-pages": "{{PLURAL:$1|Þessi síða inniheldur|Þessar síður innihalda}} texta með þýðingamerkjum,\nen engin útgáfa {{PLURAL:$1|þessarar síðu er|þessara síðna er}} merkt til þýðinga í augnablikinu.",
+ "tpt-old-pages": "Einhver útgáfa {{PLURAL:$1|þessarar síðu|þessara síðna}} hefur verið merkt til þýðingar.",
+ "tpt-other-pages": "{{PLURAL:$1|Eldri útgáfa þessarar síðu er merkt|Eldri útgáfur þessara síðna eru merktar}} til þýðingar,\nen {{PLURAL:$1|nýjustu útgáfuna|nýjustu útgáfurnar}} er ekki hægt að merkja til þýðingar.",
+ "tpt-discouraged-pages": "Mælt hefur verið gegn því að {{PLURAL:$1|þessi síða sé|þessar síður séu}} þýddar frekar.",
+ "tpt-select-prioritylangs": "Listi yfir kóða tungumála í forgangi, aðskilinn með kommum:",
+ "tpt-select-prioritylangs-force": "Hindra þýðingar á þeim tungumálum sem ekki eru forgangstungumál",
+ "tpt-select-prioritylangs-reason": "Ástæða:",
+ "tpt-sections-prioritylangs": "Forgangstungumál",
+ "tpt-rev-mark": "merkja til þýðingar",
+ "tpt-rev-unmark": "fjarlægja úr þýðingu",
+ "tpt-rev-discourage": "forðast að nota",
+ "tpt-rev-encourage": "endurheimta",
+ "tpt-rev-mark-tooltip": "Merkja síðustu útgáfu þessarar síðu til þýðingar.",
+ "tpt-rev-unmark-tooltip": "Fjarlægja þessa síðu úr þýðingu.",
+ "tpt-rev-discourage-tooltip": "Mælast til um að ekki verði fleiri þýðingar á þessari síðu.",
+ "tpt-rev-encourage-tooltip": "Endurheimta þessa síðu til venjulegrar þýðingar.",
"translate-tag-translate-link-desc": "Þýða þessa síðu",
+ "translate-tag-markthis": "Merkja þessa síðu til þýðingar",
+ "translate-tag-markthisagain": "Þessi síða er með <span class=\"plainlinks\">[$1 breytingar]</span> síðan hún var síðast <span class=\"plainlinks\">[$2 merkt til þýðingar]</span>.",
+ "translate-tag-hasnew": "Þessi síða er með <span class=\"plainlinks\">[$ breytingar]</span> sem ekki eru merktar til þýðingar.",
"tpt-translation-intro": "Þessi síða er <span class=\"plainlinks\">[$1 þýdd útgáfa]</span> af síðunni [[$2]] og þýðingu hennar er $3% lokið.",
+ "tpt-translation-intro-fuzzy": "Úreltar þýðingar eru merktar svona.",
"tpt-languages-legend": "Önnur tungumál:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Hefja þýðingu á þetta tungumál",
"tpt-languages-nonzero": "$1 ($2% þýtt)",
- "log-name-pagetranslation": "Þýðingarskrá"
+ "tpt-tab-translate": "Þýða",
+ "tpt-translation-restricted": "Kerfisstjóri þýðinga hefur komið í veg fyrir þýðingu síðunnar á þetta tungumál.\n\nÁstæða: $1",
+ "tpt-discouraged-language-force-header": "Þessa síðu er ekki hægt að þýða á $1.",
+ "tpt-discouraged-language-force-content": "Kerfisstjóri þýðinga ákvað að þessa síðu sé einungis hægt að þýða á $1.",
+ "tpt-discouraged-language-header": "Að þýða á $1 er ekki í forgangi fyrir þessa síðu.",
+ "tpt-discouraged-language-content": "Kerfisstjóri þýðinga ákvað að áhersla sé lögð á að þýða á $1.",
+ "tpt-discouraged-language-force": "<strong>Þessa síðu er ekki hægt að þýða á $2.</strong>\n\nKerfisstjóri þýðinga ákvað að þessa síðu sé einungis hægt að þýða á $3.",
+ "tpt-discouraged-language": "<strong>Að þýða á $2 er ekki í forgangi fyrir þessa síðu.</strong>\n\nKerfisstjóri þýðinga ákvað að áhersla sé lögð á að þýða á $3.",
+ "tpt-discouraged-language-reason": "Ástæða: $1",
+ "tpt-priority-languages": "Kerfisstjóri þýðinga stillti forgangstungumál þessa hóps sem $1.",
+ "tpt-render-summary": "Uppfæri til að samsvara nýrri útgáfu grunnsíðunnar",
+ "aggregategroups": "Safna saman hópum",
+ "tpt-aggregategroup-add": "Bæta við",
+ "tpt-aggregategroup-save": "Vista",
+ "tpt-aggregategroup-add-new": "Bæta við nýjum samsöfnunarhóp",
+ "tpt-aggregategroup-new-name": "Nafn:",
+ "tpt-aggregategroup-new-description": "Lýsing (valkvætt):",
+ "tpt-aggregategroup-remove-confirm": "Ertu viss um að þú viljir eyða þessum samsöfnunarhópi?",
+ "tpt-aggregategroup-invalid-group": "Hópurinn er ekki til",
+ "tpt-aggregategroup-edit-name": "Nafn:",
+ "tpt-aggregategroup-edit-description": "Lýsing:",
+ "tpt-aggregategroup-update": "Vista",
+ "tpt-aggregategroup-update-cancel": "Hætta við",
+ "tpt-invalid-group": "Ógildur hópur",
+ "pt-parse-open": "Ójöfn pör &lt;translate> merkis.\nÞýðingasniðmát: <pre>$1</pre>",
+ "pt-parse-close": "Ójöfn pör &lt;/translate> merkis.\nÞýðingasniðmát: <pre>$1</pre>",
+ "pt-parse-nested": "Faldaðar (nested) &lt;translate> þýðingareiningar eru ekki leyfðar.\nTexti merkis: <pre>$1</pre>",
+ "pt-shake-multiple": "Mörg þýðingareiningamerki fyrir eina þýðingareiningu.\nTexti þýðingareiningar: <pre>$1</pre>",
+ "pt-shake-position": "Merki þýðingareininga á óvæntum stöðum.\nTexti þýðingareiningar: <pre>$1</pre>",
+ "pt-shake-empty": "Tóm þýðingareining fyrir merkið \"$1\".",
+ "log-description-pagetranslation": "Atvikaskráning fyrir aðgerðir sem tengjast þýðingakerfi síðna",
+ "log-name-pagetranslation": "Atvikaskrá þýðinga á síðum",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|merkti}} $3 til þýðingar",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|fjarlægði}} $3 úr þýðingakerfinu",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|lauk}} endurnefningu þýðanlegrar síðu $3 yfir í $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|rakst á}} vandamál við að færa síðu $3 yfir á $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|lauk}} eyðingu þýðanlegrar síðu $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|mistókst}} að eyða $3 sem tilheyrir þýðanlegri síðu $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|lauk}} eyðingu á þýðingarsíðu $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|mistókst}} að eyða $3 sem tilheyrir þýðingarsíðu $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|hvatti til}} þýðingar á $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|vill forðast}} þýðingu á $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|fjarlægði}} forgangstungumál af þýðanlegri síðu $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|stillti}} forgangstungumál fyrir þýðanlega síðu $3 sem $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|takmarkaði}} tungumál fyrir þýðanlega síðu $3 við $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|bætti}} þýðanlegri síðu $3 við samsöfnunarhóp $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|fjarlægði}} þýðanlega síðu $3 úr samsöfnunarhóp $4",
+ "log-action-filter-pagetranslation": "Tegund aðgerðar:",
+ "log-action-filter-pagetranslation-mark": "Merkja til þýðingar",
+ "log-action-filter-pagetranslation-unmark": "Fjarlæging úr þýðingu",
+ "log-action-filter-pagetranslation-move": "Færslur á síðum",
+ "log-action-filter-pagetranslation-delete": "Eyðingar á síðum",
+ "log-action-filter-pagetranslation-encourage": "Hvatningar á þýðingum",
+ "log-action-filter-pagetranslation-discourage": "Úrtölur með þýðingar",
+ "log-action-filter-pagetranslation-prioritylanguages": "Breyting á forgangstungumálum",
+ "log-action-filter-pagetranslation-aggregategroups": "Breyting á samsöfnunarhópum",
+ "pt-movepage-title": "Færa þýðanlega síðu \"$1\"",
+ "pt-movepage-blockers": "Ekki var hægt að færa þýðanlegu síðuna undir nýtt heiti vegna þess að eftirfarandi {{PLURAL:$1|villa fannst|villur fundust}}:",
+ "pt-movepage-list-pages": "Listi yfir síður sem á að færa",
+ "pt-movepage-list-translation": "Þýðing á {{PLURAL:$1|síðu|síðum}}",
+ "pt-movepage-list-section": "Þýðingareining á {{PLURAL:$1|síðu|síðum}}",
+ "pt-movepage-list-other": "{{PLURAL:$1|Önnur undirsíða|Aðrar undirsíður}}",
+ "pt-movepage-list-count": "Samtals $1 {{PLURAL:$1|síða|síður}} sem á að færa.",
+ "pt-movepage-legend": "Færa þýðanlega síðu",
+ "pt-movepage-current": "Núverandi heiti:",
+ "pt-movepage-new": "Nýtt heiti:",
+ "pt-movepage-reason": "Ástæða:",
+ "pt-movepage-subpages": "Færa allar undirsíður",
+ "pt-movepage-action-check": "Athuga hvort tilfærsla sé möguleg",
+ "pt-movepage-action-perform": "Framkvæma tilfærsluna",
+ "pt-movepage-action-other": "Skipta um frálag",
+ "pt-movepage-logreason": "Hluti af þýðanlegri síðu \"$1\"",
+ "pt-movepage-started": "Skoðaðu [[Special:Log/pagetranslation|atvikaskrá þýðinga]] eftir smástund til að sjá skilaboð um villur og lok aðgerða.",
+ "pt-deletepage-lang-title": "Eyði þýðingarsíðu \"$1\"",
+ "pt-deletepage-full-title": "Eyði þýðanlegri síðu \"$1\"",
+ "pt-deletepage-invalid-title": "Valda síðan er ógild.",
+ "pt-deletepage-invalid-text": "Valda síðan er hvorki þýðanleg síða né þýðingarsíða.",
+ "pt-deletepage-action-check": "Listi yfir síður sem verður eytt",
+ "pt-deletepage-action-perform": "Framkvæma eyðingu",
+ "pt-deletepage-action-other": "Skipta um frálag",
+ "pt-deletepage-lang-legend": "Eyða þýðingarsíðu",
+ "pt-deletepage-full-legend": "Eyða þýðanlegri síðu",
+ "pt-deletepage-any-legend": "Eyða þýðanlegri síðu eða þýðingarsíðu",
+ "pt-deletepage-current": "Síðuheiti:",
+ "pt-deletepage-reason": "Ástæða:",
+ "pt-deletepage-subpages": "Eyða öllum undirsíðum",
+ "pt-deletepage-list-pages": "Listi yfir síður sem á að eyða",
+ "pt-deletepage-list-translation": "Þýðingarsíður",
+ "pt-deletepage-list-section": "Síður með þýðingareiningum",
+ "pt-deletepage-list-other": "Aðrar undirsíður",
+ "pt-deletepage-list-count": "Samtals $1 {{PLURAL:$1|síða|síður}} sem á að eyða.",
+ "pt-deletepage-full-logreason": "Hluti af þýðanlegri síðu \"$1\"",
+ "pt-deletepage-lang-logreason": "Hluti að þýðingarsíðu \"$1\"",
+ "pt-deletepage-started": "Skoðaðu [[Special:Log/pagetranslation|atvikaskrá þýðinga]] til að sjá skilaboð um villur og lok aðgerða.",
+ "pagemigration": "Tilfærsla þýðingarsíðu",
+ "pm-import-button-label": "Flytja inn",
+ "pm-savepages-button-label": "Vista",
+ "pm-cancel-button-label": "Hætta við",
+ "pm-page-does-not-exist": "$1 er ekki til",
+ "pm-old-translations-missing": "$1 Inniheldur ekki eldri þýðingar.",
+ "pm-pagename-missing": "Settu inn heiti síðunnar.",
+ "pm-add-icon-hover-text": "Bæta við einingu hér fyrir neðan",
+ "pm-swap-icon-hover-text": "Víxla við þýðingareininguna hér fyrir neðan",
+ "pm-delete-icon-hover-text": "Eyða þýðingareiningu",
+ "pm-pagetitle-placeholder": "Settu inn titil síðunnar",
+ "pm-pagetitle-missing": "Settu inn titil síðunnar.",
+ "tpt-translate-title": "Leyfa þýðingar á titli síðu",
+ "pp-save-summary": "Undirbjó þessa síðu til þýðingar",
+ "pagepreparation": "Undirbúa síðu til þýðingar",
+ "pp-pagename-placeholder": "Settu inn heiti síðunnar",
+ "pp-prepare-button-label": "Undirbúa",
+ "pp-save-button-label": "Vista",
+ "pp-cancel-button-label": "Hætta við",
+ "pp-save-message": "Síðan var vistuð. Þú getur [$1 breytt] henni.",
+ "pp-prepare-message": "Síðan var undirbúin fyrir þýðingu. Skoðaðu mismuninn (diff) hér fyrir neðan. Smelltu á \"{{int:pp-save-button-label}}\" hnappinn ef þetta er í lagi!",
+ "pp-already-prepared-message": "Það lítur út fyrir að þessi síða sé þegar merkt til þýðingar. Ekki eru neinar breytingar á henni miðað við síðustu útgáfu hennar.",
+ "pp-pagename-missing": "Settu inn heiti síðunnar.",
+ "pp-diff-old-header": "Frumtexti",
+ "pp-diff-new-header": "Undirbúinn texti",
+ "tpt-unlink-button": "Fjarlægja úr þýðingu",
+ "tpt-unlink-summary": "Fjarlægði síðu úr þýðingu",
+ "tpt-generic-confirm": "Endilega staðfestu aðgerðina.",
+ "tpt-generic-button": "Staðfesta"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/it.json b/www/wiki/extensions/Translate/i18n/pagetranslation/it.json
index 792fc0d8..7a3560e9 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/it.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/it.json
@@ -12,7 +12,9 @@
"Ximo17",
"Baffo",
"Peg60",
- "Alexmar983"
+ "Alexmar983",
+ "Matteocng",
+ "Einreiher"
]
},
"pagetranslation": "Traduzione pagine",
@@ -67,6 +69,7 @@
"translate-tag-markthisagain": "Questa pagina è stata <span class=\"plainlinks\">[$1 modificata]</span> da quando era stata <span class=\"plainlinks\">[$2 segnata per la traduzione]</span>.",
"translate-tag-hasnew": "Questa pagina contiene delle <span class=\"plainlinks\">[$1 modifiche]</span> che non sono segnate per la traduzione.",
"tpt-translation-intro": "Questa pagina è una <span class=\"plainlinks\">[$1 versione tradotta]</span> della pagina [[$2]]; la traduzione è completa al $3&nbsp;%.",
+ "tpt-translation-intro-fuzzy": "Le traduzioni non aggiornate sono segnate come questo testo.",
"tpt-languages-legend": "Altre lingue:",
"tpt-languages-zero": "Inizia a tradurre in questa lingua",
"tpt-languages-nonzero": "$1 ($2% tradotta)",
@@ -105,7 +108,7 @@
"log-description-pagetranslation": "Registro per le azioni inerenti al sistema di traduzione delle pagine",
"log-name-pagetranslation": "Traduzioni di pagine",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|ha contrassegnato}} $3 per la traduzione",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|ha rimosso}} $3 dalla traduzione",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|ha rimosso}} $3 dal sistema di traduzione",
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|ha eseguito}} lo spostamento della pagina traducibile $3 a $4",
"logentry-pagetranslation-movenok": "$1 {{GENDER:$2|ha incontrato}} un problema nello spostamento di $3 a $4",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|ha eseguito}} la cancellazione della pagina traducibile $3",
@@ -119,6 +122,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ha limitato}} le lingue a $5 per la pagina da tradurre $3",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|ha aggiunto}} la pagina traducibile $3 al gruppo aggregato $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|ha rimosso}} la pagina traducibile $3 dal gruppo aggregato $4",
+ "log-action-filter-pagetranslation": "Tipo di azione:",
+ "log-action-filter-pagetranslation-mark": "Contrassegnazione della traduzione",
+ "log-action-filter-pagetranslation-unmark": "Rimozione dalla traduzione",
+ "log-action-filter-pagetranslation-move": "Spostamenti di pagine",
+ "log-action-filter-pagetranslation-delete": "Cancellazioni di pagine",
+ "log-action-filter-pagetranslation-encourage": "Incoraggiamento della traduzione",
+ "log-action-filter-pagetranslation-discourage": "Scoraggiamento della traduzione",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modifiche lingue prioritarie",
+ "log-action-filter-pagetranslation-aggregategroups": "Modifiche gruppi aggregati",
"pt-movepage-title": "Sposta la pagina traducibile $1",
"pt-movepage-blockers": "Questa pagina da tradurre non è stata spostata a un nuovo nome per {{PLURAL:$1|il seguente errore|i seguenti errori}}:",
"pt-movepage-block-base-exists": "La pagina base di destinazione [[:$1]] esiste già.",
@@ -132,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",
@@ -143,8 +157,8 @@
"pt-movepage-action-perform": "Esegui lo spostamento",
"pt-movepage-action-other": "Modifica destinazione",
"pt-movepage-intro": "Questa pagina speciale ti permette di spostare pagine segnate come da tradurre.\nLo spostamento non sarà istantaneo, perché serve spostare molte pagine.\nMentre le pagine vengono spostate, non è possibile interagire con esse.\nGli errori sono riportati nel [[Special:Log/pagetranslation|registro delle traduzioni di pagine]] e devono essere corretti a mano.",
- "pt-movepage-logreason": "Parte della pagina traducibile $1",
- "pt-movepage-started": "La pagina base è stata spostata.\nControlla il [[Special:Log/pagetranslation|registro delle traduzioni di pagine]] per verificare il messaggio di completamento ed eventuali errori.",
+ "pt-movepage-logreason": "Parte della pagina traducibile \"$1\"",
+ "pt-movepage-started": "Controlla il [[Special:Log/pagetranslation|registro delle traduzioni di pagine]] fra un poco per verificare il messaggio di completamento ed eventuali errori.",
"pt-locked-page": "Questa pagina è protetta perché la pagina traducibile sta per essere spostata.",
"pt-deletepage-lang-title": "Cancellazione della pagina di traduzione \"$1\"",
"pt-deletepage-full-title": "Cancellazione della pagina traducibile \"$1\"",
@@ -164,8 +178,8 @@
"pt-deletepage-list-section": "Pagine degli elementi di traduzione",
"pt-deletepage-list-other": "Altre sottopagine",
"pt-deletepage-list-count": "$1 {{PLURAL:$1|pagina|pagine}} in tutto da cancellare.",
- "pt-deletepage-full-logreason": "Parte della pagina traducibile $1",
- "pt-deletepage-lang-logreason": "Parte della pagina di traduzione $1",
+ "pt-deletepage-full-logreason": "Parte della pagina traducibile \"$1\"",
+ "pt-deletepage-lang-logreason": "Parte della pagina di traduzione \"$1\"",
"pt-deletepage-started": "Controlla il [[Special:Log/pagetranslation|registro delle traduzioni di pagine]] per verificare il messaggio di completamento ed eventuali errori.",
"pt-deletepage-intro": "Questa pagina speciale ti consente di cancellare del tutto una pagina traducibile o una sua traduzione in una lingua.\nLa cancellazione non sarà istantanea, perché anche tutte le pagine che dipendono da quella dovranno essere cancellate.\nGli errori sono riportati nel [[Special:Log/pagetranslation|registro delle traduzioni di pagine]] e devono essere corretti a mano.",
"pagemigration": "Migrazione pagine di traduzione",
@@ -177,14 +191,16 @@
"pm-old-translations-missing": "$1 non contiene vecchie traduzioni",
"pm-extra-units-warning": "Sono presenti unità aggiuntive. Abbina correttamente le unità di origine e di traduzione",
"pm-pagename-missing": "Inserisci il nome della pagina",
- "pm-langcode-missing": "Il codice della lingua sembra essere mancante nel titolo. Inserisci il titolo della pagina nel formato <page-name>/<language-code>.",
"pm-add-icon-hover-text": "Aggiungi un'unità sotto",
"pm-swap-icon-hover-text": "Scambia con l'unità sotto",
"pm-delete-icon-hover-text": "Cancella unità",
"pm-pagetitle-placeholder": "Inserisci il titolo della pagina",
"pm-pagetitle-invalid": "Inserisci un titolo di pagina valido. Dovrebbe essere nel formato <page-name>/<language-code>.",
"pm-pagetitle-missing": "Inserisci il titolo della pagina",
+ "pm-langcode-missing": "Il codice della lingua sembra essere mancante nel titolo. Inserisci il titolo della pagina nel formato <page-name>/<language-code>.",
"pm-summary-import": "Traduzione importata usando la [[Special:PageMigration|migrazione di pagina]]",
+ "pm-on-import-message-text": "Le vecchie traduzioni sono state importate. Utilizza le opzioni \"aggiungi\", \"scambia\" e \"cancella\" per regolare le unità di traduzione e clicca il pulsante \"{{int:pm-savepages-button-label}}\" per salvarle. Clicca il pulsante \"{{int:pm-cancel-button-label}}\" per annullare le modifiche.",
+ "pm-on-save-message-text": "Le unità di traduzione sono state salvate. È ora possibile inserire il titolo di una nuova pagina di traduzione per migrarla, o apportare modifiche alle unità sottostanti e salvare una nuova versione.",
"tpt-translate-title": "Permetti la traduzione del titolo della pagina",
"pp-save-summary": "Preparata la pagina per la traduzione",
"pagepreparation": "Prepara pagina per la traduzione",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ja.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ja.json
index 254b93f8..ebc25132 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ja.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ja.json
@@ -7,7 +7,11 @@
"Whym",
"青子守歌",
"Sujiniku",
- "Otokoume"
+ "Otokoume",
+ "ネイ",
+ "Afaz",
+ "Yusuke1109",
+ "Omotecho"
]
},
"pagetranslation": "ページ翻訳",
@@ -28,6 +32,7 @@
"tpt-oldrevision": "$2 はページ [[:$1]] の最新版ではありません。\n翻訳対象に指定できるのは最新版のみです。",
"tpt-notsuitable": "ページ $1 は翻訳に対応していません。\n<nowiki><translate></nowiki> タグが含まれていて、かつ文法的に正しいことをを確認してください。",
"tpt-saveok": "ページ [[:$1]] は翻訳対象に指定されており、$2 {{PLURAL:$2|個の翻訳単位}}を含んでいます。\nこのページを<span class=\"plainlinks\">[$3 翻訳]</span>できます。",
+ "tpt-saveok-first": "このページの[[Special:PageMigration|既存の翻訳を取り込む]]こともできます (存在する場合)。",
"tpt-offer-notify": "このページについて<span class=\"plainlinks\">[$1 翻訳者に通知]</span>できます。",
"tpt-showpage-intro": "以下は、新規・既存の、または削除された翻訳単位の一覧です。\nこの版を翻訳対象に指定する前に、翻訳単位の変更を最小限にすることで不要な翻訳作業を回避できないか確認してください。",
"tpt-mark-summary": "この版を翻訳対象に指定しました",
@@ -61,9 +66,10 @@
"translate-tag-markthisagain": "このページには、最後に<span class=\"plainlinks\">[$2 翻訳対象に指定]</span>された時点以降の<span class=\"plainlinks\">[$1 変更]</span>があります。",
"translate-tag-hasnew": "このページには翻訳対象に指定されていない<span class=\"plainlinks\">[$1 変更]</span>があります。",
"tpt-translation-intro": "このページはページ [[$2]] を「<span class=\"plainlinks\">[$1 翻訳]</span>」したものです。翻訳は $3% 完了しています。",
+ "tpt-translation-intro-fuzzy": "更新が必要な翻訳にはこのような印が付いています。",
"tpt-languages-legend": "他言語での翻訳:",
"tpt-languages-zero": "この言語への翻訳を開始",
- "tpt-languages-nonzero": "$1 ($2% 翻訳済み)",
+ "tpt-languages-nonzero": "$1 ($2% 翻訳済)",
"tpt-tab-translate": "翻訳",
"tpt-target-page": "このページは手動では更新できません。\nこのページはページ [[$1]] の翻訳版であり、[$2 翻訳ツール]を使用して更新できます。",
"tpt-unknown-page": "この名前空間はコンテンツ ページの翻訳のために予約されています。\n編集しようとしているページに対応する翻訳対象ページが存在しないようです。",
@@ -96,7 +102,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|完了}}",
@@ -110,6 +116,13 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 が翻訳対象ページ $3 の言語を $5 に{{GENDER:$2|制限}}",
"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]]」は既に存在します。",
@@ -123,7 +136,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|subpage|下位ページ}}",
"pt-movepage-list-count": "合計 $1 ページを移動",
"pt-movepage-legend": "翻訳対象ページの移動",
"pt-movepage-current": "現在の名前:",
@@ -134,8 +149,8 @@
"pt-movepage-action-perform": "移動を実行",
"pt-movepage-action-other": "対象を変更",
"pt-movepage-intro": "この特別ページでは、翻訳対象に指定されているページを移動できます。\n多くのページを移動する必要があるため、移動操作はすぐには完了しません。\nページの移動中は、そのページの操作はできません。\n失敗した場合は、その[[Special:Log/pagetranslation|ページの翻訳記録]]に記録されるため、手動で修正する必要があります。",
- "pt-movepage-logreason": "翻訳対象ページ「$1」の一部。",
- "pt-movepage-started": "基底ページが移動されました。\n[[Special:Log/pagetranslation|ページの翻訳記録]]で、エラーや完了メッセージを確認してください。",
+ "pt-movepage-logreason": "翻訳対象ページ「$1」の一部",
+ "pt-movepage-started": "[[Special:Log/pagetranslation|ページの翻訳記録]]で、エラーや完了メッセージを確認してください。",
"pt-locked-page": "翻訳対象ページが現在移動中のため、このページはロックされています。",
"pt-deletepage-lang-title": "翻訳ページ「$1」の削除",
"pt-deletepage-full-title": "翻訳可能ページ「$1」の削除",
@@ -155,11 +170,12 @@
"pt-deletepage-list-section": "翻訳単位ページ",
"pt-deletepage-list-other": "その他の下位ページ",
"pt-deletepage-list-count": "合計 $1 ページを削除",
- "pt-deletepage-full-logreason": "翻訳対象ページ「$1」の一部。",
- "pt-deletepage-lang-logreason": "翻訳ページ「$1」の一部。",
+ "pt-deletepage-full-logreason": "翻訳対象ページ「$1」の一部",
+ "pt-deletepage-lang-logreason": "翻訳ページ「$1」の一部",
"pt-deletepage-started": "[[Special:Log/pagetranslation|ページの翻訳記録]]で、エラーや完了メッセージを確認してください。",
"pt-deletepage-intro": "この特別ページでは、翻訳対象ページ全体、または指定した言語への翻訳ページを個別に削除できます。\n依存関係があるページもすべて削除するため、削除操作はすぐには完了しません。\n失敗した場合は[[Special:Log/pagetranslation|ページの翻訳記録]]に記録されるので、手動で修正する必要があります。",
"pagemigration": "翻訳ページの移行",
+ "pagemigration-summary": "翻訳ページを指定してください。そのページで翻訳システムが有効化される前になされた翻訳を復元します。",
"pm-import-button-label": "取り込む",
"pm-savepages-button-label": "保存",
"pm-cancel-button-label": "キャンセル",
@@ -169,12 +185,15 @@
"pm-add-icon-hover-text": "単位を下に追加",
"pm-swap-icon-hover-text": "下の単位と入れ替える",
"pm-delete-icon-hover-text": "単位を削除",
- "pm-pagetitle-invalid": "有効なページ名を入力してください",
- "pm-langcode-missing": "言語コードを入力してください",
+ "pm-pagetitle-placeholder": "ページ名を入力",
+ "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": "ページ名を翻訳できるようにする",
"pp-pagename-placeholder": "ページ名を入力",
"pp-save-button-label": "保存",
+ "pp-cancel-button-label": "キャンセル",
"pp-save-message": "ページは保存されました。[$1 編集]できます。",
"pp-pagename-missing": "ページ名を入力してください。",
"tpt-unlink-confirm": "このページを翻訳システムから本当に除去するかどうか確認してください。\n言語選択と、翻訳されたページ名が、動作しなくなります。\n翻訳ページが編集できる状態になります。",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/jv.json b/www/wiki/extensions/Translate/i18n/pagetranslation/jv.json
index ba67fcd1..beee5e3e 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/jv.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/jv.json
@@ -5,54 +5,61 @@
"Pras"
]
},
- "pagetranslation": "Terjemahan kaca",
- "right-pagetranslation": "Tandhai vèrsi kaca kanggo terjemahan",
- "tpt-section": "Unit terjemahan $1",
- "tpt-section-new": "Unit terjemahan anyar.\nJeneng: $1",
- "tpt-section-deleted": "Unit terjemahan $1",
- "tpt-diff-old": "Tèks sakdurungé",
- "tpt-diff-new": "Tèks anyar",
- "tpt-submit": "Tandhai vèrsi iki kanggo terjemahan",
- "tpt-sections-oldnew": "Unit terjemahan anyar lan sing wis ana",
- "tpt-sections-deleted": "Unit terjemahan sing wis dibusak",
- "tpt-sections-template": "Témplat kaca terjemahan",
- "tpt-badtitle": "Jeneng kaca sing diawèhaké ($1) dudu judhul sing sah",
+ "pagetranslation": "Pertalan kaca",
+ "right-pagetranslation": "Tandhani vèrsi kaca supaya kapertal",
+ "action-pagetranslation": "tata kaca-kaca kang bisa kapertal",
+ "tpt-section": "Ékan pertalan $1",
+ "tpt-section-new": "Ékan pertalan anyar.\nJeneng: $1",
+ "tpt-section-deleted": "Ékan pertalan $1",
+ "tpt-diff-old": "Tulisan sadurungé",
+ "tpt-diff-new": "Tulisan anyar",
+ "tpt-submit": "Tandhani vèrsi iki supaya kapertal",
+ "tpt-sections-oldnew": "Ékan pertalan anyar lan kang wis ana",
+ "tpt-sections-deleted": "Ékan pertalan kang wis kabusek",
+ "tpt-sections-template": "Cithakan kaca pertalan",
+ "tpt-action-nofuzzy": "Aja nandhani pertalan ora trep",
+ "tpt-badtitle": "Jeneng kaca kang kawènèhaké ($1) dudu sesirah kang trep",
"tpt-nosuchpage": "Kaca $1 ora ana",
- "tpt-oldrevision": "$2 dudu vèrsi pungkasan saka kaca [[:$1]].\nNamung vèrsi pungkasan sing bisa ditandhani kanggo terjemahan.",
- "tpt-notsuitable": "Kaca $1 ora cocok diterjemahaké.\nPesthekaké kuwi nduwèni tag <nowiki><translate></nowiki> lan sintaks sing sah.",
- "tpt-mark-summary": "Tandhai vèrsi iki kanggo terjemahan",
+ "tpt-oldrevision": "$2 dudu vèrsi pungkasan saka kaca [[:$1]].\nMung vèrsi pungkasan kang bisa tinandhanan supaya kapertal.",
+ "tpt-notsuitable": "Kaca $1 ora cocog manawa kapertal.\nPesthèkaké kacané tinengeran <nowiki><translate></nowiki> lan duwé sintaksis kang trep.",
+ "tpt-mark-summary": "Nandhani vèrsi iki supaya kapertal",
"tpt-edit-failed": "Ora bisa nganyari kaca: $1",
- "tpt-duplicate": "Jeneng unit terjemahan $1 dianggo luwih saka pisan.",
- "tpt-already-marked": "Vèrsi pungkasan kaca iki wis ditandhai kanggo terjemahan.",
- "tpt-unmarked": "Kaca $1 ora manèh ditandhani kanggo terjemahan.",
- "tpt-list-nopages": "Ora ana kaca sing ditandhai kanggo terjemahan utawa siap ditandhai kanggo terjemahan.",
- "tpt-new-pages-title": "Kaca sing ditawakaké kanggo terjemahan",
- "tpt-old-pages-title": "Kaca nèng terjemahan",
+ "tpt-duplicate": "Jeneng ékan pertalan $1 kanggo ping akèh.",
+ "tpt-already-marked": "Vèrsi pungkasan kaca iki wis tinandhanan supaya kapertal.",
+ "tpt-unmarked": "Kaca $1 ora tinandhanan supaya kapertal manèh.",
+ "tpt-list-nopages": "Ora ana kaca kang tinandhanan supaya kapertal utawa cumepak supaya bisa tinandhanan supaya kapertal.",
+ "tpt-new-pages-title": "Kaca kang kausulaké supaya kapertal",
+ "tpt-old-pages-title": "Kaca ing pertalan",
"tpt-other-pages-title": "Kaca rusak",
- "tpt-new-pages": "{{PLURAL:$1|Kaca iki kaisi|Kaca iki kaisi}} tèks mawa tag terjemahan,\nnangung ora ana vèrsi {{PLURAL:$1|kaca iki|kaca iki}} lagi ditandhai kanggo terjemahan.",
- "tpt-old-pages": "Sebagéyan vèrsi {{PLURAL:$1|kaca iki|kaca iki}} wis ditandhai kanggo terjemahan.",
- "tpt-other-pages": "{{PLURAL:$1|Vèrsi lawas kaca iki|Vèrsi lawas kaca iki}} ditandhai kanggo terjemahan,\nnamung {{PLURAL:$1|vèrsi|vèrsi}} pungkasan ora bisa ditandhai kanggo terjemahan.",
+ "tpt-new-pages": "{{PLURAL:$1|Kaca iki isi|Kaca iki isi}} tulisan mawa tenger pertalan, nanging ora ana vèrsi {{PLURAL:$1|kaca iki|kaca iki}} kang lagi tinandhanan supaya kapertal.",
+ "tpt-old-pages": "Sapérangan vèrsi {{PLURAL:$1|kaca iki|kaca iki}} wis tinandhanan supaya kapertal.",
+ "tpt-other-pages": "{{PLURAL:$1|Vèrsi lawas kaca iki|Vèrsi lawas kaca iki}} tinandhanan supaya kapertal, nanging {{PLURAL:$1|vèrsiné|vèrsiné}} kang anyar ora bisa tinandhanan supaya kapertal.",
"tpt-select-prioritylangs": "Dhaptar kodhe basa prioritas diwatesi nganggo koma:",
- "tpt-select-prioritylangs-force": "Tolak terjemahan nèng basa liya kajaba basa prioritas",
+ "tpt-select-prioritylangs-force": "Éndhani mertal menyang basa kang ora dadi priyoritas",
"tpt-select-prioritylangs-reason": "Alesan:",
"tpt-sections-prioritylangs": "Basa prioritas",
- "tpt-rev-mark": "tandhai kanggo terjemahan",
- "tpt-rev-unmark": "busak saka terjemahan",
+ "tpt-rev-mark": "tandhani supaya kapertal",
+ "tpt-rev-unmark": "busek saka pertalan",
"tpt-rev-encourage": "balèkaké",
- "tpt-rev-mark-tooltip": "Tandhai vèrsi pungkasan kaca iki kanggo terjemahan.",
- "tpt-rev-unmark-tooltip": "Busak kaca iki saka terjemahan.",
- "tpt-rev-encourage-tooltip": "Balekaké kaca iki nèng terjemahan biasa.",
- "translate-tag-translate-link-desc": "Terjemahaké kaca iki",
- "translate-tag-markthis": "Tandhai kaca iki kanggo terjemahan",
- "translate-tag-markthisagain": "Kaca iki nduwèni <span class=\"plainlinks\">[$1 owahan]</span> kawit pungkasan <span class=\"plainlinks\">[$2 ditandhai kanggo terjemahan]</span>.",
- "translate-tag-hasnew": "Kaca iki kaisi <span class=\"plainlinks\">[$1 owahan]</span> sing ora ditandhai kanggo terjemahan.",
- "tpt-translation-intro": "Kaca iki <span class=\"plainlinks\">[$1 vèrsi sing wis diterjemahaké]</span> saka kaca [[$2]] lan terjemahan wis rampung $3%.",
- "tpt-languages-legend": "Basa liya:",
- "tpt-languages-zero": "Lekasi terjemahan kanggo basa iki",
- "tpt-languages-nonzero": "$1 ($2% kajarwa)",
+ "tpt-rev-mark-tooltip": "Tandhani vèrsi anyar kaca iki supaya kapertal.",
+ "tpt-rev-unmark-tooltip": "Busek kaca iki saka pertalan.",
+ "tpt-rev-encourage-tooltip": "Pulihaké kaca iki dadi pertalan lumrah.",
+ "translate-tag-translate-link-desc": "Pertal kaca iki",
+ "translate-tag-markthis": "Tandhani kaca iki supaya kapertal",
+ "translate-tag-markthisagain": "Kaca iki duwé <span class=\"plainlinks\">[$1 owahan]</span> kawit <span class=\"plainlinks\">[$2 tinandhanan supaya kapertal]</span>.",
+ "translate-tag-hasnew": "Kaca iki ngemu <span class=\"plainlinks\">[$1 owahan]</span> kang ora katengeran minangka pertalan.",
+ "tpt-translation-intro": "Kaca iki minangka <span class=\"plainlinks\">[$1 vèrsi pertalan]</span> saka kaca [[$2]] lan pertalané wis $3% rampung.",
+ "tpt-translation-intro-fuzzy": "Pertalan lawas tinengeran mangkéné.",
+ "tpt-languages-legend": "Basa liyané:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Wiwiti pertalan tumrap basa iki",
+ "tpt-languages-nonzero": "$1 ($2% kapertal)",
+ "tpt-tab-translate": "Pertal",
"tpt-target-page": "Kaca iki ora bisa dianyari manual.\nKaca iki kaca terjemahan [[$1]] lan terjemahan bisa dianyari nganggo [$2 prangkat terjemahan].",
- "tpt-unknown-page": "Bilik jeneng iki dicadhangaké kanggo terjemahan kaca kontèn.\nKaca sing arep Sampéyan sunting kayané ora ana kaitané karo kaca sing ditandhai kanggo terjemahan.",
+ "tpt-patrolling-blocked": "Kaca iki ora bisa ingawasan. Nanging, anggonen laku pertal saperlu mriksa.",
+ "tpt-unknown-page": "Bilik jeneng iki dicadhangaké kanggo terjemahan kaca kontèn.\nKaca sing arep panjenengan sunting kayané ora ana kaitané karo kaca sing ditandhai kanggo terjemahan.",
"tpt-translation-restricted": "Terjemahan kaca iki nèng basa iki ditolak déning pangurus terjemahan.\n\nAlesan: $1",
+ "tpt-discouraged-language-force-header": "Kaca iki ora bisa kapertal menyang $1.",
"tpt-discouraged-language-force": "<strong>Kaca iki ora bisa diterjemahaké nèng $2.</strong>\n\nPangurus terjemahan milih supaya kaca iki namung bisa diterjemahaké nèng $3.",
"tpt-discouraged-language": "<strong>Nerjemahaké nèng $2 dudu prioritas kanggo kaca iki.</strong>\n\nPangurus terjemahan milih fokus nèng upaya terjemahan nèng $3.",
"tpt-discouraged-language-reason": "Alesan: $1",
@@ -63,41 +70,58 @@
"tpt-aggregategroup-add-new": "Tambah klompok agrégat anyar",
"tpt-aggregategroup-new-name": "Jeneng:",
"tpt-aggregategroup-new-description": "Katrangan (pilihan):",
- "tpt-aggregategroup-remove-confirm": "Sampéyan yakin arep mbusak klompok agrégat iki?",
+ "tpt-aggregategroup-remove-confirm": "Panjenengan yakin arep mbusak klompok agrégat iki?",
"tpt-aggregategroup-invalid-group": "Klompok ora ana",
+ "tpt-aggregategroup-edit-name": "Jeneng:",
+ "tpt-aggregategroup-edit-description": "Wedharan:",
+ "tpt-aggregategroup-update": "Simpen",
+ "tpt-aggregategroup-update-cancel": "Wurung",
"pt-parse-open": "Tag &lt;translate> ora imbang.\nTemplat terjemahan: <pre>$1</pre>",
"pt-parse-close": "Tag &lt;/translate> ora imbang.\nTemplat terjemahan: <pre>$1</pre>",
"log-description-pagetranslation": "Log laku sing ana kaitané karo sistem terjemahan kaca",
"log-name-pagetranslation": "Log terjemahan kaca",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|nengeri}} $3 supaya kapertal",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|mbuwang}} $3 saka pertalan",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|rampung}} ngowahi jeneng kaca kang bisa kapertal $3 dadi $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|ngalami}} masalah nalika ngalih kaca $3 menyang $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|rampung}} mbusak kaca kang bisa kapertal $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|wurung}} mbusak $3 kang kalebu ing kaca kang bisa kapertal $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|rampung}} mbusak kaca pertalan $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|wurung}} mbusak $3 kang kalebu ing kaca pertalan $4",
+ "log-action-filter-pagetranslation": "Jinis laku:",
+ "log-action-filter-pagetranslation-mark": "Tandha kanggo pertalan",
+ "log-action-filter-pagetranslation-unmark": "Busakan saka pertalan",
+ "log-action-filter-pagetranslation-move": "Alihan kaca",
+ "log-action-filter-pagetranslation-delete": "Busakan kaca",
"pt-movepage-title": "Pindhah kaca \"$1\" sing bisa diterjemahaké",
"pt-movepage-blockers": "Kaca sing bisa diterjemahaké ora bisa dipindhah nèng jeneng anyar amarga {{PLURAL:$1|kasalahan|kasalahan}} iki:",
- "pt-movepage-block-base-exists": "Kaca dhasar patujon \"[[:$1]]\" ana.",
- "pt-movepage-block-base-invalid": "Kaca dhasar patujon dudu judhul sing sah.",
+ "pt-movepage-block-base-exists": "Kaca jujugan \"[[:$1]]\" kang bisa kapertal ana.",
+ "pt-movepage-block-base-invalid": "Jeneng kaca jujugan kang bisa kapertal dudu sesirah kang sah.",
"pt-movepage-block-tp-exists": "Kaca terjemahan patujon \"[[:$2]]\" ana.",
- "pt-movepage-block-tp-invalid": "Judhul kaca terjemahan patujon kanggo \"[[:$1]]\" ora sah (kadawan?).",
- "pt-movepage-block-section-exists": "Kaca sèksi patujon \"[[:$2]]\" ana.",
- "pt-movepage-block-section-invalid": "Judhul kaca sèksi patujon kanggo \"[[:$1]]\" ora sah (kadawan?).",
+ "pt-movepage-block-tp-invalid": "Sesirah kaca pertalan tujuan kanggo \"[[:$1]]\" ora sah (kadawan?).",
+ "pt-movepage-block-section-exists": "Kaca jujugan \"[[:$2]]\" kanggo unit pertalan ana.",
+ "pt-movepage-block-section-invalid": "Sesirah kaca paran kanggo \"[[:$1]]\" ngenani ékan pertalan bakal ora trep (kedawan?).",
"pt-movepage-block-subpage-exists": "Subkaca patujon \"[[:$2]]\" ana.",
- "pt-movepage-block-subpage-invalid": "Judhul kaca subkkaca patujon kanggo \"[[:$1]]\" ora sah (kadawan?).",
+ "pt-movepage-block-subpage-invalid": "Sesirah anak kaca tujuan kanggo \"[[:$1]]\" ora sah (kadawan?).",
"pt-movepage-list-pages": "Daptar kaca sing arep dipindhah",
- "pt-movepage-list-translation": "Kaca terjemahan",
- "pt-movepage-list-section": "Kaca sèksi",
- "pt-movepage-list-other": "Subkaca liya",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Kaca|Kaca}} pertalan",
+ "pt-movepage-list-section": "{{PLURAL:$1|Kaca|Kaca}} unit pertalan",
+ "pt-movepage-list-other": "Anak-{{PLURAL:$1|kaca|kaca}} liyané",
"pt-movepage-list-count": "Kabèhé $1 {{PLURAL:$1|kaca|kaca}} sing arep dipindhah.",
"pt-movepage-legend": "Pindhah kaca sing bisa diterjemahaké",
"pt-movepage-current": "Jeneng saiki:",
"pt-movepage-new": "Jeneng anyar:",
"pt-movepage-reason": "Alesan:",
"pt-movepage-subpages": "Pindhak kabèh subkaca",
- "pt-movepage-action-check": "Priksa yèn pamindhahan bisa dilakokaké",
+ "pt-movepage-action-check": "Priksa yèn pangalihé bisa diayahi",
"pt-movepage-action-perform": "Pindhahaké",
"pt-movepage-action-other": "Ganti patujon",
- "pt-movepage-intro": "Kaca astamiwa iki nglilakaké Sampéyan mindhahaké kaca sing ditandhai kanggo terjemahan.\nPamidhahan ora bakal gelis, amarga akèh kaca sing kudu dipindhahaké.\nNalika kaca dipindhahaké, ora bisa interaksi karo kaca sing dimaksud.\nKagagalan bakal dilebokaké nèng [[Special:Log/pagetranslation|log terjemahan kaca]] lan ora perlu dibenahi manual.",
- "pt-movepage-logreason": "Bagéyan kaca \"$1\" sing bisa diterhemahaké.",
- "pt-movepage-started": "Kaca dhasar saiki wis dipindhah.\nMangga priksa [[Special:Log/pagetranslation|log pamindhahan kaca]] kanggo layang kasalahan lan parampungan.",
+ "pt-movepage-intro": "Kaca astamiwa iki nglilakaké panjenengan mindhahaké kaca sing ditandhai kanggo terjemahan.\nPamidhahan ora bakal gelis, amarga akèh kaca sing kudu dipindhahaké.\nNalika kaca dipindhahaké, ora bisa interaksi karo kaca sing dimaksud.\nKagagalan bakal dilebokaké nèng [[Special:Log/pagetranslation|log terjemahan kaca]] lan ora perlu dibenahi manual.",
+ "pt-movepage-logreason": "Pérangan kaca \"$1\" kang bisa kapertal",
+ "pt-movepage-started": "Mangga priksanen [[Special:Log/pagetranslation|log pertalan kaca]] sadhéla bokmanawa ana masalah lan layang rampungan.",
"pt-locked-page": "Kaca iki digembok amarga kaca sing bisa diterjemahaké saiki wis dipindhah.",
- "pt-deletepage-lang-title": "Mbusak kaca \"$1\" sing bisa diterjemahaké.",
- "pt-deletepage-full-title": "Mbusak kaca \"$1\" sing bisa diterjemahaké.",
+ "pt-deletepage-lang-title": "Mbusak kaca pertalan \"$1\"",
+ "pt-deletepage-full-title": "Mbusak kaca \"$1\" kang bisa kapertal.",
"pt-deletepage-invalid-title": "Kaca sing dimaksud ora sah.",
"pt-deletepage-invalid-text": "Kaca sing dimaksud dudu kaca sing bisa diterjemahaké utawa terjemahan saka kuwi.",
"pt-deletepage-action-check": "Daptar kaca sing arep dibusak",
@@ -111,10 +135,33 @@
"pt-deletepage-subpages": "Busak kabèh subkaca",
"pt-deletepage-list-pages": "Daptar kaca sing arep dibusak",
"pt-deletepage-list-translation": "Kaca terjemahan",
- "pt-deletepage-list-section": "Kaca sèksi",
+ "pt-deletepage-list-section": "Kaca iji pertalan",
"pt-deletepage-list-other": "Subkaca liya",
"pt-deletepage-list-count": "Kabèhé $1 {{PLURAL:$1|kaca|kaca}} sing arep dibusak.",
- "pt-deletepage-full-logreason": "Bagéyan kaca \"$1\" sing bisa diterhemahaké.",
- "pt-deletepage-lang-logreason": "Bagéyan kaca terjemahan \"$1\".",
- "pt-deletepage-started": "Mangga priksa [[Special:Log/pagetranslation|log terjemahan kaca]] kanggo layang kasalahan lan parampungan."
+ "pt-deletepage-full-logreason": "Perangan kaca \"$1\" kang bisa kapertal",
+ "pt-deletepage-lang-logreason": "Pérangan kaca pertalan \"$1\"",
+ "pt-deletepage-started": "Mangga priksa [[Special:Log/pagetranslation|log terjemahan kaca]] kanggo layang kasalahan lan parampungan.",
+ "pagemigration": "Migrasi kaca pertalan",
+ "pm-import-button-label": "Impor",
+ "pm-savepages-button-label": "Simpen",
+ "pm-cancel-button-label": "Wurung",
+ "pm-page-does-not-exist": "$1 ora ana.",
+ "pm-old-translations-missing": "$1 ora ngemu pertalan lawas.",
+ "pm-pagename-missing": "Sumangga lebokaké jeneng kacané.",
+ "pm-add-icon-hover-text": "Wuwuh ékan ing ngisor iki",
+ "pm-delete-icon-hover-text": "Busak iji",
+ "pm-pagetitle-placeholder": "Lebokaké sesirah kacané",
+ "tpt-translate-title": "Idinaké mertal sesirah kaca",
+ "pp-pagename-placeholder": "Lebokaké jeneng kacané",
+ "pp-prepare-button-label": "Cepakaké",
+ "pp-save-button-label": "Simpen",
+ "pp-cancel-button-label": "Wurung",
+ "pp-save-message": "Kacané wis kasimpen. Panjenengan bisa [$1 mbesut] kacané.",
+ "pp-pagename-missing": "Sumangga isi mawa jeneng kacané.",
+ "pp-diff-old-header": "Tulisan sumber",
+ "pp-diff-new-header": "Tulisan kang cumepak",
+ "tpt-unlink-button": "Buwang saka pertalan",
+ "tpt-unlink-summary": "Mbuwang kaca saka pertalan",
+ "tpt-generic-confirm": "Sumangga konfirmasi lakuné.",
+ "tpt-generic-button": "Konfirmasi"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ka.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ka.json
index fdc18668..79e86f7b 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ka.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ka.json
@@ -11,7 +11,6 @@
"tpt-section": "თარგმნის ბლოკი $1",
"tpt-section-new": "თარგმნის ახალი ბლოკი.\nსახელი: $1",
"tpt-section-deleted": "თარგმნის ბლოკი $1",
- "tpt-template": "გვერდის თარგი",
"tpt-diff-old": "წინა ტექსტი",
"tpt-diff-new": "ახალი ტექსტი",
"tpt-sections-template": "თარგმნის გვერდის თარგი",
@@ -79,16 +78,14 @@
"pm-import-button-label": "იმპორტი",
"pm-savepages-button-label": "შენახვა",
"pm-cancel-button-label": "გაუქმება",
- "pm-pagename-placeholder": "შეიყვანეთ გვერდის სახელი",
- "pm-langcode-placeholder": "ენის კოდი",
"pm-page-does-not-exist": "$1 არ არსებობს.",
"pm-old-translations-missing": "$1 არ შეიცავს ძველ თარგმანებს.",
"pm-pagename-missing": "გთხოვთ, შეიყვანოთ გვერდის სახელი.",
- "pm-langcode-missing": "გთხოვთ, შეიყვანოთ ენის კოდი.",
"pm-add-icon-hover-text": "ბოლოში ბლოკის დამატება",
"pm-swap-icon-hover-text": "ქვედა ბლოკთან ადგილების გაცვლა",
"pm-delete-icon-hover-text": "ბლოკის წაშლა",
"pm-pagetitle-invalid": "გთხოვთ, შეიყვანოთ გვერდის სწორი სახელი",
+ "pm-langcode-missing": "გთხოვთ, შეიყვანოთ ენის კოდი.",
"pm-summary-import": "თარგმანი იმპორტირებულია [[Special:PageMigration|გვერდის მიგრაციის]] გამოყენებით",
"tpt-translate-title": "გვერდის სათაურის თარგმნის ნებართვა",
"pp-save-summary": "გვერდის სათარგმნად მომზადება",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/kab.json b/www/wiki/extensions/Translate/i18n/pagetranslation/kab.json
new file mode 100644
index 00000000..9ea051e3
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/kab.json
@@ -0,0 +1,64 @@
+{
+ "@metadata": {
+ "authors": [
+ "Belkacem77"
+ ]
+ },
+ "pagetranslation": "Asebter n tsuqilt",
+ "right-pagetranslation": "Creḍ ileqman n isebtar ara ttwasuqlen",
+ "action-pagetranslation": "Sefrek isebtar izmren ad ttwasuqlen",
+ "tpt-section": "Tayunt n tsuqilt: $1",
+ "tpt-section-new": "Tayunt tamaynut n tsuqilt. \nIsem : $1",
+ "tpt-section-deleted": "Taynut n tsuqilt $1",
+ "tpt-diff-old": "Aḍris yezrin",
+ "tpt-diff-new": "Aḍris d-iteddun",
+ "tpt-submit": "Creḍ lqem-agi ad yettwasuqel",
+ "tpt-sections-oldnew": "Tayunin n tsuqilt timaynutin neɣ tid yellan",
+ "tpt-sections-deleted": "Tayunin n tsuqilt yettwakksen",
+ "tpt-sections-template": "Taneɣruft n usebter n tsuqilt",
+ "tpt-badtitle": "Isem n usebter yettunefken ($1) mačči d azwel ameɣtu",
+ "tpt-nosuchpage": "Asebter $1 ulac-it",
+ "tpt-mark-summary": "Lqem-agi yettwacreḍ i tsuqilt",
+ "tpt-edit-failed": "Ur izmir ara ad ileqqem asebter $1",
+ "tpt-duplicate": "Isem n tayunt n tsuqilt $1 tettwaseqdec ugar n tikelt.",
+ "tpt-already-marked": "Lqem aneggaru n usebter-agi yettwacreḍ i tsuqilt.",
+ "tpt-unmarked": "Asebter $1 ur yezgi yettwacreḍ i tsuqilt",
+ "tpt-list-nopages": "Ulac isebtar yettwacerḍen i tsuqilt neɣ yettwaheggan ad ttwacerḍen i tsuqilt.",
+ "tpt-new-pages-title": "Isebtar yettwasumren i tsuqilt",
+ "tpt-old-pages-title": "Isebtar yettwasqqalen tura",
+ "tpt-other-pages-title": "Isebtar s tuccḍiwin",
+ "tpt-discouraged-pages-title": "Isebtar s war afud",
+ "tpt-select-prioritylangs-reason": "Taɣẓint :",
+ "tpt-rev-mark": "creḍ i tsuqilt",
+ "tpt-rev-unmark": "kkes si tsuqilt",
+ "tpt-rev-encourage": "err-d",
+ "tpt-rev-mark-tooltip": "Creḍ lqem aneggaru n usebter-agi i tsuqilt.",
+ "tpt-rev-unmark-tooltip": "Kkes asebter-agi si tsuqilt.",
+ "tpt-rev-encourage-tooltip": "Err-d asebter-agi ar tsuqilt tamagnut.",
+ "translate-tag-translate-link-desc": "Suqel asebter-agi",
+ "translate-tag-markthis": "Creḍ asebter-agi i tsuqilt",
+ "tpt-translation-intro-fuzzy": "Tisuqilin ifaten ttwacerḍent akka.",
+ "tpt-languages-legend": "Tutlayin-nniḍen:",
+ "tpt-languages-zero": "Senker tasuqilt i tutlayt-a",
+ "tpt-languages-nonzero": "$1 ($2% yettwasuqel)",
+ "tpt-tab-translate": "Suqel",
+ "tpt-discouraged-language-force-header": "Asebter-agi ur yezmir ara ad yettwasuqle ar $1.",
+ "tpt-discouraged-language-force-content": "Anebdal n tsuqilt igzem-itt d iṛṛay d akken asebter-agi ur yezmir ara ad yettwsuqel ar $1.",
+ "tpt-discouraged-language-header": "Tasuqilt ar $1 mačči d ayen yezwaren deg usebter-agi.",
+ "tpt-discouraged-language-reason": "Taɣzint: $1",
+ "tpt-aggregategroup-add": "Rnu",
+ "tpt-aggregategroup-save": "Sekles",
+ "tpt-aggregategroup-new-name": "Isem:",
+ "tpt-aggregategroup-new-description": "Aglam (afrayan):",
+ "tpt-aggregategroup-invalid-group": "Ulac agraw",
+ "tpt-aggregategroup-edit-name": "Isem:",
+ "tpt-aggregategroup-edit-description": "Aglam:",
+ "tpt-aggregategroup-update": "Sekles",
+ "tpt-aggregategroup-update-cancel": "Sefsex",
+ "tpt-invalid-group": "Agraw arameɣtu",
+ "pt-deletepage-subpages": "Kkes akk isebtar isnawanen",
+ "pt-deletepage-list-other": "Isebtar-nniḍen isnawanen",
+ "pm-import-button-label": "Kter",
+ "pm-summary-import": "Tasuqlit tettwakter s useqdec n [[Special:PageMigration|n usgaǧi n usebter]]",
+ "pp-save-message": "Asebter yettwasekles. Tzemreḍ ad tt-[$1 ẓergeḍ]."
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/kbp.json b/www/wiki/extensions/Translate/i18n/pagetranslation/kbp.json
new file mode 100644
index 00000000..7d202ada
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/kbp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gnangbade"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% kɩɖɛzʋ|kɩɖɛzaa|kɩɖɛzʋʋ|kɩɖɛzɩŋ|kɩɖɛzaɣ|kɩɖɛzasɩ|kɩɖɛzɩyɛ|kɩɖɛza||kɩɖɛzɩtʋ|kɩɖɛzɩm)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/kiu.json b/www/wiki/extensions/Translate/i18n/pagetranslation/kiu.json
new file mode 100644
index 00000000..44678949
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/kiu.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mirzali"
+ ]
+ },
+ "tpt-aggregategroup-update-cancel": "Bıtexelne",
+ "pm-cancel-button-label": "Bıtexelne",
+ "pp-cancel-button-label": "Bıtexelne"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/kjp.json b/www/wiki/extensions/Translate/i18n/pagetranslation/kjp.json
new file mode 100644
index 00000000..a360831b
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/kjp.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "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": "ဆ်ုဏဲဖၠဟ်:",
+ "log-action-filter-pagetranslation-mark": "မ်ုခၠယ့်ၯာင်ႋ မ်ုမာဏါင်း",
+ "pm-import-button-label": "ဆူ့ဍုဂ်သုံ့လင်"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/kk-cyrl.json b/www/wiki/extensions/Translate/i18n/pagetranslation/kk-cyrl.json
index 41c2220c..d656ce60 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/kk-cyrl.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/kk-cyrl.json
@@ -7,12 +7,9 @@
"pagetranslation": "Бет аудармасы",
"right-pagetranslation": "Аударма үшін беттердің нұсқаларын белгілеу",
"action-pagetranslation": "аударуға келетін беттерді басқару",
- "tpt-desc": "Контент беттерді аударуға арналған кеңейтілім",
"tpt-section": "$1 аударма бірлігі",
"tpt-section-new": "Жаңа аударма бірлігі.\nАтауы: $1",
"tpt-section-deleted": "$1 аударма бірлігі",
- "tpt-template": "Бет ұлгісі",
- "tpt-templatediff": "Бет үлгісі өзгертілді",
"tpt-diff-old": "Алдындағы мәтін",
"tpt-diff-new": "Жаңа мәтін",
"tpt-submit": "Аударма үшін бұл нұсқаны белгілеу",
@@ -103,16 +100,14 @@
"pm-import-button-label": "Импорттау",
"pm-savepages-button-label": "Сақтау",
"pm-cancel-button-label": "Болдырмау",
- "pm-pagename-placeholder": "Бет атауын енгізу",
- "pm-langcode-placeholder": "Тіл коды",
"pm-page-does-not-exist": "$1 беті жоқ.",
"pm-old-translations-missing": "$1 ескі аудармаларды қамтымайды.",
"pm-pagename-missing": "Бет атауын енгізіңіз:",
- "pm-langcode-missing": "Тід кодын енгізіңіз.",
"pm-add-icon-hover-text": "Төмендегі бірлігті қосыңыз",
"pm-swap-icon-hover-text": "Төмендегі бірлікті ауыстырыңыз",
"pm-delete-icon-hover-text": "Бірлікті жою",
"pm-pagetitle-invalid": "Жарамды бет атауын енгізіңіз",
+ "pm-langcode-missing": "Тід кодын енгізіңіз.",
"pm-summary-import": "[[Special:PageMigration|Бет миграциясы]] арнайы бетін қолданып аударма импортталды",
"tpt-translate-title": "Бет атауын аударуға рұқсат ету",
"pp-save-summary": "Аудару үшін бет дайындалды",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/km.json b/www/wiki/extensions/Translate/i18n/pagetranslation/km.json
index 995e8dce..5f93a3cd 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/km.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/km.json
@@ -9,8 +9,6 @@
"tpt-section": "ឯកតាបកប្រែ $1",
"tpt-section-new": "ឯកតាបកប្រែថ្មី។\nឈ្មោះ៖ $1",
"tpt-section-deleted": "ឯកតាបកប្រែ $1",
- "tpt-template": "គំរូទំព័រ",
- "tpt-templatediff": "គំរូ​ទំព័រ​បានផ្លាស់ប្តូរ​។",
"tpt-diff-old": "អត្ថបទ​​ពីមុន​",
"tpt-diff-new": "អត្ថបទ​ថ្មី​",
"tpt-submit": "សម្គាល់​កំណែ​នេះ​សម្រាប់​ការបកប្រែ​",
@@ -26,6 +24,5 @@
"tpt-languages-legend": "ជាភាសាដទៃទៀត៖",
"tpt-languages-nonzero": "$1 ($2% បកប្រែរួច)",
"tpt-tab-translate": "បកប្រែ",
- "pm-langcode-placeholder": "កូដ​ភាសា",
"pm-langcode-missing": "សូមវាយបញ្ចូលកូដភាសា។"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/kn.json b/www/wiki/extensions/Translate/i18n/pagetranslation/kn.json
index 5746485b..06388807 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/kn.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/kn.json
@@ -3,31 +3,31 @@
"authors": [
"Nayvik",
"VASANTH S.N.",
- "Omshivaprakash"
+ "Omshivaprakash",
+ "Rakshika"
]
},
- "pagetranslation": "ಪುಟ ಭಾಷಾಂತರ",
- "tpt-template": "ಪುಟ ಸಿದ್ಧವಿನ್ಯಾಸ",
+ "pagetranslation": "ಪುಟ ಅನುವಾದ",
"tpt-diff-old": "ಹಿಂದಿನ ಪಠ್ಯ",
"tpt-diff-new": "ಹೊಸ ಪಠ್ಯ",
- "tpt-old-pages-title": "ಭಾಷಾಂತರದಲ್ಲಿರುವ ಪುಟಗಳು",
+ "tpt-old-pages-title": "ಭಾಷಾಂತರದ ಪುಟಗಳು",
"tpt-select-prioritylangs-reason": "ಕಾರಣ:",
- "tpt-rev-mark": "ಭಾಷಾಂತರಕ್ಕೆ ಗುರುತುಮಾಡಿ",
- "tpt-rev-unmark": "ಭಾಷಾಂತರದಿಂದ ತೆಗೆದುಹಾಕಿ",
- "tpt-rev-encourage": "ಹಿಂದೆ ಇದ್ದಂತೆ ಮಾಡು",
- "translate-tag-translate-link-desc": "ಈ ಪುಟವನ್ನು ಅನುವಾದಿಸಿ",
- "translate-tag-markthis": "ಭಾಷಾಂತರಕ್ಕೆ ಈ ಪುಟವನ್ನು ಗುರುತುಮಾಡಿ",
+ "tpt-rev-mark": "ಅನುವಾದಕ್ಕಾಗಿ ಗುರುತಿಸಿ",
+ "tpt-rev-unmark": "ಅನುವಾದದಿಂದ ತೆಗೆದುಹಾಕಿ",
+ "tpt-rev-encourage": "ಪುನಃಸ್ಥಾಪಿಸಿ",
+ "translate-tag-translate-link-desc": "ಈ ಪುಟವನ್ನು ಭಾಷಾಂತರಿಸಿ",
+ "translate-tag-markthis": "ಅನುವಾದಕ್ಕಾಗಿ ಈ ಪುಟವನ್ನು ಗುರುತಿಸಿ",
"tpt-languages-legend": "ಇತರ ಭಾಷೆಗಳು:",
- "tpt-languages-nonzero": "$1 ($2% ಅನುವಾದಗೊಂಡಿದೆ)",
- "tpt-tab-translate": "ಭಾಷಾಂತರಿಸಿ",
+ "tpt-languages-nonzero": "$1 ($2% ಅನುವಾದಿಸಲಾಗಿದೆ)",
+ "tpt-tab-translate": "ಭಾಷಾಂತರಿಸಲು",
"tpt-discouraged-language-reason": "ಕಾರಣ: $1",
- "tpt-aggregategroup-add": "ಸೇರಿಸು",
+ "tpt-aggregategroup-add": "ಸೇರಿಸಿ",
"tpt-aggregategroup-save": "ಉಳಿಸಿ",
"tpt-aggregategroup-new-name": "ಹೆಸರು:",
- "pt-movepage-current": "ಪ್ರಸ್ತುತ ಹೆಸರು:",
- "pt-movepage-new": "ಹೊಸ ಹಸರು:",
+ "pt-movepage-current": "ಪ್ರಸಕ್ತ ಹೆಸರು:",
+ "pt-movepage-new": "ಹೊಸ ಹೆಸರು:",
"pt-movepage-reason": "ಕಾರಣ:",
"pt-deletepage-current": "ಪುಟದ ಹೆಸರು:",
- "pt-deletepage-reason": "ಕಾರಣ:",
+ "pt-deletepage-reason": "ಕಾರಣ :",
"pt-deletepage-list-translation": "ಭಾಷಾಂತರ ಪುಟಗಳು"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ko.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ko.json
index 2bc768f4..19b7f1b5 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ko.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ko.json
@@ -8,22 +8,21 @@
"Hym411",
"Tyey",
"Revi",
- "Hwangjy9"
+ "Hwangjy9",
+ "Ykhwong",
+ "Jerrykim306"
]
},
"pagetranslation": "문서 번역",
- "right-pagetranslation": "번역에 대한 문서의 판 표시",
+ "right-pagetranslation": "문서의 판을 번역하도록 표시",
"action-pagetranslation": "번역 가능한 문서 관리",
- "tpt-desc": "내용 문서를 번역하기 위한 확장 기능",
"tpt-section": "번역 단위 $1",
"tpt-section-new": "새 번역 단위입니다.\n이름: $1",
"tpt-section-deleted": "번역 단위 $1",
- "tpt-template": "문서 틀",
- "tpt-templatediff": "문서 틀이 바뀌었습니다.",
"tpt-diff-old": "이전 텍스트",
"tpt-diff-new": "새 텍스트",
"tpt-submit": "이 판을 번역하도록 표시",
- "tpt-sections-oldnew": "기존 및 신규 번역 단위",
+ "tpt-sections-oldnew": "신규 및 기존 번역 단위",
"tpt-sections-deleted": "삭제된 번역 단위",
"tpt-sections-template": "번역 문서 틀",
"tpt-action-nofuzzy": "번역을 무효화하지 마세요",
@@ -33,7 +32,6 @@
"tpt-notsuitable": "$1 문서는 번역에 적합하지 않습니다.\n<nowiki><translate></nowiki> 태그가 있고 올바른 문법인지 확인하세요.",
"tpt-saveok": "[[:$1]] 문서는 $2 {{PLURAL:$2|번역 단위}}로 번역에 대해 표시했습니다.\n문서는 지금 <span class=\"plainlinks\">[$3 번역]</span>할 수 있습니다.",
"tpt-offer-notify": "이 문서에 대해 <span class=\"plainlinks\">[$1 번역자 알림]</span>을 받을 수 있습니다.",
- "tpt-badsect": "\"$1\"(은)는 $2 번역 유닉에 대해 올바른 이름이 아닙니다.",
"tpt-showpage-intro": "아래에 기존, 추가 및 삭제된 번역 단위가 나열되어 있습니다.\n\n이 판을 번역하도록 표시하기 전에, 번역자가 불필요한 작업을 하지 않도록 번역 단위에 대한 바뀜이 최소화되어 있는지 확인하세요.",
"tpt-mark-summary": "번역에 대해 이 버전 표시함",
"tpt-edit-failed": "문서를 업데이트를 할 수 없습니다: $1",
@@ -60,12 +58,13 @@
"tpt-rev-mark-tooltip": "번역에 대한 이 문서의 최신 판을 표시합니다.",
"tpt-rev-unmark-tooltip": "번역에서 이 문서를 제거합니다.",
"tpt-rev-discourage-tooltip": "이 문서에 대한 추가적인 번역을 중단합니다.",
- "tpt-rev-encourage-tooltip": "이 문서를 정상적인 번역으로 복원합니다.",
+ "tpt-rev-encourage-tooltip": "이 문서를 정상적인 번역으로 복구합니다.",
"translate-tag-translate-link-desc": "이 문서 번역하기",
"translate-tag-markthis": "이 문서를 번역 대상으로 표시",
"translate-tag-markthisagain": "이 문서에는 최근 <span class=\"plainlinks\">[$2 번역 대상으로 표시]</span>한 이후 <span class=\"plainlinks\">[$1 바뀜]</span>이 있습니다.",
"translate-tag-hasnew": "이 문서는 번역 대상으로 표시하지 않은 <span class=\"plainlinks\">[$1 바뀜]</span>을 포함합니다.",
"tpt-translation-intro": "이 문서는 [[$2]] 문서를 <span class=\"plainlinks\">[$1 번역한 것]</span>이며 번역은 $3% 완료했습니다.",
+ "tpt-translation-intro-fuzzy": "오래된 번역은 이렇게 표시됩니다.",
"tpt-languages-legend": "다른 언어:",
"tpt-languages-zero": "이 언어에 대한 번역 시작",
"tpt-languages-nonzero": "$1 ($2% 번역함)",
@@ -75,12 +74,12 @@
"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-force-content": "번역 관리자가 이 글을 $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",
"tpt-priority-languages": "번역 관리자는 $1(으)로 이 그룹에 대해 우선 언어를 설정합니다.",
"tpt-render-summary": "원본 문서의 새 판에 맞게 업데이트",
- "tpt-download-page": "번역 문서 내보내기",
"aggregategroups": "집계 그룹",
"tpt-aggregategroup-add": "추가",
"tpt-aggregategroup-save": "저장",
@@ -102,47 +101,52 @@
"pt-shake-empty": "\"$1\" 표시에 대한 빈 번역 단위입니다.",
"log-description-pagetranslation": "문서 번역 시스템에 관련된 작업에 대한 기록",
"log-name-pagetranslation": "문서 번역 기록",
- "logentry-pagetranslation-mark": "$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|완료했습니다}}",
- "logentry-pagetranslation-deletefnok": "$1 사용자가 $4 번역 가능한 문서에 속한 $3 문서를 삭제하는 데 {{GENDER:$2|실패했습니다}}",
- "logentry-pagetranslation-deletelok": "$1 사용자가 $3 번역 문서의 삭제를 {{GENDER:$2|완료했습니다}}",
- "logentry-pagetranslation-deletelnok": "$1 사용자가 $4 번역 문서에 속한 $3 문서를 삭제하는 데 {{GENDER:$2|실패했습니다}}",
- "logentry-pagetranslation-encourage": "$1 사용자가 $3의 번역을 {{GENDER:$2|되살렸습니다}}",
- "logentry-pagetranslation-discourage": "$1 사용자가 $3의 번역을 {{GENDER:$2|중단했습니다}}",
- "logentry-pagetranslation-prioritylanguages-unset": "$1 사용자가 $3 번역 가능한 문서에서 우선 언어를 {{GENDER:$2|제거했습니다}}",
- "logentry-pagetranslation-prioritylanguages": "$1 사용자가 $3 번역 가능한 문서에 대한 우선 언어를 $5로 {{GENDER:$2|설정했습니다}}",
- "logentry-pagetranslation-prioritylanguages-force": "$1 사용자가 $3 번역 가능한 문서에 대한 언어를 $5로 {{GENDER:$2|제한했습니다}}",
- "logentry-pagetranslation-associate": "$1 사용자가 $3 번역 가능한 문서를 $4 집계 그룹에 {{GENDER:$2|추가했습니다}}",
- "logentry-pagetranslation-dissociate": "$1 사용자가 $3 번역 가능한 문서를 $4 집계 그룹에서 {{GENDER:$2|제거했습니다}}",
+ "logentry-pagetranslation-mark": "$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|완료했습니다}}",
+ "logentry-pagetranslation-deletefnok": "$1님이 $4 번역 가능한 문서에 속한 $3 문서를 삭제하는 데 {{GENDER:$2|실패했습니다}}",
+ "logentry-pagetranslation-deletelok": "$1님이 $3 번역 문서의 삭제를 {{GENDER:$2|완료했습니다}}",
+ "logentry-pagetranslation-deletelnok": "$1님이 $4 번역 문서에 속한 $3 문서를 삭제하는 데 {{GENDER:$2|실패했습니다}}",
+ "logentry-pagetranslation-encourage": "$1님이 $3의 번역을 {{GENDER:$2|되살렸습니다}}",
+ "logentry-pagetranslation-discourage": "$1님이 $3의 번역을 {{GENDER:$2|중단했습니다}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1님이 $3 번역 가능한 문서에서 우선 언어를 {{GENDER:$2|제거했습니다}}",
+ "logentry-pagetranslation-prioritylanguages": "$1님이 $3 번역 가능한 문서에 대한 우선 언어를 $5로 {{GENDER:$2|설정했습니다}}",
+ "logentry-pagetranslation-prioritylanguages-force": "$1님이 $3 번역 가능한 문서에 대한 언어를 $5로 {{GENDER:$2|제한했습니다}}",
+ "logentry-pagetranslation-associate": "$1님이 $3 번역 가능한 문서를 $4 집계 그룹에 {{GENDER:$2|추가했습니다}}",
+ "logentry-pagetranslation-dissociate": "$1님이 $3 번역 가능한 문서를 $4 집계 그룹에서 {{GENDER:$2|제거했습니다}}",
+ "log-action-filter-pagetranslation-mark": "번역한 것으로 표시",
+ "log-action-filter-pagetranslation-unmark": "번역에서 제거",
+ "log-action-filter-pagetranslation-move": "문서 이동",
+ "log-action-filter-pagetranslation-delete": "문서 삭제",
"pt-movepage-title": "\"$1\" 번역 가능한 문서 이동",
- "pt-movepage-blockers": "번역 가능한 문서는 다음 {{PLURAL:$1|오류}} 때문에 새 이름으로 옮길 수 없습니다:",
+ "pt-movepage-blockers": "번역 가능한 문서는 다음 {{PLURAL:$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-tp-invalid": "\"[[:$1]]\"에 대한 대상 번역 문서 제목이 올바르지 않습니다. (너무 깁니까?)",
"pt-movepage-block-section-exists": "번역 단위에 대한 \"[[:$2]]\" 대상 문서가 존재합니다.",
- "pt-movepage-block-section-invalid": "번역 단위에 대한 \"[[:$1]]\"에 대한 대상 부분 문서 제목은 올바르지 않습니다. (너무 길어요?)",
+ "pt-movepage-block-section-invalid": "번역 단위에 대한 \"[[:$1]]\"의 대상 문서 제목이 올바르지 않습니다. (너무 깁니까?)",
"pt-movepage-block-subpage-exists": "\"[[:$2]]\" 대상 하위 문서가 존재합니다.",
- "pt-movepage-block-subpage-invalid": "\"[[:$1]]\"에 대한 대상 하위 문서 제목은 올바르지 않습니다. (너무 길어요?)",
+ "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-translatable-note": "이 문서들은 개별적으로 이동되어야 합니다.",
+ "pt-movepage-list-other": "다른 {{PLURAL:$1|하위 문서}}",
"pt-movepage-list-count": "이동할 {{PLURAL:$1|문서}} 총 $1개입니다.",
"pt-movepage-legend": "번역 가능한 문서 이동",
"pt-movepage-current": "현재 이름:",
"pt-movepage-new": "새 이름:",
"pt-movepage-reason": "이유:",
"pt-movepage-subpages": "모든 하위 문서 이동",
- "pt-movepage-action-check": "옮길 수 있는지 확인",
+ "pt-movepage-action-check": "이동할 수 있는지 확인",
"pt-movepage-action-perform": "이동하기",
"pt-movepage-action-other": "대상 바꾸기",
"pt-movepage-intro": "이 특수 문서는 번역에 대해 표시한 문서를 이동할 수 있습니다.\n많은 문서가 이동해야 하기 때문에 즉시 이동 작업이 되지 않습니다.\n문서를 이동하는 동안 질문의 문서와 상호 작용하는 것은 불가능합니다.\n실패하면 [[Special:Log/pagetranslation|문서 번역 기록]]에 기록되고 직접 복구할 필요가 있습니다.",
- "pt-movepage-logreason": "\"$1\" 번역 가능한 문서의 부분입니다.",
- "pt-movepage-started": "기본 페이지가 지금 옮겨졌습니다.\n오류에 대해 [[Special:Log/pagetranslation|문서 번역 기록]]을 확인하고 메시지를 완료하세요.",
+ "pt-movepage-logreason": "\"$1\" 번역 가능한 문서의 부분입니다",
+ "pt-movepage-started": "잠시 후 [[Special:Log/pagetranslation|문서 번역 기록]]에서 오류 및 완료 메시지를 확인해 주십시오.",
"pt-locked-page": "이 문서는 번역 가능한 문서가 현재 이동하고 있기 때문에 잠겨 있습니다.",
"pt-deletepage-lang-title": "\"$1\" 번역 문서를 삭제 중",
"pt-deletepage-full-title": "\"$1\" 번역 가능한 문서를 삭제 중",
@@ -162,27 +166,26 @@
"pt-deletepage-list-section": "번역 단위 문서",
"pt-deletepage-list-other": "다른 하위 문서",
"pt-deletepage-list-count": "삭제할 {{PLURAL:$1|문서}} 총 $1개입니다.",
- "pt-deletepage-full-logreason": "\"$1\" 번역 가능한 문서의 부분입니다.",
- "pt-deletepage-lang-logreason": "\"$1\" 번역 문서의 부분입니다.",
- "pt-deletepage-started": "오류와 메시지 완료를 위한 [[Special:Log/pagetranslation|문서 번역 기록]]를 확인하세요.",
+ "pt-deletepage-full-logreason": "\"$1\" 번역 가능한 문서의 부분입니다",
+ "pt-deletepage-lang-logreason": "\"$1\" 번역 문서의 부분입니다",
+ "pt-deletepage-started": "[[Special:Log/pagetranslation|문서 번역 기록]]에서 오류 및 완료 메시지를 확인해 주십시오.",
"pt-deletepage-intro": "이 특수 문서는 전체 번역 가능한 문서 또는 언어의 개별 번역 문서를 삭제할 수 있습니다.\n번역에 따라 모든 문서가 삭제되기 때문에 즉시 삭제 작업이 되지 않습니다.\n실패하면 [[Special:Log/pagetranslation|문서 번역 기록]]에 기록되고 직접 복구해야 합니다.",
"pagemigration": "번역 문서 병합",
"pm-import-button-label": "가져오기",
"pm-savepages-button-label": "저장",
"pm-cancel-button-label": "취소",
- "pm-pagename-placeholder": "문서 이름을 입력하세요",
- "pm-langcode-placeholder": "언어 코드",
"pm-page-does-not-exist": "$1 문서가 존재하지 않습니다.",
"pm-old-translations-missing": "$1 문서는 오래된 번역을 포함하지 않습니다.",
"pm-pagename-missing": "문서 이름을 입력하세요",
- "pm-langcode-missing": "언어 코드를 입력하세요.",
"pm-add-icon-hover-text": "아래에 단위 추가",
"pm-swap-icon-hover-text": "아래 단위로 교체",
"pm-delete-icon-hover-text": "단위 삭제",
- "pm-pagetitle-invalid": "올바른 문서 제목을 입력하세요",
+ "pm-pagetitle-invalid": "올바른 문서 제목을 입력하세요. <page-name>/<language-code> 형식이어야 합니다.",
+ "pm-langcode-missing": "언어 코드가 제목에 없는 것 같습니다. <page-name>/<language-code> 형식으로 문서 제목을 입력해 주십시오.",
"tpt-translate-title": "문서 제목을 번역할 수 있음",
"pagepreparation": "문서를 번역할 수 있게 준비",
"pp-pagename-placeholder": "문서 이름을 입력하세요",
+ "pp-prepare-button-label": "준비",
"pp-save-button-label": "저장",
"pp-cancel-button-label": "취소",
"pp-save-message": "문서가 저장되었습니다. 그것을 [$1 편집]할 수 있습니다.",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ksh.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ksh.json
index 09a3f291..35813f7d 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ksh.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ksh.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Purodha"
+ "Purodha",
+ "DannyS712"
]
},
"pagetranslation": "Sigge Övversäze",
@@ -56,6 +57,7 @@
"translate-tag-markthisagain": "Hee di Sigg es <span class=\"plainlinks\">[$1 jeändert woode]</span> zick se et läz <span class=\"plainlinks\">[$2 för ze Övversäze]</span> makeet woode es.",
"translate-tag-hasnew": "Hee di Sigg <span class=\"plainlinks\">[$1 es jeändert woode]</span>, es ävver nit för ze Övversäze makeet woode.",
"tpt-translation-intro": "Hee di Sigg es en <span class=\"plainlinks\">[$1 övversaz Version]</span> vun dä Sigg „[[$2]]“ un es zoh $3% jedonn.",
+ "tpt-translation-intro-fuzzy": "Övverhollte Övversäzunge wäde su makeet, wi hee dä Täx.",
"tpt-languages-legend": "Ander Schprohche:",
"tpt-languages-separator": "&#160;•&#32;",
"tpt-languages-zero": "Donn ens loßlääje mem Övversäze en heh di Schprohch",
@@ -110,6 +112,13 @@
"logentry-pagetranslation-prioritylanguages-force": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Övveräzonge för di Sigg „$3“ beschrängk op $5.",
"logentry-pagetranslation-associate": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di övveräzbaa Sigg „$3“ en di Sammeljropp „$4“ jedonn.",
"logentry-pagetranslation-dissociate": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di övveräzbaa Sigg „$3“ uß dä Sammeljropp „$4“ erußjehollt.",
+ "log-action-filter-pagetranslation": "Axjuhn",
+ "log-action-filter-pagetranslation-mark": "Zom Övversäze freijejovve",
+ "log-action-filter-pagetranslation-unmark": "Vum Övversäzze ußjeschloße",
+ "log-action-filter-pagetranslation-move": "Sigge ömjenannt",
+ "log-action-filter-pagetranslation-delete": "Sigge fottjeschmeße",
+ "log-action-filter-pagetranslation-encourage": "Övversäze jewönsch",
+ "log-action-filter-pagetranslation-discourage": "Övversäze es nit von Belang",
"pt-movepage-title": "De övversäzbaa Sigg „$1“ ömnänne",
"pt-movepage-blockers": "Di övversäbaa Sigg künne mer nit ömbenänne. {{PLURAL:$1|Der Jrond es:|De Jrönd sin:|Mer weße ävver kein Jrönd doför.}}",
"pt-movepage-block-base-exists": "De övversäzbaa Zielsigg „[[:$1]]“ jidd_et ald.",
@@ -133,7 +142,7 @@
"pt-movepage-action-check": "Fengk erus, ov dat Ömnänne müjjlesch es",
"pt-movepage-action-perform": "Ömnänne!",
"pt-movepage-action-other": "Ander Zieltittel",
- "pt-movepage-intro": "Heh di {{int:specialpage}} löht Desch Sigge ömdäufe, di för et Övversäze frei jejovve sin.\nDat jeiht nit en einem Rötsch, weil ene Pöngel Sigge un Deile ömjenannt wähde möße.\nEm MediaWiki sing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\"> [http://www.mediawiki.org/wiki/Manual:Job_queue job queue]</i> weed doför jebruch.\nSu lang, wi de Sigge ömjenannt wääde, kam_mer met dänne nix söns maache.\nFähler kumme en et [[Special:Log/pagetranslation|{{int:pt-log-name}}]] un möße vun Hand opjerühmp wähde.",
+ "pt-movepage-intro": "Heh di {{int:specialpage}} löht Desch Sigge ömdäufe, di för et Övversäze frei jejovve sin.\nDat jeiht nit en einem Rötsch, weil ene Pöngel Sigge un Deile ömjenannt wähde möße.\nEm MediaWiki sing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\"> [https://www.mediawiki.org/wiki/Manual:Job_queue job queue]</i> weed doför jebruch.\nSu lang, wi de Sigge ömjenannt wääde, kam_mer met dänne nix söns maache.\nFähler kumme en et [[Special:Log/pagetranslation|{{int:pt-log-name}}]] un möße vun Hand opjerühmp wähde.",
"pt-movepage-logreason": "Deil vun dä övversäzbaa Sigg „$1“",
"pt-movepage-started": "Di Sigg weed jäz ömjenannt.\nDon op jede Fall em [[Special:Log/pagetranslation|{{int:pt-log-name}}]] noh Fähler loore, un dat dat öhndlesch aan et Eng jekumme es.",
"pt-locked-page": "Dat Stöck heh is jesperrt, däm sing övversäbaa Sigg weed nämmisch jrad ömbenannt.",
@@ -163,7 +172,7 @@
"pagemigration-summary": "Jivv en Övversäzongssigg aan un holl alle Övversäzonge zeröck, di jemaat wohre, ih dat et Süßtem för et Övversäze för di Sigg aanjeschalldt woode es.",
"pm-import-button-label": "Empottehre!",
"pm-savepages-button-label": "Faßhalde",
- "pm-cancel-button-label": "Ophüre!",
+ "pm-cancel-button-label": "Ophühre!",
"pm-page-does-not-exist": "$1 jidd_et nit",
"pm-old-translations-missing": "En dä Sigg „$1“ sin kein ahle Övversäzonge.",
"pm-extra-units-warning": "Et sin veleijsch mih Eijnheijte övveresch. Bes esu jood un donn de Einheite ob beide Sigge ejahl maache.",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ku-latn.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ku-latn.json
index a1ec1eea..c6f5e194 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ku-latn.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ku-latn.json
@@ -3,44 +3,58 @@
"authors": [
"George Animal",
"Gomada",
- "Bikarhêner"
+ "Bikarhêner",
+ "Cûndûllah el-Kurdî"
]
},
"pagetranslation": "Wergera rûpelê",
"right-pagetranslation": "Versiyonên rûpelên ji bo wergerê nîşan bike",
+ "action-pagetranslation": "rûpelên wergerbar bi rê ve bibe",
"tpt-diff-old": "Nivîsa pêşî",
"tpt-diff-new": "Nivîsa nû",
"tpt-submit": "Vê versiyonê ji bo wergerê îşaret bike",
"tpt-nosuchpage": "Rûpela $1 tune.",
"tpt-select-prioritylangs-reason": "Sedem:",
+ "tpt-rev-unmark": "ji nav wergeran derxe",
"translate-tag-translate-link-desc": "Vê rûpelê werrgerîne",
"translate-tag-markthis": "Vê rûpelê ji bo wergerê îşaret bike",
"tpt-languages-legend": "Zimanên din:",
"tpt-languages-nonzero": "$1 ($2% hate wergerandin)",
"tpt-tab-translate": "Wergerîne",
- "tpt-download-page": "Rûpela bi wergeran bişîne",
+ "tpt-discouraged-language-force-header": "Ev rûpel ji bo $1 nayê wergerandin",
+ "tpt-discouraged-language-reason": "Sedem: $1",
"tpt-aggregategroup-add": "Lê zêde bike",
"tpt-aggregategroup-save": "Tomar bike",
"tpt-aggregategroup-new-name": "Nav:",
+ "tpt-aggregategroup-new-description": "Pênas (heke bixwazî)",
+ "tpt-aggregategroup-invalid-group": "Kom tune ye",
"tpt-aggregategroup-edit-name": "Nav:",
"tpt-aggregategroup-edit-description": "Danasîn:",
"tpt-aggregategroup-update": "Tomar bike",
"tpt-aggregategroup-update-cancel": "Betal bike",
+ "tpt-invalid-group": "Koma nederbasdar",
"log-name-pagetranslation": "Têketina wergerandina rûpelan",
+ "log-action-filter-pagetranslation-delete": "Jêbirinên rûpelan",
"pt-movepage-list-translation": "{{PLURAL:$1|Rûpel|Rûpelên}} wergerê",
"pt-movepage-list-other": "Bin{{PLURAL:$1|rûpela|rûpelên}} din",
"pt-movepage-current": "Navê niha:",
"pt-movepage-new": "Navê nû:",
"pt-movepage-reason": "Sedem:",
"pt-movepage-subpages": "Hemû binrûpelan bigerîne",
+ "pt-deletepage-action-perform": "Jê bibe",
+ "pt-deletepage-lang-legend": "Rûpela wergerê jê bibe",
"pt-deletepage-full-legend": "Rûpela wergerê jê bibe",
"pt-deletepage-current": "Navê rûpelê:",
"pt-deletepage-reason": "Sedem:",
"pt-deletepage-subpages": "Hemû binrûpelan jê bibe",
+ "pt-deletepage-list-translation": "Rûpelên wergerê",
"pt-deletepage-list-other": "Binrûpelên din",
"pm-savepages-button-label": "Tomar bike",
"pm-cancel-button-label": "Betal bike",
- "pm-langcode-placeholder": "Koda ziman",
+ "pm-page-does-not-exist": "$1 tune ye.",
+ "pm-old-translations-missing": "$1 wergerên kevn nahewîne.",
+ "pm-pagetitle-placeholder": "Sernavê rûpelê binivîse",
+ "pm-pagetitle-missing": "Ji kerema xwe sernavê rûpelê binivîse",
"pp-save-button-label": "Tomar bike",
"pp-cancel-button-label": "Betal bike"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/kum.json b/www/wiki/extensions/Translate/i18n/pagetranslation/kum.json
new file mode 100644
index 00000000..30b39284
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/kum.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ArslanX"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% гёчюрюлген)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/kw.json b/www/wiki/extensions/Translate/i18n/pagetranslation/kw.json
new file mode 100644
index 00000000..8460b4b7
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/kw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nrowe"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% treylyes)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ky.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ky.json
index b49ad40f..457eb310 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ky.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ky.json
@@ -5,7 +5,6 @@
]
},
"pagetranslation": "Которуу барагы",
- "tpt-template": "Калып барагы",
"tpt-diff-new": "Жаңы текст",
"tpt-select-prioritylangs-reason": "Себеп:",
"tpt-sections-prioritylangs": "Артыкчылыктуу тилдер",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/lag.json b/www/wiki/extensions/Translate/i18n/pagetranslation/lag.json
new file mode 100644
index 00000000..4accf629
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/lag.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baba Tabita"
+ ]
+ },
+ "tpt-aggregategroup-add": "Ongerya",
+ "tpt-aggregategroup-new-name": "Irina:",
+ "tpt-aggregategroup-edit-name": "Irina:"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/lb.json b/www/wiki/extensions/Translate/i18n/pagetranslation/lb.json
index 5e634ae1..17daf988 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/lb.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/lb.json
@@ -59,6 +59,7 @@
"translate-tag-markthisagain": "Dës Säit huet <span class=\"plainlinks\">[$1 Ännerungen]</span> zënter datt se fir d'lescht <span class=\"plainlinks\">[$2 fir d'Iwwersetzung markéiert gouf]</span>.",
"translate-tag-hasnew": "Op dëser Säit si(nn)s <span class=\"plainlinks\">[$1 Ännerungen]</span> déi net fir d'iwwersetzung markéiert sinn.",
"tpt-translation-intro": "Dës Säit ass eng <span class=\"plainlinks\">[$1 iwwersate Versioun]</span> vun der Säit [[$2]] an d'Iwwersetzung ass zu $3 % komplett.",
+ "tpt-translation-intro-fuzzy": "Vereelzt Iwwersetzunge sinn esou markéiert.",
"tpt-languages-legend": "aner Sproochen:",
"tpt-languages-zero": "Iwwersetzung fir dës Sprooch ufänken",
"tpt-languages-nonzero": "$1 ($2% iwwersat)",
@@ -75,10 +76,10 @@
"tpt-discouraged-language-reason": "Grond: $1",
"tpt-priority-languages": "En Iwwersetzungs-Administrateur huet déi prioritiséiert Sprooche fir dëse Grupp op $1 agestallt.",
"tpt-render-summary": "Aktualiséieren fir mat der neier Versioun vun der Quellsäit iwwereneenzestëmmen",
- "aggregategroups": "Gruppen zesummeleeën",
+ "aggregategroups": "Gruppe fusionéieren",
"tpt-aggregategroup-add": "Derbäisetzen",
"tpt-aggregategroup-save": "Späicheren",
- "tpt-aggregategroup-add-new": "Eng nei zesummegeluechte Grupp derbäisetzen",
+ "tpt-aggregategroup-add-new": "Eng nei zesummegeluechte Grupp dobäisetzen",
"tpt-aggregategroup-new-name": "Numm:",
"tpt-aggregategroup-new-description": "Beschreiwung (optional):",
"tpt-aggregategroup-remove-confirm": "Sidd Dir sécher datt Dir dëse Grupp läsche wëllt?",
@@ -102,6 +103,13 @@
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|huet}} d'iwwersetzbar Säit $3 geläscht",
"logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|huet}} d'Läsche vun der Iwwersetzungssäit $3 ofgeschloss",
"logentry-pagetranslation-encourage": "$1 {{GENDER:$2|huet}} d'Iwwersetzung vun $3 recommandéiert",
+ "log-action-filter-pagetranslation": "Typ vun Aktioun:",
+ "log-action-filter-pagetranslation-mark": "Markéiere fir z'iwwersetzen",
+ "log-action-filter-pagetranslation-unmark": "Ewechhuele vun der Iwwersetzung",
+ "log-action-filter-pagetranslation-move": "Geréckelt Säiten",
+ "log-action-filter-pagetranslation-delete": "Geläscht Säiten",
+ "log-action-filter-pagetranslation-prioritylanguages": "Ännerung vun der Prioritéit vun de Sproochen",
+ "log-action-filter-pagetranslation-aggregategroups": "Ännerung vun der Zesummefaassung vu Gruppen",
"pt-movepage-title": "Déi iwwersetzbar Säit $1 réckelen",
"pt-movepage-blockers": "déi iwwersetzbar Säit kann net op den neien Numm geréckelt gi wéinst {{PLURAL:$1|dësem|dëse}} Feeler:",
"pt-movepage-block-base-exists": "D'Ziliwwersetzungssäit \"[[:$1]]\" gëtt et schonn.",
@@ -126,8 +134,8 @@
"pt-movepage-action-perform": "Réckelen",
"pt-movepage-action-other": "Zil änneren",
"pt-movepage-intro": "Dës Spezialsäit erméiglecht Iech et fir Säiten déi fir d'Iwwersetzung markéiert sinn ze réckelen.\nD'Réckelaktioun gëtt net direkt gemaach wëll vill Säite geréckelt musse ginn.\nD'Job-Queue gëtt fir d'Réckele vun de Säite benotzt.\nDa wann d'Säite geréckelt ginn ass et net méiglech mat deene Säiten déi grad geréckelt ginn ze schaffen.\nWann et net funktionéiert gëtt dat am [[Special:Log/pagetranslation|Iwwersetzungs-Logbuch]] festgehalen an et muss vun Hand reparéiert ginn.",
- "pt-movepage-logreason": "Deel vun der iwwersetzbarer Säit $1.",
- "pt-movepage-started": "D'Basissäit ass elo geréckelt.\nKuckt w.e.g. d'[[Special:Log/pagetranslation|Logbuch vun den Iwwersetzunge]] fir Feelermeldungen respektiv d'Meldung datt alles ok ass.",
+ "pt-movepage-logreason": "Deel vun der iwwersetzbarer Säit \"$1\"",
+ "pt-movepage-started": "Kuckt w.e.g. deemnächst d'[[Special:Log/pagetranslation|Logbuch vun den Iwwersetzunge]] fir Feelermeldunge respektiv d'Meldung datt alles ok ass.",
"pt-locked-page": "Dës Säit ass gespaart wëll déi iwwersetzbar Säit elo geréckelt gëtt.",
"pt-deletepage-lang-title": "D'Iwwersetzungssäit ''$1'' gëtt geläscht.",
"pt-deletepage-full-title": "Déi iwwersetzbar Säit ''$1'' gëtt geläscht",
@@ -147,8 +155,8 @@
"pt-deletepage-list-section": "Iwwersetzungseenheet vu Säiten",
"pt-deletepage-list-other": "Aner Ënnersäiten",
"pt-deletepage-list-count": "Am ganzen $1 {{PLURAL:$1|Säit|Säite}} fir ze läschen.",
- "pt-deletepage-full-logreason": "Deel vun der iwwersetzbarer Säit $1.",
- "pt-deletepage-lang-logreason": "Deel vun der iwwersater Säit $1.",
+ "pt-deletepage-full-logreason": "Deel vun der iwwersetzbarer Säit \"$1\"",
+ "pt-deletepage-lang-logreason": "Deel vun der iwwersater Säit \"$1\"",
"pt-deletepage-started": "Kuckt w.e.g. d'[[Special:Log/pagetranslation|Logbuch vun den Iwwersetzunge]] fir Feelermeldungen respektiv d'Meldung datt alles ok ass, no.",
"pt-deletepage-intro": "Dës Spezialsäit erméiglecht et eng ganz iwwersetzbar Säit oder eng individuell Iwwersetzungssäit an enger Sprooch ze läschen.\nD'Läschaktioun gesäit een net direkt well all d'Säiten déi dovun ofhänken och geläscht ginn.\nFeeler ginn am [[Special:Log/pagetranslation|Iwwersetzungs-Logbuch]] agedro a mussen duerno manuell gefléckt ginn.",
"pagemigration": "Migratioun vun der Iwwersetzungssäit",
@@ -158,12 +166,13 @@
"pm-page-does-not-exist": "$1 gëtt et net",
"pm-old-translations-missing": "Op $1 si keng al Iwwersetzungen dran",
"pm-pagename-missing": "Gitt w.e.g. den Numm vun der Säit an",
- "pm-add-icon-hover-text": "Eng Eenheet drënner derbäisetzen",
+ "pm-add-icon-hover-text": "Eng Eenheet drënner dobäisetzen",
"pm-swap-icon-hover-text": "Mat der Eenheet drënner wiesselen",
"pm-delete-icon-hover-text": "Eenheet läschen",
"pm-pagetitle-placeholder": "Gitt de Säitentitel an",
- "pm-pagetitle-invalid": "Gitt w.e.g. e valabelen Titel fir d'Säit an",
- "pm-langcode-missing": "Gitt w.e.g. de Sproochcode an",
+ "pm-pagetitle-invalid": "Gitt w.e.g. e valabelen Titel fir d'Säit an. Et muss am <page-name>/<language-code> Format sinn.",
+ "pm-pagetitle-missing": "Gitt w.e.g. den Titel vun der Säit an.",
+ "pm-langcode-missing": "Gitt w.e.g. de Sproochcode an. Gitt w.e.g. de Säitentitel am <page-name>/<language-code> Format an.",
"pm-summary-import": "Iwwersetzung importéiert mat Hëllef vun [[Special:PageMigration|Säitemigratioun]]",
"tpt-translate-title": "Iwwersetzung vum Titel vun der Säit erlaben",
"pp-save-summary": "Huet d'Säit fir d'Iwwersetzung preparéiert",
@@ -179,6 +188,7 @@
"pp-diff-old-header": "Quelltext",
"pp-diff-new-header": "Preparéierten Text",
"tpt-unlink-button": "Vun der Iwwersetzung ewechhuelen",
+ "tpt-unlink-summary": "D'Säit gouf vun der Iwwersetzung ewechgeholl",
"tpt-generic-confirm": "Confirméiert dës Aktioun w.e.g..",
"tpt-generic-button": "Confirméieren"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/lfn.json b/www/wiki/extensions/Translate/i18n/pagetranslation/lfn.json
new file mode 100644
index 00000000..da414469
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/lfn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cgboeree",
+ "Robin van der Vliet"
+ ]
+ },
+ "tpt-languages-legend": "Otra linguas:",
+ "tpt-languages-nonzero": "$1 ($2% traduida)",
+ "tpt-aggregategroup-edit-description": "Descrive:"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/li.json b/www/wiki/extensions/Translate/i18n/pagetranslation/li.json
new file mode 100644
index 00000000..a1e8ef48
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/li.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ooswesthoesbes"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% euvergezatte)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/lo.json b/www/wiki/extensions/Translate/i18n/pagetranslation/lo.json
new file mode 100644
index 00000000..7111edbf
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/lo.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aefgh39622"
+ ]
+ },
+ "pt-movepage-logreason": "ສ່ວນຂອງໜ້າ \"$1\" ທີ່ສາມາດແປໄດ້",
+ "pt-deletepage-full-logreason": "ສ່ວນຂອງໜ້າ \"$1\" ທີ່ສາມາດແປໄດ້",
+ "pt-deletepage-lang-logreason": "ສ່ວນຂອງໜ້າແປຂອງ \"$1\""
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/lrc.json b/www/wiki/extensions/Translate/i18n/pagetranslation/lrc.json
index dac3f86a..241b0691 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/lrc.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/lrc.json
@@ -1,14 +1,15 @@
{
"@metadata": {
"authors": [
- "Mogoeilor"
+ "Mogoeilor",
+ "Lorestani"
]
},
"pagetranslation": "بلگه لرسن",
"tpt-diff-old": "متن دمایی",
"tpt-diff-new": "متن تازه",
"tpt-select-prioritylangs-reason": "دليل:",
- "tpt-languages-nonzero": "$1 ($2% والرشته بیه)",
+ "tpt-languages-nonzero": "$1 ($2% ڤالرشتٱ بیٱ)",
"tpt-tab-translate": "لرسن",
"tpt-aggregategroup-add": "اضاف كو",
"tpt-aggregategroup-save": "ذخيره كردن",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/lt.json b/www/wiki/extensions/Translate/i18n/pagetranslation/lt.json
index 41da08fd..897f9687 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/lt.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/lt.json
@@ -11,14 +11,19 @@
"action-pagetranslation": "valdyti išverstus puslapius",
"tpt-diff-old": "Ankstesnis tekstas",
"tpt-diff-new": "Naujas tekstas",
+ "tpt-submit": "Pažymėti šią versiją vertimui",
"tpt-sections-deleted": "Ištrinti vertimo vienetai",
"tpt-sections-template": "Vertimo puslapio šablonas",
"tpt-badtitle": "duotas puslapio pavadinimas ($1) nėra gera antraštė",
"tpt-nosuchpage": "Puslapio $1 neegzistuoja",
+ "tpt-oldrevision": "$2 nėra naujausia puslapio [[:$1]] versija.\nTik naujausios versijos gali būti pažymėtos vertimui.",
+ "tpt-notsuitable": "Puslapis $1 netinka vertimui.\nPatikrinkite, kad puslapis turi <nowiki><translate></nowiki> žymes ir tinkamą sintaksę.",
+ "tpt-offer-notify": "Galite <span class=\"plainlinks\">[$1 pranešti vertėjams]</span> apie šį puslapį.",
"tpt-mark-summary": "Ši versija pažymėta vertimui",
"tpt-edit-failed": "Nepavyko atnaujinti puslapio: $1",
"tpt-already-marked": "Šio puslapio naujausia versija jau yra pažymėta vertimui.",
"tpt-unmarked": "Puslapis $1 nebėra pažymėtas vertimams.",
+ "tpt-new-pages-title": "Puslapiai siūlomi vertimui",
"tpt-old-pages-title": "Puslapių vertimas",
"tpt-other-pages-title": "Sugadinti puslapiai",
"tpt-select-prioritylangs-reason": "Priežastis:",
@@ -26,12 +31,23 @@
"tpt-rev-mark": "Pažymėti vertimui",
"tpt-rev-unmark": "pašalinti iš vertimo",
"tpt-rev-encourage": "atkurti",
+ "tpt-rev-mark-tooltip": "Pažymėti naujausią šio puslapio versiją vertimui.",
+ "tpt-rev-unmark-tooltip": "Pašalinti šį puslapį iš vertimo.",
"translate-tag-translate-link-desc": "Versti šį puslapį",
"translate-tag-markthis": "Pažymėti šį puslapį vertimui",
+ "tpt-translation-intro-fuzzy": "Pasenę vertimai yra pažymėti kaip šis.",
"tpt-languages-legend": "Kitos kalbos:",
"tpt-languages-zero": "Pradėti šios kalbos vertimą",
"tpt-languages-nonzero": "$1 ($2% išversta)",
+ "tpt-tab-translate": "Versti",
+ "tpt-discouraged-language-force-header": "Šis puslapis negali būti išverstas į $1.",
+ "tpt-discouraged-language-force-content": "Vertimų administratorius nusprendė, kad šis puslapis gali būti išverstas tik į $1.",
+ "tpt-discouraged-language-header": "Vertimas į $1 nėra prioritetas šiam puslapiui.",
+ "tpt-discouraged-language-content": "Vertimų administratorius nusprendė sutelkti pastangas ties $1.",
+ "tpt-discouraged-language-force": "<strong>Šis puslapis negali būti išverstas į $2.</strong>\n\nVertimų administratorius nusprendė, kad šis puslapis gali būti išverstas tik į $3.",
+ "tpt-discouraged-language": "<strong>Vertimas į $2 nėra prioritetas šiam puslapiui.</strong>\n\nVertimų administratorius nusprendė sutelkti vertimų pastangas ties $3.",
"tpt-discouraged-language-reason": "Priežastis: $1",
+ "tpt-priority-languages": "Vertimų administratorius nustatė šios grupes prioritetines kalbas į $1.",
"aggregategroups": "Bendros grupės",
"tpt-aggregategroup-add": "Pridėti",
"tpt-aggregategroup-save": "Išsaugoti",
@@ -40,9 +56,37 @@
"tpt-aggregategroup-new-description": "Aprašymas (neprivaloma):",
"tpt-aggregategroup-remove-confirm": "Ar tikrai norite naikinti šią bendrą grupę?",
"tpt-aggregategroup-invalid-group": "Grupės nėra",
+ "tpt-aggregategroup-edit-name": "Pavadinimas:",
+ "tpt-aggregategroup-edit-description": "Aprašymas:",
+ "tpt-aggregategroup-update": "Išsaugoti",
+ "tpt-aggregategroup-update-cancel": "Atšaukti",
+ "tpt-invalid-group": "Negalima grupė",
"log-name-pagetranslation": "Puslapio vertimo žurnalas",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|pažymėtas}} $3 vertimui",
"logentry-pagetranslation-unmark": "$1 {{GENDER:$2|ištrintas}} $3 iš vertimo",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|baigė}} pervadinti puslapį, kurį galima versti, $3 į $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|susidūrė}} su problema keliant puslapį $3 į $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|baigė}} puslapio $3, kurį galima versti, trynima",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|nepavyko}} ištrinti $3, kuris priklauso puslapiui $4, kurį galima versti",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|baigė}} vertimo puslapio $3 trynimą",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|nepavyko}} ištrinti $3, kuris priklauso vertimo puslapiui $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|paskatino}} $3 vertimą",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|atkalbinėjo nuo}} $3 vertimo",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|pašalino}} prioritetines kalbas iš puslapio $3, kurį galima versti",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|nustatė}} prioritetines kalbas puslapiui, kurį galima versti, iš $3 į $5",
+ "log-action-filter-pagetranslation": "Veiklos tipas:",
+ "log-action-filter-pagetranslation-mark": "Pažymėti vertimui",
+ "log-action-filter-pagetranslation-unmark": "Pašalinimas iš vertimo",
+ "log-action-filter-pagetranslation-move": "Puslapio perkėlimai",
+ "log-action-filter-pagetranslation-delete": "Puslapio trynimai",
+ "log-action-filter-pagetranslation-encourage": "Vertimo skaitinimas",
+ "log-action-filter-pagetranslation-discourage": "Atkalbinėjimas nuo vertimo",
+ "log-action-filter-pagetranslation-prioritylanguages": "Prioritetinių kalbų modifikacija",
+ "pt-movepage-title": "Perkelti puslapį „$1“, kurį galima versti",
+ "pt-movepage-blockers": "Puslapis, kurį galima versti, negali būti perkeltas į naują pavadinimą dėl {{PLURAL:$1|šios klaidos|šių klaidų}}:",
+ "pt-movepage-list-pages": "Puslapių perkėlimui sąrašas",
+ "pt-movepage-list-translation": "Vertimo {{PLURAL:$1|puslapis|puslapiai}}",
+ "pt-movepage-list-count": "Viso $1 {{PLURAL:$1|puslapis|puslapiai}} perkėlimui.",
"pt-movepage-legend": "Perkelti išverčiamą puslapį",
"pt-movepage-current": "Dabartinis pavadinimas:",
"pt-movepage-new": "Naujas pavadinimas:",
@@ -51,11 +95,15 @@
"pt-movepage-action-check": "Patikrinkite, ar perkelti yra įmanoma",
"pt-movepage-action-perform": "Perkelti",
"pt-movepage-action-other": "Pakeisti taikinį",
+ "pt-movepage-logreason": "Dalis puslapio „$1“, kurį galima versti",
+ "pt-deletepage-invalid-title": "Nurodytas puslapis negalimas.",
+ "pt-deletepage-invalid-text": "Nurodytas puslapis nėra nei puslapis, kurį galima išversti, nei vertimų puslapis.",
"pt-deletepage-action-check": "Sąrašą puslapių kurie turi būti ištrinti.",
"pt-deletepage-action-perform": "Padaryti trynimą",
"pt-deletepage-action-other": "Pakeisti taikinį",
"pt-deletepage-lang-legend": "Ištrinti vertimo puslapį",
"pt-deletepage-full-legend": "Ištrinti išverčiama puslapį",
+ "pt-deletepage-any-legend": "Ištrinti puslapį, kurį galima išversti, ar vertimų puslapį",
"pt-deletepage-current": "Puslapio pavadinimas:",
"pt-deletepage-reason": "Priežastis:",
"pt-deletepage-subpages": "Ištrinti visus subpuslapius",
@@ -63,8 +111,35 @@
"pt-deletepage-list-translation": "Vertimo puslapiai",
"pt-deletepage-list-section": "Vertimo vieneto puslapiai",
"pt-deletepage-list-other": "Kiti subpuslapiai",
- "pt-deletepage-full-logreason": "Dalis išverčiamo puslapio $1.",
- "pt-deletepage-lang-logreason": "Dalis vertimo puslapio $1.",
+ "pt-deletepage-list-count": "Viso $1 {{PLURAL:$1|puslapis|puslapiai}} trynimui.",
+ "pt-deletepage-full-logreason": "Dalis išverčiamo puslapio „$1“",
+ "pt-deletepage-lang-logreason": "Dalis verčiamo puslapio „$1“",
+ "pagemigration": "Vertimo puslapio migracija",
+ "pm-import-button-label": "Importuoti",
+ "pm-savepages-button-label": "Išsaugoti",
+ "pm-cancel-button-label": "Atšaukti",
+ "pm-page-does-not-exist": "$1 neegzistuoja.",
+ "pm-old-translations-missing": "$1 neturi senų vertimų.",
+ "pm-pagename-missing": "Prašome įvesti puslapio pavadinimą.",
+ "pm-add-icon-hover-text": "Pridėti vienetą žemiau",
+ "pm-swap-icon-hover-text": "Apkeisti su vienetu žemiau",
+ "pm-delete-icon-hover-text": "Trinti vienetą",
+ "pm-pagetitle-placeholder": "Įveskite puslapio pavadinimą",
+ "pm-pagetitle-invalid": "Prašome įvesti galiojantį puslapio pavadinimą. Jis turėtų būti <page-name>/<language-code> formatu",
+ "pm-pagetitle-missing": "Prašome įvesti puslapio pavadinimą.",
+ "tpt-translate-title": "Leisti puslapio pavadinimo vertimus",
+ "pp-save-summary": "Puslapis paruoštas vertimui",
+ "pagepreparation": "Paruošti puslapį vertimui",
+ "pp-pagename-placeholder": "Įveskite puslapio pavadinimą",
+ "pp-prepare-button-label": "Paruošti",
+ "pp-save-button-label": "Išsaugoti",
+ "pp-cancel-button-label": "Atšaukti",
+ "pp-save-message": "Puslapis buvo išsaugotas. Galite jį [$1 redaguoti].",
+ "pp-pagename-missing": "Prašome įvesti puslapio pavadinimą.",
+ "pp-diff-old-header": "Šaltinio tekstas",
+ "pp-diff-new-header": "Paruoštas tekstas",
+ "tpt-unlink-button": "Pašalinti iš vertimo",
+ "tpt-unlink-summary": "Puslapis pašalintas iš vertimo",
"tpt-generic-confirm": "Prašome patvirtinti šį veiksmą.",
"tpt-generic-button": "Patvirtinti"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/lv.json b/www/wiki/extensions/Translate/i18n/pagetranslation/lv.json
index 089cb5b1..849da377 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/lv.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/lv.json
@@ -7,9 +7,6 @@
"pagetranslation": "Lapas tulkošana",
"right-pagetranslation": "Atzīmēt lapu versijas tulkošanai",
"action-pagetranslation": "pārvaldīt tulkojamās lapas",
- "tpt-desc": "Paplašinājums satura lapu tulkošanai",
- "tpt-template": "Lapas veidne",
- "tpt-templatediff": "Lapas veidne tika izmainīta.",
"tpt-diff-old": "Iepriekšējais teksts",
"tpt-diff-new": "Jaunais teksts",
"tpt-submit": "Atzīmēt šo versiju tulkošanai",
@@ -17,9 +14,13 @@
"tpt-nosuchpage": "Lapa $1 nepastāv",
"tpt-select-prioritylangs-reason": "Iemesls:",
"tpt-sections-prioritylangs": "Prioritārās valodas",
+ "tpt-rev-mark": "atzīmēt tulkošanai",
"translate-tag-translate-link-desc": "Tulkot šo lapu",
+ "translate-tag-markthis": "Atzīmēt šo lapu tulkošanai",
+ "translate-tag-hasnew": "Šī lapa satur <span class=\"plainlinks\">[$1 izmaiņas]</span>, kuras nav atzīmētas tulkošanai.",
"tpt-translation-intro": "Šī lapa ir <span class=\"plainlinks\">[$1 tulkota versija]</span> no lapas [[$2]] un tulkojums ir pabeigts par $3%.",
"tpt-languages-legend": "Citas valodas:",
+ "tpt-languages-separator": "&#160;•&#32;",
"tpt-languages-nonzero": "$1 ($2% iztulkots)",
"tpt-tab-translate": "Tulkot",
"tpt-discouraged-language-reason": "Iemesls: $1",
@@ -27,6 +28,10 @@
"tpt-aggregategroup-save": "Saglabāt",
"tpt-aggregategroup-new-name": "Nosaukums:",
"tpt-aggregategroup-new-description": "Apraksts (nav obligāts):",
+ "tpt-aggregategroup-edit-description": "Apraksts:",
+ "tpt-aggregategroup-update": "Saglabāt",
+ "tpt-aggregategroup-update-cancel": "Atcelt",
+ "tpt-invalid-group": "Nederīga grupa",
"log-name-pagetranslation": "Lapu tulkošanas žurnāls",
"pt-movepage-list-pages": "Pārvietojamo lapu saraksts",
"pt-movepage-list-translation": "Tulkojuma {{PLURAL:$1|lapas|lapa|lapas}}",
@@ -38,13 +43,17 @@
"pt-movepage-action-check": "Pārbaudīt, vai ir iespējams pārvietot",
"pt-movepage-action-perform": "Nepārvietot",
"pt-movepage-action-other": "Mainīt mērķi",
- "pt-movepage-logreason": "Daļa no tulkojamas lapas $1.",
+ "pt-movepage-logreason": "Daļa no tulkojamas lapas \"$1\"",
+ "pt-deletepage-action-perform": "Veikt dzēšanu",
+ "pt-deletepage-action-other": "Mainīt mērķi",
"pt-deletepage-current": "Lapas nosaukums:",
"pt-deletepage-reason": "Iemesls:",
"pt-deletepage-subpages": "Dzēst visas apakšlapas",
"pt-deletepage-list-pages": "Dzēšamo lapu saraksts",
"pt-deletepage-list-translation": "Tulkojuma lapas",
"pt-deletepage-list-other": "Citas apakšlapas",
- "pm-langcode-placeholder": "Valodas kods",
+ "pm-savepages-button-label": "Saglabāt",
+ "pm-cancel-button-label": "Atcelt",
+ "pm-page-does-not-exist": "$1 nepastāv.",
"pp-cancel-button-label": "Atcelt"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/lzz.json b/www/wiki/extensions/Translate/i18n/pagetranslation/lzz.json
new file mode 100644
index 00000000..1ba52bbd
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/lzz.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cem Rize"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% çevrildi)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/mai.json b/www/wiki/extensions/Translate/i18n/pagetranslation/mai.json
index 9ebdc6bf..8168f02e 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/mai.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/mai.json
@@ -4,5 +4,5 @@
"बिप्लब आनन्द"
]
},
- "tpt-languages-nonzero": "$1 ($2% अनूदित)"
+ "tpt-languages-nonzero": "$1 ($2% अनुवादित)"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/min.json b/www/wiki/extensions/Translate/i18n/pagetranslation/min.json
index b8534b0c..06d8d78c 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/min.json
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/i18n/pagetranslation/mk.json b/www/wiki/extensions/Translate/i18n/pagetranslation/mk.json
index c269abd3..3818f97e 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/mk.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/mk.json
@@ -8,12 +8,9 @@
"pagetranslation": "Превод на страници",
"right-pagetranslation": "Обележување на верзии на страници за преведување",
"action-pagetranslation": "раководење со преводливи страници",
- "tpt-desc": "Додаток за преведување на страници со содржини",
"tpt-section": "Преводна единица $1",
"tpt-section-new": "Нова преводна единица.\nНазив: $1",
"tpt-section-deleted": "Преводна единица $1",
- "tpt-template": "Шаблон за страница",
- "tpt-templatediff": "Шаблонот за страницата е променет.",
"tpt-diff-old": "Претходен текст.",
"tpt-diff-new": "Нов текст",
"tpt-submit": "Обележи ја оваа верзија на преводот",
@@ -26,8 +23,8 @@
"tpt-oldrevision": "$2 не е најнова верзија на страницата [[:$1]].\nСамо најновите верзии можат да се обележуваат за преведување.",
"tpt-notsuitable": "Страницата $1 не е погодна за преведување.\nПроверете дали има ознаки <nowiki><translate></nowiki> и дали има правилна синтакса.",
"tpt-saveok": "Оваа страница [[:$1]] е обележана за преведување со $2 {{PLURAL:$2|преводна единица|преводни единици}}.\nСтраницата сега може да се <span class=\"plainlinks\">[$3 преведува]</span>.",
+ "tpt-saveok-first": "Можете да [[Special:PageMigration|увезете постоечки превод]] за оваа страница (ако го има).",
"tpt-offer-notify": "Можете да ги <span class=\"plainlinks\">[$1 известите преведувачите]</span> за оваа страница.",
- "tpt-badsect": "„$1“ е погрешно име за преводната единица $2.",
"tpt-showpage-intro": "Подолу се наведени нови, постоечки и избришани преводни единици.\nПред да ја обележите оваа верзија за преведување, проверете дали промените во деловите се сведени на минимум со што би се избегнала непотреба работа за преведувачите.",
"tpt-mark-summary": "Ја означи оваа верзија за преведување",
"tpt-mark-nochanges": "Нема промени за оценување. Ако ја означите страницава за преведување, истата нема да можете да ја измените, а истото важи за било која друга постоечка преводна единица.",
@@ -61,6 +58,7 @@
"translate-tag-markthisagain": "Оваа страница има <span class=\"plainlinks\">[$1 промени]</span> од последниот пат кога <span class=\"plainlinks\">[$2 обележана за преведување]</span>.",
"translate-tag-hasnew": "Оваа страница содржи <span class=\"plainlinks\">[$1 промени]</span> кои не се обележани за преведување.",
"tpt-translation-intro": "Оваа страница е <span class=\"plainlinks\">[$1 преведена верзија]</span> на страницата [[$2]], а преводот е $3% потполн и тековен.",
+ "tpt-translation-intro-fuzzy": "Застарените преводи се обележуваат вака.",
"tpt-languages-legend": "Други јазици:",
"tpt-languages-separator": "&#160;•&#32;",
"tpt-languages-zero": "Почнете превод на овој јазик",
@@ -79,7 +77,6 @@
"tpt-discouraged-language-reason": "Причина: $1",
"tpt-priority-languages": "Преводен администратор на групата ѝ ги зададе приоритетните јазици: $1.",
"tpt-render-summary": "Обнова за усогласување со новата верзија на изворната страница",
- "tpt-download-page": "Извези страница со преводи",
"aggregategroups": "Збирни групи",
"tpt-aggregategroup-add": "Додај",
"tpt-aggregategroup-save": "Зачувај",
@@ -102,7 +99,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",
@@ -116,6 +113,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ги ограничи}} јазиците на преводливата страница $3 на $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|ја додаде}} преводливата страница $3 во збирната група $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|ја острани}} преводливата страница $3 од збирната група $4",
+ "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-encourage": "Поттик за преведување",
+ "log-action-filter-pagetranslation-discourage": "Одвраќање од преведување",
+ "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]]“ постои.",
@@ -129,6 +135,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": "Премести преводлива страница",
@@ -140,8 +148,8 @@
"pt-movepage-action-perform": "Изврши преместување",
"pt-movepage-action-other": "Смени цел",
"pt-movepage-intro": "Оваа службена страница ви овозможува да преместувате страници обележани за преведување.\nСамото преместување нема да се случи веднаш, бидејќи треба да се преместат голем број на страници.\nПреместувањето ќе се води по редица на задачи.\nДодека се преместуваат страниците, со нив нема да може да се работи.\nНеуспешните ќе бидат заведени во [[Special:Log/pagetranslation|дневникот на преводи на страници]] и тие ќе треба да се поправаат рачно.",
- "pt-movepage-logreason": "Дел од преводливата страница $1.",
- "pt-movepage-started": "Страницата сега е преместена.\nПроверете дали [[Special:Log/pagetranslation|дневникот на преводи на страници]] има пријавено грешки и порака за завршена задача.",
+ "pt-movepage-logreason": "Дел од преводливата страница „$1“.",
+ "pt-movepage-started": "Погледајте го [[Special:Log/pagetranslation|дневникот со преводи на страници]] за грешки и порака при завршувањето.",
"pt-locked-page": "Оваа страница е заклучена бидејќи е во тек преместување на преводлива страница.",
"pt-deletepage-lang-title": "Бришење на страницата со превод „$1“.",
"pt-deletepage-full-title": "Бришење на преводливата страница „$1“.",
@@ -161,8 +169,8 @@
"pt-deletepage-list-section": "Страници за преводни единици",
"pt-deletepage-list-other": "Други потстраници",
"pt-deletepage-list-count": "Вкупно $1 {{PLURAL:$1|страница|страници}} за бришење.",
- "pt-deletepage-full-logreason": "Дел од преводливата страница $1.",
- "pt-deletepage-lang-logreason": "Дел од страницата со превод $1.",
+ "pt-deletepage-full-logreason": "Дел од преводливата страница „$1“.",
+ "pt-deletepage-lang-logreason": "Дел од страницата со превод „$1“.",
"pt-deletepage-started": "Погледајте го [[Special:Log/pagetranslation|дневникот со преводи на страници]] за грешки и порака при завршувањето.",
"pt-deletepage-intro": "Оваа службена страница овозможува бришење на цела преводлива страница или поединечна страница за превод на некој јазик.\nБришењето не делува веднаш, бидејќи ќе се бришат и сите страници што зависат од неа.\nНеуспешните обиди ќе се заведуваат во [[Special:Log/pagetranslation|дневникот на страници за превод]] и ќе треба да се исправаат рачно.",
"pagemigration": "Селење на преводни страници",
@@ -170,18 +178,20 @@
"pm-import-button-label": "Увези",
"pm-savepages-button-label": "Зачувај",
"pm-cancel-button-label": "Откажи",
- "pm-pagename-placeholder": "Внесете име на страницата",
- "pm-langcode-placeholder": "Јазичен код",
"pm-page-does-not-exist": "$1 не постои",
"pm-old-translations-missing": "$1 не содржи стари преводи",
"pm-extra-units-warning": "Може да има дополнителни единици. Погрижете се да соодветствуваат единиците во изворниот текст и преводот",
"pm-pagename-missing": "Внесете име на страница",
- "pm-langcode-missing": "Внесете јазичен код",
"pm-add-icon-hover-text": "Додај единица подолу",
"pm-swap-icon-hover-text": "Замени ја единицата подолу",
"pm-delete-icon-hover-text": "Избриши единица",
- "pm-pagetitle-invalid": "Внесетре важечки наслов на страницата",
+ "pm-pagetitle-placeholder": "Внесете има на страницата",
+ "pm-pagetitle-invalid": "Внесетре важечки наслов на страницата. Треба да биде во форматот <page-name>/<language-code>.",
+ "pm-pagetitle-missing": "Внесете име на страница.",
+ "pm-langcode-missing": "Во насловот недостасува јазичниот код. Внесете наслов во форматот <page-name>/<language-code>.",
"pm-summary-import": "Увезен превод користејќи [[Special:PageMigration|преселба на страници]]",
+ "pm-on-import-message-text": "Старите преводи се увезени. Послужете се со можностите за додавање, замена и бришење за да ги прилагодите преводните единици и стиснете на копчето „{{int:pm-savepages-button-label}}“ за да ги зачувате. Стиснете на копчето „{{int:pm-cancel-button-label}}“ за да ги отфрлите.",
+ "pm-on-save-message-text": "Преводните единици се зачувани. Сега можете да внесете наслов на новата преводна страница за да ја преселите, или да направите измени во единиците подолу и да зачувате нова преработка.",
"tpt-translate-title": "Дозволи превод на насловот на страницата",
"pp-save-summary": "Подготвена страница за превод",
"pagepreparation": "Подготвена страница за превод",
@@ -197,5 +207,7 @@
"pp-diff-new-header": "Подготвен текст",
"tpt-unlink-confirm": "Потврдете дека навистина сакате да ја отстраните страницава од преводниот систем.\nЈазичниот избирач и преведените имиња на страниците ќе престанат да работат.\nПреводните страници ќе станат уредливи.",
"tpt-unlink-button": "Отстрани од преводот",
- "tpt-unlink-summary": "Отстранета страница од преводот"
+ "tpt-unlink-summary": "Отстранета страница од преводот",
+ "tpt-generic-confirm": "Потврдете го дејството.",
+ "tpt-generic-button": "Потврди"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ml.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ml.json
index a47b1043..06f9544a 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ml.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ml.json
@@ -9,12 +9,9 @@
"pagetranslation": "താളിന്റെ പരിഭാഷ",
"right-pagetranslation": "താളുകളുടെ പതിപ്പുകൾ പരിഭാഷക്കായി അടയാളപ്പെടുത്തുക",
"action-pagetranslation": "പരിഭാഷപ്പെടുത്താവുന്ന താളുകൾ കൈകാര്യം ചെയ്യുക",
- "tpt-desc": "ഉള്ളടക്ക താളുകൾ പരിഭാഷപ്പെടുത്തുന്നതിനുള്ള അനുബന്ധം",
"tpt-section": "പരിഭാഷാ ഘടകം $1",
"tpt-section-new": "പുതിയ പരിഭാഷാ ഘടകം.\nപേര്: $1",
"tpt-section-deleted": "പരിഭാഷാ ഘടകം $1",
- "tpt-template": "താൾ ഫലകം",
- "tpt-templatediff": "താളിന്റെ ഘടന മാറിയിരിക്കുന്നു.",
"tpt-diff-old": "പഴയ എഴുത്ത്",
"tpt-diff-new": "പുതിയ എഴുത്ത്",
"tpt-submit": "ഈ പതിപ്പ് പരിഭാഷയ്ക്കായി അടയാളപ്പെടുത്തുക",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/mni.json b/www/wiki/extensions/Translate/i18n/pagetranslation/mni.json
new file mode 100644
index 00000000..4c5e41a3
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/mni.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Awangba Mangang"
+ ]
+ },
+ "tpt-languages-nonzero": "$1($2% ꯍꯟꯗꯣꯛꯂꯦ)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/mnw.json b/www/wiki/extensions/Translate/i18n/pagetranslation/mnw.json
new file mode 100644
index 00000000..1003ba62
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/mnw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Htawmonzel"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ကၠာဲစၠောအ်လဝ်)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/mo.json b/www/wiki/extensions/Translate/i18n/pagetranslation/mo.json
new file mode 100644
index 00000000..a3a0406f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/mo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cybernenea11"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% традусэ)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/mr.json b/www/wiki/extensions/Translate/i18n/pagetranslation/mr.json
index 0486c2b8..d3daab6e 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/mr.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/mr.json
@@ -9,12 +9,9 @@
"pagetranslation": "भाषांतराची पाने.",
"right-pagetranslation": "पानांच्या भाषांतरासाठी असलेल्या आवृत्त्यांवर खूण करा",
"action-pagetranslation": "भाषांतरासाठी असलेल्या पानांचे व्यवस्थापन करा",
- "tpt-desc": "आशय-पानांच्या भाषांतरासाठी असलेले विस्तारक",
"tpt-section": "भाषांतर एकक $1",
"tpt-section-new": "नविन भाषांतर एकक.\nनाव:$1",
"tpt-section-deleted": "भाषांतर एकक $1",
- "tpt-template": "पृष्ठ साचा",
- "tpt-templatediff": "पृष्ठ साचा बदलला आहे.",
"tpt-diff-old": "पूर्वीचा मजकूर",
"tpt-diff-new": "नविन मजकूर",
"tpt-submit": "या आवृत्तीस 'भाषांतरासाठी' म्हणून खूण करा",
@@ -28,7 +25,6 @@
"tpt-notsuitable": "पान $1 हे भाषांतरासाठी अनुकुल नाही.\nयाची खात्री करा कि त्यात,<nowiki><translate></nowiki>ही खूणपताका आहे व त्यात वैध वाक्यरचना आहे.",
"tpt-saveok": "पान [[:$1]] हे $2 {{PLURAL:$2|भाषांतर एककाला|भाषांतर एककांना}} भाषांतरासाठी नेमून दिले आहे.त्या पानाचे आता<span class=\"plainlinks\">[$3 भाषांतर करता येते]</span>.",
"tpt-offer-notify": "आपण या पानाबाबत <span class=\"plainlinks\">[$1 भाषांतरकारांना सूचना देउ शकता]</span>",
- "tpt-badsect": "\"$1\" हे भाषांतर एकक $2 साठी वैध नाव नाही.",
"tpt-showpage-intro": "खाली नविन, अस्तित्वातील व वगळलेली भाषांतर एककांची यादी आहे.ही आवृत्ती भाषांतरासाठी म्हणून खूण करण्यापूर्वी,भाषांतरकारांचे अवाजवी काम टाळण्यासाठी, हे तपासा कि भाषांतर एककात कमीतकमी बदल आहेत.",
"tpt-mark-summary": "या आवृत्तीवर 'भाषांतरासाठी' म्हणून खूण केली",
"tpt-edit-failed": "पानाचे अद्यतन करता आले नाही:$1",
@@ -73,7 +69,6 @@
"tpt-discouraged-language-reason": "कारण:$1",
"tpt-priority-languages": "भाषांतर प्रशासकाने, या गटाची $1 ही प्राथमिकता-भाषा निश्चित केली आहे.",
"tpt-render-summary": "स्रोत-पानाच्या नविन आवृत्तीस अनुरुपनासाठी अद्यतन करीत आहे.",
- "tpt-download-page": "भाषांतरीत पानास निर्यात करा",
"aggregategroups": "एकवित गट",
"tpt-aggregategroup-add": "जोडा",
"tpt-aggregategroup-save": "जतन करा",
@@ -110,15 +105,13 @@
"pm-import-button-label": "आयात करा",
"pm-savepages-button-label": "जतन करा",
"pm-cancel-button-label": "रद्द करा",
- "pm-pagename-placeholder": "पानाचे नाव टाका",
- "pm-langcode-placeholder": "भाषा संकेत (कोड)",
"pm-page-does-not-exist": "$1 अस्तीत्वात नाही",
"pm-old-translations-missing": "$1 मध्ये जूनी भाषांतरे नाहीत",
"pm-pagename-missing": "कृपया पानाचे नाव टाका",
- "pm-langcode-missing": "कृपया भाषासंकेत टाका",
"pm-add-icon-hover-text": "खाली एकक जोडा",
"pm-delete-icon-hover-text": "एकक वगळा",
"pm-pagetitle-invalid": "कृपया वैध पान शिर्षक टाका",
+ "pm-langcode-missing": "कृपया भाषासंकेत टाका",
"tpt-translate-title": "पान शिर्षकाच्या भाषांतरास परवानगी द्या",
"pp-save-summary": "भाषांतरासाठी पान तयार केले",
"pagepreparation": "भाषांतरासाठी पान तयार करा",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ms.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ms.json
index 6dd5c013..05095f38 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ms.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ms.json
@@ -2,18 +2,17 @@
"@metadata": {
"authors": [
"Anakmalaysia",
- "Pizza1016"
+ "Pizza1016",
+ "Muhdnurhidayat",
+ "Jeluang Terluang"
]
},
"pagetranslation": "Penterjemahan laman",
"right-pagetranslation": "Menandai versi-versi laman untuk diterjemah",
"action-pagetranslation": "menguruskan halaman-halaman yang boleh diterjemah",
- "tpt-desc": "Sambungan untuk menterjemah laman-laman kandungan",
"tpt-section": "Unit penterjemahan $1",
"tpt-section-new": "Unit penterjemahan baru.\nNama: $1",
"tpt-section-deleted": "Unit penterjemahan $1",
- "tpt-template": "Templat laman",
- "tpt-templatediff": "Templat laman telah berubah.",
"tpt-diff-old": "Teks sebelumnya",
"tpt-diff-new": "Teks baru",
"tpt-submit": "Tandai versi ini untuk diterjemah",
@@ -27,7 +26,6 @@
"tpt-notsuitable": "Laman $1 tidak sesuai untuk diterjemah.\nPastikan ia ada tag <nowiki><translate></nowiki> dan sintaks yang sah.",
"tpt-saveok": "Laman [[:$1]] telah ditandai untuk penterjemahan dengan $2 unit penterjemahan.\nLaman ini kini boleh <span class=\"plainlinks\">[$3 diterjemah]</span>.",
"tpt-offer-notify": "Anda boleh <span class=\"plainlinks\">[$1 memaklumkan para penterjemah]</span> tentang halaman ini.",
- "tpt-badsect": "\"$1\" bukan nama yang sah untuk unit penterjemahan $2.",
"tpt-showpage-intro": "Di bawah tersenarainya unit-unit terjemahan yang baru, sedia ada dan terhapus.\nSebelum menandai versi ini untuk diterjemah, pastikan supaya perubahan kepada unit terjemahan diminimumkan untuk mengelakkan beban yang tidak perlu untuk penterjemah.",
"tpt-mark-summary": "Menandakan versi ini untuk diterjemah",
"tpt-mark-nochanges": "Tiada perbezaan antara semakan ini dengan semakan tertanda yang terdahulu.",
@@ -61,6 +59,7 @@
"translate-tag-markthisagain": "Laman ini mengalami <span class=\"plainlinks\">[$1 perubahan]</span> sejak kali terakhir <span class=\"plainlinks\">[$2 ditandai untuk diterjemah]</span>.",
"translate-tag-hasnew": "Laman ini mengalami <span class=\"plainlinks\">[$1 perubahan]</span> yang belum ditandai untuk diterjemah.",
"tpt-translation-intro": "Laman ini merupakan <span class=\"plainlinks\">[$1 versi terjemahan]</span> laman [[$2]] dan penterjemahannya $3% siap.",
+ "tpt-translation-intro-fuzzy": "Terjemahan yang lapuk ditandai sebegini.",
"tpt-languages-legend": "Bahasa lain:",
"tpt-languages-separator": "&#160;•&#32;",
"tpt-languages-zero": "Mulakan terjemahan dalam bahasa ini",
@@ -78,7 +77,6 @@
"tpt-discouraged-language-reason": "Sebab: $1",
"tpt-priority-languages": "Seorang penyelia penterjemahan telah menetapkan bahasa-bahasa utama kumpulan ini kepada: $1",
"tpt-render-summary": "Mengemas kini agar sepadan dengan versi baru laman sumber",
- "tpt-download-page": "Eksport laman dengan terjemahan",
"aggregategroups": "Kumpulan agregat",
"tpt-aggregategroup-add": "Tambahkan",
"tpt-aggregategroup-save": "Simpan",
@@ -117,7 +115,7 @@
"pt-movepage-block-tp-exists": "Laman penterjemahan sasaran [[:$2]] wujud.",
"pt-movepage-block-tp-invalid": "Tajuk laman penterjemahan sasaran untuk [[:$1]] adalah tidak sah (terlalu panjang?).",
"pt-movepage-block-section-exists": "Halaman sasaran \"[[:$2]]\" untuk unit terjemahan itu wujud.",
- "pt-movepage-block-section-invalid": "Tajuk halaman sasaran \"[[:$1]]\" untuk unit terjemahan adalah itu tidak sah (terlalu panjang?).",
+ "pt-movepage-block-section-invalid": "Tajuk halaman sasaran \"[[:$1]]\" untuk unit terjemahan itu adalah tidak sah (terlalu panjang?).",
"pt-movepage-block-subpage-exists": "Sublaman sasaran [[:$2]] wujud.",
"pt-movepage-block-subpage-invalid": "Tajuk sublaman sasaran untuk [[:$1]] adalah tidak sah (terlalu panjang?).",
"pt-movepage-list-pages": "Senarai laman untuk dipindahkan",
@@ -135,7 +133,7 @@
"pt-movepage-action-other": "Tukar sasaran",
"pt-movepage-intro": "Laman khas ini membolehkan anda untuk memindahkan laman-laman yang ditandai untuk diterjemah.\nTindakan pemindahan itu tidak meninggalkan kesan segera, kerana banyak laman yang perlu dipindahkan.\nSementara laman-laman berkenaan dipindahkan, anda tidak boleh berinteraksi dengan laman-laman yang terlibat.\nKegagalan akan dilogkan dalam [[Special:Log/pagetranslation|log penterjemahan laman]] dan perlu dibaiki dengan tangan.",
"pt-movepage-logreason": "Sebahagian laman boleh terjemah $1.",
- "pt-movepage-started": "Laman asas kini telah dipindahkan.\nSila periksa [[Special:Log/pagetranslation|log penterjemahan laman]] untuk ralat dan mesej penyiapan.",
+ "pt-movepage-started": "Sila periksa [[Special:Log/pagetranslation|log penterjemahan laman]] sekali-sekala untuk ralat dan mesej penyiapan.",
"pt-locked-page": "Laman ini dikunci kerana laman boleh terjemah yang terlibat kini sedang dipindahkan.",
"pt-deletepage-lang-title": "Menghapuskan laman penterjemahan $1.",
"pt-deletepage-full-title": "Menghapuskan laman boleh terjemah $1.",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/mwl.json b/www/wiki/extensions/Translate/i18n/pagetranslation/mwl.json
new file mode 100644
index 00000000..358ad84f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/mwl.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "MokaAkashiyaPT",
+ "Athena in Wonderland"
+ ]
+ },
+ "translate-tag-translate-link-desc": "Traduzir esta páigina",
+ "tpt-languages-nonzero": "$1 ($2% traduzida)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/my.json b/www/wiki/extensions/Translate/i18n/pagetranslation/my.json
index d0aed8b7..89c2828a 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/my.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/my.json
@@ -1,8 +1,106 @@
{
"@metadata": {
"authors": [
- "Ninjastrikers"
+ "Ninjastrikers",
+ "Dr Lotus Black"
]
},
- "tpt-languages-nonzero": "$1 ($2% ဘာသာပြန်ပြီး)"
+ "pagetranslation": "စာမျက်နှာ ဘာသာပြန်ခြင်း",
+ "right-pagetranslation": "စာမျက်နှာများ၏ဗားရှင်းကို ဘာသာပြန်အတွက် မှတ်သားရန်",
+ "action-pagetranslation": "ဘာသာပြန်နိုင်သော စာမျက်နှာများကို စီမံရန်",
+ "tpt-diff-old": "ယခင်စာသား",
+ "tpt-diff-new": "ရှေ့စာသား",
+ "tpt-submit": "ဤဗားရှင်းကို ဘာသာပြန်အတွက် မှတ်သားရန်",
+ "tpt-nosuchpage": "စာမျက်နှာ $1 မတည်ရှိပါ",
+ "tpt-mark-summary": "ဤဗားရှင်းကို ဘာသာပြန်အတွက် မှတ်သားခဲ့သည်",
+ "tpt-edit-failed": "ဤစာမျက်နှာကို မမွမ်းမံနိုင်ပါ: $1",
+ "tpt-already-marked": "ဤစာမျက်နှာ၏ နောက်ဆုံးဗားရှင်းကို ဘာသာပြန်ရန်အတွက် မှတ်သားပြီးဖြစ်သည်။",
+ "tpt-new-pages-title": "ဘာသာပြန်အတွက် အဆိုပြုထားသော စာမျက်နှာများ",
+ "tpt-old-pages-title": "ဘာသာပြန်ရှိ စာမျက်နှာများ",
+ "tpt-other-pages-title": "ကျိုးပျက်နေသော စာမျက်နှာများ",
+ "tpt-select-prioritylangs-reason": "အ​ကြောင်း​ပြ​ချက်:",
+ "tpt-sections-prioritylangs": "ဦးစားပေး ဘာသာစကားများ",
+ "tpt-rev-mark": "ဘာသာပြန်အတွက် မှတ်သားရန်",
+ "tpt-rev-unmark": "ဘာသာပြန်မှ ဖယ်ရှားရန်",
+ "tpt-rev-mark-tooltip": "ဤစာမျက်နှာ၏ နောက်ဆုံးဗားရှင်း ဘာသာပြန်အတွက် မှတ်သားရန်",
+ "tpt-rev-unmark-tooltip": "ဘာသာပြန်မှ ဤစာမျက်နှာအား ဖယ်ရှားရန်",
+ "tpt-rev-encourage-tooltip": "ဤစာမျက်နှာကို ပုံမှန်ဘာသာပြန်ခြင်းသို့ ပြန်ထားရန်။",
+ "translate-tag-translate-link-desc": "ဤစာမျက်နှာကို ဘာသာပြန်ပါ",
+ "translate-tag-markthis": "ဘာသာပြန်ခြင်းအတွက် ဤစာမျက်နှာကို မှတ်သားရန်",
+ "tpt-translation-intro-fuzzy": "ခေတ်နောက်ကျသော ဘာသာပြန်များကို ဤကဲ့သို့ မှတ်သားထားသည်။",
+ "tpt-languages-legend": "အခြားဘာသာစကားများ:",
+ "tpt-languages-zero": "ဤဘာသာစကားအတွက် ဘာသာပြန်ခြင်း စတင်ရန်",
+ "tpt-languages-nonzero": "$1 ($2% ဘာသာပြန်ပြီး)",
+ "tpt-tab-translate": "ဘာသာပြန်ပါ",
+ "tpt-translation-restricted": "ဤစာမျက်ကို ဤဘာသာစကားသို့ ဘာသာပြန်ခြင်းကို ဘာသာပြန် စီမံခန့်ခွဲသူတစ်ဦးမှ တားဆီးထားသည်။\n\nအကြောင်းပြချက်: $1",
+ "tpt-discouraged-language-force-header": "ဤစာမျက်နှာကို $1 သို့ ဘာသာမပြန်နိုင်ပါ",
+ "tpt-discouraged-language-force-content": "ဤစာမျက်နှာကို $1 တစ်ခုတည်းသို့သာ ဘာသာပြန်နိုင်သည်ဟု ဘာသာပြန် စီမံခန့်ခွဲသူတစ်ဦးက ဆုံးဖြတ်ခဲ့သည်။",
+ "tpt-discouraged-language-header": "$1 သို့ ဘာသာပြန်ခြင်းသည် ဤစာမျက်နှာအတွက် ဦးစားပေးမဟုတ်ပါ။",
+ "tpt-discouraged-language-content": "ဘာသာပြန် စီမံခန့်ခွဲသူတစ်ဦးမှ ဘာသာပြန်ခြင်းကို $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",
+ "tpt-priority-languages": "ဘာသာပြန် စီမံခန့်ခွဲသူတစ်ဦးက ဤအုပ်စုအတွက် ဦးစားပေးဘာသာစကားများကို $1 သို့ သတ်မှတ်ထားသည်။",
+ "aggregategroups": "စုပေါင်း အုပ်စုများ",
+ "tpt-aggregategroup-add": "ပေါင်းထည့်ရန်",
+ "tpt-aggregategroup-save": "သိမ်းရန်",
+ "tpt-aggregategroup-add-new": "စုပေါင်းအုပ်စု အသစ်တစ်ခု ပေါင်းထည့်ရန်",
+ "tpt-aggregategroup-new-name": "အမည်:",
+ "tpt-aggregategroup-new-description": "ဖော်ပြချက် (မထည့်လည်းရသည်)",
+ "tpt-aggregategroup-remove-confirm": "ဤစုပေါင်းအုပ်စုကို ဖျက်လိုသည်မှာ သေချာပါသလား?",
+ "tpt-aggregategroup-invalid-group": "အုပ်စု မတည်ရှိပါ",
+ "tpt-aggregategroup-edit-name": "အမည်:",
+ "tpt-aggregategroup-edit-description": "ဖော်ပြချက်:",
+ "tpt-aggregategroup-update": "သိမ်းရန်",
+ "tpt-aggregategroup-update-cancel": "မလုပ်တော့ပါ",
+ "log-description-pagetranslation": "စာမျက်နှာ ဘာသာပြန်စနစ်နှင့်ဆက်နွယ်သော လုပ်ဆောင်ချက်များ၏ မှတ်တမ်း",
+ "log-name-pagetranslation": "စာမျက်နှာဘာသာပြန်မှု မှတ်တမ်း",
+ "logentry-pagetranslation-mark": "$1 က $3 ကို ဘာသာပြန်အတွက် {{GENDER:$2|မှတ်သားခဲ့သည်}}",
+ "logentry-pagetranslation-unmark": "$1 က $3 ကို ဘာသာပြန်မှ {{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": "စာမျက်နှာ ဖျက်ပစ်မှုများ",
+ "pt-movepage-list-pages": "ရွေ့ပြောင်းရန် စာမျက်နှာများစာရင်း",
+ "pt-movepage-list-translation": "ဘာသာပြန် {{PLURAL:$1|စာမျက်နှာ|စာမျက်နှာများ}}",
+ "pt-movepage-list-other": "အခြား စာမျက်နှာ{{PLURAL:$1|ခွဲ|ခွဲများ}}",
+ "pt-movepage-legend": "ဘာသာပြန်နိုင်သော စာမျက်နှာကို ရွေ့ပြောင်းရန်",
+ "pt-movepage-current": "လက်ရှိအမည်:",
+ "pt-movepage-new": "နာမည်သစ်:",
+ "pt-movepage-reason": "အ​ကြောင်း​ပြ​ချက်:",
+ "pt-movepage-subpages": "စာမျက်နှာခွဲများအားလုံးကို ရွေ့ပြောင်းရန်",
+ "pt-movepage-logreason": "ဘာသာပြန်နိုင်သော စာမျက်နှာ \"$1\" ၏ အစိတ်အပိုင်း",
+ "pt-deletepage-lang-legend": "ဘာသာပြန်စာမျက်နှာကို ဖျက်ပစ်ရန်",
+ "pt-deletepage-full-legend": "ဘာသာပြန်နိုင်သော စာမျက်နှာကို ဖျက်ပစ်ရန်",
+ "pt-deletepage-any-legend": "ဘာသာပြန်နိုင်သောစာမျက်နှာ သို့မဟုတ် ဘာသာပြန်စာမျက်နှာကို ဖျက်ပစ်ရန်",
+ "pt-deletepage-current": "စာမျက်နှာ အမည်:",
+ "pt-deletepage-reason": "အ​ကြောင်း​ပြ​ချက်:",
+ "pt-deletepage-subpages": "စာမျက်နှာခွဲများအားလုံးကို ဖျက်ရန်",
+ "pt-deletepage-list-pages": "ဖျက်ရန် စာမျက်နှာများ စာရင်း",
+ "pt-deletepage-list-translation": "ဘာသာပြန် စာမျက်နှာများ",
+ "pt-deletepage-list-other": "အခြား စာမျက်နှာခွဲများ",
+ "pt-deletepage-full-logreason": "ဘာသာပြန်နိုင်သော စာမျက်နှာ \"$1\" ၏ အစိတ်အပိုင်း",
+ "pt-deletepage-lang-logreason": "ဘာသာပြန်နိုင်သော စာမျက်နှာ \"$1\" ၏ အစိတ်အပိုင်း",
+ "pm-import-button-label": "တင်သွင်းရန်",
+ "pm-savepages-button-label": "သိမ်းရန်",
+ "pm-cancel-button-label": "မလုပ်တော့ပါ",
+ "pm-page-does-not-exist": "$1 မတည်ရှိပါ။",
+ "pm-old-translations-missing": "$1 တွင် ဘာသာပြန်အဟောင်းများ မပါရှိပါ။",
+ "pm-pagename-missing": "ကျေးဇူးပြု၍ စာမျက်နှာနာမည် ရိုက်ထည့်ပါ။",
+ "pm-pagetitle-placeholder": "စာမျက်နှာခေါင်းစဉ် ရိုက်ထည့်ပါ",
+ "pm-pagetitle-missing": "ကျေးဇူးပြု၍ စာမျက်နှာခေါင်းစဉ် ရိုက်ထည့်ပါ",
+ "tpt-translate-title": "စာမျက်နှာခေါင်းစဉ် ဘာသာပြန်မှုကို ခွင့်ပြုရန်",
+ "pp-save-summary": "ဘာသာပြန်အတွက် စာမျက်နှာ ကြိုတင်ပြင်ဆင်ရန်",
+ "pagepreparation": "ဘာသာပြန်အတွက် စာမျက်နှာ ကြိုတင်ပြင်ဆင်ရန်",
+ "pp-pagename-placeholder": "စာမျက်နှာအမည် ရိုက်ထည့်ပါ",
+ "pp-prepare-button-label": "ပြင်ဆင်",
+ "pp-save-button-label": "သိမ်းရန်",
+ "pp-cancel-button-label": "မလုပ်တော့ပါ",
+ "pp-save-message": "စာမျက်နှာကို သိမ်းဆည်းခဲ့သည်။ ယင်းအား [$1 တည်းဖြတ်]နိုင်သည်။",
+ "pp-pagename-missing": "ကျေးဇူးပြု၍ စာမျက်နှာနာမည် ရိုက်ထည့်ပါ။",
+ "tpt-unlink-button": "ဘာသာပြန်မှ ဖယ်ရှားရန်",
+ "tpt-unlink-summary": "ဘာသာပြန်မှ စာမျက်နှာအား ဖယ်ရှားခဲ့သည်",
+ "tpt-generic-confirm": "လုပ်ဆောင်ချက်ကို အတည်ပြုပါ။",
+ "tpt-generic-button": "အတည်ပြု"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/myv.json b/www/wiki/extensions/Translate/i18n/pagetranslation/myv.json
index 997db250..c1119612 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/myv.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/myv.json
@@ -1,11 +1,13 @@
{
"@metadata": {
"authors": [
- "Botuzhaleny-sodamo"
+ "Botuzhaleny-sodamo",
+ "Rueter"
]
},
"tpt-diff-old": "Икелень текст",
"tpt-diff-new": "Од текст",
"translate-tag-translate-link-desc": "Йутавтык те лопанть",
- "tpt-languages-legend": "Лия кельтне:"
+ "tpt-languages-legend": "Лия кельтне:",
+ "tpt-languages-nonzero": "$1 ($2% ютавтозь)"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/nah.json b/www/wiki/extensions/Translate/i18n/pagetranslation/nah.json
index aae59153..cffef11f 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/nah.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/nah.json
@@ -1,8 +1,12 @@
{
"@metadata": {
"authors": [
- "Fluence"
+ "Fluence",
+ "Akapochtli"
]
},
- "translate-tag-translate-link-desc": "Tictlahtōlcuepāz inīn zāzanilli"
+ "translate-tag-translate-link-desc": "Tictlahtōlcuepāz inīn zāzanilli",
+ "tpt-aggregategroup-update-cancel": "Moxitiniz",
+ "pm-cancel-button-label": "Moxitiniz",
+ "pp-cancel-button-label": "Moxitiniz"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/nb.json b/www/wiki/extensions/Translate/i18n/pagetranslation/nb.json
index 5107c096..cffa708e 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/nb.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/nb.json
@@ -6,18 +6,16 @@
"Nghtwlkr",
"Njardarlogar",
"Purodha",
- "Danmichaelo"
+ "Danmichaelo",
+ "Jon Harald Søby"
]
},
"pagetranslation": "Sideoversetting",
"right-pagetranslation": "Merk versjoner av sider for oversettelse",
"action-pagetranslation": "behandle oversettbare sider",
- "tpt-desc": "Utvidelse for oversetting av innholdssider",
"tpt-section": "Oversettelsesenhet $1",
"tpt-section-new": "Ny oversettelsesenhet.\nNavn: $1",
"tpt-section-deleted": "Oversettelsesenhet $1",
- "tpt-template": "Sidemal",
- "tpt-templatediff": "Sidemalen har blitt endret.",
"tpt-diff-old": "Forrige tekst",
"tpt-diff-new": "Ny tekst",
"tpt-submit": "Marker denne versjonen for oversetting",
@@ -31,9 +29,9 @@
"tpt-notsuitable": "Side $1 er ikke egnet for oversettelse.\nSjekk at siden har <nowiki><translate></nowiki>-merket og har en gyldig syntaks.",
"tpt-saveok": "Siden [[:$1]] har blitt markert for oversettelse med {{PLURAL:$2|én oversettelsesenhet|$2 oversettelsesenheter}}.\nDen kan nå <span class=\"plainlinks\">[$3 oversettes]</span>.",
"tpt-offer-notify": "Du kan <span class=\"plainlinks\">[$1 varsle oversettere]</span> om denne siden.",
- "tpt-badsect": "«$1» er ikke et gyldig navn for oversettelsesenheten $2.",
"tpt-showpage-intro": "Nedenfor listes nye, eksisterende og slettede avsnitt opp.\nFør denne versjonen merkes for oversettelse, sjekk at endringene i avsnittene er minimert for å unngå unødvendig arbeid for oversetterne.",
"tpt-mark-summary": "Markerte denne versjonen for oversettelse",
+ "tpt-mark-nochanges": "Ingen endringer å godkjenne. Å markere denne siden for oversettelse vil ikke redigere siden eller noen eksisterende oversettelsesenheter.",
"tpt-edit-failed": "Kunne ikke oppdatere siden: $1",
"tpt-duplicate": "Oversettelsens enhetsnavn $1 er brukt mer enn en gang.",
"tpt-already-marked": "Den siste versjonen av denne siden har allerede blitt markert for oversettelse.",
@@ -64,11 +62,13 @@
"translate-tag-markthisagain": "Denne siden har hatt <span class=\"plainlinks\">[$1 endringer]</span> siden den sist ble <span class=\"plainlinks\">[$2 markert for oversettelse]</span>.",
"translate-tag-hasnew": "Denne siden inneholder <span class=\"plainlinks\">[$1 endringer]</span> som ikke har blitt markert for oversettelse.",
"tpt-translation-intro": "Denne siden er en <span class=\"plainlinks\">[$1 oversatt versjon]</span> av siden [[$2]] og oversettelsen er $3 % ferdig.",
+ "tpt-translation-intro-fuzzy": "Utdaterte oversettelser er markert på denne måten.",
"tpt-languages-legend": "Andre språk:",
"tpt-languages-zero": "Begynn oversettelse for dette språket",
"tpt-languages-nonzero": "$1 ($2 % oversatt)",
"tpt-tab-translate": "Oversett",
"tpt-target-page": "Denne siden kan ikke oppdateres manuelt.\nDenne siden er en oversettelse av siden [[$1]] og oversettelsen kan bli oppdatert ved å bruke [$2 oversettelsesverktøyet].",
+ "tpt-patrolling-blocked": "Denne siden kan ikke patruljeres. Bruk i stedet oversettelseshandlingen for å godkjenne den.",
"tpt-unknown-page": "Dette navnerommet er reservert for oversettelser av innholdssider.\nDenne siden som du prøver å redigere ser ikke ut til å samsvare med noen av sidene som er markert for oversettelse.",
"tpt-translation-restricted": "Oversettelse av denne siden til dette språket har blitt forhindret av en oversettelsesadministrator.\n\nÅrsak: $1",
"tpt-discouraged-language-force-header": "Denne siden kan ikke oversettes til $1.",
@@ -80,7 +80,6 @@
"tpt-discouraged-language-reason": "Årsak: $1",
"tpt-priority-languages": "En oversettelsesadministrator har satt prioritetsspråkene for denne gruppen til $1.",
"tpt-render-summary": "Oppdaterer for å svare til ny versjon av kildesiden",
- "tpt-download-page": "Eksporter side med oversettelser",
"aggregategroups": "Samlingsgrupper",
"tpt-aggregategroup-add": "Legg til",
"tpt-aggregategroup-save": "Lagre",
@@ -89,6 +88,11 @@
"tpt-aggregategroup-new-description": "Beskrivelse (valgfri):",
"tpt-aggregategroup-remove-confirm": "Er du sikker på at du ønsker å slette denne gruppa?",
"tpt-aggregategroup-invalid-group": "Gruppa eksisterer ikke",
+ "tpt-aggregategroup-edit-name": "Navn:",
+ "tpt-aggregategroup-edit-description": "Beskrivelse:",
+ "tpt-aggregategroup-update": "Lagre",
+ "tpt-aggregategroup-update-cancel": "Avbryt",
+ "tpt-invalid-group": "Ugyldig gruppe",
"pt-parse-open": "Ubalansert &lt;translate>-element.\nOversettelsesmal: <pre>$1</pre>",
"pt-parse-close": "Ubalansert &lt;/translate>-element.\nOversettelsesmal: <pre>$1</pre>",
"pt-parse-nested": "Nøstede &lt;translate>-seksjoner er ikke tillatt.\nElementtekst: <pre>$1</pre>",
@@ -100,12 +104,27 @@
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|merket}} $3 for oversetting",
"logentry-pagetranslation-unmark": "$1 {{GENDER:$2|fjernet}} $3 fra oversetting",
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|fullførte}} flyttingen av den oversettbare siden $3 til $4",
- "logentry-pagetranslation-movenok": "$1 {{{{GENDER:$2|fant}} et problem under flyttingen av siden $3 til $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|fant}} et problem under flyttingen av siden $3 til $4",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|fullførte}} slettingen av den oversettbare siden $3",
"logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|mislyktes}} i å slette $3 som tilhører den oversettbare siden $4",
"logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|fullførte}} slettingen av oversettingssiden $3",
"logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|mislyktes}} i å slette $3 som tilhører oversettingssiden $4",
"logentry-pagetranslation-encourage": "$1 {{GENDER:$2|oppfordret}} til oversetting av $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|frarådet}} oversettelse av $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|fjernet}} prioriterte språk fra den oversettbare siden $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|satt}} prioriterte språk for den oversettbare siden $3 til $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|begrenset}} språk for den oversettbare siden $3 til $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|la til}} den oversettbare siden $3 til aggregatgruppa $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|fjernet}} den oversettbare siden $3 fra aggregatgruppa $4",
+ "log-action-filter-pagetranslation": "Handlingstype:",
+ "log-action-filter-pagetranslation-mark": "Merk for oversettelse",
+ "log-action-filter-pagetranslation-unmark": "Fjerning fra oversettelse",
+ "log-action-filter-pagetranslation-move": "Sideflyttinger",
+ "log-action-filter-pagetranslation-delete": "Sideslettinger",
+ "log-action-filter-pagetranslation-encourage": "Oppmuntring til å oversette",
+ "log-action-filter-pagetranslation-discourage": "Fraråding fra å oversette",
+ "log-action-filter-pagetranslation-prioritylanguages": "Endring av prioriterne språk",
+ "log-action-filter-pagetranslation-aggregategroups": "Endring av aggregatgrupper",
"pt-movepage-title": "Flytt oversettbar side $1",
"pt-movepage-blockers": "Den oversettbare siden kan ikke flyttes til et nytt navn på grunn av følgende {{PLURAL:$1|feil}}:",
"pt-movepage-block-base-exists": "Måloversettelsessiden «[[:$1]]» eksisterer.",
@@ -130,11 +149,11 @@
"pt-movepage-action-perform": "Utfør flyttingen",
"pt-movepage-action-other": "Endre mål",
"pt-movepage-intro": "Denne spesialsiden tillater deg å flytte sider som er markert for oversettelse.\nFlyttehandlingen vil ikke skje umiddelbart fordi mange sider må flyttes.\nMens sidene flyttes er det ikke mulig å samhandle med gjeldende sider.\nFeil vil bli logget i [[Special:Log/pagetranslation|sideoversettelsesloggen]] og de må repareres for hånd.",
- "pt-movepage-logreason": "Del av oversettbar side $1.",
- "pt-movepage-started": "Basesiden har nå blitt flyttet.\nKontroller [[Special:Log/pagetranslation|sideoversettelsesloggen]] for feil- og fullføringsmeldinger.",
+ "pt-movepage-logreason": "Del av oversettbar side «$1»",
+ "pt-movepage-started": "Kontroller [[Special:Log/pagetranslation|sideoversettelsesloggen]] for feil- og fullføringsmeldinger.",
"pt-locked-page": "Denne siden er låst fordi oversettelsessiden blir flyttet nå.",
- "pt-deletepage-lang-title": "Sletter den oversettbare siden $1.",
- "pt-deletepage-full-title": "Sletter den oversettbare siden $1.",
+ "pt-deletepage-lang-title": "Sletter den oversettbare siden «$1»",
+ "pt-deletepage-full-title": "Sletter den oversettbare siden «$1»",
"pt-deletepage-invalid-title": "Den angitte siden er ikke gyldig.",
"pt-deletepage-invalid-text": "Den angitte siden er ikke en oversettbar side eller en oversettelsesside.",
"pt-deletepage-action-check": "List opp sider som skal slettes",
@@ -151,8 +170,45 @@
"pt-deletepage-list-section": "Seksjonssider",
"pt-deletepage-list-other": "Andre undersider",
"pt-deletepage-list-count": "Totalt $1 {{PLURAL:$1|side|sider}} å slette.",
- "pt-deletepage-full-logreason": "Del av den oversettbare siden $1.",
- "pt-deletepage-lang-logreason": "Del av oversettelsessiden $1.",
+ "pt-deletepage-full-logreason": "Del av den oversettbare siden «$1»",
+ "pt-deletepage-lang-logreason": "Del av oversettelsessiden «$1»",
"pt-deletepage-started": "Sjekk [[Special:Log/pagetranslation|sideoversettelsesloggen]] for feil- og fullføringsmeldinger.",
- "pt-deletepage-intro": "Denne spesialsiden lar deg slette hele oversettbare sider eller en inviduell oversettelsesside på ett språk.\nSlettingen vil ikke være umiddelbar, fordi alle avhengige sider også vil bli slettet.\nFeil vil logges i [[Special:Log/pagetranslation|sideoversettelsesloggen]], og må fikses manuelt."
+ "pt-deletepage-intro": "Denne spesialsiden lar deg slette hele oversettbare sider eller en inviduell oversettelsesside på ett språk.\nSlettingen vil ikke være umiddelbar, fordi alle avhengige sider også vil bli slettet.\nFeil vil logges i [[Special:Log/pagetranslation|sideoversettelsesloggen]], og må fikses manuelt.",
+ "pagemigration": "Migrering av oversettbar side",
+ "pagemigration-summary": "Spesifiser en oversettelsesside og bevar oversettelser som ble gjort før Translate-systemet ble slått på for den siden.",
+ "pm-import-button-label": "Importer",
+ "pm-savepages-button-label": "Lagre",
+ "pm-cancel-button-label": "Avbryt",
+ "pm-page-does-not-exist": "$1 finnes ikke.",
+ "pm-old-translations-missing": "$1 inneholder ikke gamle oversettelser.",
+ "pm-extra-units-warning": "Ekstra enheter kan være tilstede. Vennligst match kilden og oversettelsesenhetene ordentlig.",
+ "pm-pagename-missing": "Skriv inn sidenavnet.",
+ "pm-add-icon-hover-text": "Legg til en enhet nedenfor",
+ "pm-swap-icon-hover-text": "Bytt med enheten under",
+ "pm-delete-icon-hover-text": "Slett enhet",
+ "pm-pagetitle-placeholder": "Skriv inn sidetittelen",
+ "pm-pagetitle-invalid": "Skriv inn en gyldig sidetittel. Den bør være i formatet <sidenavn>/<språkkode>.",
+ "pm-pagetitle-missing": "Skriv inn sidetittelen.",
+ "pm-langcode-missing": "Språkkoden mangler i tittelen. Skriv inn sidetittelen i formatet <sidenavn>/<språkkode>.",
+ "pm-summary-import": "Importerte oversettelse med [[Special:PageMigration|sidemigrasjon]]",
+ "pm-on-import-message-text": "De gamle oversettelsene har blitt importert. Bruk add-, swap- og delete-valgene for å justere oversettelsesenhetene og klikk på «{{int:pm-savepages-button-label}}»-knappen for å lagre dem. Klikk på «{{unt:pm-cancel-button-label}}» for å forkaste.",
+ "pm-on-save-message-text": "Oversettelsesenhetene har blitt lagret. Du kan nå skrive inn tittelen på en ny oversettelsesside for å migrere den, eller gjøre endringer i enhetene nedenfor og lagre en ny versjon.",
+ "tpt-translate-title": "Tillat oversettelse av sidetittelen",
+ "pp-save-summary": "Forberedte siden for oversettelse",
+ "pagepreparation": "Forbereder side for oversettelse",
+ "pp-pagename-placeholder": "Skriv inn sidenavnet",
+ "pp-prepare-button-label": "Forbered",
+ "pp-save-button-label": "Lagre",
+ "pp-cancel-button-label": "Avbryt",
+ "pp-save-message": "Siden ble lagret. Du kan [$1 redigere] den.",
+ "pp-prepare-message": "Siden ble forberedt for oversettelse. Se diffen nedenfor. Klikk på «{{int:pp-save-button-label}}»-knappen om alt ser greit ut.",
+ "pp-already-prepared-message": "Det ser ut til at siden allerede har blitt forberedt for oversettelse. Det er ingen endringer sammenlignet med forrige versjon.",
+ "pp-pagename-missing": "Skriv inn sidenavnet.",
+ "pp-diff-old-header": "Kildetekst",
+ "pp-diff-new-header": "Forberedt tekst",
+ "tpt-unlink-confirm": "Bekreft at du ønsker å fjerne siden fra oversettelsessystemet.\nSpråkvelgeren og oversatte sidenavn vil slutte å fungere.\nDe enkelte oversatte sidene vil kunne ridegeres direkte.",
+ "tpt-unlink-button": "Fjern fra oversettelse",
+ "tpt-unlink-summary": "Fjernet side fra oversettelse",
+ "tpt-generic-confirm": "Bekreft handlingen.",
+ "tpt-generic-button": "Bekreft"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/nds-nl.json b/www/wiki/extensions/Translate/i18n/pagetranslation/nds-nl.json
index 3e86b72f..bb75bfa1 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/nds-nl.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/nds-nl.json
@@ -5,5 +5,5 @@
]
},
"tpt-languages-nonzero": "$1 ($2% vertaald)",
- "pm-langcode-placeholder": "Taalkode"
+ "pt-deletepage-current": "Ziednaam:"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ne.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ne.json
index d6e5d7e3..a86e106f 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ne.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ne.json
@@ -2,10 +2,12 @@
"@metadata": {
"authors": [
"Ganesh Paudel",
- "NehalDaveND"
+ "NehalDaveND",
+ "राम प्रसाद जोशी"
]
},
"tpt-rev-encourage": "पूर्वावस्थामा ल्याउनुहोस्",
+ "tpt-languages-nonzero": "$1 ($2% अनुवादित)",
"tpt-tab-translate": "अनुवाद गर्नु",
"tpt-aggregategroup-add": "थप्न",
"tpt-aggregategroup-save": "संग्रह गर्ने",
@@ -19,8 +21,6 @@
"pm-import-button-label": "आयात",
"pm-savepages-button-label": "संग्रह गर्ने",
"pm-cancel-button-label": "रद्द",
- "pm-pagename-placeholder": "पृष्ठको नाम लेख्नुहोस्",
- "pm-langcode-placeholder": "भाषा कोड",
"pp-save-button-label": "संग्रह गर्नु",
"pp-cancel-button-label": "रद्द गर्नु"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/nl.json b/www/wiki/extensions/Translate/i18n/pagetranslation/nl.json
index 4b7515c9..37a68e58 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/nl.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/nl.json
@@ -9,7 +9,9 @@
"Mar(c)",
"Sjoerddebruin",
"Robin0van0der0vliet",
- "Robin van der Vliet"
+ "Robin van der Vliet",
+ "Servien",
+ "Mainframe98"
]
},
"pagetranslation": "Paginavertaling",
@@ -30,6 +32,7 @@
"tpt-oldrevision": "$2 is niet de meest recente versie van de pagina \"[[:$1]]\".\nAlleen de meest recente versie kan voor vertaling gemarkeerd worden.",
"tpt-notsuitable": "De pagina \"$1\" kan niet voor vertaling gemarkeerd worden.\nZorg ervoor dat de labels <nowiki><translate></nowiki> geplaatst zijn en dat deze juist zijn toegevoegd.",
"tpt-saveok": "De pagina [[:$1]] is gemarkeerd voor vertaling met $2 te vertalen {{PLURAL:$2|vertaaleenheid|vertaaleenheden}}.\nDe pagina kan nu <span class=\"plainlinks\">[$3 vertaald]</span> worden.",
+ "tpt-saveok-first": "U kunt [[Special:PageMigration|bestaande vertalingen]] voor deze pagina importeren (indien aanwezig).",
"tpt-offer-notify": "U kunt <span class=\"plainlinks\">[$1 vertalers op de hoogte stellen]</span> over deze pagina.",
"tpt-showpage-intro": "Hieronder zijn nieuwe, bestaande en verwijderde vertaaleenheden opgenomen.\nControleer voordat u deze versie voor vertaling markeert of de wijzigingen aan de vertaaleenheden zo klein mogelijk zijn om onnodig werk voor vertalers te voorkomen.",
"tpt-mark-summary": "Heeft deze versie voor vertaling gemarkeerd",
@@ -63,11 +66,13 @@
"translate-tag-markthisagain": "Deze pagina is <span class=\"plainlinks\">[$1 gewijzigd]</span> sinds deze voor het laatst <span class=\"plainlinks\">[$2 voor vertaling gemarkeerd]</span> is geweest.",
"translate-tag-hasnew": "Aan deze pagina zijn <span class=\"plainlinks\">[$1 wijzigingen]</span> gemaakt die niet voor vertaling zijn gemarkeerd.",
"tpt-translation-intro": "Deze pagina is een <span class=\"plainlinks\">[$1 vertaalde versie]</span> van de pagina [[$2]] en de vertaling is $3% compleet.",
+ "tpt-translation-intro-fuzzy": "Verouderde vertalingen worden zo weergegeven.",
"tpt-languages-legend": "Andere talen:",
"tpt-languages-zero": "Vertaling voor deze taal starten",
"tpt-languages-nonzero": "$1 ($2% vertaald)",
"tpt-tab-translate": "Vertalen",
"tpt-target-page": "Deze pagina kan niet handmatig worden bijgewerkt.\nDeze pagina is een vertaling van de pagina [[$1]].\nDe vertaling kan bijgewerkt worden via de [$2 vertaalhulpmiddelen].",
+ "tpt-patrolling-blocked": "Deze pagina kan niet worden gecontroleerd. Gebruik in plaats hiervan de vertaal actie.",
"tpt-unknown-page": "Deze naamruimte is gereserveerd voor de vertalingen van van pagina's.\nDe pagina die u probeert te bewerken lijkt niet overeen te komen met een te vertalen pagina.",
"tpt-translation-restricted": "De vertaling van deze pagina in deze taal is onmogelijk gemaakt door de vertalingenbeheerder.\n\nReden: $1",
"tpt-discouraged-language-force-header": "Deze pagina kan niet in het $1 vertaald worden.",
@@ -101,7 +106,7 @@
"log-description-pagetranslation": "Logboek voor handelingen gerelateerd aan het paginavertalingsysteem",
"log-name-pagetranslation": "Logboek paginavertaling",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|heeft}} $3 gemarkeerd voor vertaling",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|heeft}} $3 als te vertalen pagina verwijderd",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|heeft}} $3 uit het vertaalsysteem verwijderd",
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|heeft}} de vertaalbare pagina $3 hernoemd naar $4",
"logentry-pagetranslation-movenok": "$1 {{GENDER:$2|is}} een probleem tegengekomen tijdens het hernoemen van de vertaalbare pagina $3 naar $4",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|heeft}} de vertaalbare pagina $3 verwijderd",
@@ -115,6 +120,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|heeft}} talen beperkt voor de vertaalbare pagina $3 naar $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|heeft}} de vertaalbare pagina $3 toegevoegd aan de samengestelde groep $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|heeft}} de vertaalbare pagina $3 verwijderd uit de samengestelde groep $4",
+ "log-action-filter-pagetranslation": "Soort handeling:",
+ "log-action-filter-pagetranslation-mark": "Voor vertaling markeren",
+ "log-action-filter-pagetranslation-unmark": "Als vertaalbare pagina verwijderd",
+ "log-action-filter-pagetranslation-move": "Paginahernoemingen",
+ "log-action-filter-pagetranslation-delete": "Paginaverwijderingen",
+ "log-action-filter-pagetranslation-encourage": "Aanmoedigen van vertalingen",
+ "log-action-filter-pagetranslation-discourage": "Ontmoedigen van vertalingen",
+ "log-action-filter-pagetranslation-prioritylanguages": "Wijziging van de prioriteitstalen",
+ "log-action-filter-pagetranslation-aggregategroups": "Wijzigingen aan samengestelde groepen",
"pt-movepage-title": "Te vertalen pagina $1 hernoemen",
"pt-movepage-blockers": "De te vertalen pagina kan niet hernoemd worden vanwege de volgende {{PLURAL:$1|foutmelding|foutmeldingen}}:",
"pt-movepage-block-base-exists": "De vertaalbare doelpagina \"[[:$1]]\" bestaat al.",
@@ -128,7 +142,9 @@
"pt-movepage-list-pages": "Lijst van te hernoemen pagina's",
"pt-movepage-list-translation": "Te vertalen {{PLURAL:$1|pagina|pagina's}}",
"pt-movepage-list-section": "{{PLURAL:$1|Pagina|Pagina's}} voor vertaaleenheden",
- "pt-movepage-list-other": "Overige sub{{PLURAL:$1|pagina|pagina's}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Deelpagina|Deelpagina's}} voor vertaling gemarkeerd",
+ "pt-movepage-list-translatable-note": "Deze pagina's moeten handmatig hernoemd worden.",
+ "pt-movepage-list-other": "Andere {{PLURAL:$1|deelpagina|deelpagina's}}",
"pt-movepage-list-count": "In totaal {{PLURAL:$1|is er $1 pagina|zijn er $1 pagina's}} te hernoemen.",
"pt-movepage-legend": "Te vertalen pagina hernoemen",
"pt-movepage-current": "Huidige naam:",
@@ -139,11 +155,11 @@
"pt-movepage-action-perform": "Hernoemen",
"pt-movepage-action-other": "Doel wijzigen",
"pt-movepage-intro": "Via deze speciale pagina kunt u een te vertalen pagina's hernoemen.\nDit wordt niet direct gedaan, omdat het mogelijk is dat heel veel pagina's hernoemd moeten worden.\nTerwijl de pagina's worden hernoemd, is het niet mogelijk handelingen uit te voeren op betrokken pagina's.\nIn het [[Special:Log/pagetranslation|logboek paginavertaling]] worden fouten opgeslagen die op een later moment handmatig hersteld kunnen worden.",
- "pt-movepage-logreason": "Onderdeel van te vertalen pagina $1.",
- "pt-movepage-started": "De basispagina is nu hernoemd.\nKijk in het [[Special:Log/pagetranslation|logboek paginavertaling]] na of er fouten zijn gemeld en of de complete handeling is afgerond.",
+ "pt-movepage-logreason": "Onderdeel van te vertalen pagina \"$1\"",
+ "pt-movepage-started": "Kijk in het [[Special:Log/pagetranslation|logboek paginavertaling]] na of er fouten zijn gemeld en of de complete handeling is afgerond. Dit kan enkele ogenblikken duren.",
"pt-locked-page": "Deze pagina kan niet gewijzigd worden omdat de te vertalen pagina op dit moment hernoemd wordt.",
- "pt-deletepage-lang-title": "De vertaalde pagina $1 wordt verwijderd.",
- "pt-deletepage-full-title": "De vertaalbare pagina $1 wordt verwijderd.",
+ "pt-deletepage-lang-title": "De vertaalde pagina \"$1\" wordt verwijderd",
+ "pt-deletepage-full-title": "De vertaalbare pagina \"$1\" wordt verwijderd",
"pt-deletepage-invalid-title": "De opgegeven pagina is ongeldig.",
"pt-deletepage-invalid-text": "De opgegeven pagina is geen vertaalbare pagina en ook geen vertaalde pagina.",
"pt-deletepage-action-check": "Lijst met te verwijderen pagina's",
@@ -160,27 +176,44 @@
"pt-deletepage-list-section": "Pagina's voor vertaaleenheden",
"pt-deletepage-list-other": "Andere subpagina's",
"pt-deletepage-list-count": "In totaal {{PLURAL:$1|wordt er $1 pagina|worden er $1 pagina's}} verwijderd.",
- "pt-deletepage-full-logreason": "Onderdeel van te vertalen pagina $1.",
- "pt-deletepage-lang-logreason": "Onderdeel van de vertaalde pagina $1.",
+ "pt-deletepage-full-logreason": "Onderdeel van te vertalen pagina \"$1\"",
+ "pt-deletepage-lang-logreason": "Onderdeel van de vertaalde pagina \"$1\"",
"pt-deletepage-started": "Controleer het [[Special:Log/pagetranslation|Logboek paginavertaling]] op fouten en of de opdracht is afgerond.",
"pt-deletepage-intro": "Via deze pagina kunt u vertaalbare pagina's of vertaalde pagina's in een taal verwijderen.\nHet verwijderen vindt niet per direct plaats, omdat het mogelijk is dat vele pagina's verwijderd moeten worden.\nFouten worden opgenomen in het [[Special:Log/pagetranslation|Logboek paginavertaling]] en deze moeten handmatig gecorrigeerd worden.",
+ "pagemigration": "Migratie van vertaalde pagina's",
+ "pagemigration-summary": "Voer een vertaalde pagina in en herstel de vertalingen die gemaakt zijn voordat het Translate systeem was geactiveerd op die pagina.",
"pm-import-button-label": "Importeren",
"pm-savepages-button-label": "Opslaan",
"pm-cancel-button-label": "Annuleren",
- "pm-pagename-placeholder": "Geef de paginanaam op",
- "pm-langcode-placeholder": "Taalcode",
"pm-page-does-not-exist": "$1 bestaat niet",
"pm-old-translations-missing": "$1 bevat geen oude vertalingen",
+ "pm-extra-units-warning": "Extra eenheden zijn mogelijk aanwezig. Zorg ervoor dat de bron en vertaling eenheden overeenkomen.",
+ "pm-pagename-missing": "Voer een paginanaam in.",
+ "pm-add-icon-hover-text": "Voeg een eenheid hierbeneden toe",
+ "pm-swap-icon-hover-text": "Verwissel met de eenheid hier beneden",
"pm-delete-icon-hover-text": "Eenheid verwijderen",
- "pm-pagetitle-invalid": "Geef een geldige paginanaam op.",
+ "pm-pagetitle-placeholder": "Geef de paginatitel op",
+ "pm-pagetitle-invalid": "Geef een geldige paginanaam op. De indeling is <paginanaam>/<taalcode>.",
+ "pm-pagetitle-missing": "Voer een paginanaam in.",
+ "pm-langcode-missing": "De taal lijkt te ontbreken in de titel. Voer de titel van de pagina in de opmaak <page-name>/<language-code> in.",
+ "pm-summary-import": "Vertaling geïmporteerd met [[Special:PageMigration|pagina migratie]]",
+ "pm-on-import-message-text": "De oude vertalingen zijn geïmporteerd. Gebruik de toevoegen, omwisselen en verwijderen opties voor het aanpassen van de vertaaleenheden en klik op de \"{{int:pm-savepages-knop-label}}\" knop om op te slaan. Klik op de \"{{int:pm-annuleren-knop-label}}\" knop om te annuleren.",
+ "pm-on-save-message-text": "De vertaling eenheden zijn opgeslagen. U kunt nu de titel van een nieuwe vertalingspagina invoeren om deze te migreren, of wijzigingen aan de eenheden hieronder maken en deze opslaan als een nieuwe versie.",
"tpt-translate-title": "Vertaling van de paginanaam toestaan",
+ "pp-save-summary": "Pagina voorbereid voor vertaling",
"pagepreparation": "Pagina voorbereiden voor vertaling",
"pp-pagename-placeholder": "Geef de paginanaam op",
"pp-prepare-button-label": "Voorbereiden",
"pp-save-button-label": "Opslaan",
"pp-cancel-button-label": "Annuleren",
+ "pp-save-message": "De pagina is opgeslagen. U kunt het [$1 bewerken].",
+ "pp-prepare-message": "De pagina is voorbereid voor vertaling. Zie de wijz hieronder. Klik op de \"{{int:pp-save-button-label}}\" knop indien correct!",
+ "pp-already-prepared-message": "Het lijkt erop dat de pagina al is voorbereid voor vertaling. Er zijn geen wijzigingen ten opzichte van de vorige versie.",
"pp-pagename-missing": "Voer een paginanaam in.",
"pp-diff-old-header": "Brontekst",
"pp-diff-new-header": "Voorbereide tekst",
- "tpt-unlink-button": "Verwijderen uit vertaling"
+ "tpt-unlink-button": "Verwijderen uit vertaling",
+ "tpt-unlink-summary": "Verwijderd als vertaalbare pagina",
+ "tpt-generic-confirm": "Bevestig de handeling.",
+ "tpt-generic-button": "Bevestigen"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/nn.json b/www/wiki/extensions/Translate/i18n/pagetranslation/nn.json
index c934fb45..687c68e6 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/nn.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/nn.json
@@ -10,12 +10,10 @@
},
"pagetranslation": "Sideomsetjing",
"right-pagetranslation": "Merk versjonar av sider for omsetjing",
- "tpt-desc": "Utviding for omsetjing av innhaldssider",
+ "action-pagetranslation": "handsama omsetjingsmerkte sider",
"tpt-section": "Omsetjingseining $1",
"tpt-section-new": "Ny omsetjingseining. Namn: $1",
"tpt-section-deleted": "Omsetjingseining $1",
- "tpt-template": "Sidemal",
- "tpt-templatediff": "Sidemalen har vorte endra.",
"tpt-diff-old": "Førre teksten",
"tpt-diff-new": "Ny tekst",
"tpt-submit": "Merk denne versjonen for omsetjing",
@@ -27,7 +25,6 @@
"tpt-oldrevision": "$2 er ikkje den siste versjonen av sida [[:$1]].\nBerre siste versjonar kan verta markert for omsetjing.",
"tpt-notsuitable": "Side $1 er ikkje høveleg for omsetjing.\nSjekk at sida er merkt med <nowiki><translate></nowiki>-merke og har ein gyldig syntaks.",
"tpt-saveok": "Sida [[:$1]] er vorten merkt for omsetjing med {{PLURAL:$2|éi omsetjingseining|$2 omsetjingseiningar}}. Ho kan no verta <span class=\"plainlinks\">[$3 sett om]</span>.",
- "tpt-badsect": "«$1» er ikkje eit gyldig namn for omsetjingseininga $2.",
"tpt-mark-summary": "Markerte denne versjonen for omsetjing",
"tpt-edit-failed": "Kunne ikkje oppdatera sida: $1",
"tpt-already-marked": "Den siste versjonen av denne sida har allereie vorte markert for omsetjing.",
@@ -52,19 +49,32 @@
"translate-tag-markthisagain": "Sida har <span class=\"plainlinks\">[$1 vorten endra]</span> sidan ho sist vart <span class=\"plainlinks\">[$2 merkt for omsetjing]</span>.",
"translate-tag-hasnew": "Sida inneheld <span class=\"plainlinks\">[$1 endringar]</span> som ikkje er merkte for omsetjing.",
"tpt-translation-intro": "Sida er ein <span class=\"plainlinks\">[$1 omsett versjon]</span> av sida [[$2]], og omsetjinga er $3% ferdig.",
+ "tpt-translation-intro-fuzzy": "Utdaterte omsetjingar er merkte slik.",
"tpt-languages-legend": "Andre språk:",
"tpt-languages-zero": "Byrja omsetjing for dette språket",
"tpt-languages-nonzero": "$1 ($2 % sett om)",
+ "tpt-tab-translate": "Set om",
"tpt-translation-restricted": "Omsetjing av sida til dette språket er stogga av ein omsetjingsadministrator.\n\nÅrsak: $1",
"tpt-discouraged-language-force": "<strong>Sida kan ikkje setjast om til $2.</strong>\n\nEin omsetjingsadministrator har avgjort at sida berre kan setjast om til $3.",
"tpt-discouraged-language-reason": "Årsak: $1",
"tpt-render-summary": "Oppdatering for å svara til ny versjon av kjeldesida",
- "tpt-download-page": "Eksporter side med omsetjingar",
"tpt-aggregategroup-add": "Legg til",
"tpt-aggregategroup-save": "Lagra",
"tpt-aggregategroup-new-name": "Namn:",
"log-description-pagetranslation": "Logg over handlingar i sideomsetjingssystemet",
"log-name-pagetranslation": "Sideomsetjingslogg",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|merkte}} $3 for omsetjing",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|fjerna}} $3 frå omsetjing",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|fullførte}} flyttinga av den omsetjingsmerkte sida $3 til $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|fullførte}} slettinga av den omsetjingsmerkte sida $3",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|fullførte}} slettinga av omsetjingssida $3",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|oppmoda}} til omsetjing av $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|frårådde}} omsetjing av $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|sette}} prioriterte språk for den omsetbare sida $3 til $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|avgrensa}} språka for den omsetjingsmerkte sida $3 til $5",
+ "log-action-filter-pagetranslation-encourage": "Oppmoding til omsetjing",
+ "log-action-filter-pagetranslation-discourage": "Fråråding av omsetjing",
+ "pt-movepage-title": "Flytt den omsetjingsmerkte sida «$1»",
"pt-movepage-list-pages": "Liste over sider som skal flyttast",
"pt-movepage-list-translation": "Omsetjingssider",
"pt-movepage-list-other": "Andre undersider",
@@ -77,12 +87,18 @@
"pt-movepage-action-check": "Sjå om flyttinga er mogeleg",
"pt-movepage-action-perform": "Utfør flyttinga",
"pt-movepage-action-other": "Endra mål",
+ "pt-movepage-logreason": "Del av omsetjingsmerkt side «$1»",
"pt-deletepage-action-perform": "Utfør slettinga",
"pt-deletepage-action-other": "Endra mål",
"pt-deletepage-lang-legend": "Sletta omsetbar side",
+ "pt-deletepage-full-legend": "Slett omsetjingsmerkt side",
"pt-deletepage-current": "Sidenamn:",
"pt-deletepage-reason": "Årsak:",
"pt-deletepage-subpages": "Sletta alle undersider",
"pt-deletepage-list-pages": "Liste over sider som skal slettast",
- "pt-deletepage-list-other": "Andre undersider"
+ "pt-deletepage-list-other": "Andre undersider",
+ "pt-deletepage-full-logreason": "Del av den omsetjingsmerkte sida «$1»",
+ "tpt-unlink-button": "Fjern frå omsetjing",
+ "tpt-unlink-summary": "Fjerna side frå omsetjing",
+ "tpt-generic-button": "Stadfest"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/nqo.json b/www/wiki/extensions/Translate/i18n/pagetranslation/nqo.json
new file mode 100644
index 00000000..ab38cc11
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/nqo.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lanciné.kounfantoh.fofana",
+ "Youssoufkadialy"
+ ]
+ },
+ "tpt-languages-nonzero": "(ߘߟߊߡߌ߬ߘߊ߬ߣߍ߲ %$2)$1"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/nys.json b/www/wiki/extensions/Translate/i18n/pagetranslation/nys.json
new file mode 100644
index 00000000..d15a369e
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/nys.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gnangarra"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% translated)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/oc.json b/www/wiki/extensions/Translate/i18n/pagetranslation/oc.json
index b4e83746..b3cb0e1f 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/oc.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/oc.json
@@ -5,52 +5,60 @@
]
},
"pagetranslation": "Traduccion de paginas",
- "right-pagetranslation": "Marcar de versions de paginas per èsser traduchas",
+ "right-pagetranslation": "Marcar de versions de paginas per èsser traduitas",
"tpt-section": "Unitat de traduccion $1",
"tpt-section-new": "Unitat de traduccion novèla. Nom : $1",
"tpt-section-deleted": "Unitat de traduccion $1",
"tpt-diff-old": "Tèxte precedent",
"tpt-diff-new": "Tèxte novèl",
- "tpt-submit": "Marcar aquesta version per èsser traducha",
+ "tpt-submit": "Marcar aquesta version per èsser traduita",
"tpt-sections-oldnew": "Unitats de traduccion novèlas e existentas",
"tpt-sections-deleted": "Unitats de traduccion suprimidas",
"tpt-sections-template": "Modèl de pagina de traduccion",
+ "tpt-action-nofuzzy": "Invalidar pas las traduccions",
"tpt-badtitle": "Lo nom de pagina donada ($1) es pas un títol valid",
- "tpt-oldrevision": "$2 es pas la darrièra version de la pagina [[:$1]].\nSola la darrièra version de la pagina pòt èsser marcada per èsser traducha.",
- "tpt-notsuitable": "La pagina $1 conven pas per èsser traducha.\nSiatz segur(a) que conten la balisa <nowiki><translate></nowiki> e qu'a una sintaxi corrècta.",
- "tpt-saveok": "La pagina [[:$1]] es estada marcada per èsser traducha amb $2 {{PLURAL:$2|unitat de traduccion|unitats de traduccion}}.\nLa pagina pòt èsser <span class=\"plainlinks\">[$3 traducha]</span> tre ara.",
- "tpt-showpage-intro": "Çaijós, las traduccions novèlas, las qu'existisson e las suprimidas.\nAbans de marcar aquestas versions per èsser traduchas, verificatz que las modificacions a las seccions son minimizadas per evitar de trabalh inutil als traductors.",
- "tpt-mark-summary": "Aquesta version es estada marcada per èsser traducha",
+ "tpt-oldrevision": "$2 es pas la darrièra version de la pagina [[:$1]].\nSola la darrièra version de la pagina pòt èsser marcada per èsser traduita.",
+ "tpt-notsuitable": "La pagina $1 conven pas per èsser traduita.\nSiatz segur(a) que conten la balisa <nowiki><translate></nowiki> e qu'a una sintaxi corrècta.",
+ "tpt-saveok": "La pagina [[:$1]] es estada marcada per èsser traduita amb $2 {{PLURAL:$2|unitat de traduccion|unitats de traduccion}}.\nLa pagina pòt èsser <span class=\"plainlinks\">[$3 traduita]</span> tre ara.",
+ "tpt-showpage-intro": "Çaijós, las traduccions novèlas, las qu'existisson e las suprimidas.\nAbans de marcar aquestas versions per èsser traduitas, verificatz que las modificacions a las seccions son minimizadas per evitar de trabalh inutil als traductors.",
+ "tpt-mark-summary": "Aquesta version es estada marcada per èsser traduita",
"tpt-edit-failed": "Impossible de metre a jorn la pagina $1",
- "tpt-already-marked": "La darrièra version d'aquesta pagina ja es estada marcada per èsser traducha.",
- "tpt-list-nopages": "Cap de pagina es pas estada marcada per èsser traducha o prèsta per l'èsser.",
- "tpt-new-pages": "{{PLURAL:$1|Aquesta pagina conten|Aquestas paginas contenon}} de tèxte amb de balisas de traduccion, mas cap de version d'{{PLURAL:$1|aquesta pagina es pas marcada per èsser traducha|aquestas paginas son pas marcadas per èsser traduchas}}.",
- "tpt-old-pages": "De versions d'{{PLURAL:$1|aquesta pagina|aquestas paginas}} son estadas marcadas per èsser traduchas.",
+ "tpt-already-marked": "La darrièra version d'aquesta pagina ja es estada marcada per èsser traduita.",
+ "tpt-list-nopages": "Cap de pagina es pas estada marcada per èsser traduita o prèsta per l'èsser.",
+ "tpt-new-pages": "{{PLURAL:$1|Aquesta pagina conten|Aquestas paginas contenon}} de tèxte amb de balisas de traduccion, mas cap de version d'{{PLURAL:$1|aquesta pagina es pas marcada per èsser traduita|aquestas paginas son pas marcadas per èsser traduitas}}.",
+ "tpt-old-pages": "De versions d'{{PLURAL:$1|aquesta pagina|aquestas paginas}} son estadas marcadas per èsser traduitas.",
+ "tpt-select-prioritylangs-force": "Empachar las traduccions dins de lengas autras que las lengas prioritàrias",
"tpt-select-prioritylangs-reason": "Motiu :",
"tpt-sections-prioritylangs": "Lengas prioritàrias",
"tpt-rev-mark": "marcar per traduccion",
"tpt-rev-unmark": "suprimir de la traduccion",
"tpt-rev-discourage": "descoratjar",
"tpt-rev-encourage": "restablir",
+ "tpt-rev-discourage-tooltip": "Dissuadir las futuras traduccions sus aquesta pagina.",
"translate-tag-translate-link-desc": "Traduire aquesta pagina",
- "translate-tag-markthis": "Marcar aquesta pagina per èsser traducha",
- "translate-tag-markthisagain": "Aquesta pagina a agut <span class=\"plainlinks\">[$1 de modificacions]</span> dempuèi qu’es estada darrièrament <span class=\"plainlinks\">[$2 marcada per èsser traducha]</span>.",
+ "translate-tag-markthis": "Marcar aquesta pagina per èsser traduita",
+ "translate-tag-markthisagain": "Aquesta pagina a agut <span class=\"plainlinks\">[$1 de modificacions]</span> dempuèi qu’es estada darrièrament <span class=\"plainlinks\">[$2 marcada per èsser traduita]</span>.",
"translate-tag-hasnew": "Aquesta pagina conten <span class=\"plainlinks\">[$1 de modificacions]</span> que son pas marcadas per la traduccion.",
- "tpt-translation-intro": "Aquesta pagina es una <span class=\"plainlinks\">[$1 version traducha]</span> de la pagina [[$2]] e la traduccion es completada a $3 %.",
+ "tpt-translation-intro": "Aquesta pagina es una <span class=\"plainlinks\">[$1 version traduita]</span> de la pagina [[$2]] e la traduccion es completada a $3 %.",
+ "tpt-translation-intro-fuzzy": "Las traduccions obsolètas son indentificadas atal.",
"tpt-languages-legend": "Autras lengas :",
- "tpt-languages-nonzero": "$1 ($2% traduch)",
- "tpt-target-page": "Aquesta pagina pòt pas èsser mesa a jorn manualament.\nEs una version traducha de [[$1]] e la traduccion pòt èsser mesa a jorn en utilizant [$2 l'aisina de traduccion].",
- "tpt-unknown-page": "Aqueste espaci de noms es reservat per la traduccion de paginas.\nLa pagina qu'ensajatz de modificar sembla pas correspondre a cap de pagina marcada per èsser traducha.",
+ "tpt-languages-nonzero": "$1 ($2% traduit)",
+ "tpt-target-page": "Aquesta pagina pòt pas èsser mesa a jorn manualament.\nEs una version traduita de [[$1]] e la traduccion pòt èsser mesa a jorn en utilizant [$2 l'aisina de traduccion].",
+ "tpt-unknown-page": "Aqueste espaci de noms es reservat per la traduccion de paginas.\nLa pagina qu'ensajatz de modificar sembla pas correspondre a cap de pagina marcada per èsser traduita.",
"tpt-render-summary": "Mesa a jorn per èsser en acòrd amb la version novèla de la font de la pagina",
"tpt-aggregategroup-add": "Apondre",
"tpt-aggregategroup-save": "Enregistrar",
+ "tpt-aggregategroup-add-new": "Apondre un novèl grop d'agregacion",
"tpt-aggregategroup-new-name": "Nom :",
"pt-movepage-list-translation": "{{PLURAL:$1|pagina|paginas}} de traduccion",
"pt-movepage-new": "Nom novèl :",
"pt-movepage-reason": "Motiu :",
- "pt-movepage-action-perform": "Tornar nomenar",
+ "pt-movepage-subpages": "Renomenar totas las sospaginas",
+ "pt-movepage-action-perform": "Renomenar",
"pt-movepage-action-other": "Cambiar la cibla",
"pt-deletepage-current": "Nom de la pagina :",
"pt-deletepage-reason": "Motiu :",
+ "pm-old-translations-missing": "$1 conten pas d’ancianas traduccions",
+ "pm-add-icon-hover-text": "Apondre una unitat çaijós",
"pm-pagetitle-placeholder": "Entrar lo títol de la pagina"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/or.json b/www/wiki/extensions/Translate/i18n/pagetranslation/or.json
index cc5de96b..fd34f227 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/or.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/or.json
@@ -6,7 +6,6 @@
]
},
"pagetranslation": "ପୃଷ୍ଠା ଅନୁବାଦ",
- "tpt-template": "ପୃଷ୍ଠା ଛାଞ୍ଚ",
"tpt-languages-legend": "ଅଲଗା ଭାଷାସବୁ:",
"tpt-languages-nonzero": "$1 ($2% ଅନୁବାଦିତ)",
"pt-movepage-list-translation": "ଅନୁବାଦ ପୃଷ୍ଠାସବୁ",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/pam.json b/www/wiki/extensions/Translate/i18n/pagetranslation/pam.json
index 1193915c..528bee82 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/pam.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/pam.json
@@ -5,7 +5,6 @@
"Leeheonjin"
]
},
- "tpt-template": "↓Bulung Ulma",
"tpt-aggregategroup-add": "↓Dagdag",
"tpt-aggregategroup-save": "↓Isikap",
"tpt-aggregategroup-add-new": "↓Magdagdag a bayung piabeng lupung",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/pdc.json b/www/wiki/extensions/Translate/i18n/pagetranslation/pdc.json
index 07aa7910..c75c2f49 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/pdc.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/pdc.json
@@ -5,7 +5,6 @@
]
},
"pagetranslation": "Iwwersetzing vun Bledder",
- "tpt-template": "Moddel fer des Blatt",
"translate-tag-translate-link-desc": "Des Blatt iwwersetze",
"tpt-languages-legend": "Annere Schprooche:",
"pt-movepage-new": "Neier Naame:",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/pfl.json b/www/wiki/extensions/Translate/i18n/pagetranslation/pfl.json
index 97483ad1..996ac078 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/pfl.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/pfl.json
@@ -6,12 +6,9 @@
},
"pagetranslation": "Saide iwasedze",
"right-pagetranslation": "Gschischd vunde Saide fas Iwasedze kennzaischne",
- "tpt-desc": "Eameschlischds Iwasedze vun Inhaldssaide",
"tpt-section": "Iwasedzungsoihaid „$1“",
"tpt-section-new": "Naiji Iwasedzungsoihaid\nNoame: $1",
"tpt-section-deleted": "Iwasedzungsoihaid „$1“",
- "tpt-template": "Saidevoalaach",
- "tpt-templatediff": "Die Saidevoalaach hodsisch g'änad",
"tpt-diff-old": "Vorische Tegschd",
"tpt-diff-new": "Naije Tegschd",
"tpt-submit": "Die Ausgab fas Iwasedze kennzaischne",
@@ -24,7 +21,6 @@
"tpt-oldrevision": "$2 isch ned die naischdi Ausgab vunde Said [[:$1]].\nBloß die naischd Ausgab konn fas Iwasedze kennzaischnd werre.",
"tpt-notsuitable": "Die Said $1 isch ned fas Iwasedze g'aischnd.\nSaida sicha, dasses än <nowiki><translate></nowiki>-Uffschrifd unän gildischi Sadsuffbau bnudzd werd.",
"tpt-saveok": "Die Said [[:$1]] isch midm iwasedzbari {{PLURAL:$2|Abschnidd|$2 Abschnidd}} fas Iwasedze kennzaischnd worre.\nDie Said konn donn <span class=\"plainlinks\">[$3 iwasedzd]</span> werre.",
- "tpt-badsect": "\"$1\" isch nedn gildischi Noame fa Iwasedzungsoihaid $2.",
"tpt-showpage-intro": "Unne sin naiji voahoandeni un g'leschdi B'raisch uffglischded.\nVorm Kennzaischen vunde Ausgab fas Iwasedze, iwabrief, das die Änarunge vunde Abschnidd a klä sin, dmidma unedischi Erwed schbaare dud.",
"tpt-mark-summary": "Die Said fas Iwasedze kennzaischne",
"tpt-edit-failed": "Said konn ned agdualisiad werre: $1",
@@ -57,6 +53,7 @@
"translate-tag-markthisagain": "Onde Said isch <span class=\"plainlinks\">[$1 gschaffd worre]</span>, nochdemmase <span class=\"plainlinks\">[$2 fas Iwasedz fraigewe]</span> kabd hod.",
"translate-tag-hasnew": "Onde Said hods <span class=\"plainlinks\">[$1 Eawede]</span>, wu ned fas Iwasedze fraigewe worre sin.",
"tpt-translation-intro": "Die Said isch ä <span class=\"plainlinks\">[$1 iwasedzdi Fassung]</span> vunde Said [[$2]] un die Iwasedzung isch zu $3 % ferdisch.",
+ "tpt-translation-intro-fuzzy": "Va'aldedi Iwasedzunge werre so kennzaischnd.",
"tpt-languages-legend": "Onare Schbroche",
"tpt-languages-zero": "Midm Iwasedze in die Schbrooch oafonge",
"tpt-languages-nonzero": "$1 ($2% iwwasezd)",
@@ -67,7 +64,6 @@
"tpt-discouraged-language": "Die Schbrooch isch käni vunde voaroangischi Schbrooche, wuen Administrator va die Said gsedzd kabd hod.\n\nGrund: $1",
"tpt-priority-languages": "Än Administrator hoddie voaroangischi Schbrooche fa die Grubb uff $1 gsedzd.",
"tpt-render-summary": "Iwanemm die naijschd Ausgab vunde Qwellsaid",
- "tpt-download-page": "Said mide Iwasedzung ausgewe",
"aggregategroups": "Grubbe zsommefasse",
"tpt-aggregategroup-add": "Dzufiesche",
"tpt-aggregategroup-save": "Schbaischare",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/pl.json b/www/wiki/extensions/Translate/i18n/pagetranslation/pl.json
index 4aefeadb..3e490230 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/pl.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/pl.json
@@ -13,7 +13,9 @@
"WTM",
"Woytecr",
"Matik7",
- "Py64"
+ "Py64",
+ "Jdx",
+ "Mazab IZW"
]
},
"pagetranslation": "Tłumaczenie stron",
@@ -37,7 +39,7 @@
"tpt-offer-notify": "Możesz <span class=\"plainlinks\">[$1 powiadomić tłumaczy]</span> o tej stronie.",
"tpt-showpage-intro": "Poniżej wypisane są nowe, istniejące i usunięte sekcje.\nPrzed oznaczeniem tej wersji do tłumaczenia, aby uniknąć niepotrzebnej pracy tłumaczy, sprawdź czy zmiany w sekcjach zostały zminimalizowane.",
"tpt-mark-summary": "Oznaczono tę wersję do tłumaczenia",
- "tpt-mark-nochanges": "Nie ma różnicy pomiędzy tą wersją a wersją ostatnio oznaczoną.",
+ "tpt-mark-nochanges": "Nie ma zmian do przejrzenia. Oznaczenie tej strony do tłumaczenia nie spowoduje jej zmiany ani żadnej istniejącej jednostki tłumaczeń.",
"tpt-edit-failed": "Nie udało się zaktualizować strony $1",
"tpt-duplicate": "Nazwa jednostki tłumaczenia $1 jest używana więcej niż jeden raz.",
"tpt-already-marked": "Najnowsza wersja tej strony już wcześniej została oznaczona do tłumaczenia.",
@@ -57,22 +59,24 @@
"tpt-sections-prioritylangs": "Języki priorytetowe",
"tpt-rev-mark": "oznacz do tłumaczenia",
"tpt-rev-unmark": "usuń z tłumaczenia",
- "tpt-rev-discourage": "zniechęcić",
- "tpt-rev-encourage": "Przywracanie",
+ "tpt-rev-discourage": "zniechęć",
+ "tpt-rev-encourage": "przywróć",
"tpt-rev-mark-tooltip": "Oznacz najnowszą wersję tej strony do tłumaczenia.",
"tpt-rev-unmark-tooltip": "Usuń tę stronę z tłumaczenia.",
"tpt-rev-discourage-tooltip": "Zniechęć do dalszych tłumaczeń na tej stronie.",
"tpt-rev-encourage-tooltip": "Przywrócić tę stronę do zwykłego tłumaczenia.",
"translate-tag-translate-link-desc": "Przetłumacz tę stronę",
"translate-tag-markthis": "Oznacz tę stronę do tłumaczenia",
- "translate-tag-markthisagain": "Ta strona została zmieniona <span class=\"plainlinks\">[$1 razy]</span>, od kiedy ostatnio była <span class=\"plainlinks\">[$2 oznaczona do tłumaczenia]</span>.",
+ "translate-tag-markthisagain": "Ta strona została <span class=\"plainlinks\">[$1 zmieniona]</span>, od kiedy po raz ostatni była <span class=\"plainlinks\">[$2 oznaczona do tłumaczenia]</span>.",
"translate-tag-hasnew": "Ta strona zawiera <span class=\"plainlinks\">[$1 zmiany]</span>, które nie zostały oznaczone do tłumaczenia.",
"tpt-translation-intro": "Ta strona to <span class=\"plainlinks\">[$1 przetłumaczona wersja]</span> strony [[$2]], a tłumaczenie jest ukończone w $3%.",
+ "tpt-translation-intro-fuzzy": "Tak są oznaczane nieaktualne tłumaczenia.",
"tpt-languages-legend": "Inne języki:",
"tpt-languages-zero": "Rozpocznij tłumaczenie na ten język",
"tpt-languages-nonzero": "$1 (przetłumaczono $2%)",
"tpt-tab-translate": "Przetłumacz",
"tpt-target-page": "Ta strona nie może zostać zaktualizowana ręcznie.\nJest ona tłumaczeniem strony [[$1]], a tłumaczenie może zostać zmienione za pomocą [$2 narzędzia tłumacza].",
+ "tpt-patrolling-blocked": "Ta strona nie może zostać oznaczona jako sprawdzona. Skorzystaj z odpowiedniej akcji narzędzia tłumacza, aby ją przejrzeć.",
"tpt-unknown-page": "Ta przestrzeń nazw jest zarezerwowana dla tłumaczeń stron z zawartością.\nStrona, którą próbujesz edytować, prawdopodobnie nie odpowiada żadnej stronie oznaczonej do tłumaczenia.",
"tpt-translation-restricted": "Tłumaczenie tej strony na ten język zostało zablokowane przez administratora tłumaczenia.\n\nPowód: $1",
"tpt-discouraged-language-force-header": "Ta strona nie może być przetłumaczona na $1.",
@@ -83,7 +87,7 @@
"tpt-discouraged-language": "<strong>Tłumaczenie na $2 jest priorytetowe dla tej strony.</strong>\n\nAdministrator tłumaczeń zdecydował, aby tłumaczenie wykonać przede wszystkim dla $3.",
"tpt-discouraged-language-reason": "Powód: $1",
"tpt-priority-languages": "Administrator tłumaczenia ustawił języki priorytetowe dla tej grupy jako $1 .",
- "tpt-render-summary": "Aktualizowanie w celu dopasowania nowej wersji strony źródłowej",
+ "tpt-render-summary": "Aktualizowanie w celu dopasowania do nowej wersji strony źródłowej",
"aggregategroups": "Grupy zbiorcze",
"tpt-aggregategroup-add": "Dodaj",
"tpt-aggregategroup-save": "Zapisz",
@@ -110,14 +114,25 @@
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|zmienił|zmieniła}} nazwę strony przeznaczonej do tłumaczenia z $3 na $4",
"logentry-pagetranslation-movenok": "$1 {{GENDER:$2|napotkał|napotkała}} problem podczas przenoszenia strony $3 do $4",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|zakończył|zakończyła}} usuwanie strony przeznaczonej do tłumaczenia $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|Nie udało się}} usunąć $3 należącej do tłumaczonej strony $4",
"logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|usunął|usunęła}} stronę przeznaczoną do tłumaczenia $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|Nie udało się}} usunąć $3 należącej do przetłumaczonej strony $4",
"logentry-pagetranslation-encourage": "$1 {{GENDER:$2|zachęcił|zachęciła}} do tłumaczenia $3",
"logentry-pagetranslation-discourage": "$1 {{GENDER:$2|zniechęcił|zniechęciła}} do tłumaczenia $3",
"logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|usunął|usunęła}} języki priorytetowe ze strony przeznaczonej do tłumaczenia $3",
- "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|ustawił|ustawiła}} języki priorytetowe dla strony przeznaczonej do tłumaczenia $3 do $5",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|ustawił|ustawiła}} języki priorytetowe dla strony przeznaczonej do tłumaczenia $3 na $5",
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ograniczył|ograniczyła}} języki dla strony przeznaczonej do tłumaczenia $3 do $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|dodał|dodała}} stronę przeznaczoną do tłumaczenia $3 do grupy zbiorczej $4",
"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-move": "Przenoszenie stron",
+ "log-action-filter-pagetranslation-delete": "Usuwanie stron",
+ "log-action-filter-pagetranslation-encourage": "Zachęcanie do tłumaczenia",
+ "log-action-filter-pagetranslation-discourage": "Zniechęcanie do tłumaczenia",
+ "log-action-filter-pagetranslation-prioritylanguages": "Zmiana języków priorytetowych",
+ "log-action-filter-pagetranslation-aggregategroups": "Zmiany w grupach zbiorczych",
"pt-movepage-title": "Przenieś przetłumaczalną stronę $1",
"pt-movepage-blockers": "Przetłumaczalna strona nie może zostać przeniesiona pod nową nazwę ponieważ {{PLURAL:$1|wystąpił następujący błąd|wystąpiły następujące błędy:}}",
"pt-movepage-block-base-exists": "Istnieje docelowa strona przeznaczona do tłumaczenia [[:$1]].",
@@ -130,7 +145,8 @@
"pt-movepage-block-subpage-invalid": "Nazwa docelowej podstrony [[:$1]] jest nieprawidłowa. Może jest zbyt długa?",
"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}} jednostki tł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ę",
@@ -142,8 +158,8 @@
"pt-movepage-action-perform": "Przenieś",
"pt-movepage-action-other": "Zmiana celu",
"pt-movepage-intro": "Ta strona specjalna umożliwia przenoszenie stron, które zostały oznaczone jako wymagające tłumaczenia.\nDziałanie przenoszenia nie jest natychmiastowe, ponieważ wiele stron wymaga przenoszenia.\nPodczas gdy strony są przenoszone, nie jest możliwa praca z tymi stronami poprzez zapytania.\nBłędy zostaną odnotowane na [[Special:Log/pagetranslation|stronie rejestru tłumaczeń]] i muszą zostać naprawione ręcznie.",
- "pt-movepage-logreason": "Część przetłumaczalnej strony $1.",
- "pt-movepage-started": "Strona bazowa jest teraz przenoszona. \nProszę sprawdzić na [[Special:Log/pagetranslation|stronie rejestru tłumaczeń]] czy nie wystąpiły błędy oraz komunikat o zakończeniu operacji.",
+ "pt-movepage-logreason": "Część strony do tłumaczenia „$1”",
+ "pt-movepage-started": "Sprawdź [[Special:Log/pagetranslation|dziennik tłumaczenia stron]] pod względem błędów i komunikatów zakończenia.",
"pt-locked-page": "Ta strona jest zablokowana ponieważ jest przygotowana do przeniesienia.",
"pt-deletepage-lang-title": "Usuwanie strony tłumaczenia „$1”",
"pt-deletepage-full-title": "Usuwanie strony do tłumaczenia „$1”",
@@ -160,14 +176,15 @@
"pt-deletepage-subpages": "Usuń wszystkie podstrony",
"pt-deletepage-list-pages": "Lista stron do usunięcia",
"pt-deletepage-list-translation": "Strony tłumaczeń",
- "pt-deletepage-list-section": "Strony jednostki tłumaczenia",
+ "pt-deletepage-list-section": "Strony jednostek tłumaczenia",
"pt-deletepage-list-other": "Inne podstrony",
"pt-deletepage-list-count": "W sumie $1 {{PLURAL:$1|strona|strony|stron}} do usunięcia.",
- "pt-deletepage-full-logreason": "Część strony do tłumaczenia $1.",
- "pt-deletepage-lang-logreason": "Część strony tłumaczenia $1.",
- "pt-deletepage-started": "Sprawdź [[Special:Log/pagetranslation|dziennik strony tłumaczenia]] pod względem błędów i komunikatów zakończenia.",
+ "pt-deletepage-full-logreason": "Część strony do tłumaczenia „$1”",
+ "pt-deletepage-lang-logreason": "Część strony tłumaczenia „$1”",
+ "pt-deletepage-started": "Sprawdź [[Special:Log/pagetranslation|dziennik tłumaczenia stron]] pod względem błędów i komunikatów zakończenia.",
"pt-deletepage-intro": "Ta specjalna strona pozwala na usuwanie całej strony przeznaczonej do tłumaczenia lub pojedynczej strony w danym języku.\nAkcja usuwania nie będzie natychmiastowa, ponieważ wszystkie strony zależne od podanych również będą usunięte.\nBłędy będą rejestrowane [[Special:Log/pagetranslation|w dzienniku tłumaczenia strony]] i muszą być naprawione ręcznie.",
"pagemigration": "Migracja stron do tłumaczenia",
+ "pagemigration-summary": "Określ stronę z tłumaczeniem i przywróć wszelkie tłumaczenia dokonane przed włączeniem na danej stronie systemu tłumaczenia.",
"pm-import-button-label": "Importuj",
"pm-savepages-button-label": "Zapisz",
"pm-cancel-button-label": "Anuluj",
@@ -175,14 +192,16 @@
"pm-old-translations-missing": "$1 nie zawiera starego tłumaczenia",
"pm-extra-units-warning": "Mogą występować dodatkowe jednostki. Proszę odpowiednio dopasować jednostki źródła i tłumaczenia.",
"pm-pagename-missing": "Podaj nazwę strony",
- "pm-langcode-missing": "Proszę podać kod języka",
"pm-add-icon-hover-text": "Dodaj jednostkę poniżej",
"pm-swap-icon-hover-text": "Zamień z jednostką poniżej",
"pm-delete-icon-hover-text": "Usuń jednostkę",
"pm-pagetitle-placeholder": "Podaj tytuł strony",
"pm-pagetitle-invalid": "Podaj poprawny tytuł strony. Powinien być w formacie <page-name>/<language-code>.",
"pm-pagetitle-missing": "Podaj tytuł strony.",
+ "pm-langcode-missing": "Wydaje się, że w tytule brakuje kodu języka. Wprowadź tytuł strony w formacie <nazwa strony>/<kod języka>.",
"pm-summary-import": "Importowane tłumaczenie za pomocą [[Special:PageMigration|migracji strony]]",
+ "pm-on-import-message-text": "Zaimportowano stare tłumaczenia. Użyj opcji dodaj, zamień i usuń, aby dopasować jednostki tłumaczenia, a następnie kliknij przycisk \"{{int:pm-savepages-button-label}}\", aby je zapisać. Kliknij przycisk \"{{int:pm-cancel-button-label}}\", aby je odrzucić.",
+ "pm-on-save-message-text": "Jednostki tłumaczenia zostały zapisane. Możesz teraz wpisać tytuł nowej przetłumaczonej strony, aby dokonać migracji lub dokonać zmian w poniższych jednostkach i zapisać nową wersję.",
"tpt-translate-title": "Umożliwienie tłumaczenia tytułu strony",
"pp-save-summary": "Przygotowano stronę do tłumaczenia",
"pagepreparation": "Przygotowanie strony do tłumaczenia",
@@ -191,6 +210,7 @@
"pp-save-button-label": "Zapisz",
"pp-cancel-button-label": "Anuluj",
"pp-save-message": "Strona została zapisana. Możesz ją [$1 edytować].",
+ "pp-prepare-message": "Strona została przygotowana do tłumaczenia. Przejrzyj poniższy diff. Jeśli wszystko jest porządku, kliknij przycisk „{{int:pp-save-button-label}}”!",
"pp-already-prepared-message": "Wydaje się, że ta strona została już przygotowana do tłumaczenia. Nie ma żadnych zmian w porównaniu z poprzednią wersją.",
"pp-pagename-missing": "Podaj nazwę strony.",
"pp-diff-old-header": "Tekst źródłowy",
@@ -198,5 +218,6 @@
"tpt-unlink-confirm": "Proszę potwierdzić, że na pewno chcesz usunąć tę stronę z systemu tłumaczenia.\nWybór języka i przetłumaczone nazwy stron przestaną działać.\nStrony tłumaczenia będą edytowalne.",
"tpt-unlink-button": "Usuń z tłumaczenia.",
"tpt-unlink-summary": "Usunięto stronę z tłumaczenia.",
+ "tpt-generic-confirm": "Proszę potwierdzić akcję.",
"tpt-generic-button": "Potwierdź"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/pms.json b/www/wiki/extensions/Translate/i18n/pagetranslation/pms.json
index eb2ae466..4606998b 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/pms.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/pms.json
@@ -8,12 +8,9 @@
"pagetranslation": "Tradussion dle pàgine",
"right-pagetranslation": "Marché le version dle pàgine për la tradussion",
"action-pagetranslation": "gestì le pàgine da volté",
- "tpt-desc": "Estension për fé la tradussion dle pàgine ëd contnù",
"tpt-section": "Unità ëd tradussion $1",
"tpt-section-new": "Neuva unità ëd tradussion.\nNòm: $1",
"tpt-section-deleted": "Unità ëd tradussion $1",
- "tpt-template": "Model ëd pàgina",
- "tpt-templatediff": "Ël model dla pàgina a l'é cangià.",
"tpt-diff-old": "Test ëd prima",
"tpt-diff-new": "Test neuv",
"tpt-submit": "Marca costa version për la tradussion",
@@ -26,7 +23,6 @@
"tpt-oldrevision": "$2 a l'é nen l'ùltima version dla pàgina [[:$1]].\nMach j'ùltime version a peulo esse marcà për la tradussion.",
"tpt-notsuitable": "La pàgina $1 a va nen bin për la tradussion.\nCh'a contròla ch'a l'abia le tichëtte <nowiki><translate></nowiki> e na sintassi bon-a.",
"tpt-saveok": "La pàgina [[:$1]] a l'é stàita marcà për la tradussion con $2 {{PLURAL:$2|unità ëd tradussion|unità ëd tradussion}}.\nAdess la pàgina a peul esse <span class=\"plainlinks\">[$3 voltà]</span>.",
- "tpt-badsect": "«$1» a l'é pa un nòm bon për l'unità ëd tradussion $2.",
"tpt-showpage-intro": "Sì-sota a son listà j'unità ëd tradussion neuve, esistente e sganfà.\nPrima ëd marché costa version për la tradussion, controlé che le modìfiche a j'unità ëd tradussion a sio minimisà për evité dël travaj inùtil ai tradutor.",
"tpt-mark-summary": "Costa version a l'é stàita marcà për la tradussion",
"tpt-edit-failed": "Impossìbil d'agiorné la pàgina: $1",
@@ -59,6 +55,7 @@
"translate-tag-markthisagain": "Costa pàgina a l'ha avù <span class=\"plainlinks\">[$1 cangiament]</span> da cand a l'é stàita <span class=\"plainlinks\">[$2 marcà për la tradussion]</span> l'ùltima vira.",
"translate-tag-hasnew": "Costa pàgina a conten <span class=\"plainlinks\">[$1 cangiament]</span> ch'a son pa marcà për la tradussion.",
"tpt-translation-intro": "Sta pàgina-sì a l'é na <span class=\"plainlinks\">[$1 vërsion traduvùa]</span> ëd na pàgina [[$2]] e la tradussion a l'é $3% completa e agiornà.",
+ "tpt-translation-intro-fuzzy": "Tradussion pa agiornà a son marcà com costa.",
"tpt-languages-legend": "Àutre lenghe:",
"tpt-languages-zero": "Ancamin-a la tradussion për sta lenga",
"tpt-languages-nonzero": "$1 ($2% voltà)",
@@ -70,7 +67,6 @@
"tpt-discouraged-language-reason": "Rason: $1",
"tpt-priority-languages": "N'aministrator ëd tradussion a l'ha ampostà le lenghe prioritarie për sta partìa a $1.",
"tpt-render-summary": "Modifiché për esse com la neuva version dla pàgina sorgiss",
- "tpt-download-page": "Espòrta pàgina con tradussion",
"aggregategroups": "Partìe agregà",
"tpt-aggregategroup-add": "Gionta",
"tpt-aggregategroup-save": "Salva",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ps.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ps.json
index 2640e00e..a3598823 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ps.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ps.json
@@ -1,12 +1,12 @@
{
"@metadata": {
"authors": [
- "Ahmed-Najib-Biabani-Ibrahimkhel"
+ "Ahmed-Najib-Biabani-Ibrahimkhel",
+ "Baloch Khan",
+ "Amjad Khan"
]
},
"pagetranslation": "د مخ ژباړه",
- "tpt-template": "د مخ کينډۍ",
- "tpt-templatediff": "د مخ کينډۍ بدلون موندلی.",
"tpt-diff-old": "پخوانی متن",
"tpt-diff-new": "نوی متن",
"tpt-sections-template": "د ژباړې د مخ کينډۍ",
@@ -18,6 +18,8 @@
"tpt-rev-encourage": "بيازېرمل",
"translate-tag-translate-link-desc": "همدا مخ ژباړل",
"translate-tag-markthis": "همدا مخ د ژباړې لپاره په نښه کول",
+ "tpt-translation-intro": "دا پاڼه د [[$2]] مخ <span class=\"plainlinks\">[$1 ژباړل شوي بڼه] ده </span> او ددي ژباړه تر ٪$3 پوري بشپړه شوي ده.",
+ "tpt-translation-intro-fuzzy": "تر تاریخ وتلې ژباړي په دي ډول مارک شوي دي.",
"tpt-languages-legend": "نورې ژبې:",
"tpt-languages-nonzero": "$1 ($2% وژباړل شو)",
"tpt-tab-translate": "ژباړل",
@@ -57,8 +59,6 @@
"pt-deletepage-list-other": "نور واړه مخونه",
"pm-savepages-button-label": "خوندي کول",
"pm-cancel-button-label": "ناگارل",
- "pm-pagename-placeholder": "د مخ نوم ورکړئ",
- "pm-langcode-placeholder": "د ژبې کوډ",
"pm-page-does-not-exist": "$1 نشته.",
"tpt-translate-title": "د مخ سرليک د ژباړې پرېښه",
"pp-pagename-placeholder": "د مخ نوم ورکړئ",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/pt-br.json b/www/wiki/extensions/Translate/i18n/pagetranslation/pt-br.json
index af22735b..09dbc15e 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/pt-br.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/pt-br.json
@@ -10,18 +10,17 @@
"Fabsouza1",
"Rodrigo codignoli",
"He7d3r",
- "Fasouzafreitas"
+ "Fasouzafreitas",
+ "Felipe L. Ewald",
+ "Eduardo Addad de Oliveira"
]
},
"pagetranslation": "Tradução de páginas",
"right-pagetranslation": "Marca versões de páginas para tradução",
"action-pagetranslation": "gerir páginas traduzíveis",
- "tpt-desc": "Extensão para traduzir páginas de conteúdo",
"tpt-section": "Unidade de tradução $1",
"tpt-section-new": "Nova unidade de tradução.\nNome: $1",
"tpt-section-deleted": "Unidade de tradução $1",
- "tpt-template": "Modelo de página",
- "tpt-templatediff": "O modelo de página foi modificado.",
"tpt-diff-old": "Texto anterior",
"tpt-diff-new": "Novo texto",
"tpt-submit": "Marcar esta versão para tradução",
@@ -34,9 +33,11 @@
"tpt-oldrevision": "$2 não é a versão atual da página [[:$1]].\nApenas as versões atuais pode ser marcadas para tradução.",
"tpt-notsuitable": "A página $1 não está adequada para tradução.\nTenha certeza que ela tenha marcas <nowiki><translate></nowiki> e sintaxe válida.",
"tpt-saveok": "A página [[:$1]] foi marcada para tradução com $2 {{PLURAL:$2|unidade|unidades}} de tradução.\nA página já pode ser <span class=\"plainlinks\">[$3 traduzida]</span>.",
- "tpt-badsect": "\"$1\" não é um nome válido para a unidade de tradução $2.",
+ "tpt-saveok-first": "Você pode [[Special:PageMigration|importar tradução pré-existente]] para esta página (se houver).",
+ "tpt-offer-notify": "Você pode <span class=\"plainlinks\">[$1 notificar tradutores]</span> sobre esta página.",
"tpt-showpage-intro": "A seguir estão listadas as unidades de tradução novas, existentes e removidas.\nAntes de marcar esta versão para tradução, verifique se as mudanças nas unidades de tradução foram minimizadas, para que seja evitado trabalho desnecessário aos tradutores.",
"tpt-mark-summary": "Marcou esta versão para tradução",
+ "tpt-mark-nochanges": "Nenhuma alteração para revisar. Marcar esta página para tradução não editará a página nem qualquer unidade de tradução existente.",
"tpt-edit-failed": "Não foi possível atualizar a página: $1",
"tpt-duplicate": "$1 é usado como nome de unidade de tradução mais de uma vez.",
"tpt-already-marked": "A versão atual desta página já foi marcada para tradução.",
@@ -57,7 +58,7 @@
"tpt-rev-mark": "marcar para traduzir",
"tpt-rev-unmark": "remover das traduções",
"tpt-rev-discourage": "desmarcar de traduzir",
- "tpt-rev-encourage": "retomar traduções",
+ "tpt-rev-encourage": "restaurar",
"tpt-rev-mark-tooltip": "Sinaliza para tradução a edição mais recente desta página.",
"tpt-rev-unmark-tooltip": "Retira a página da listagem das que podem ser traduzidas.",
"tpt-rev-discourage-tooltip": "Faz com que a página não receba novas traduções.",
@@ -67,21 +68,25 @@
"translate-tag-markthisagain": "Esta página tem <span class=\"plainlinks\">[$1 alterações]</span> desde a última vez em que ela foi <span class=\"plainlinks\">[$2 marcada para tradução]</span>.",
"translate-tag-hasnew": "Esta página contém <span class=\"plainlinks\">[$1 alterações]</span> que não estão marcadas para tradução.",
"tpt-translation-intro": "Esta página é uma <span class=\"plainlinks\">[$1 versão traduzida]</span> da página [[$2]]. Sua tradução está $3% completa.",
+ "tpt-translation-intro-fuzzy": "Traduções desatualizadas estão marcadas desta forma.",
"tpt-languages-legend": "Outros idiomas:",
+ "tpt-languages-separator": "&#160;•&#32;",
"tpt-languages-zero": "Iniciar a tradução para este idioma",
"tpt-languages-nonzero": "$1 ($2% traduzido)",
"tpt-tab-translate": "Traduzir",
"tpt-target-page": "Esta página não pode ser atualizada manualmente.\nEsta página é uma tradução da página [[$1]]. Sua tradução pode ser atualizada usando [$2 a ferramenta de tradução].",
+ "tpt-patrolling-blocked": "Esta página não pode ser patrulhada. Em vez disso, use a ação de tradução para analisá-la.",
"tpt-unknown-page": "Este espaço nominal é reservado para traduções de páginas de conteúdo.\nA página que você está tentando editar não aparenta corresponder a nenhuma página marcada para tradução.",
"tpt-translation-restricted": "Um coordenador de traduções desautorizou que esta página seja traduzida para este idioma.\n\nMotivo: $1",
"tpt-discouraged-language-force-header": "Est página não pode ser traduzida para $1.",
"tpt-discouraged-language-force-content": "Um administrador de tradução decidiu que esta página só pode ser traduzida para $1.",
+ "tpt-discouraged-language-header": "Traduzir para $1 não é uma prioridade para esta página.",
+ "tpt-discouraged-language-content": "Um administrador de tradução decidiu concentrar os esforços de tradução em $1.",
"tpt-discouraged-language-force": "<strong>Esta página não pode ser traduzida para $2.</strong>\n\nUm administrador de traduções decidiu que a página só pode ser traduzida para $3.",
"tpt-discouraged-language": "<strong>A tradução para $2 não é prioritária para esta página.</strong>\n\nUm administrador de traduções decidiu focar o esforço de tradução em $3.",
"tpt-discouraged-language-reason": "Motivo: $1",
"tpt-priority-languages": "Um coordenador de traduções definiu como idiomas prioritários para este grupo $1.",
"tpt-render-summary": "Atualizando para corresponder à nova versão da página de origem",
- "tpt-download-page": "Exportar página e suas traduções",
"aggregategroups": "Grupos agregadores",
"tpt-aggregategroup-add": "Adicionar",
"tpt-aggregategroup-save": "Salvar",
@@ -90,6 +95,11 @@
"tpt-aggregategroup-new-description": "Descrição (opcional):",
"tpt-aggregategroup-remove-confirm": "Tem certeza que deseja remover este grupo agregador?",
"tpt-aggregategroup-invalid-group": "Grupo inexistente",
+ "tpt-aggregategroup-edit-name": "Nome:",
+ "tpt-aggregategroup-edit-description": "Descrição:",
+ "tpt-aggregategroup-update": "Salvar",
+ "tpt-aggregategroup-update-cancel": "Cancelar",
+ "tpt-invalid-group": "Grupo inválido",
"pt-parse-open": "O elemento &lt;translate> está desequilibrado.\nModelo de tradução: <pre>$1</pre>",
"pt-parse-close": "O elemento &lt;/translate> está desequilibrado.\nModelo de tradução: <pre>$1</pre>",
"pt-parse-nested": "Não são permitidas unidades de tradução &lt;translate> cruzadas.\nTexto do elemento: <pre>$1</pre>",
@@ -99,8 +109,30 @@
"log-description-pagetranslation": "Registro para operações relacionadas com o sistema de tradução de páginas",
"log-name-pagetranslation": "Registro de tradução de páginas",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|marcou}} $3 para tradução",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|removeu}} $3 das páginas para tradução",
- "pt-movepage-title": "Mover a página traduzível $1",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|removeu}} $3 do sistema de tradução",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|completou}} a renomeação da página traduzível $3 para $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|encontrou}} um problema ao mover a página $3 para $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|completou}} a eliminação da página traduzível $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|falhou}} ao excluir $3 que pertence à página traduzível $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|completou}} a eliminação da página de tradução $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|falhou}} ao excluir $3 que pertence à página de tradução $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|incentivou}} a tradução de $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|desencorajou}} tradução de $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|removeu}} idiomas de prioridade da página traduzível $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|definiu}} idiomas prioritários para página traduzíveis $3 a $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|limitou}} idiomas para página traduzível $3 a $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER: $2|adicionado}} página traduzível $3 para grupo agregado $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|removeu}} página traduzível $3 do grupo agregado $4",
+ "log-action-filter-pagetranslation": "Tipo de ação:",
+ "log-action-filter-pagetranslation-mark": "Marcar para tradução",
+ "log-action-filter-pagetranslation-unmark": "Remoção da tradução",
+ "log-action-filter-pagetranslation-move": "Páginas movidas",
+ "log-action-filter-pagetranslation-delete": "Exclusões de página",
+ "log-action-filter-pagetranslation-encourage": "Encorajamento de tradução",
+ "log-action-filter-pagetranslation-discourage": "Desencorajamento da tradução",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modificação de idioma de prioridade",
+ "log-action-filter-pagetranslation-aggregategroups": "Modificação de grupos agregados",
+ "pt-movepage-title": "Mover a página traduzível \"$1\"",
"pt-movepage-blockers": "A página traduzível não pode ser movida para outro nome devido {{PLURAL:$1|ao seguinte erro|aos seguintes erros}}:",
"pt-movepage-block-base-exists": "Existe a página traduzível de destino \"[[:$1]]\".",
"pt-movepage-block-base-invalid": "O nome da página traduzível de destino não é um título válido.",
@@ -113,6 +145,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",
@@ -124,12 +158,12 @@
"pt-movepage-action-perform": "Realizar a movimentação",
"pt-movepage-action-other": "Alterar o destino",
"pt-movepage-intro": "Esta página especial permite mover páginas que estão marcadas para tradução.\nA operação de movimentação não é instantânea, porque será necessário mover muitas páginas.\nEnquanto estiverem sendo movidas, não será possível interagir com as páginas em questão.\nAs falhas serão registradas no [[Special:Log/pagetranslation|registro de tradução de páginas]] e precisarão ser reparadas manualmente.",
- "pt-movepage-logreason": "Parte da página traduzível $1.",
- "pt-movepage-started": "A página base foi movida.\nVerifique no [[Special:Log/pagetranslation|registro de tradução de páginas]] eventuais mensagens de erro e/ou de atividade concluída.",
+ "pt-movepage-logreason": "Parte da página traduzível \"$1\"",
+ "pt-movepage-started": "Por favor, em um momento verifique no [[Special:Log/pagetranslation|registro de tradução de páginas]] por erros e mensagem de conclusão.",
"pt-locked-page": "Está página está bloqueada porque a página traduzível está sendo movida.",
- "pt-deletepage-lang-title": "Eliminar a página traduzível $1.",
- "pt-deletepage-full-title": "Eliminando a página traduzível $1.",
- "pt-deletepage-invalid-title": "A página especificada é inválida.",
+ "pt-deletepage-lang-title": "Eliminando a página de tradução \"$1\"",
+ "pt-deletepage-full-title": "Eliminando a página traduzível \"$1\"",
+ "pt-deletepage-invalid-title": "A página especificada não é valida.",
"pt-deletepage-invalid-text": "A página especificada não é uma página traduzível nem uma página traduzida.",
"pt-deletepage-action-check": "Listar páginas para eliminar",
"pt-deletepage-action-perform": "Eliminar",
@@ -145,20 +179,45 @@
"pt-deletepage-list-section": "Páginas de unidades de tradução",
"pt-deletepage-list-other": "Outras subpáginas",
"pt-deletepage-list-count": "No total, $1 {{PLURAL:$1|página|páginas}} para serem eliminadas.",
- "pt-deletepage-full-logreason": "Parte da página traduzível $1.",
- "pt-deletepage-lang-logreason": "Parte da página traduzida $1.",
+ "pt-deletepage-full-logreason": "Parte da página traduzível \"$1\"",
+ "pt-deletepage-lang-logreason": "Parte da página de tradução \"$1\"",
"pt-deletepage-started": "Verifique no [[Special:Log/pagetranslation|registro de tradução de páginas]] eventuais mensagens de erro e/ou de atividade concluída.",
- "pt-deletepage-intro": "Esta página especial permite eliminar todas as páginas de uma página traduzível ou apenas as traduções de um idioma.\nA eliminação não será instantânea por serem muitas as páginas integrantes de cada conjunto.\nOs erros serão reportados no [[Special:Log/pagetranslation|registro de tradução de páginas]] e precisarão ser corrigidos manualmente.",
+ "pt-deletepage-intro": "Esta página especial permite excluir uma página completa traduzível ou uma página de tradução individual em um idioma.\nA ação de exclusão não será instantânea, porque todas as páginas que dependem delas também serão excluídas.\nAs falhas serão registradas no [[Special:Log/pagetranslation|log da página de tradução]] e elas precisam ser reparadas manualmente.",
"pagemigration": "Migração de página de tradução",
+ "pagemigration-summary": "Especifique uma página de tradução e restaure qualquer tradução feita antes do sistema Traduzir ter sido habilitado nessa página.",
+ "pm-import-button-label": "Importar",
"pm-savepages-button-label": "Salvar",
"pm-cancel-button-label": "Cancelar",
- "pm-pagename-placeholder": "Digite o nome da página",
- "pm-langcode-placeholder": "Código do idioma",
- "pm-page-does-not-exist": "$1 não existe",
- "pm-old-translations-missing": "$1 não contém traduções antigas",
- "pm-pagename-missing": "Por favor, insira o nome da página",
- "pm-langcode-missing": "Por favor, insira o código de idioma",
+ "pm-page-does-not-exist": "$1 não existe.",
+ "pm-old-translations-missing": "$1 não contém traduções antigas.",
+ "pm-extra-units-warning": "Podem existir unidades extras. Por favor, combine as unidades de origem e de conversão corretamente.",
+ "pm-pagename-missing": "Por favor, insira o nome da página.",
"pm-add-icon-hover-text": "Adicione uma unidade abaixo",
+ "pm-swap-icon-hover-text": "Trocar com a unidade abaixo",
"pm-delete-icon-hover-text": "Excluir unidade",
- "pm-pagetitle-invalid": "Por favor, forneça um título válido para á página."
+ "pm-pagetitle-placeholder": "Digite o título da página",
+ "pm-pagetitle-invalid": "Digite um título de página válido. Deve estar no formato <nome da página>/<código do idioma>.",
+ "pm-pagetitle-missing": "Por favor, insira o título da página.",
+ "pm-langcode-missing": "O código do idioma parece estar faltando no título. Por favor, digite o título da página no formato <page-name>/<language-code>.",
+ "pm-summary-import": "Tradução importada usando [[Special:PageMigration|migração de página]]",
+ "pm-on-import-message-text": "As antigas traduções foram importadas. Use as opções de adicionar, trocar e excluir para ajustar as unidades de tradução e clique no botão \"{{int: pm-savepages-button-label}}\" para salvá-las. Clique no botão \"{{int: pm-cancel-button-label}}\" para descartar.",
+ "pm-on-save-message-text": "As unidades de tradução foram salvas. Agora você pode inserir o título de uma nova página de tradução para migrá-la ou fazer alterações nas unidades abaixo e salvar uma nova revisão.",
+ "tpt-translate-title": "Permitir a tradução do título da página",
+ "pp-save-summary": "Preparar a página para tradução",
+ "pagepreparation": "Preparar esta página para tradução",
+ "pp-pagename-placeholder": "Digite o nome da página",
+ "pp-prepare-button-label": "Preparar",
+ "pp-save-button-label": "Salvar",
+ "pp-cancel-button-label": "Cancelar",
+ "pp-save-message": "A página foi salva. Você pode [$1 editá-la].",
+ "pp-prepare-message": "A página foi preparada para tradução. Veja o diferencial abaixo. Clique no botão \"{{int: pp-save-button-label}}\" se aprovado!",
+ "pp-already-prepared-message": "Parece que a página já foi preparada para tradução. Não há alterações em relação à versão anterior.",
+ "pp-pagename-missing": "Por favor, insira o nome da página.",
+ "pp-diff-old-header": "Texto-fonte",
+ "pp-diff-new-header": "Texto preparado",
+ "tpt-unlink-confirm": "Por favor, confirme que deseja realmente remover esta página do sistema de tradução.\nO seletor de idioma e os nomes das páginas traduzidas deixarão de funcionar.\nAs páginas de tradução se tornarão editáveis.",
+ "tpt-unlink-button": "Remover da tradução",
+ "tpt-unlink-summary": "Página removida da tradução",
+ "tpt-generic-confirm": "Por favor, confirme a ação.",
+ "tpt-generic-button": "Confirmar"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/pt.json b/www/wiki/extensions/Translate/i18n/pagetranslation/pt.json
index 3a3deef4..017701d5 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/pt.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/pt.json
@@ -31,9 +31,11 @@
"tpt-oldrevision": "$2 não é a versão mais recente da página [[:$1]].\nApenas as últimas versões podem ser marcadas para tradução.",
"tpt-notsuitable": "A página $1 não é adequada para tradução.\nCertifique-se de que a mesma contém os elementos <nowiki><translate></nowiki> e tem uma sintaxe válida.",
"tpt-saveok": "A página [[:$1]] foi marcada para tradução com $2 {{PLURAL:$2|unidade|unidades}} de tradução.\nA página pode agora ser <span class=\"plainlinks\">[$3 traduzida]</span>.",
+ "tpt-saveok-first": "Pode [[Special:PageMigration|importar uma tradução pré-existente]] para esta página (se ela existir).",
"tpt-offer-notify": "Pode enviar uma <span class=\"plainlinks\">[$1 notificação aos tradutores]</span> sobre esta página.",
"tpt-showpage-intro": "Estão listadas abaixo as unidades de tradução novas, existentes e apagadas.\nAntes de marcar esta versão para tradução, verifique que as alterações às unidades de tradução são minimizadas para evitar trabalho desnecessário para os tradutores.",
"tpt-mark-summary": "Marcou esta versão para tradução",
+ "tpt-mark-nochanges": "Não há mudanças para rever. Marcar esta página para tradução não editará a página nem nenhuma das unidades de tradução existentes.",
"tpt-edit-failed": "Não foi possível atualizar a página: $1",
"tpt-duplicate": "O nome $1 é usado mais do que uma vez nas unidades de tradução.",
"tpt-already-marked": "A versão mais recente desta página já foi marcada para tradução.",
@@ -64,11 +66,13 @@
"translate-tag-markthisagain": "Esta página tem <span class=\"plainlinks\">[$1 alterações]</span> desde a última vez que foi <span class=\"plainlinks\">[$2 marcada para tradução]</span>.",
"translate-tag-hasnew": "Esta página contém <span class=\"plainlinks\">[$1 alterações]</span> que não estão marcadas para tradução.",
"tpt-translation-intro": "Esta página é uma <span class=\"plainlinks\">[$1 versão traduzida]</span> da página [[$2]] e a tradução está $3% completa.",
+ "tpt-translation-intro-fuzzy": "As traduções desatualizadas estão marcadas desta forma.",
"tpt-languages-legend": "Outras línguas:",
"tpt-languages-zero": "Iniciar a tradução para esta língua",
"tpt-languages-nonzero": "$1 ($2% traduzida)",
"tpt-tab-translate": "Traduzir",
"tpt-target-page": "Esta página não pode ser atualizada manualmente.\nEla é uma tradução da página [[$1]] e a tradução pode ser atualizada usando [$2 a ferramenta de tradução].",
+ "tpt-patrolling-blocked": "Esta página não pode ser patrulhada. Em substituição, use a ação de tradução para revê-la.",
"tpt-unknown-page": "Este espaço nominal está reservado para traduções de páginas de conteúdo.\nA página que está a tentar editar não parece corresponder a nenhuma página marcada para tradução.",
"tpt-translation-restricted": "A tradução desta página para esta língua foi impedida por um administrador de traduções.\n\nMotivo: $1",
"tpt-discouraged-language-force-header": "Esta página não pode ser traduzida para $1.",
@@ -102,33 +106,44 @@
"log-description-pagetranslation": "Registo para operações relacionadas com o sistema de tradução de páginas",
"log-name-pagetranslation": "Registo de tradução de páginas",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|marcou}} a página $3 para tradução",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|retirou}} $3 das páginas para tradução",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|retirou}} $3 do sistema de tradução",
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|terminou}} a alteração do nome da página traduzível $3 para $4",
"logentry-pagetranslation-movenok": "$1 {{GENDER:$2|encontrou}} um problema ao mover a página $3 para $4",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|concluiu}} a eliminação da página traduzível $3",
"logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|não conseguiu}} eliminar $3, que pertence à página traduzível $4",
"logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|concluiu}} a eliminação da página traduzível $3",
"logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|não conseguiu}} eliminar $3, que pertence à página de tradução $4",
- "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|restaurou}} a tradução de $3",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|encorajou}} a tradução de $3",
"logentry-pagetranslation-discourage": "$1 {{GENDER:$2|desencorajou}} a tradução de $3",
"logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|removeu}} as línguas prioritárias da página traduzível $3",
"logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|definiu}} como línguas prioritárias da página traduzível $3 as línguas $5",
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|restringiu}} as línguas para a página traduzível $3 a $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|adicionou}} a página traduzível $3 ao grupo agregador $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|removeu}} a página traduzível $3 do grupo agregador $4",
- "pt-movepage-title": "Mover a página traduzível $1",
+ "log-action-filter-pagetranslation": "Tipo de ação:",
+ "log-action-filter-pagetranslation-mark": "Marcação para tradução",
+ "log-action-filter-pagetranslation-unmark": "Remoção das páginas para tradução",
+ "log-action-filter-pagetranslation-move": "Movimentações de páginas",
+ "log-action-filter-pagetranslation-delete": "Eliminações de páginas",
+ "log-action-filter-pagetranslation-encourage": "Encorajamento à tradução",
+ "log-action-filter-pagetranslation-discourage": "Desencorajamento de tradução",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modificação das línguas prioritárias",
+ "log-action-filter-pagetranslation-aggregategroups": "Modificação de grupos agregadores",
+ "pt-movepage-title": "Mover a página traduzível \"$1\"",
"pt-movepage-blockers": "A página traduzível não pode ser movida para outro nome devido {{PLURAL:$1|ao seguinte erro|aos seguintes erros}}:",
"pt-movepage-block-base-exists": "A página traduzível de destino \"[[:$1]]\" já existe.",
"pt-movepage-block-base-invalid": "A página traduzível de destino não tem um título válido.",
- "pt-movepage-block-tp-exists": "A página de tradução de destino [[:$2]] existe.",
- "pt-movepage-block-tp-invalid": "O título da página de tradução de destino para [[:$1]] seria inválido (talvez demasiado longo).",
- "pt-movepage-block-section-exists": "A página de destino [[:$2]] para a unidade de tradução já existe.",
- "pt-movepage-block-section-invalid": "O título da página de destino [[:$1]] para a unidade de tradução seria inválido (talvez demasiado longo).",
- "pt-movepage-block-subpage-exists": "A subpágina de destino [[:$2]] existe.",
- "pt-movepage-block-subpage-invalid": "O título da subpágina de destino para [[:$1]] seria inválido (talvez demasiado longo).",
+ "pt-movepage-block-tp-exists": "A página de tradução de destino \"[[:$2]]\" existe.",
+ "pt-movepage-block-tp-invalid": "O título da página de tradução de destino para \"[[:$1]]\" seria inválido (talvez demasiado longo).",
+ "pt-movepage-block-section-exists": "A página de destino \"[[:$2]]\" para a unidade de tradução existe.",
+ "pt-movepage-block-section-invalid": "O título da página de destino \"[[:$1]]\" para a unidade de tradução seria inválido (talvez demasiado longo).",
+ "pt-movepage-block-subpage-exists": "A subpágina de destino \"[[:$2]]\" existe.",
+ "pt-movepage-block-subpage-invalid": "O título da subpágina de destino para \"[[:$1]]\" seria inválido (talvez demasiado longo).",
"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|Páginas}} de seçã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",
@@ -140,8 +155,8 @@
"pt-movepage-action-perform": "Realizar a movimentação",
"pt-movepage-action-other": "Alterar o destino",
"pt-movepage-intro": "Esta página especial permite-lhe mover páginas que estão marcadas para tradução.\nA operação de movimentação não é instantânea, porque será necessário mover muitas páginas.\nEnquanto estas estão a ser movidas, não é possível interagir com as páginas em questão.\nAs falhas serão registadas no [[Special:Log/pagetranslation|registo de tradução de páginas]] e necessitam de ser reparadas manualmente.",
- "pt-movepage-logreason": "Parte da página traduzível $1.",
- "pt-movepage-started": "A página base foi movida.\nVerifique no [[Special:Log/pagetranslation|registo de tradução de páginas]] se ocorreram erros e se existe a mensagem de conclusão, por favor.",
+ "pt-movepage-logreason": "Parte da página traduzível \"$1\"",
+ "pt-movepage-started": "Verifique daqui a pouco no [[Special:Log/pagetranslation|registo de tradução de páginas]] se ocorreram erros e se existe a mensagem de conclusão, por favor.",
"pt-locked-page": "Esta página está bloqueada porque a página traduzível está a ser movida.",
"pt-deletepage-lang-title": "A eliminar a página traduzida \"$1\"",
"pt-deletepage-full-title": "A eliminar a página traduzível \"$1\"",
@@ -161,8 +176,8 @@
"pt-deletepage-list-section": "Páginas de unidades de tradução",
"pt-deletepage-list-other": "Outras subpáginas",
"pt-deletepage-list-count": "$1 {{PLURAL:$1|página|páginas}} para eliminar, no total.",
- "pt-deletepage-full-logreason": "Parte da página traduzível $1.",
- "pt-deletepage-lang-logreason": "Parte da página traduzida $1.",
+ "pt-deletepage-full-logreason": "Parte da página traduzível \"$1\"",
+ "pt-deletepage-lang-logreason": "Parte da página traduzida \"$1\"",
"pt-deletepage-started": "Verifique a existência de erros ou de uma mensagem de sucesso no [[Special:Log/pagetranslation|registo de traduções]].",
"pt-deletepage-intro": "Esta página especial permite eliminar toda uma página traduzível ou uma das suas traduções para uma língua.\nA eliminação não é instantânea, porque também serão eliminadas as páginas dependentes delas.\nOs problemas que ocorrerem serão registados no [[Special:Log/pagetranslation|registo de traduções]] e podem exigir reparação manual.",
"pagemigration": "Migração de página de tradução",
@@ -172,18 +187,20 @@
"pm-cancel-button-label": "Cancelar",
"pm-page-does-not-exist": "$1 não existe",
"pm-old-translations-missing": "$1 não contém tradução antigas",
- "pm-extra-units-warning": "Unidades extras podem estar presentes. Por favor, faça corresponder corretamente o código e a tradução",
- "pm-pagename-missing": "Por favor, introduza o nome da página",
+ "pm-extra-units-warning": "Podem existir unidades suplementares. Faça corresponder corretamente as unidades de origem às de tradução, por favor.",
+ "pm-pagename-missing": "Introduza o nome da página, por favor.",
"pm-add-icon-hover-text": "Adicionar uma unidade abaixo",
"pm-swap-icon-hover-text": "Trocar com a unidade abaixo",
"pm-delete-icon-hover-text": "Eliminar unidade",
"pm-pagetitle-placeholder": "Introduza o título da página",
- "pm-pagetitle-invalid": "Por favor, forneça um título válido de página. ´Deverá estar no formato <page-name>/<language-code>.",
- "pm-pagetitle-missing": "Por favor, introduza o título da página",
- "pm-langcode-missing": "O código do idioma parece estar em falta no título. Por favor, introduza o título da página no formato <page-name>/<language-code>.",
- "pm-summary-import": "Tradução importa utilizando a [[Special:PageMigration|migração de página]]",
+ "pm-pagetitle-invalid": "Introduza um título de página válido. Este deverá ter o formato <nome-da-página>/<código-de-língua>.",
+ "pm-pagetitle-missing": "Introduza o título da página, por favor.",
+ "pm-langcode-missing": "O código de língua parece estar em falta no título. Introduza o título da página no formato <nome-da-página>/<código-de-língua>, por favor.",
+ "pm-summary-import": "Tradução importada usando a [[Special:PageMigration|migração de página]]",
+ "pm-on-import-message-text": "As traduções antigas foram importadas. Use as opções acrescentar, trocar e eliminar para ajustar as unidades de tradução e clique o botão \"{{int:pm-savepages-button-label}}\" para gravá-las. Clique o botão \"{{int:pm-cancel-button-label}}\" para cancelar.",
+ "pm-on-save-message-text": "As unidades de tradução foram gravadas. Agora pode introduzir o título de uma página de tradução nova para migrá-la, ou fazer mudanças às unidades abaixo e gravar uma nova revisão.",
"tpt-translate-title": "Permitir tradução do título da página",
- "pp-save-summary": "Preparação de página para tradução",
+ "pp-save-summary": "Página preparada para tradução",
"pagepreparation": "Preparar página para tradução",
"pp-pagename-placeholder": "Introduza o nome da página",
"pp-prepare-button-label": "Preparar",
@@ -192,9 +209,12 @@
"pp-save-message": "A página foi gravada. Pode [$1 editá-la] agora.",
"pp-prepare-message": "A página foi preparada para tradução. Veja a comparação abaixo. Clique no botão \"{{int:pp-save-button-label}}\" se estiver tudo correto!",
"pp-already-prepared-message": "Parece que a página já foi preparada para tradução. Não há alterações em relação à versão anterior.",
- "pp-pagename-missing": "Por favor, introduza o nome da página.",
- "pp-diff-old-header": "Texto-fonte",
+ "pp-pagename-missing": "Introduza o nome da página, por favor.",
+ "pp-diff-old-header": "Texto fonte",
"pp-diff-new-header": "Texto preparado",
- "tpt-generic-confirm": "Por favor, confirme a ação.",
+ "tpt-unlink-confirm": "Confirme que pretende realmente eliminar esta página do sistema de tradução.\nO seletor de línguas e os nomes das páginas traduzidas deixarão de funcionar.\nAs páginas de tradução tornar-se-ão editáveis.",
+ "tpt-unlink-button": "Remover da tradução",
+ "tpt-unlink-summary": "Página removida da tradução",
+ "tpt-generic-confirm": "Confirme a ação, por favor.",
"tpt-generic-button": "Confirmar"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/qqq.json b/www/wiki/extensions/Translate/i18n/pagetranslation/qqq.json
index a50c97e2..029cf4ed 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/qqq.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/qqq.json
@@ -18,12 +18,15 @@
"Slboat",
"Umherirrender",
"Robby",
- "Liuxinyu970226"
+ "Liuxinyu970226",
+ "Guycn2",
+ "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}})",
+ "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)",
"tpt-section-new": "[[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)",
"tpt-section-deleted": "See definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - the identifier of the unit, or the string \"Page display title\" (special unit identifier for page title; hard-coded)",
@@ -38,7 +41,8 @@
"tpt-nosuchpage": "Parameters:\n* $1 - page title",
"tpt-oldrevision": "Error message displayed when trying to mark an older page revision for translation. Parameters:\n* $1 is a page title.\n* $2 is a page link.",
"tpt-notsuitable": "{{doc-important|Do not translate <code><nowiki><nowiki><translate></nowiki>&lt;/nowiki></code>.}}\nParameters:\n* $1 - page title\n* $2 - (Unused) revision ID",
- "tpt-saveok": "Followed by {{msg-mw|Tpt-offer-notify}}, if the user is allowed to notify translators.\n\nParameters:\n* $1 - page title\n* $2 - number of sections, can be used with PLURAL\n* $3 - URL which points to [[Special:Translate]]",
+ "tpt-saveok": "Followed by {{msg-mw|Tpt-saveok-first}} if the page is being marked for translation for the first time and {{msg-mw|Tpt-offer-notify}} if the user is allowed to notify translators.\n\nParameters:\n* $1 - page title\n* $2 - number of sections, can be used with PLURAL\n* $3 - URL which points to [[Special:Translate]]",
+ "tpt-saveok-first": "Message displayed on [[Special:PageTranslation]] after marking a page for translation the very first time.\n\nParameters:\n* $1 - a URL to [[Special:PageMigration]]",
"tpt-offer-notify": "Message displayed on [[Special:PageTranslation]] after marking a page for translation when the marking user also has right to notify translators.\n\nParameters:\n* $1 - a URL to [[Special:NotifyTranslators]] with the marked page preselected",
"tpt-showpage-intro": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
"tpt-mark-summary": "This message is used as an edit summary.",
@@ -46,34 +50,36 @@
"tpt-edit-failed": "Used as error message. Parameters:\n* $1 - page title",
"tpt-duplicate": "Used as error message.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - translation unit ID (name)",
"tpt-already-marked": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
- "tpt-unmarked": "Used as success message.\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-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]].",
"translate-tag-markthisagain": "\"has changes\" is to be understood as \"has been altered/edited\".\n\nParameters:\n* $1 - a link which points to the diff\n* $2 - a link which points to ...",
"translate-tag-hasnew": "\"has changes\" is to be understood as \"has been altered/edited\". $1 is a URL to view changes.",
"tpt-translation-intro": "Header of a translation page (see definition on [[mw:Help:Extension:Translate/Glossary]]).\n\nParameters:\n* $1 - URL\n* $2 - page title\n* $3 - translation percentage",
- "tpt-languages-legend": "The caption of a language selector displayed using <code><nowiki><languages /></nowiki></code>. e.g. on [[Project list]].\n{{Identical|Otherlanguages}}",
+ "tpt-translation-intro-fuzzy": "Example sentence styled as some content in the current page",
+ "tpt-languages-legend": "The caption of a language selector displayed using <code><nowiki><languages /></nowiki></code>. e.g. on [[mw:Project:About]].\n{{Identical|Otherlanguages}}",
"tpt-languages-separator": "{{optional}}",
"tpt-languages-zero": "Tooltip for a link in <code><nowiki><language /></nowiki></code> when language is included because it is a priority language, but translation does not yet exist.\n\nThe link directly points to the translation view ([[Special:Translate]]).\n\nTranslate this as \"Start translating (the page) into this language\".",
"tpt-languages-nonzero": "Tooltip for a link to go to a translated version of a translatable page.\n\nParameters:\n* $1 - page title (translated if present)\n* $2 - translation percentage, without decimals (supports PLURAL)",
@@ -110,7 +116,7 @@
"pt-shake-multiple": "Each translation unit (=section) can only contain one marker.\n\nParameters:\n* $1 - translation unit (=section) text",
"pt-shake-position": "Error shown after an attempt to mark a page for translation, see [[mw:Help:Extension:Translate/Page translation administration]] for context.\n\nSee definitions on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - translation unit (=section) text",
"pt-shake-empty": "Translation unit (=section) is empty except for the translation marker (=<nowiki><!--T:1--></nowiki>).\n\nParameters:\n* $1 - translation unit ID",
- "log-description-pagetranslation": "Description of a log type",
+ "log-description-pagetranslation": "Description of a log type on [[Special:Log/pagetranslation]]",
"log-name-pagetranslation": "{{doc-logpage}}",
"logentry-pagetranslation-mark": "{{logentry|[[Special:Log/pagetranslation]]}}",
"logentry-pagetranslation-unmark": "{{logentry|[[Special:Log/pagetranslation]]}}",
@@ -127,6 +133,15 @@
"logentry-pagetranslation-prioritylanguages-force": "{{logentry|[[Special:Log/pagetranslation]]}}\n* $5 is list of languages (A, B and C)",
"logentry-pagetranslation-associate": "{{logentry|[[Special:Log/pagetranslation]]}}\n* $4 is the name of the aggregate group",
"logentry-pagetranslation-dissociate": "{{logentry|[[Special:Log/pagetranslation]]}}\n* $4 is the name of the aggregate group",
+ "log-action-filter-pagetranslation": "{{doc-log-action-filter-type|pagetranslation}}\n{{Related|Log-action-filter}}",
+ "log-action-filter-pagetranslation-mark": "{{doc-log-action-filter-action|pagetranslation|mark}}",
+ "log-action-filter-pagetranslation-unmark": "{{doc-log-action-filter-action|pagetranslation|unmark}}",
+ "log-action-filter-pagetranslation-move": "{{doc-log-action-filter-action|pagetranslation|move}}",
+ "log-action-filter-pagetranslation-delete": "{{doc-log-action-filter-action|pagetranslation|delete}}",
+ "log-action-filter-pagetranslation-encourage": "{{doc-log-action-filter-action|pagetranslation|encourage}}",
+ "log-action-filter-pagetranslation-discourage": "{{doc-log-action-filter-action|pagetranslation|discourage}}",
+ "log-action-filter-pagetranslation-prioritylanguages": "{{doc-log-action-filter-action|pagetranslation|prioritylanguages}}",
+ "log-action-filter-pagetranslation-aggregategroups": "{{doc-log-action-filter-action|pagetranslation|aggregategroups}}",
"pt-movepage-title": "Used as page title.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - old page title",
"pt-movepage-blockers": "See definition on [[mw:Help:Extension:Translate/Glossary]].\n\nFollowed by any of the following error messages:\n* {{msg-mw|Pt-movepage-block-base-exists}}\n* {{msg-mw|Pt-movepage-block-base-invalid}}\n* {{msg-mw|Pt-movepage-block-tp-exists}}\n* {{msg-mw|Pt-movepage-block-tp-invalid}}\n* {{msg-mw|Pt-movepage-block-section-exists}}\n* {{msg-mw|Pt-movepage-block-section-invalid}}\n* {{msg-mw|Pt-movepage-block-subpage-exists}}\n* {{msg-mw|Pt-movepage-block-subpage-invalid}}\n\nParameters:\n* $1 - number of error messages",
"pt-movepage-block-base-exists": "Error message to indicate a base page exists and a translatable page cannot be renamed. Parameters:\n* $1 is a pre-existing page name.",
@@ -140,6 +155,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]].",
@@ -185,14 +202,16 @@
"pm-old-translations-missing": "Parameters:\n* $1 - page title",
"pm-extra-units-warning": "Warning given when number of translation units are greater than the number of source units",
"pm-pagename-missing": "Error message given when page title field does not contain a base page name.",
- "pm-langcode-missing": "Error message given when the page title field does not contain a language code.",
"pm-add-icon-hover-text": "Hover text for add new unit icon",
"pm-swap-icon-hover-text": "Hover text for the icon on Special:PageMigration which, when clicked, swaps a unit (text area) with the unit below.",
"pm-delete-icon-hover-text": "Hover text for delete unit icon",
"pm-pagetitle-placeholder": "Placeholder for the page title input field.",
"pm-pagetitle-invalid": "Error message given when an invalid page title is entered",
"pm-pagetitle-missing": "Error message given when page title field is blank",
+ "pm-langcode-missing": "Error message given when the page title field does not contain a language code.",
"pm-summary-import": "Edit summary used while creating translation pages which were imported using [[Special:PageMigration]], see [[mw:Help:Extension:Translate/Page_translation_administration#Migrating to page translation]]",
+ "pm-on-import-message-text": "Message shown at Special:PageMigration after importing the translations",
+ "pm-on-save-message-text": "Message shown at Special:PageMigration after saving the translation units",
"tpt-translate-title": "Checkbox on Special:PageTranslation to mark title for translation",
"pp-save-summary": "Edit summary for saving a page prepared for translation by the tool",
"pagepreparation": "{{doc-special|PageMigration}}",
@@ -206,7 +225,7 @@
"pp-pagename-missing": "Error message given when page title field is blank",
"pp-diff-old-header": "Header text for old revision for the diff shown at Special:PagePreparation",
"pp-diff-new-header": "Header text for new revision for the diff shown at Special:PagePreparation",
- "tpt-unlink-confirm": "Confirmation message shown to user when unmarking page in active translation",
+ "tpt-unlink-confirm": "Confirmation message shown to user when unmarking page in active translation.",
"tpt-unlink-button": "Button text",
"tpt-unlink-summary": "Edit summary",
"tpt-generic-confirm": "Confirmation message shown to user on Special:PageTranslation. Mostly shown to users without JavaScript.",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/qu.json b/www/wiki/extensions/Translate/i18n/pagetranslation/qu.json
index 0e501f09..f6247f0f 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/qu.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/qu.json
@@ -4,5 +4,8 @@
"AlimanRuna"
]
},
- "tpt-languages-nonzero": "$1 ($2% t'ikrasqa)"
+ "pagetranslation": "P'anqakunata t'ikray",
+ "tpt-languages-nonzero": "$1 ($2% t'ikrasqa)",
+ "pt-movepage-list-translation": "T'ikrasqa {{PLURAL:$1|p'anqa|p'anqakuna}}",
+ "pt-deletepage-list-translation": "T'ikray p'anqakuna"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/rm.json b/www/wiki/extensions/Translate/i18n/pagetranslation/rm.json
index 8d9bc1f9..6ee9a347 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/rm.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/rm.json
@@ -2,11 +2,13 @@
"@metadata": {
"authors": [
"Gion-andri",
- "Minisarm"
+ "Minisarm",
+ "Terfili"
]
},
"pagetranslation": "Translaziun da paginas",
"tpt-diff-old": "Text precedent",
"tpt-diff-new": "Nov text",
- "tpt-languages-legend": "Autras linguas:"
+ "tpt-languages-legend": "Autras linguas:",
+ "tpt-languages-nonzero": "$1 ($2% translatà)"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ro.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ro.json
index 08eeaef6..cff20283 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ro.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ro.json
@@ -10,12 +10,9 @@
"pagetranslation": "Traducere pagini",
"right-pagetranslation": "Marchează versiuni ale paginilor pentru a fi traduse",
"action-pagetranslation": "administrați paginile traductibile",
- "tpt-desc": "Extensie pentru traducerea conținutului paginilor",
"tpt-section": "Unitate de traducere $1",
"tpt-section-new": "Unitate de traducere nouă.\nNume: $1",
"tpt-section-deleted": "Unitate de traducere $1",
- "tpt-template": "Șablon pagină",
- "tpt-templatediff": "Formatul paginii a fost schimbat.",
"tpt-diff-old": "Text precedent",
"tpt-diff-new": "Text nou",
"tpt-submit": "Marchează această versiune pentru traducere",
@@ -28,7 +25,6 @@
"tpt-oldrevision": "$2 nu este cea mai recentă versiune a paginii [[:$1]].\nDoar cele mai recente versiuni pot fi marcate pentru traducere.",
"tpt-notsuitable": "Pagina $1 nu se califică pentru traducere.\nAsigurați-vă că are eticheta <nowiki><translate></nowiki> și are o sintaxă validă.",
"tpt-offer-notify": "Puteți <span class=\"plainlinks\">[$1 notifica traducătorii]</span> despre această pagină.",
- "tpt-badsect": "„$1” nu este un nume valid pentru unitatea de traducere $2.",
"tpt-mark-summary": "Marcat această versiune pentru traducere",
"tpt-edit-failed": "Pagina nu a putut fi actualizată: $1",
"tpt-already-marked": "Ultima versiune a acestei pagini a fost deja marcată pentru traducere.",
@@ -53,6 +49,7 @@
"translate-tag-translate-link-desc": "Tradu această pagină",
"translate-tag-markthis": "Marchează această pagină pentru traducere",
"tpt-translation-intro": "Această pagină reprezintă <span class=\"plainlinks\">[$1 versiunea tradusă]</span> a paginii [[$2]], procesul de traducere fiind completat în proporție de $3%.",
+ "tpt-translation-intro-fuzzy": "Traducerile învechite sunt marcate în acest fel.",
"tpt-languages-legend": "Alte limbi:",
"tpt-languages-zero": "Începeți traducerea în această limbă",
"tpt-languages-nonzero": "$1 ($2% tradusă)",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/roa-tara.json b/www/wiki/extensions/Translate/i18n/pagetranslation/roa-tara.json
index f74d6677..b9600100 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/roa-tara.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/roa-tara.json
@@ -7,12 +7,9 @@
"pagetranslation": "Pàgene de traduzione",
"right-pagetranslation": "Signe le revisiune de le pàggene pe traduzione",
"action-pagetranslation": "gestisce le pàggene traducibbele",
- "tpt-desc": "Estenzione pa traduzione de le pàggene de condenute",
"tpt-section": "Aunità de traduzione $1",
"tpt-section-new": "Nova unità de traduzione.\nNome: $1",
"tpt-section-deleted": "Unità de traduzione $1",
- "tpt-template": "Pàgene d'u template",
- "tpt-templatediff": "'U template d'a pàgene ha cangiate.",
"tpt-diff-old": "Teste precedende",
"tpt-diff-new": "Teste nuève",
"tpt-submit": "Signe sta versione pa traduzione",
@@ -23,7 +20,6 @@
"tpt-badtitle": "'U nome d'a pàgene date ($1) non g'è 'nu titole valide",
"tpt-nosuchpage": "Pàgene $1 non g'esiste",
"tpt-oldrevision": "$2 non g'è l'urtema versione d'a pàgene [[:$1]].\nSulamende le urteme versiune ponne essere signate pa traduzione.",
- "tpt-badsect": "\"$1\" non g'è 'nu nome valide pe l'aunità de traduzione $2.",
"tpt-mark-summary": "Signate sta versione pa traduzione",
"tpt-edit-failed": "Non ge pozze aggiornà 'a pàgene: $1",
"tpt-duplicate": "'U nome $1 de l'aunità de traduzione ha state ausate cchiù de 'na vote.",
@@ -55,9 +51,37 @@
"tpt-aggregategroup-new-description": "Descrizione (opzionale):",
"tpt-aggregategroup-remove-confirm": "Sì secure ca vuè ccu scangille stu gruppe aggregate?",
"tpt-aggregategroup-invalid-group": "'U gruppe non g'esiste",
+ "tpt-aggregategroup-edit-name": "Nome:",
+ "tpt-aggregategroup-edit-description": "Descrizione:",
+ "tpt-aggregategroup-update": "Reggìstre",
+ "tpt-aggregategroup-update-cancel": "Annulle",
+ "tpt-invalid-group": "Gruppe invalide",
+ "log-description-pagetranslation": "Archivije pe le aziune collegate a 'u sisteme de traduzione d'a pàgene",
"log-name-pagetranslation": "Archivije de le traduziune de le pàggene",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|ave signate}} $3 pa traduzione",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|ave luate}} $3 da 'u sisteme de traduzione",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|ave combletate}} 'u spustamende d'a pàgene traducibbile $3 sus a $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|ave acchiate}} 'nu probleme mendre ca ste spustave 'a pàgene $3 sus a $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|ave combletate}} 'a scangellazione d'a pàgene traducibbile $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|ha sciute a male}} 'a scangellazione de $3 ca appartene 'a pàgene traducibbile $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|ave combletate}} 'a scangellazione d'a pàgene traducibbile $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|ha sciute a male}} 'a scangellazione de $3 ca appartene 'a pàgene traducibbile $4",
"logentry-pagetranslation-encourage": "$1 {{GENDER:$2|'ngoragge}} 'a traduzione de $3",
"logentry-pagetranslation-discourage": "$1 {{GENDER:$2|scoragge}} 'a traduzione de $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|ave luate}} le lènghe prioritarie da 'a pàgene traducibbile $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|ave mise}} le lènghe prioritarie da 'a pàgene traducibbile $3 sus a $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ave limitate}} le lènghe pa pàgene traducibbile $3 sus a $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|ave mise}} 'a pàgene traducibbile $3 jndr'à 'u gruppe aggregate $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|ave luate}} 'a pàgene traducibbile $3 da 'u gruppe aggregate $4",
+ "log-action-filter-pagetranslation": "Tipe de azione:",
+ "log-action-filter-pagetranslation-mark": "Signe da traducere",
+ "log-action-filter-pagetranslation-unmark": "Live da 'a traduzione",
+ "log-action-filter-pagetranslation-move": "Spustaminde d'a pàgene",
+ "log-action-filter-pagetranslation-delete": "Scangellazziune d'a pàgene",
+ "log-action-filter-pagetranslation-encourage": "'Ngoraggiamende a 'a traduzione",
+ "log-action-filter-pagetranslation-discourage": "Scoraggiamende a 'a traduzione",
+ "log-action-filter-pagetranslation-prioritylanguages": "Cangiamende a le lènghe prioritarie",
+ "log-action-filter-pagetranslation-aggregategroups": "Cangiaminde a le gruppe aggregate",
"pt-movepage-title": "Spuèste 'a pàgene traducibbile \"$1\"",
"pt-movepage-list-pages": "Elenghe de le pàggene da spustà",
"pt-movepage-list-count": "In totale $1 {{PLURAL:$1|pàgene|pàggene}} da spustà.",
@@ -75,5 +99,15 @@
"pt-deletepage-subpages": "Scangille tutte le sottopàggene",
"pt-deletepage-list-pages": "Elenghe de le pàggene da scangellà",
"pt-deletepage-list-translation": "Pàggene de traduzione",
- "pt-deletepage-list-other": "Otre sottopàggene"
+ "pt-deletepage-list-other": "Otre sottopàggene",
+ "pm-import-button-label": "'Mborte",
+ "pm-savepages-button-label": "Reggìstre",
+ "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/www/wiki/extensions/Translate/i18n/pagetranslation/ru.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ru.json
index bf0137a6..44c5b363 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ru.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ru.json
@@ -15,11 +15,14 @@
"Lockal",
"Okras",
"Purodha",
- "Александр Сигачёв"
+ "Александр Сигачёв",
+ "Mailman",
+ "Movses",
+ "Vlad5250"
]
},
"pagetranslation": "Перевод страниц",
- "right-pagetranslation": "отметка версий страниц для перевода",
+ "right-pagetranslation": "Отметка версий страниц для перевода",
"action-pagetranslation": "управлять переводимыми страницами",
"tpt-section": "Блок перевода $1",
"tpt-section-new": "Новый блок перевода. Название: $1",
@@ -70,6 +73,7 @@
"translate-tag-markthisagain": "Эта страница была <span class=\"plainlinks\">[$1 изменена]</span> с момента последней <span class=\"plainlinks\">[$2 отметки о переводе]</span>.",
"translate-tag-hasnew": "На этой странице были произведены <span class=\"plainlinks\">[$1 изменения]</span>, не отмеченные для перевода.",
"tpt-translation-intro": "Эта страница — <span class=\"plainlinks\">[$1 перевод]</span> страницы [[$2]]. Перевод выполнен на $3%.",
+ "tpt-translation-intro-fuzzy": "Таким образом помечены устаревшие переводы.",
"tpt-languages-legend": "Другие языки:",
"tpt-languages-zero": "Начать перевод на этот язык",
"tpt-languages-nonzero": "$1 ($2% переведено)",
@@ -109,7 +113,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»",
@@ -123,6 +127,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ограничил|ограничила}} для доступной для перевода страницы «$3» список языков: $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|добавил|добавила}} доступную для перевода страницу «$3» в агрегированную группу «$4»",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|удалил|удалила}} доступную для перевода страницу «$3» из агрегированной группы «$4»",
+ "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-encourage": "Установка отметок \"Переведено\"",
+ "log-action-filter-pagetranslation-discourage": "Снятие отметок \"Переведено\"",
+ "log-action-filter-pagetranslation-prioritylanguages": "изменение списка приоритетных языков",
+ "log-action-filter-pagetranslation-aggregategroups": "изменение агрегированных групп",
"pt-movepage-title": "Переименование доступной для перевода страницы $1",
"pt-movepage-blockers": "Страница с возможностью перевода не может быть переименована из-за {{PLURAL:$1|1=следующей ошибки|следующих ошибок}}:",
"pt-movepage-block-base-exists": "Целевая страница «[[:$1]]» уже существует.",
@@ -136,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": "Переименование переводимых страниц",
@@ -148,7 +163,7 @@
"pt-movepage-action-other": "Изменить цель",
"pt-movepage-intro": "Эта служебная страница позволяет переименовывать страницы, отмеченные для перевода.\nПереименование не будет произведено одномоментно, так как требуется сменить название многим страницам.\nВо время процесса переименования пропадает возможность взаимодействия с этими страницами.\nВозникшие проблемы будут записаны в [[Special:Log/pagetranslation|журнал]], их нужно будет исправить вручную.",
"pt-movepage-logreason": "Часть переводимой страницы $1.",
- "pt-movepage-started": "Основная страница переименована.\nПожалуйста, проверьте [[Special:Log/pagetranslation|журнал переводимых страниц]] на наличие ошибок.",
+ "pt-movepage-started": "Пожалуйста, проверьте [[Special:Log/pagetranslation|журнал переводимых страниц]] на наличие ошибок и сообщения о завершении.",
"pt-locked-page": "Эта страница заблокирована, так как переводимая страница сейчас переименовывается.",
"pt-deletepage-lang-title": "Удаление страницы перевода «$1»",
"pt-deletepage-full-title": "Удаление доступной для перевода страницы «$1»",
@@ -184,9 +199,13 @@
"pm-add-icon-hover-text": "Добавить ниже блок",
"pm-swap-icon-hover-text": "Поменять местами с блоком ниже",
"pm-delete-icon-hover-text": "Удалить блок",
+ "pm-pagetitle-placeholder": "Введите заголовок страницы",
"pm-pagetitle-invalid": "Пожалуйста, введите корректный заголовок страницы. Он должен быть в формате <page-name>/<language-code>.",
+ "pm-pagetitle-missing": "Пожалуйста, введите заголовок страницы",
"pm-langcode-missing": "Кажется, в названии отсутствует языковой код. Пожалуйста, введите код языка в формате <название-страницы>/<языковой-код>.",
"pm-summary-import": "Импортирован перевод с использованием [[Special:PageMigration|миграции страниц]]",
+ "pm-on-import-message-text": "Старые переводы импортированы. Чтобы улучшить соответствие элементов перевода, используйте опции по добавлению, замене и удалению фрагментов; затем нажмите кнопку «{{int:pm-savepages-button-label}}», чтобы записать результат. Для отмены нажмите кнопку «{{int:pm-cancel-button-label}}».",
+ "pm-on-save-message-text": "Элементы перевода сохранены. Теперь можно ввести название новой страницы перевода, чтобы перенести её, или внести изменения в отображаемые ниже элементы и сохранить новую версию.",
"tpt-translate-title": "Разрешить перевод названия страницы",
"pp-save-summary": "Подготовка страницы к переводу",
"pagepreparation": "Подготовить страницу к переводу",
@@ -202,5 +221,7 @@
"pp-diff-new-header": "Подготовленный текст",
"tpt-unlink-confirm": "Пожалуйста, подтвердите, что вы действительно хотите исключить эту страницу из системы перевода.\nСелектор языка и имена переведенной страницы перестанут работать.\nСтраницы перевода станут редактируемыми.",
"tpt-unlink-button": "Исключить из перевода",
- "tpt-unlink-summary": "Исключение страницы из перевода"
+ "tpt-unlink-summary": "Исключение страницы из перевода",
+ "tpt-generic-confirm": "Пожалуйста, подтвердите действие.",
+ "tpt-generic-button": "Подтвердить"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/rue.json b/www/wiki/extensions/Translate/i18n/pagetranslation/rue.json
index 1301ac7a..0e172c23 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/rue.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/rue.json
@@ -6,12 +6,9 @@
},
"pagetranslation": "Переклад сторінок",
"right-pagetranslation": "Означованя верзій сторінок про переклад",
- "tpt-desc": "Росшыріня про перекладаня сторінок з обсягом",
"tpt-section": "Блок перекладу $1",
"tpt-section-new": "Новый блок перекладу.\nНазва: $1",
"tpt-section-deleted": "Блок перекладу $1",
- "tpt-template": "Шаблона сторінкы",
- "tpt-templatediff": "Шаблона сторінкы зміненый.",
"tpt-diff-old": "Попереднїй текст",
"tpt-diff-new": "Новый текст",
"tpt-submit": "Означіти тоту верзію про переклад",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/sa.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sa.json
index 9f985dfb..ca744c7d 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/sa.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sa.json
@@ -6,7 +6,6 @@
"NehalDaveND"
]
},
- "tpt-template": "पृष्ठफलकम्",
"tpt-diff-old": "पूर्वतनः पाठः",
"tpt-diff-new": "नवीनः पाठः",
"tpt-other-pages-title": "सन्धिभग्नानि पृष्ठानि",
@@ -37,8 +36,6 @@
"pm-import-button-label": "आयातं करोतु",
"pm-savepages-button-label": "रक्ष्यताम्",
"pm-cancel-button-label": "निरस्यताम्",
- "pm-pagename-placeholder": "सदस्यनाम लिख्यताम्",
- "pm-langcode-placeholder": "भाषाकूटः",
"pp-save-button-label": "रक्ष्यताम्",
"pp-cancel-button-label": "निरस्यताम्"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/sah.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sah.json
index 3c1fec89..df061727 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/sah.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sah.json
@@ -6,12 +6,9 @@
},
"pagetranslation": "Сирэйдэри тылбаастааһын",
"right-pagetranslation": "Тылбаастанар сирэйдэр барылларын бэлиэтээһин",
- "tpt-desc": "Сирэй ис хоһоонун тылбаастыырга кэҥэтии",
"tpt-section": "Тылбаас единицата $1",
"tpt-section-new": "Тылбаас саҥа единицата.\nАата: $1",
"tpt-section-deleted": "Тылбаас элэмиэнэ $1",
- "tpt-template": "Сирэй халыыба",
- "tpt-templatediff": "Бу сирэй халыыба уларытыллыбыт (уларытылынна).",
"tpt-diff-old": "Бу иннинээҕи тиэкис",
"tpt-diff-new": "Саҥа тиэкис",
"tpt-submit": "Бу барылы тылбаастыырга бэлиэтээһин",
@@ -22,7 +19,6 @@
"tpt-oldrevision": "$2 [[:$1]] сирэй бүтэһик барыла буолбатах.\nСирэйдэр бүтэһик эрэ барыллара тылбааска бэлиэтэниэхтэрин сөп.",
"tpt-notsuitable": "$1 сирэй тылбаастыырга табыгаһа суох.\n<nowiki><translate></nowiki> тиэктээҕин уонна синтаксииһэ сөпкө суруллубутун бэрэбиэркэлээ.",
"tpt-saveok": "[[:$1]] сирэй тылбаастанарга бэлиэтэммит, кини иһигэр {{PLURAL:$2|биир тылбаастаныахтаах этии|$2 тылбаастаныахтаах этии}} баар.\nБилигин сирэйи <span class=\"plainlinks\">[$3 тылбаастыахха]</span> сөп.",
- "tpt-badsect": "\"$1\" диэн аат $2 тылбаас единицатын аатыгар сөп түбэспэт.",
"tpt-showpage-intro": "Манна саҥа, билигин баар уонна сотуллубут тылбаастаныахтаах тыллар уонна этиилэр көстөллөр.\nБу барылы тылбаастаныахтаах курдук бэлиэтиэҥ иннинэ уларытыыҥ төһө кыалларынан аҕыйах буоларын ситиһэ сатаа, ол тылбаасчыттар үлэлэрин аҕыйатыа.",
"tpt-mark-summary": "Бу барылы тылбастаныахтаах курдук бэлиэтииргэ",
"tpt-edit-failed": "Бу сирэйи саҥардар табыллыбата: $1",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/sat.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sat.json
new file mode 100644
index 00000000..dc3315b5
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sat.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Albinus",
+ "Manik Soren"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ᱛᱚᱨᱡᱚᱢᱟᱣᱠᱟᱱᱟ)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/sco.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sco.json
index 42309b39..f2d717c3 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/sco.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sco.json
@@ -8,11 +8,9 @@
"pagetranslation": "Page owersetin",
"right-pagetranslation": "Maurk versions o pages fer owersetin",
"action-pagetranslation": "manage owersetable pages",
- "tpt-desc": "Extension fer owersetin content pages",
"tpt-section": "Owersetin unit $1",
"tpt-section-new": "New owersetin unit.\nName: $1",
"tpt-section-deleted": "Owersetin unit $1",
- "tpt-templatediff": "The page template haes chynged.",
"tpt-diff-old": "Preeveeos tex",
"tpt-diff-new": "New tex",
"tpt-submit": "Maurk this version fer owersetin",
@@ -26,7 +24,6 @@
"tpt-notsuitable": "Page $1 isna suitable fer owersetin.\nMak sair that it haes <nowiki><translate></nowiki> tags n haes ae valit syntax.",
"tpt-saveok": "The page [[:$1]] haes been maurkt fer owersetin wi $2 {{PLURAL:$2|owersetin unit|owersetin units}}.\nThe page can nou be <span class=\"plainlinks\">[$3 owerset]</span>.",
"tpt-offer-notify": "Ye can <span class=\"plainlinks\">[$1 tell owerseters]</span> aneat this page.",
- "tpt-badsect": "\"$1\" isna ae valit name fer owerset unit $2.",
"tpt-showpage-intro": "Ablo new, exeestin n delytit owerset units ar leetit.\nAfore maurkin this version fer owersetin, check that the chynges til owerset units ar wee tae avoid onnecessair wairk fer the owerseters.",
"tpt-mark-summary": "Maurkt this version fer owersetin",
"tpt-edit-failed": "Coudna update the page: $1",
@@ -69,7 +66,6 @@
"tpt-discouraged-language-reason": "Raison: $1",
"tpt-priority-languages": "Aen owerset admeenistrater haes set the prioritie leids fer this groop til $1.",
"tpt-render-summary": "Updatin tae match new version o soorce page",
- "tpt-download-page": "Export page wi owersets",
"aggregategroups": "Aggregate groops",
"tpt-aggregategroup-save": "Hain",
"tpt-aggregategroup-add-new": "Eik ae new aggregate groop",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/sd.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sd.json
index 8c6ea4e8..fecd5bf8 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/sd.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sd.json
@@ -2,9 +2,19 @@
"@metadata": {
"authors": [
"Sindhu",
- "Aursani"
+ "Aursani",
+ "Mehtab ahmed"
]
},
+ "tpt-diff-old": "پويون متن",
"tpt-mark-nochanges": "تبديلين جي ڪا به نظرثاني نه. ترجمي لاءِ هي صفحو نشاني بڻائڻ صفحي کي ترميم نه ڪندو، نه ئي اڳ موجود ترجمي جي يونٽ کي ترميم ڪندو",
- "tpt-languages-nonzero": "$1 ($2% ترجمو ٿي چڪا)"
+ "tpt-languages-nonzero": "$1 ($2% ترجمو ٿيل)",
+ "tpt-aggregategroup-save": "سانڍيو",
+ "tpt-aggregategroup-update": "سانڍيو",
+ "tpt-aggregategroup-update-cancel": "رد",
+ "pm-savepages-button-label": "سانڍيو",
+ "pm-cancel-button-label": "رد",
+ "pp-save-button-label": "سانڍيو",
+ "pp-cancel-button-label": "رد",
+ "tpt-generic-button": "پڪ ڪريو"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/sdh.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sdh.json
new file mode 100644
index 00000000..d8b66183
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sdh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Paraw2"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% وەرگێڕیاس)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ses.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ses.json
new file mode 100644
index 00000000..83569071
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ses.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Songhay"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% berante)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/shi.json b/www/wiki/extensions/Translate/i18n/pagetranslation/shi.json
new file mode 100644
index 00000000..2cd3a7f4
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/shi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amara-Amaziɣ"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ⴰⴷ ⵉⵜⵜⵢⵓⵙⵓⵖⵍⵏ)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/shn.json b/www/wiki/extensions/Translate/i18n/pagetranslation/shn.json
index 19679ead..b9b4b005 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/shn.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/shn.json
@@ -1,8 +1,9 @@
{
"@metadata": {
"authors": [
- "Saimawnkham"
+ "Saimawnkham",
+ "Saosukham"
]
},
- "tpt-languages-nonzero": "$1 (ပိၼ်ၽႃႇသႃႇယဝ်ႉ $2%)"
+ "tpt-languages-nonzero": "$1 (ပိၼ်ႇၽႃႇသႃႇယဝ်ႉ $2%)"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/shy-latn.json b/www/wiki/extensions/Translate/i18n/pagetranslation/shy-latn.json
new file mode 100644
index 00000000..635133da
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/shy-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vikoula5"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% yettwasuqel)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/si.json b/www/wiki/extensions/Translate/i18n/pagetranslation/si.json
index eaa29e68..4a07c245 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/si.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/si.json
@@ -8,18 +8,16 @@
"ශ්වෙත",
"Indunil Chamara",
"Susith Chandira Gts",
- "හරිත"
+ "හරිත",
+ 1100100
]
},
"pagetranslation": "පිටුව පරිවර්තනය",
"right-pagetranslation": "පරිවර්තනය සඳහා පිටුවල අනුවාද සලකුණු කරන්න",
"action-pagetranslation": "පරිවර්තනය කල හැකි පිටු කළමනාකරණය කරන්න",
- "tpt-desc": "අන්තර්ගත පිටු පරිවර්තනය කිරීම සඳහා විස්තීරණය",
"tpt-section": "$1 පරිවර්තන ඒකකය",
"tpt-section-new": "නව පරිවර්තන ඒකකය.\nනම: $1",
"tpt-section-deleted": "$1 පරිවර්තන ඒකකය",
- "tpt-template": "පිටු සැකිල්ල",
- "tpt-templatediff": "පිටු සැකිල්ල වෙනස් වී ඇත",
"tpt-diff-old": "පූර්ව පෙළ",
"tpt-diff-new": "නව පෙළ",
"tpt-submit": "මෙම අනුවාදය පරිවර්තනය සඳහා සලකුණු කරගන්න",
@@ -32,7 +30,6 @@
"tpt-oldrevision": "$2 යනු [[:$1]] පිටුවෙහි නවතම අනුවාදය නොවේ.\nනවතම අනුවාදයන් පමණක් පරිවර්තනය සඳහා තෝරාගත හැක.",
"tpt-notsuitable": "$1 පිටුව පරිවර්තනය සඳහා සුදුසු නොවේ.\nඑය සතුව <nowiki><translate></nowiki> ටැගයන් පැවතීම සහ එය සතුව නීතික වින්‍යාසයක් ඇතිබව සහතික කරන්න.",
"tpt-saveok": "$2 හා සමගින් මෙම පිටුව පරිවර්තනය කෙරුමට [[:$1]] විසින් සලකුණු කොට ඇත.\n{{PLURAL:$2|එක් පරිවර්තන ඒකකයක්|පරිවර්තන ඒකක}}\nමෙම පිටුව දැන් <span class=\"plainlinks\">[$3 පරිවර්තනය කල]</span>.",
- "tpt-badsect": "\"$1\" යනු $2 පරිවර්තන ඒකකය සඳහා නීතික මාතෘකාවක් නොවේ.",
"tpt-mark-summary": "පරිවර්තනය සඳහා මෙම අනුවාදය සලකුණු කරන ලදී",
"tpt-mark-nochanges": "මෙම සංශෝධනය හා අවසන් වරට ලකුණු කල සංශෝධනය අතර කිසිදු වෙනසක් නොමැත.",
"tpt-edit-failed": "පිටුව යාවත්කාලීන කල නොහැක: $1",
@@ -59,12 +56,12 @@
"translate-tag-translate-link-desc": "මෙම පිටුව පරිවර්තනය කරන්න",
"translate-tag-markthis": "පරිවර්තනය සඳහා මෙම පිටුව සලකුණු කරන්න",
"translate-tag-hasnew": "මෙම පිටුවේ අඩංගු වන <span class=\"plainlinks\">[$1 වෙනස්කම්]</span> පරිවර්තනය සඳහා සලකුණු කොට නොමැත.",
+ "tpt-translation-intro-fuzzy": "යල්පැනපු පරිවර්තනයන් මෙලෙස සලකුණු කරයි.",
"tpt-languages-legend": "වෙනත් භාෂා:",
"tpt-languages-zero": "මෙම භාෂාව සඳහා පරිවර්තනය අරඹන්න",
"tpt-languages-nonzero": "$1 ($2% පරිවර්තිතයි)",
"tpt-discouraged-language-reason": "හේතුව: $1",
"tpt-render-summary": "මූලාශ්‍ර පිටුවේ නව අනුවාදය වෙත ගැලපීම සඳහා යාවත්කාලීන කරමින්",
- "tpt-download-page": "පරිවර්තනය සහිත පිටුව නිර්යාත කරන්න",
"aggregategroups": "සමස්ත කාණ්ඩයන්",
"tpt-aggregategroup-add": "එක් කරන්න",
"tpt-aggregategroup-save": "සුරකින්න",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/sk.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sk.json
index b7f188a7..4ec8a37f 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/sk.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sk.json
@@ -11,12 +11,9 @@
},
"pagetranslation": "Preklad stránky",
"right-pagetranslation": "Označiť verzie stránok na preklad",
- "tpt-desc": "Rozšírenie na preklad stránok s obsahom",
"tpt-section": "Jednotka prekladu $1",
"tpt-section-new": "Nová jednotka prekladu.\nNázov: $1",
"tpt-section-deleted": "Jednotka prekladu $1",
- "tpt-template": "Šablóna stránky",
- "tpt-templatediff": "Šablóna stránky sa zmenila.",
"tpt-diff-old": "Predošlý text",
"tpt-diff-new": "Nový text",
"tpt-submit": "Označiť túto verziu na preklad",
@@ -28,7 +25,6 @@
"tpt-oldrevision": "$2 nie je najnovšia verzia stránky [[:$1]].\nNa preklad je možné označiť iba posledné verzie stránok.",
"tpt-notsuitable": "Stránka $1 nie je vhodná na preklad.\nUistite sa, že obsahuje značky <nowiki><translate></nowiki> a má platnú syntax.",
"tpt-saveok": "Stránka [[:$1]] bola označená na preklad s $2 {{PLURAL:$2|jednotkou prekladu, ktorú|jednotkami prekladu, ktoré}} možno preložiť.\nTúto stránku je teraz možné <span class=\"plainlinks\">[$3 preložiť]</span>.",
- "tpt-badsect": "„$1“ nie je platný názov jednotky prekladu $2.",
"tpt-showpage-intro": "Dolu sú uvedené nové, súčasné a zmazané sekcie,\nPredtým než túto verziu označíte na preklad skontrolujte, že zmeny sekcií sú minimálne aby ste zabránili zbytočnej práci prekladateľov.",
"tpt-mark-summary": "Táto verzia je označená na preklad",
"tpt-edit-failed": "Nebolo možné aktualizovať stránku: $1",
@@ -41,11 +37,11 @@
"translate-tag-markthisagain": "Táto stránka obsahuje <span class=\"plainlinks\">[$1 {{PLURAL:$1|zmenu|zmeny|zmien}}]</span> odkedy bola naposledy <span class=\"plainlinks\">[$2 označená na preklad]</span>.",
"translate-tag-hasnew": "Táto stránka obsahuje <span class=\"plainlinks\">[$1 zmeny]</span>, ktoré nie sú označené na preklad.",
"tpt-translation-intro": "Táto stránka je <span class=\"plainlinks\">[$1 preloženou verziou]</span> stránky [[$2]] a preklad je hotový a aktuálny na $3 %.",
+ "tpt-translation-intro-fuzzy": "Zastarané preklady sú označené takto.",
"tpt-languages-legend": "Iné jazyky:",
"tpt-languages-nonzero": "$1 ({{PLURAL:$2|preložené|preložené|preložených}} $2 %)",
"tpt-target-page": "Túto stránku nemožno aktualizovať ručne.\nTáto stránka je prekladom stránky [[$1]] a preklad možno aktualizovať pomocou [$2 nástroja na preklad].",
"tpt-unknown-page": "Tento menný priestor je vyhradený na preklady stránok s obsahom.\nZdá sa, že stránka, ktorú sa pokúšate upravovať nezodpovedá žiadnej stránke označenej na preklad.",
"tpt-render-summary": "Aktualizácia na novú verziu zdrojovej stránky",
- "tpt-download-page": "Exportovať stránky s prekladmi",
"tpt-aggregategroup-save": "Uložiť"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/skr-arab.json b/www/wiki/extensions/Translate/i18n/pagetranslation/skr-arab.json
new file mode 100644
index 00000000..6bf82cfa
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/skr-arab.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saraiki"
+ ]
+ },
+ "tpt-select-prioritylangs-reason": "سبب:",
+ "tpt-languages-legend": "ٻیاں زباناں:",
+ "tpt-languages-nonzero": "$1 ($2% ترجمہ تھی ڳیا)",
+ "tpt-aggregategroup-save": "بچاؤ",
+ "tpt-aggregategroup-new-name": "ناں:",
+ "tpt-aggregategroup-edit-name": "ناں:",
+ "tpt-aggregategroup-edit-description": "تفصیل:",
+ "tpt-aggregategroup-update-cancel": "منسوخ",
+ "pt-movepage-new": "نواں ناں:",
+ "pt-movepage-reason": "سبب:",
+ "pt-deletepage-reason": "سبب:",
+ "pm-import-button-label": "اندر گھن آؤ",
+ "pm-savepages-button-label": "بچاؤ",
+ "pm-cancel-button-label": "منسوخ",
+ "pp-prepare-button-label": "تیار کرو",
+ "pp-save-button-label": "بچاؤ",
+ "pp-cancel-button-label": "منسوخ",
+ "tpt-generic-button": "تصدیق"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/sl.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sl.json
index dfd646b9..f454461d 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/sl.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sl.json
@@ -4,18 +4,16 @@
"Dbc334",
"Eleassar",
"Irena Plahuta",
- "Smihael"
+ "Smihael",
+ "Janezdrilc"
]
},
"pagetranslation": "Prevajanje strani",
"right-pagetranslation": "Označi različice strani za prevajanje",
"action-pagetranslation": "upravljanje prevedljivih strani",
- "tpt-desc": "Razširitev za prevajanje vsebine strani",
"tpt-section": "Prevajalna enota $1",
"tpt-section-new": "Nove prevajalna enota.\nIme: $1",
"tpt-section-deleted": "Prevajalna enota $1",
- "tpt-template": "Predloga strani",
- "tpt-templatediff": "Predloga te strani se je spremenila.",
"tpt-diff-old": "Prejšnje besedilo",
"tpt-diff-new": "Novo besedilo",
"tpt-submit": "Označi to različico za prevajanje",
@@ -28,7 +26,6 @@
"tpt-oldrevision": "$2 ni najnovejša različics strani [[:$1]].\nSamo zadnje različice se lahko označi za prevod.",
"tpt-notsuitable": "Stran $1 ni primerna za prevod.\nPrepričajte se, da ima oznake <nowiki><translate></nowiki> in veljavno sintakso.",
"tpt-saveok": "Stran [[:$1]] je bila označena za prevod z $2 {{PLURAL:$2|prevajalsko enoto|prevajalskima enotama|prevajalskimi enotami}}.\nStran je sedaj mogoče <span class=\"plainlinks\">[$3 prevesti]</span>.",
- "tpt-badsect": "»$1« ni veljavno ime za prevajalsko enoto $2.",
"tpt-showpage-intro": "Spodaj so navedene nove, obstoječe in izbrisane prevajalne enote.\nPred označitvijo te redakcije za prevajanje preverite, da so spremembe prevajalnih enot čim manjše, saj tako prevajalcem prihranite nepotrebno delo.",
"tpt-mark-summary": "Označil to različico za prevajanje",
"tpt-edit-failed": "Ni mogoče posodobiti strani: $1",
@@ -61,6 +58,7 @@
"translate-tag-markthisagain": "Ta stran ima <span class=\"plainlinks\">[$1 sprememb]</span> odkar je bila nazadnje <span class=\"plainlinks\">[$2 označena za prevajanje]</span>.",
"translate-tag-hasnew": "Stran vsebuje <span class=\"plainlinks\">[$1 spremembe]</span>, ki niso označene za prevajanje.",
"tpt-translation-intro": "Ta stran je <span class=\"plainlinks\">[$1 prevedena različica]</span> strani [[$2]] in prevod je $3 % dokončan.",
+ "tpt-translation-intro-fuzzy": "Zastareli prevodi so označeni tako.",
"tpt-languages-legend": "Drugi jeziki:",
"tpt-languages-zero": "Prični s prevajanjem v ta jezik",
"tpt-languages-nonzero": "$1 ($2 % prevedeno)",
@@ -68,12 +66,12 @@
"tpt-unknown-page": "Ta imenski prostor je pridržan za prevode vsebinskih strani.\nStran, ki jo poskušate urediti, ne ustreza nobeni strani označeni za prevajanje.",
"tpt-discouraged-language-reason": "Razlog: $1",
"tpt-render-summary": "Posodabljanje za ujemanje nove različice izvorne strani",
- "tpt-download-page": "Izvozi stran s prevodi",
"tpt-aggregategroup-add": "Dodaj",
"tpt-aggregategroup-save": "Shrani",
"tpt-aggregategroup-new-name": "Ime:",
"tpt-aggregategroup-new-description": "Opis (izbirno):",
"tpt-aggregategroup-invalid-group": "Skupina ne obstaja",
+ "tpt-aggregategroup-edit-description": "Opis:",
"pt-parse-open": "Neizenačena etiketa &lt;translate>.\nPrevajalna predloga: <pre>$1</pre>",
"pt-parse-close": "Neizenačena etiketa &lt;/translate>.\nPrevajalna predloga: <pre>$1</pre>",
"pt-parse-nested": "Gnezdene prevajalne enote &lt;translate> niso dovoljene.\nBesedilo etikete: <pre>$1</pre>",
@@ -82,6 +80,8 @@
"pt-shake-empty": "Prazna prevajalna enota označevalec »$1«.",
"log-description-pagetranslation": "Dnevnik dejanj, ki so povezana s sistemom prevajanja strani",
"log-name-pagetranslation": "Dnevnik prevajanja strani",
+ "log-action-filter-pagetranslation-move": "Prestavitve strani",
+ "log-action-filter-pagetranslation-delete": "Izbrisi strani",
"pt-movepage-title": "Premakni prevedljivo stran $1",
"pt-movepage-blockers": "Prevedljive strani ni mogoče prestaviti na novo ime zaradi {{PLURAL:$1|naslednje napake|naslednjih napak}}:",
"pt-movepage-block-base-exists": "Ciljna prevedljiva stran »[[:$1]]« obstaja.",
@@ -106,8 +106,8 @@
"pt-movepage-action-perform": "Izvedi prestavitev",
"pt-movepage-action-other": "Spremeni cilj",
"pt-movepage-intro": "Ta posebna stran omogoča prestavljanje strani, ki so označene za prevajanje.\nDejanje prestavitve ne bo izvedeno takoj, saj bo potrebno prestaviti veliko strani.\nMedtem ko se strani premikajo, ne bo mogoče delovati na straneh v obravnavi.\nNeuspehi bodo zabeleženi v [[Special:Log/pagetranslation|dnevniku strani prevodov]] in jih je potrebno ročno popraviti.",
- "pt-movepage-logreason": "Del prevedljive strani $1.",
- "pt-movepage-started": "Izhodna stran je prestavljena.\nProsimo, preverite [[Special:Log/pagetranslation|dnevnik strani prevodov]] za napake in sporočila o dokončanju.",
+ "pt-movepage-logreason": "Del prevedljive strani »$1«.",
+ "pt-movepage-started": "Prosimo, v kratkem preverite [[Special:Log/pagetranslation|dnevnik strani prevodov]] za napake in sporočila o dokončanju.",
"pt-locked-page": "Stran je zaklenjena, ker se prevedljiva stran trenutno prestavlja.",
"pt-deletepage-lang-title": "Brisanje strani prevoda »$1«",
"pt-deletepage-full-title": "Brisanje prevedljive strani »$1«",
@@ -127,8 +127,15 @@
"pt-deletepage-list-section": "Strani prevajalnih enot",
"pt-deletepage-list-other": "Druge podstrani",
"pt-deletepage-list-count": "Skupno je za izbrisati $1 {{PLURAL:$1|stran|strani}}.",
- "pt-deletepage-full-logreason": "Del prevedljive strani $1.",
- "pt-deletepage-lang-logreason": "Del strani prevoda $1.",
+ "pt-deletepage-full-logreason": "Del prevedljive strani »$1«.",
+ "pt-deletepage-lang-logreason": "Del strani prevoda »$1«.",
"pt-deletepage-started": "Prosimo, preverite [[Special:Log/pagetranslation|dnevnik prevajanja strani]] za napake in sporočilo o dokončanju.",
- "pt-deletepage-intro": "Ta posebna stran vam omogoča izbris celotne prevedljive strani ali individualne strani s prevodom v nekem jeziku.\nDejanje izbrisa ne bo izvedeno takoj, ker je treba izbrisati tudi vse strani, ki so od njih odvisne.\nNeuspehi bodo zabeleženi v [[Special:Log/pagetranslation|dnevniku prevajanja strani]] in jih morate urediti ročno."
+ "pt-deletepage-intro": "Ta posebna stran vam omogoča izbris celotne prevedljive strani ali individualne strani s prevodom v nekem jeziku.\nDejanje izbrisa ne bo izvedeno takoj, ker je treba izbrisati tudi vse strani, ki so od njih odvisne.\nNeuspehi bodo zabeleženi v [[Special:Log/pagetranslation|dnevniku prevajanja strani]] in jih morate urediti ročno.",
+ "pagemigration": "Prenos prevedene strani",
+ "pm-pagetitle-placeholder": "Vnesite naslov strani",
+ "pm-pagetitle-missing": "Prosimo, vnesite naslov strani.",
+ "pp-save-summary": "Stran je pripravljena za prevajanje",
+ "pagepreparation": "Pripravite stran za prevajanje",
+ "pp-pagename-placeholder": "Vnesite naslov strani",
+ "tpt-unlink-summary": "Stran je bila odstranjena iz prevajanja"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/sr-ec.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sr-ec.json
index 9d367cf2..95c37236 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/sr-ec.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sr-ec.json
@@ -5,102 +5,163 @@
"Rancher",
"Милан Јелисавчић",
"Михајло Анђелковић",
- "Сербијана"
+ "Сербијана",
+ "Obsuser",
+ "Acamicamacaraca",
+ "BadDog",
+ "Zoranzoki21",
+ "Vlad5250"
]
},
- "pagetranslation": "Превод странице",
- "right-pagetranslation": "означавање издања страница за превод",
- "tpt-section": "Преводилачка јединица $1",
- "tpt-section-new": "Нова преводилачка јединица.\nНазив: $1",
- "tpt-section-deleted": "Преводилачка јединица $1",
- "tpt-template": "Шаблон странице",
- "tpt-templatediff": "Шаблон странице је измењен.",
+ "pagetranslation": "Превођење странице",
+ "right-pagetranslation": "означавање верзија страница за превођење",
+ "action-pagetranslation": "управљате преводивим страницама",
+ "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-diff-new": "Нови текст",
+ "tpt-submit": "Означи ову верзију за превођење",
+ "tpt-sections-oldnew": "Нове и постојеће јединице превођења",
+ "tpt-sections-deleted": "Избрисане јединице превођења",
"tpt-sections-template": "Шаблон странице за превођење",
"tpt-action-nofuzzy": "Не поништавајте преводе",
- "tpt-nosuchpage": "Страница $1 не постоји",
- "tpt-mark-nochanges": "Нема промена за преглед. Обележавање ове странице за превод неће изменити страницу ни постојећу преводилачку јединицу.",
- "tpt-new-pages-title": "Предложене странице за превођење",
+ "tpt-badtitle": "Задато име странице ($1) није важећи наслов",
+ "tpt-nosuchpage": "Страница „$1” не постоји",
+ "tpt-saveok": "Страница [[:$1]] је означена за превођење са $2 {{PLURAL:$2|јединицом превођења|јединице превођења|јединица превођења}}. Страница сада може да буде <span class=\"plainlinks\">[$3 преведена]</span>.",
+ "tpt-offer-notify": "Можете да <span class=\"plainlinks\">[$1 обавестите преводиоце]</span> о овој страници.",
+ "tpt-showpage-intro": "Испод нових, постојеће и избрисане преводилачке јединице су наведене.\nПре него што означите ову верзију за превод, проверите да ли су измене преводилачких јединица сведене на минимум да бисте избегли непотребан рад за преводиоце.",
+ "tpt-mark-nochanges": "Нема промена за преглед. Означавање ове странице за превођење неће да уреди страницу нити било коју постојећу јединицу превођења.",
+ "tpt-edit-failed": "Није могуће ажурирати страницу: $1",
+ "tpt-already-marked": "Најновија верзија ове странице је већ означена за превођење.",
+ "tpt-unmarked": "Страница $1 није више означена за превођење.",
+ "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-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-languages-legend": "Остали језици:",
+ "tpt-translation-intro-fuzzy": "Застарели преводи су означени овако.",
+ "tpt-languages-legend": "Други језици:",
"tpt-languages-separator": "&#160;•&#32;",
- "tpt-languages-zero": "Почните превођења на овом језику",
+ "tpt-languages-zero": "Започните превођење на овом језику",
"tpt-languages-nonzero": "$1 ($2% преведено)",
- "tpt-tab-translate": "Преведи",
+ "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": "Додај",
"tpt-aggregategroup-save": "Сачувај",
- "tpt-aggregategroup-new-name": "Назив:",
- "tpt-aggregategroup-new-description": "Опис (необавезно):",
+ "tpt-aggregategroup-new-name": "Име:",
+ "tpt-aggregategroup-new-description": "Опис (опционално):",
"tpt-aggregategroup-invalid-group": "Група не постоји",
- "tpt-aggregategroup-edit-name": "Назив:",
+ "tpt-aggregategroup-edit-name": "Име:",
"tpt-aggregategroup-edit-description": "Опис:",
"tpt-aggregategroup-update": "Сачувај",
"tpt-aggregategroup-update-cancel": "Откажи",
- "log-name-pagetranslation": "Дневник превода страница",
+ "tpt-invalid-group": "Неважећа група",
+ "pt-shake-multiple": "Више маркера јединице превођења за једну јединицу превођења.\nТекст јединице превођења: <pre>$1</pre>",
+ "pt-shake-position": "Маркери јединице превођења у неочекиваној позицији.\nТекст јединице превода: <pre>$1</pre>",
+ "log-description-pagetranslation": "Евиденција радњи везаних за преводилачки систем страница",
+ "log-name-pagetranslation": "Дневник превођења страница",
"logentry-pagetranslation-mark": "$1 је {{GENDER:$2|означио|означила}} страницу $3 за превођење",
- "logentry-pagetranslation-deletefok": "$1 је {{GENDER:$2|обрисао|обрисала}} преводиву страницу $3",
- "logentry-pagetranslation-deletelok": "$1 је {{GENDER:$2|обрисао|обрисала}} преводиву страницу $3",
+ "logentry-pagetranslation-unmark": "$1 је {{GENDER:$2|уклонио|уклонила}} страницу $3 из система превођења",
+ "logentry-pagetranslation-deletefok": "$1 је {{GENDER:$2|избрисао|избрисала}} преводиву страницу $3",
+ "logentry-pagetranslation-deletelok": "$1 је {{GENDER:$2|избрисао|избрисала}} преводиву страницу $3",
"logentry-pagetranslation-prioritylanguages": "$1 је {{GENDER:$2|одредио|одредила}} приоритетне језике за преводиву страницу $3: $5",
- "pt-movepage-title": "Премештање преводиве странице $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]] био би неисправан (предугачак?).",
+ "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-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-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-subpage-exists": "Циљна подстраница [[:$2]] постоји.",
"pt-movepage-block-subpage-invalid": "Наслов циљне подстранице за [[:$1]] био би неисправан (предугачак?).",
"pt-movepage-list-pages": "Списак страница за премештање",
- "pt-movepage-list-translation": "{{PLURAL:$1|Странице}} за превод",
- "pt-movepage-list-section": "Странице за поднаслове",
- "pt-movepage-list-other": "{{PLURAL:$1|Друге}} подстранице",
+ "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": "Текући назив:",
- "pt-movepage-new": "Нови назив:",
+ "pt-movepage-current": "Тренутно име:",
+ "pt-movepage-new": "Ново име:",
"pt-movepage-reason": "Разлог:",
"pt-movepage-subpages": "Премести све подстранице",
"pt-movepage-action-check": "Провери да ли је премештање изводљиво",
- "pt-movepage-action-perform": "Премести",
+ "pt-movepage-action-perform": "Изврши премештање",
"pt-movepage-action-other": "Промени циљ",
+ "pt-movepage-started": "У међувремену, проверите [[Special:Log/pagetranslation|дневник превођења странице]] да би се пронашле евентуалне грешке и поруке завршетка.",
+ "pt-deletepage-invalid-title": "Наведена страница није важећа.",
"pt-deletepage-action-check": "Наведи странице за брисање",
"pt-deletepage-action-perform": "Изврши брисање",
"pt-deletepage-action-other": "Промени циљ",
- "pt-deletepage-lang-legend": "Обриши страницу превода",
- "pt-deletepage-full-legend": "Обриши преводиву страницу",
- "pt-deletepage-current": "Назив странице:",
+ "pt-deletepage-lang-legend": "Избриши страницу превода",
+ "pt-deletepage-full-legend": "Избриши преводиву страницу",
+ "pt-deletepage-any-legend": "Избришите преводиву страницу или страницу превода",
+ "pt-deletepage-current": "Име странице:",
"pt-deletepage-reason": "Разлог:",
- "pt-deletepage-subpages": "Обриши све подстранице",
- "pt-deletepage-list-pages": "Списак страница за брисање",
+ "pt-deletepage-subpages": "Избриши све подстранице",
+ "pt-deletepage-list-pages": "Листа страница за брисање",
"pt-deletepage-list-translation": "Странице за превођење",
- "pt-deletepage-list-other": "Остале подстранице",
+ "pt-deletepage-list-section": "Странице за јединицу превода",
+ "pt-deletepage-list-other": "Друге подстранице",
"pt-deletepage-list-count": "Укупно $1 {{PLURAL:$1|страница|странице}} за брисање.",
+ "pagemigration": "Миграција странице за превођење",
"pm-import-button-label": "Увези",
"pm-savepages-button-label": "Сачувај",
"pm-cancel-button-label": "Откажи",
- "pm-pagename-placeholder": "Унесите назив странице",
- "pm-langcode-placeholder": "Код језика",
- "pp-pagename-placeholder": "Унесите назив странице",
+ "pm-page-does-not-exist": "$1 не постоји.",
+ "pm-old-translations-missing": "$1 не садржи старе преводе.",
+ "pm-pagename-missing": "Унесите име странице.",
+ "pm-add-icon-hover-text": "Додај јединицу испод",
+ "pm-swap-icon-hover-text": "Замени са јединицом испод",
+ "pm-delete-icon-hover-text": "Избриши јединицу",
+ "pm-pagetitle-placeholder": "Унесите наслов странице",
+ "pm-pagetitle-missing": "Унесите наслов странице.",
+ "tpt-translate-title": "Дозволи превођење наслова странице",
+ "pp-save-summary": "Страница је припремљена за превођење",
+ "pagepreparation": "Припрема страница за превођење",
+ "pp-pagename-placeholder": "Унесите име странице",
+ "pp-prepare-button-label": "Припреми",
"pp-save-button-label": "Сачувај",
- "pp-cancel-button-label": "Откажи"
+ "pp-cancel-button-label": "Откажи",
+ "pp-save-message": "Страница је сачувана. Можете је [$1 уредити].",
+ "pp-prepare-message": "Ова страница је припремљена за превођење. Погледајте доњу разлику измена. Кликните на дугме „{{int:pp-save-button-label}}” ако је све у реду!",
+ "pp-pagename-missing": "Унесите име странице.",
+ "pp-diff-old-header": "Изворни текст",
+ "pp-diff-new-header": "Припремљени текст",
+ "tpt-unlink-confirm": "Потврдите да стварно желите да уклоните ову страницу из система превођења.\nБирач језика и преведена имена страница ће престати са радом.\nСтранице за превођење ће постати уредиве.",
+ "tpt-unlink-button": "Уклони из система превођења",
+ "tpt-unlink-summary": "Уклоњена страница из система превођења",
+ "tpt-generic-confirm": "Потврдите радњу.",
+ "tpt-generic-button": "Потврди"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/sr-el.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sr-el.json
index 8844462a..a299e370 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/sr-el.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sr-el.json
@@ -3,66 +3,161 @@
"authors": [
"Michaello",
"Milicevic01",
- "Rancher"
+ "Rancher",
+ "Obsuser",
+ "Tacsipacsi",
+ "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 revizije i poslednje označene revizije.",
+ "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-showpage-intro": "Ispod novih, postojeće i izbrisane prevodilačke jedinice su navedene.\nPre nego što označite ovu verziju za prevod, proverite da li su izmene prevodilačkih jedinica svedene na minimum da biste izbegli nepotreban rad za prevodioce.",
+ "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-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.",
- "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-description-pagetranslation": "Dnevnik akcija vezanih za prevodilački sistem stranica",
+ "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-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",
- "pm-pagename-placeholder": "Unesite naziv stranice",
- "pm-langcode-placeholder": "Kod jezika",
- "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-cancel-button-label": "Otkaži",
+ "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/www/wiki/extensions/Translate/i18n/pagetranslation/sty.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sty.json
new file mode 100644
index 00000000..3b24bf9e
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sty.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Khanmarat"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% телгә күцерелгән)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/su.json b/www/wiki/extensions/Translate/i18n/pagetranslation/su.json
index ecd0b633..288dafc5 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/su.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/su.json
@@ -1,19 +1,27 @@
{
"@metadata": {
"authors": [
- "Kandar"
+ "Kandar",
+ "Uchup19"
]
},
"pagetranslation": "Alihbasa kaca",
"tpt-diff-old": "Téks saméméhna",
"tpt-diff-new": "Téks anyar",
"tpt-nosuchpage": "Kaca $1 euweuh.",
+ "tpt-select-prioritylangs-reason": "Alesan:",
"tpt-languages-nonzero": "$1 ($2% tarjamah)",
+ "tpt-translation-restricted": "Alesan: $1",
+ "tpt-discouraged-language-reason": "Alesan: $1",
+ "tpt-aggregategroup-update-cancel": "Bolay",
"pt-movepage-current": "Ngaran ayeuna:",
"pt-movepage-new": "Ngaran anyar:",
"pt-movepage-reason": "Alesan:",
"pt-movepage-subpages": "Pindahkeun sakabéh subkaca",
"pt-movepage-action-check": "Pariksa susuganan bisa dipindahkeun",
"pt-movepage-action-perform": "Pindahkeun",
- "pt-movepage-action-other": "Ganti tujul"
+ "pt-movepage-action-other": "Ganti tujul",
+ "pt-deletepage-reason": "Alesan:",
+ "pm-cancel-button-label": "Bolay",
+ "pp-cancel-button-label": "Bolay"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/sv.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sv.json
index f292b6f8..8823e8b3 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/sv.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/sv.json
@@ -68,11 +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 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.",
@@ -106,7 +108,7 @@
"log-description-pagetranslation": "Logg för åtgärder som rör systemet för sidöversättning",
"log-name-pagetranslation": "Sidöversättningslogg",
"logentry-pagetranslation-mark": "$1 {{GENDER:$2|markerade}} $3 för översättning",
- "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|tog bort}} $3 för översättning",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|tog bort}} $3 från översättningssystemet",
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|slutförde}} namnändringen av översättningssidan $3 till $4",
"logentry-pagetranslation-movenok": "$1 {{GENDER:$2|stöte på}} ett problem när sidan $3 skulle flyttas till $4",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|slutförde}} raderingen av översättningssidan $3",
@@ -120,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.",
@@ -133,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",
@@ -144,8 +153,8 @@
"pt-movepage-action-perform": "Genomför flytten",
"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-logreason": "Del av översättningsbar sida \"$1\".",
+ "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\"",
@@ -165,8 +174,8 @@
"pt-deletepage-list-section": "Översättningsenhetssidor",
"pt-deletepage-list-other": "Andra undersidor",
"pt-deletepage-list-count": "Totalt $1 {{PLURAL:$1|sida|sidor}} att radera.",
- "pt-deletepage-full-logreason": "Del av översättningsbar sida $1.",
- "pt-deletepage-lang-logreason": "Del av översättningssida $1.",
+ "pt-deletepage-full-logreason": "Del av översättningsbar sida \"$1\".",
+ "pt-deletepage-lang-logreason": "Del av översättningssida \"$1\".",
"pt-deletepage-started": "Kontrollera [[Special:Log/pagetranslation|loggen för sidöversättning]] efter fel och meddelande om att det slutförts.",
"pt-deletepage-intro": "Denna specialsida låter dig radera en hel översättbar sida eller en enskild översättningssida på ett språk.\nRaderingsåtgärden kommer inte att vara omedelbar, eftersom alla beroende sidor också kommer att raderas.\nFel kommer att registreras i [[Special:Log/pagetranslation|sidöversättningsloggen]] och de behöver repareras manuellt.",
"pagemigration": "Sidmigrering",
@@ -181,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",
@@ -197,8 +210,9 @@
"pp-pagename-missing": "Var god ange sidans namn.",
"pp-diff-old-header": "Källtext",
"pp-diff-new-header": "Förberedd text",
- "tpt-unlink-confirm": "Bekräfta att du verkligen vill ta bort denna sida från översättningssystemet.\nSpråkväljaren och översatta sidnamn kommer slutar att fungera.\nÖversättningssidorna kommer bli redigerbara.",
+ "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/www/wiki/extensions/Translate/i18n/pagetranslation/sw.json b/www/wiki/extensions/Translate/i18n/pagetranslation/sw.json
index 87807006..429596a9 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/sw.json
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/i18n/pagetranslation/ta.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ta.json
index 2ec46ad8..9b14fe17 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ta.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ta.json
@@ -12,12 +12,9 @@
},
"pagetranslation": "பக்கத்தின் மொழிபெயர்ப்பு",
"right-pagetranslation": "மொழிபெயர்ப்புக்காக பக்கங்களின் பதிப்புகளை குறியிடு",
- "tpt-desc": "உள்ளடக்க பக்கங்களை மொழிபெயர்க்க விரிவாக்கம்",
"tpt-section": "மொழிபெயர்ப்பு அலகு$1",
"tpt-section-new": "புதிய மொழிபெயர்ப்பு அலகு.\nபெயர்:$1",
"tpt-section-deleted": "மொழிபெயர்ப்பு அலகு$1",
- "tpt-template": "பக்கத்தின் வார்ப்புரு",
- "tpt-templatediff": "பக்க வார்ப்புரு மாற்றப்பட்டுள்ளது.",
"tpt-diff-old": "முந்தைய சொற்றொடர்",
"tpt-diff-new": "புதிய சொற்றொடர்",
"tpt-submit": "இந்த பதிப்பை மொழிபெயர்ப்புக்காக குறியிடு",
@@ -27,7 +24,6 @@
"tpt-action-nofuzzy": "மொழிபெயர்ப்புகளை செல்லத்தாகாததாக்க வேண்டாம்.",
"tpt-badtitle": " தரப்பட்ட பக்க பெயர் ( $1 ) செல்லத்தக்க தலைப்பு இல்லை",
"tpt-nosuchpage": "பக்க $1 இல்லை",
- "tpt-badsect": "மொழிபெயர்ப்பு அலகு $2 க்கு ''$1 \"ஒரு செல்லத்தக்க பெயர் அல்ல.",
"tpt-edit-failed": "$1 பக்கத்தை இற்றைப்படுத்த இயலவில்லை.",
"tpt-new-pages-title": "மொழிபெயர்ப்புக்குப் பரிந்துரைக்கப்பட்டுள்ள பக்கங்கள்",
"tpt-old-pages-title": "மொழிபெயர்க்கப்பட்டு வரும் பக்கங்கள்",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/tay.json b/www/wiki/extensions/Translate/i18n/pagetranslation/tay.json
new file mode 100644
index 00000000..b0bd9a82
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/tay.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hitaypayan"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% wal gmbang miru’)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/tcy.json b/www/wiki/extensions/Translate/i18n/pagetranslation/tcy.json
index 6be3e999..3677d8e5 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/tcy.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/tcy.json
@@ -2,8 +2,46 @@
"@metadata": {
"authors": [
"VASANTH S.N.",
- "Vishwanatha Badikana"
+ "Vishwanatha Badikana",
+ "BHARATHESHA ALASANDEMAJALU",
+ "Kiranpoojary",
+ "Ravi Mundkur"
]
},
- "tpt-languages-nonzero": "$1($2% ಅನುವಾದ ಪೂರ ಆತ್‍ಂಡ್)"
+ "pagetranslation": "ಪುಟೋ ತರ್ಜುಮೆ",
+ "action-pagetranslation": "ತರ್ಜುಮೆ ಅಪಿಂಚಿ ಪುಟೊಕುಲೆನ್ ನಿರ್ವಹಿಸಲೇ",
+ "tpt-section": "ತರ್ಜುಮೆ $1",
+ "tpt-section-new": "ಪೊಸ ತರ್ಜುಮೆ. \nಪುದರ್:$1",
+ "tpt-section-deleted": "ತರ್ಜುಮೆ $1",
+ "tpt-diff-new": "ಪೊಸ ಪದೋ",
+ "tpt-old-pages-title": "ತರ್ಜುಮೆ ಅವೊಂತಿಪ್ಪುನಾ ಪುಟೊಕುಲು",
+ "tpt-select-prioritylangs-reason": "ಕಾರಣೊ:",
+ "translate-tag-translate-link-desc": "ಈಫುಟೊನ್ ಅನುವಾದ ಮಲ್ಪುಲೆ",
+ "translate-tag-markthis": "ಈ ಫುಟೊನ್ ಅನುವಾದ ಮಂಪರ ಗುರ್ತ್ ಮನ್ಪುಲೆ",
+ "tpt-languages-legend": "ಬೇತೆ ಬಾಸೆಲೆಡ್:",
+ "tpt-languages-zero": "ಈ ಬಾಸೆಡ್ ಅನುವಾದ ಸುರು ಮಾನ್ಪಿ",
+ "tpt-languages-nonzero": "$1($2% ತರ್ಜುಮೆ ಆತ್‌ಂಡ್)",
+ "tpt-tab-translate": "ಅನುವಾದ ಮಲ್ಪುಲೆ",
+ "tpt-discouraged-language-reason": "ಕಾರಣ: $1",
+ "tpt-aggregategroup-add": "ಸೇರಾಲೆ",
+ "tpt-aggregategroup-save": "ಒರಿಪಾಲೆ",
+ "tpt-aggregategroup-new-name": "ಪುದರ್:",
+ "tpt-aggregategroup-edit-name": "ಪುದರ್:",
+ "tpt-aggregategroup-edit-description": "ವಿವರಣೆ:",
+ "tpt-aggregategroup-update": "ಒರಿಪಾಲೆ",
+ "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": "ಕಾರಣೊ:",
+ "pm-savepages-button-label": "ಒರಿಪಾಲೆ",
+ "pm-cancel-button-label": "ವಜಾ ಮಲ್ಪುಲೆ",
+ "pp-prepare-button-label": "ತಯಾರ್ ಮಲ್ಪುಲೆ",
+ "pp-save-button-label": "ಒರಿಪಾಲೆ",
+ "pp-cancel-button-label": "ವಜಾ ಮಲ್ಪುಲೆ",
+ "tpt-generic-button": "ಗಟ್ಟಿಮಲ್ಪುಲೆ"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/te.json b/www/wiki/extensions/Translate/i18n/pagetranslation/te.json
index 25a522b8..738e355f 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/te.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/te.json
@@ -8,11 +8,9 @@
},
"pagetranslation": "పేజీ అనువాదం",
"right-pagetranslation": "పేజీల కూర్పులను అనువాదానికై గుర్తించడం",
- "tpt-desc": "విషయపు పేజీలను అనువదించడానికై పొడగింత",
"tpt-section": "అనువాద విభాగం $1",
"tpt-section-new": "కొత్త అనువాద విభాగం. పేరు: $1",
"tpt-section-deleted": "అనువాద విభాగము $1",
- "tpt-template": "పేజీ మూస",
"tpt-diff-old": "గత పాఠ్యం",
"tpt-diff-new": "కొత్త పాఠ్యం",
"tpt-sections-template": "అనువాద పేజీ మూస",
@@ -54,7 +52,5 @@
"pt-deletepage-list-other": "ఇతర ఉపపేజీలు",
"pm-import-button-label": "దిగుమతి చెయ్యి",
"pm-savepages-button-label": "భద్రపరచు",
- "pm-cancel-button-label": "రద్దుచేయి",
- "pm-pagename-placeholder": "మీ ప్రతికి పేరును ఇవ్వండి",
- "pm-langcode-placeholder": "భాష సంకేతం"
+ "pm-cancel-button-label": "రద్దుచేయి"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/th.json b/www/wiki/extensions/Translate/i18n/pagetranslation/th.json
index a12ac420..ba6cf88e 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/th.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/th.json
@@ -4,45 +4,75 @@
"Ans",
"Passawuth",
"Woraponboonkerd",
- "Horus"
+ "Horus",
+ "Octahedron80",
+ "Aefgh39622"
]
},
"pagetranslation": "การแปลภาษา",
"right-pagetranslation": "กำหนดให้รุ่นปรับปรุงนี้เพื่อการแปลภาษา",
- "tpt-desc": "ส่วนเพิ่มเติมสำหรับหน้าที่มีการแปลเนื้อหา",
+ "action-pagetranslation": "จัดการหน้าที่แปลได้",
"tpt-section": "หน่วยการแปล $1",
"tpt-section-new": "หน่วยการแปลใหม่\n\nชื่อ: $1",
"tpt-section-deleted": "หน่วยการแปล $1",
- "tpt-template": "แม่แบบของหน้า",
- "tpt-templatediff": "แม่แบบของหน้านี้ได้ถูกเปลี่ยนแปลงแล้ว",
- "tpt-diff-old": "อักษรก่อนหน้า",
- "tpt-diff-new": "คำใหม่",
+ "tpt-diff-old": "ข้อความก่อนหน้า",
+ "tpt-diff-new": "ข้อความใหม่",
"tpt-submit": "กำหนดให้รุ่นนี้เพื่อการแปลภาษา",
"tpt-sections-oldnew": "หน่วยการแปลใหม่และที่มีอยู่เดิมแล้ว",
"tpt-sections-deleted": "หน่วยการแปลที่ถูกลบแล้ว",
"tpt-sections-template": "แม่แบบหน้าการแปลภาษา",
+ "tpt-action-nofuzzy": "ไม่ต้องเลิกตรวจสอบการแปล",
"tpt-badtitle": "ชื่อหน้าที่กำหนดมานั้น ($1) ไม่ใช่ชื่อหน้าที่ถูกต้อง",
"tpt-nosuchpage": "ไม่มีหน้า $1",
"tpt-oldrevision": "$2 ไม่ใช่รุ่นปรับปรุงล่าสุดของหน้าชื่อ[[:$1]]\n\nเฉพาะรุ่นปรับปรุงล่าสุดเท่านั้นที่สา่มารถกำหนดเพื่อการแปลภาษา",
"tpt-notsuitable": "หน้า $1 นั้นไม่เมาะสมในการแปลภาษา\n\nตรวจสอบให้แน่ใจว่ามีแท็ก <nowiki><translate></nowiki> อยู่และมีประโยคของโค้ดที่ถูกต้อง",
"tpt-saveok": "หน้า [[:$1]] ได้ถูกกำหนดไว้สำหรับการแปลภาษากับหน่วยการแปลภาษา $2 หน่วย\n\nหน้านี้สามารถ<span class=\"plainlinks\">[$3 เริ่มแปลภาษาได้แล้ว]</span>",
- "tpt-badsect": "\"$1\" ไม่ใช่ชื่อที่ถูกต้องสำหรับหน่วยการแปลภาษา $2",
+ "tpt-offer-notify": "คุณสามารถ<span class=\"plainlinks\">[$1 แจ้งเตือนผู้แปล]</span>เกี่ยวกับหน้านี้ได้",
"tpt-showpage-intro": "ส่วนที่มีการเพิ่มใหม่, มีอยู่เดิม และที่ถูกลบไปแล้วนั้นปรากฎด้านล่างนี้\nก่อนที่จะทำให้รุ่นปรับปรุงนี้สำหรับการแปลภาษา ตรวจสอบให้แน่ใจว่าการเปลี่ยนแปลงของส่วนต่างๆ ได้ถูกลดลงมาเพื่อเป็นการหลีกเลี่ยงงานที่ไม่จำเป็นของผู้แปลภาษา",
"tpt-mark-summary": "กำหนดให้รุ่นปรับปรุงนี้สำหรับการแปลภาษา",
"tpt-edit-failed": "ไม่สามารถปรับปรุงหน้า: $1 ได้",
+ "tpt-duplicate": "ชื่อหน่วยการแปล $1 ถูกใช้แล้วมากกว่าหนึ่งครั้ง",
"tpt-already-marked": "รุ่นปรับปรุงล่าสุดของหน้านี้ได้ถูกกำหนดเพื่อการแปลภาษาแล้ว",
+ "tpt-unmarked": "หน้า $1 ไม่ได้ถูกกำหนดให้เพื่อการแปลภาษาอีกต่อไป",
"tpt-list-nopages": "ไม่มีหน้าใดๆ ที่ถูกกำหนดเพื่อการแปลภาษา หรือพร้อมที่จะถูกกำหนดเพื่อการแปลภาษา",
+ "tpt-new-pages-title": "หน้าที่เสนอสำหรับการแปลภาษา",
+ "tpt-old-pages-title": "หน้าที่มีการแปลภาษา",
+ "tpt-other-pages-title": "หน้าเสีย",
+ "tpt-discouraged-pages-title": "หน้าที่หยุดการแปลภาษา",
"tpt-new-pages": "{{PLURAL:$1|หน้านี้|หน้าเหล่านี้}} มีที่คั่นสำหรับการแปลภาษาอยู่ แต่ไม่มีรุ่นปรับปรุงใดๆ เลยของ{{PLURAL:$1|หน้านี้|หน้าแหล่านี้}} ที่ได้ถูกกำหนดเพื่อการแปลภาษา",
"tpt-old-pages": "รุ่นปรับปรุงบางรุ่นของ{{PLURAL:$1|หน้านี้|หน้าต่างๆ เหล่านี้}} ได้ถูกกำหนดเพื่อการแปลภาษาแล้ว",
- "tpt-rev-unmark": "ลบหน้านี้จากการแปล",
+ "tpt-select-prioritylangs-reason": "เหตุผล:",
+ "tpt-rev-unmark": "ลบจากการแปล",
"translate-tag-translate-link-desc": "แปลหน้านี้",
"translate-tag-markthis": "กำหนดให้หน้านี้เพื่อการแปลภาษา",
"translate-tag-markthisagain": "หน้านี้มี<span class=\"plainlinks\">[$1 ความเปลี่ยนแปลง]</span> นับตั้งแต่ครั้งสุดท้ายที่<span class=\"plainlinks\">[$2 ถูกกำหนดเพื่อการแปลภาษา]</span>.",
"translate-tag-hasnew": "หน้านี้มี<span class=\"plainlinks\">[$1 ความเปลี่ยนแปลง]</span> ที่ไม่ได้ถูกกำหนดเพื่อการแปลภาษา",
"tpt-translation-intro": "หน้านี้คือ<span class=\"plainlinks\">[$1 รุ่นปรับปรุงที่เริ่มแปลแล้ว]</span> ของ [[$2]] และการแปลภาษาเสร็จสิ้นแล้ว $3 เปอร์เซ็นต์ของทั้งหมดและเป็นรุ่นล่าสุด",
- "tpt-languages-legend": "ภาษาอื่นๆ:",
+ "tpt-translation-intro-fuzzy": "การแปลภาษาที่ตกรุ่นแล้วจะถูกทำเครื่องหมายในลักษณะนี้",
+ "tpt-languages-legend": "ภาษาอื่น ๆ:",
"tpt-languages-nonzero": "$1 (แปลแล้ว $2%)",
- "tpt-target-page": "หน้านี้ไม่สามารถถูกปรับปรุงตามปกติได้\n\nหน้านี้เป็นหน้าการแปลของหน้า[[$1]] และสามารถปรับปรุงการแปลได้โดยใช้[เครื่องมือการแปล $2]",
+ "tpt-tab-translate": "แปล",
+ "tpt-target-page": "ไม่สามารถปรับปรุงหน้านี้ตามปกติได้\nหน้านี้เป็นหน้าการแปลของหน้า [[$1]] และสามารถปรับปรุงการแปลได้โดยใช้[$2 เครื่องมือการแปล]",
"tpt-render-summary": "กำลังอัพเดตเพื่อทำให้ตรงกันกับรุ่นปรับปรุงใหม่ของหน้่าโค้ดหลัก",
- "tpt-download-page": "ส่งหน้าออกไปพร้อมการแปลภาษา"
+ "tpt-aggregategroup-add": "เพิ่ม",
+ "tpt-aggregategroup-save": "บันทึก",
+ "tpt-aggregategroup-new-name": "ชื่อ:",
+ "tpt-aggregategroup-edit-name": "ชื่อ:",
+ "tpt-aggregategroup-edit-description": "คำอธิบาย:",
+ "tpt-aggregategroup-update": "บันทึก",
+ "tpt-aggregategroup-update-cancel": "ยกเลิก",
+ "pt-movepage-list-pages": "รายชื่อหน้าที่จะย้าย",
+ "pt-movepage-current": "ชื่อปัจจุบัน:",
+ "pt-movepage-new": "ชื่อใหม่:",
+ "pt-movepage-reason": "เหตุผล:",
+ "pt-deletepage-action-check": "แสดงรายชื่อหน้าที่จะถูกลบ",
+ "pt-deletepage-current": "ชื่อหน้า:",
+ "pt-deletepage-reason": "เหตุผล:",
+ "pt-deletepage-subpages": "ลบหน้าย่อยทั้งหมด",
+ "pt-deletepage-list-pages": "รายชื่อหน้าที่จะลบ",
+ "pm-import-button-label": "นำเข้า",
+ "pm-savepages-button-label": "บันทึก",
+ "pm-cancel-button-label": "ยกเลิก",
+ "pp-save-button-label": "บันทึก",
+ "pp-cancel-button-label": "ยกเลิก"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/tl.json b/www/wiki/extensions/Translate/i18n/pagetranslation/tl.json
index b98297bf..4e82f9d7 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/tl.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/tl.json
@@ -8,12 +8,9 @@
},
"pagetranslation": "Salinwika ng pahina",
"right-pagetranslation": "Tatakan ang mga bersyon ng mga pahinang isasalinwika",
- "tpt-desc": "Dugtong para sa pagsasalinwika ng mga pahina ng nilalaman",
"tpt-section": "Yunit ng salinwika $1",
"tpt-section-new": "Bagong yunit ng salinwika.\nPangalan: $1",
"tpt-section-deleted": "Yunit ng salinwika $1",
- "tpt-template": "Suleras ng pahina",
- "tpt-templatediff": "Nabago na ang suleras ng pahina.",
"tpt-diff-old": "Naunang teksto",
"tpt-diff-new": "Bagong teksto",
"tpt-submit": "Tatakan ang bersyong ito para isalinwika",
@@ -26,7 +23,6 @@
"tpt-oldrevision": "Ang $2 ay hindi ang pinakabagong bersyon ng pahinang [[:$1]].\nTanging pinakabagong mga bersyong lang ang tatatakan para sa pagsasalinwika.",
"tpt-notsuitable": "Hindi angkop ang pahinang $1 para sa pagsasalinwika.\nTiyaking mayroon itong mga tatak na <nowiki><translate></nowiki> at may isang tanggap na sintaks.",
"tpt-saveok": "Nilagyang ng tanda ang pahinang [[:$1]] para sa pagsasalinwika na may $2 na {{PLURAL:$2|yunit ng salinwika|mga yunit ng salinwika}}.\nMaaari na ngayong <span class=\"plainlinks\">[$3 isalinwika]</span> ang pahina.",
- "tpt-badsect": "Ang $1\" ay isang hindi tanggap na pangalan para sa yunit ng salinwikang $2.",
"tpt-showpage-intro": "Nakatala sa ibaba ang bago, umiiral at naburang mga yunit ng salinwika.\nBago tatakan ang bersyong ito para isalinwika, suriing nakauntian ang mga pagbabago sa mga yunit ng salinwika upang maiwasan ang hindi kailangang gawain para sa mga tagapagsalinwika.",
"tpt-mark-summary": "Tinatakan ang bersyong ito para isalinwika",
"tpt-edit-failed": "Hindi maisapanahon ang pahina: $1",
@@ -59,6 +55,7 @@
"translate-tag-markthisagain": "Ang pahinang ito ay may <span class=\"plainlinks\">[$1 mga pagbabago]</span> mula pa noong huli itong <span class=\"plainlinks\">[$2 tinatakan para isalinwika]</span>.",
"translate-tag-hasnew": "Naglalaman ang pahinang ito ng <span class=\"plainlinks\">[$1 mga pagbabagong]</span> hindi tinatakan para isalinwika.",
"tpt-translation-intro": "Ang pahinang ito ay isang <span class=\"plainlinks\">[$1 naisalinwikang bersyon]</span> ng isang pahina [[$2]] at ang salinwika ay $3% kumpleto na.",
+ "tpt-translation-intro-fuzzy": "Tinatakan ng ganito ang mga pagsasalinwikang lipas na sa panahon.",
"tpt-languages-legend": "Iba pang mga wika:",
"tpt-languages-separator": "&#160;•&#32;",
"tpt-languages-zero": "Simulan ang pagsasalinwika para sa wikang ito",
@@ -71,7 +68,6 @@
"tpt-discouraged-language-reason": "Dahilan: $1",
"tpt-priority-languages": "Isang tagapangasiwa ng salinwika ang nagtakda ng mga wikang nararapat na unahin para sa pangkat na ito upang maging $1.",
"tpt-render-summary": "Isinasapanahon upang tumugma sa bagong bersyon ng pinagmulang pahina",
- "tpt-download-page": "Iluwas ang pahinang may mga pagsasalinwika",
"aggregategroups": "Mga pangkat na pinagsama-sama",
"tpt-aggregategroup-add": "Idagdag",
"tpt-aggregategroup-save": "Itala",
@@ -140,6 +136,5 @@
"pt-deletepage-started": "Pakisuri ang [[Special:Log/pagetranslation|talaan ng pagsasalinwika ng pahina]] para sa mga kamalian at mensahe ng pagkakabuo.",
"pt-deletepage-intro": "Nagpapahintulot sa iyo ang pahinang ito na magbura ng kabuuan ng mga pahinang maisasalinwika o mga pagsasalinwika na papunta sa isang wika.\nAng kilos ng pagbura ay hindi magiging kaagad, dahil maraming mga pahina ang kakailanganing burahin.\nAng mga kabiguan ay itatala sa loob ng [[Special:Log/pagetranslation|tala ng pagsasalinwika ng pahina]] at kakailanganing kinakamay ang pagkukumpuni ng mga ito.",
"pm-savepages-button-label": "Itala",
- "pm-pagename-placeholder": "Itala ang pangalan ng pahina",
"tpt-translate-title": "Payagan ang pagsasalin ng pamagat ng pahina"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/tr.json b/www/wiki/extensions/Translate/i18n/pagetranslation/tr.json
index 2a38db40..72b436fb 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/tr.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/tr.json
@@ -13,11 +13,13 @@
"Sayginer",
"Ömer Berkay",
"Arystanbek",
- "McAang"
+ "McAang",
+ "Bulgu"
]
},
"pagetranslation": "Çeviri sayfası",
"right-pagetranslation": "Sayfa sürümlerini çeviri için işaretler",
+ "action-pagetranslation": "çevrilebilir sayfaları yönetme",
"tpt-section": "Çeviri birimi $1",
"tpt-section-new": "Yeni çeviri birimi.\nAd: $1",
"tpt-section-deleted": "Çeviri birimi $1",
@@ -28,8 +30,11 @@
"tpt-sections-deleted": "Silinen çeviri birimleri",
"tpt-sections-template": "Çeviri sayfası şablonu",
"tpt-badtitle": "Verilen sayfa adı ($1) geçerli bir başlık değil",
+ "tpt-nosuchpage": "$1 adlı sayfa mevcut değil",
"tpt-oldrevision": "$2, [[:$1]] sayfasının en son sürümü değil.\nSadece en son sürümler çeviri için işaretlenebilir.",
+ "tpt-notsuitable": "$1 adlı sayfa, çevrilmeye uygun değil. Sayfada <nowiki><translate></nowiki> etiketlerinin var olduğundan ve sayfanın geçerli bir söz dizimine sahip olduğundan emin olun.",
"tpt-saveok": "[[:$1]] adlı sayfa $2 {{PLURAL:$2|çeviri birimi|çeviri birimi}} ile çeviri için işaretlenmiş.\nSayfa artık <span class=\"plainlinks\">[$3 çevrilebilir]</span>.",
+ "tpt-offer-notify": "Çevirmenleri bu sayfa hakkında <span class=\"plainlinks\">[$1 bilgilendirebilirsiniz]</span>.",
"tpt-showpage-intro": "Aşağıda yeni, mevcut ve silinmiş çeviri birimleri listelenmiştir.\nBu sürümü çeviri için işaretlemeden önce, çevirmenlere gereksiz iş çıkarmamak için çeviri birimlerinde yapılan değişikliklerin asgari seviyede olduğundan emin olun.",
"tpt-mark-summary": "Bu sürüm çeviri için işaretlendi",
"tpt-mark-nochanges": "Bu sürüm ile kontrol edilmiş son sürüm arasında hiçbir fark yoktur.",
@@ -51,6 +56,7 @@
"translate-tag-markthis": "Bu sayfayı çeviri için işaretle",
"translate-tag-hasnew": "Bu sayfa, çeviri için işaretlenmemiş <span class=\"plainlinks\">[$1 değişiklik]</span> içeriyor.",
"tpt-translation-intro": "Bu sayfa, [[$2]] sayfasının <span class=\"plainlinks\">[$1 çevrilmiş bir sürümüdür]</span> ve çeviri %$3 oranında tamamlanmıştır.",
+ "tpt-translation-intro-fuzzy": "Tarihi geçen çeviriler bu şekilde işaretlenmiştir.",
"tpt-languages-legend": "Diğer diller:",
"tpt-languages-zero": "Bu dil için başlangıç çeviri",
"tpt-languages-nonzero": "$1 ($2% çevrildi)",
@@ -65,9 +71,12 @@
"tpt-aggregategroup-edit-description": "Açıklama:",
"tpt-aggregategroup-update": "Kaydet",
"tpt-invalid-group": "Geçersiz grup",
+ "log-name-pagetranslation": "Sayfa çeviri kütüğü",
+ "logentry-pagetranslation-mark": "$1, $3 sayfasını çeviri için {{GENDER:$2|işaretledi}}",
"pt-movepage-list-other": "Diğer alt {{PLURAL:$1|sayfalar|sayfalar}}",
"pt-movepage-current": "Geçerli adı:",
"pt-movepage-new": "Yeni adı:",
+ "pt-movepage-reason": "Gerekçe:",
"pt-movepage-subpages": "Tüm alt sayfaları taşı",
"pt-deletepage-current": "Sayfa adı:",
"pt-deletepage-subpages": "Tüm alt sayfaları sil",
@@ -76,10 +85,10 @@
"pm-cancel-button-label": "İptal",
"pm-page-does-not-exist": "$1 mevcut değil.",
"pm-pagename-missing": "Lütfen sayfa adı girin.",
- "pm-langcode-missing": "Lütfen dil kodunu girin.",
"pm-pagetitle-placeholder": "Sayfa adı girin",
"pm-pagetitle-invalid": "Lütfen geçerli bir sayfa başlığı girin",
"pm-pagetitle-missing": "Lütfen sayfa adı girin.",
+ "pm-langcode-missing": "Lütfen dil kodunu girin.",
"pp-pagename-placeholder": "Sayfa adı girin",
"pp-save-button-label": "Kaydet",
"pp-save-message": "Sayfa kaydedildi. Artık [$1 düzenleme] yapabilirsiniz.",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/trv.json b/www/wiki/extensions/Translate/i18n/pagetranslation/trv.json
new file mode 100644
index 00000000..daa9ebab
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/trv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iyuqciyang"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% wada hmjil kari )"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/tzm.json b/www/wiki/extensions/Translate/i18n/pagetranslation/tzm.json
index 4f078147..2135f0f7 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/tzm.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/tzm.json
@@ -5,7 +5,6 @@
]
},
"pagetranslation": "ⵜⴰⵙⵓⵖⵍⵜ ⵏ ⵜⴰⵙⵏⴰ",
- "tpt-template": "ⵜⴰⵍⵖⴰ ⵏ ⵜⴰⵙⵏⴰ",
"tpt-diff-new": "ⴰⴹⵔⵉⵙ ⴰⵎⴰⵢⵏⵓ",
"tpt-select-prioritylangs-reason": "ⴰⵙⵔⴰⴳ:",
"tpt-languages-legend": "ⵜⵓⵜⵍⴰⵢⵉⵏ ⵢⴰⴹⵏⵉ:",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/udm.json b/www/wiki/extensions/Translate/i18n/pagetranslation/udm.json
new file mode 100644
index 00000000..d690afe1
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/udm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wadorgurt"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% берыктэмын)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ug-arab.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ug-arab.json
index 00282c80..93c0bf84 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ug-arab.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ug-arab.json
@@ -9,8 +9,6 @@
"tpt-section": "$1 تەرجىمە بۆلىكى",
"tpt-section-new": "يېڭى تەرجىمە بۆلىكى.\nئاتى: $1",
"tpt-section-deleted": "$1 تەرجىمە بۆلىكى",
- "tpt-template": "بەت قېلىپى",
- "tpt-templatediff": "بەت قېلىپى ئۆزگەردى.",
"tpt-diff-old": "ئالدىنقى تېكست",
"tpt-diff-new": "يېڭى تېكست",
"tpt-sections-template": "تەرجىمە بېتى قېلىپى",
@@ -36,7 +34,6 @@
"tpt-discouraged-language-reason": "سەۋەپ: $1",
"tpt-priority-languages": "تەرجىمە باشقۇرغۇچى بۇ گۇرۇپپا ئالدىن تەرجىمە قىلىدىغان تىلنى $1 غا تەڭشىدى.",
"tpt-render-summary": "ئەسلى بەت بىلەن ماسلىشىدىغان يېڭى نەشرىگە يېڭىلاۋاتىدۇ",
- "tpt-download-page": "تەرجىمىسى بار بەتنى چىقار",
"aggregategroups": "توپلانما گۇرۇپپا",
"tpt-aggregategroup-add": "قوش",
"tpt-aggregategroup-save": "ساقلا",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/uk.json b/www/wiki/extensions/Translate/i18n/pagetranslation/uk.json
index 7489809e..b4e9607d 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/uk.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/uk.json
@@ -14,12 +14,13 @@
"Ата",
"Тест",
"Piramidion",
- "Dars"
+ "Dars",
+ "Vlad5250"
]
},
"pagetranslation": "Переклад сторінок",
"right-pagetranslation": "позначення версій сторінок для перекладу",
- "action-pagetranslation": "керування сторінками, що можна перекладати",
+ "action-pagetranslation": "керування сторінками, які можна перекладати",
"tpt-section": "Блок перекладу $1",
"tpt-section-new": "Новий блок перекладу.\nНазва: $1",
"tpt-section-deleted": "Блок перекладу $1",
@@ -69,6 +70,7 @@
"translate-tag-markthisagain": "На цій сторінці {{PLURAL:$1|була здійснена|були здійснені}} <span class=\"plainlinks\">[$1 {{PLURAL:$1|зміна|зміни}}]</span> з моменту, коли вона востаннє була <span class=\"plainlinks\">[$2 відмічена до перекладу]</span>.",
"translate-tag-hasnew": "На цій сторінці було здійснено <span class=\"plainlinks\">[$1 зміни]</span>, які не відмічені для перекладу.",
"tpt-translation-intro": "Ця сторінка є <span class=\"plainlinks\">[$1 перекладом]</span> сторінки [[$2]]. Переклад виконано на $3%.",
+ "tpt-translation-intro-fuzzy": "Застарілі переклади позначені так.",
"tpt-languages-legend": "Інші мови:",
"tpt-languages-zero": "Розпочати переклад цією мовою",
"tpt-languages-nonzero": "$1 ($2% перекладено)",
@@ -108,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",
@@ -122,6 +124,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|обмежив|обмежила}} мови для перекладабельної сторінки $3 до $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|додав|додала}} перекладабельну сторінку $3 до агрегованої групи $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|вилучив|вилучила}} перекладабельну сторінку $3 з агрегованої групи $4",
+ "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-encourage": "Заохочення до перекладу",
+ "log-action-filter-pagetranslation-discourage": "Відмовляння від перекладу",
+ "log-action-filter-pagetranslation-prioritylanguages": "Зміна пріоритетних мов",
+ "log-action-filter-pagetranslation-aggregategroups": "Зміна агрегованих груп",
"pt-movepage-title": "Перемістити сторінку $1, доступну для перекладу",
"pt-movepage-blockers": "Сторінка перекладу не може бути перейменована через {{PLURAL:$1|1=таку помилку|такі помилки}}:",
"pt-movepage-block-base-exists": "Перекладабельна цільова сторінка «[[:$1]]» вже існує.",
@@ -135,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": "Перемістити сторінку, доступну для перекладу",
@@ -146,8 +159,8 @@
"pt-movepage-action-perform": "Виконати переміщення",
"pt-movepage-action-other": "Змінити ціль",
"pt-movepage-intro": "Ця службова сторінка дозволяє перейменовувати сторінки, позначені для перекладу.\nДія не буде миттєвою, оскільки потрібно перейменувати багато сторінок.\nПід час перейменування сторінок взаємодіяти з ними неможливо.\nПомилки буде записано в [[Special:Log/pagetranslation|журналі перекладу сторінок]] і їх потрібно буде виправити вручну.",
- "pt-movepage-logreason": "Частина сторінки, що перекладається, $1.",
- "pt-movepage-started": "Основна сторінка тепер переміщена.\nБудь ласка, перевірте [[Special:Log/pagetranslation|журнал перекладу сторінок]] на наявність помилок і повідомлення про завершення.",
+ "pt-movepage-logreason": "Частина доступної для перекладу сторінки «$1»",
+ "pt-movepage-started": "Будь ласка, за деякий час перевірте [[Special:Log/pagetranslation|журнал перекладу сторінок]] на наявність помилок і повідомлення про завершення.",
"pt-locked-page": "Ця сторінка заблокована, оскільки в даний момент відбувається переміщення сторінки, що перекладається.",
"pt-deletepage-lang-title": "Вилучення сторінки перекладу $1",
"pt-deletepage-full-title": "Видалення сторінки доступної для перекладу $1",
@@ -167,8 +180,8 @@
"pt-deletepage-list-section": "Сторінки одиниці перекладу",
"pt-deletepage-list-other": "Інші підсторінки",
"pt-deletepage-list-count": "Усього вилучити $1 {{PLURAL:$1|сторінку|сторінки|сторінок}}.",
- "pt-deletepage-full-logreason": "Частина сторінки для перекладу, $1.",
- "pt-deletepage-lang-logreason": "Частина сторінки перекладу $1.",
+ "pt-deletepage-full-logreason": "Частина доступної для перекладу сторінки «$1».",
+ "pt-deletepage-lang-logreason": "Частина сторінки перекладу «$1»",
"pt-deletepage-started": "Будь ласка, перевірте [[Special:Log/pagetranslation|журнал перекладу сторінок]] на наявність помилок і повідомлення про завершення.",
"pt-deletepage-intro": "Ця службова сторінка дозволяє Вам вилучати сторінки, призначені для перекладу, разом з перекладами або ж вилучати переклади визначеною мовою.\nЦя дія не буде миттєвою, бо потребуватиме вилучення багатьох залежних сторінок.\nЯкщо вилучення буде невдалим, його буде записано в [[Special:Log/pagetranslation|журналі перекладу]] і такі випадки потрібно буде усунути вручну.",
"pagemigration": "Міграція сторінок перекладу",
@@ -180,14 +193,16 @@
"pm-old-translations-missing": "$1 не містить старих перекладів",
"pm-extra-units-warning": "Можуть бути наявні додаткові блоки. Будь ласка, правильно співвіднесіть джерело і блоки перекладу",
"pm-pagename-missing": "Будь ласка, введіть назву сторінки",
- "pm-langcode-missing": "Схоже, що код мови відсутній у назві. Будь ласка, введіть назву сторінки у форматі <назва-сторінки>/<код-мови>.",
"pm-add-icon-hover-text": "Додати блок нижче",
"pm-swap-icon-hover-text": "Поміняти місцями з блоком нижче",
"pm-delete-icon-hover-text": "Видалити блок",
"pm-pagetitle-placeholder": "Введіть назву сторінки",
"pm-pagetitle-invalid": "Будь ласка, введіть правильну назву сторінки. Вона має бути в форматі <назва-сторінки>/<код-мови>.",
"pm-pagetitle-missing": "Будь ласка, введіть назву сторінки.",
+ "pm-langcode-missing": "Схоже, що код мови відсутній у назві. Будь ласка, введіть назву сторінки у форматі <назва-сторінки>/<код-мови>.",
"pm-summary-import": "Імпортований переклад за допомогою [[Special:PageMigration|міграції сторінок]]",
+ "pm-on-import-message-text": "Було імпортовано старі переклади. Використайте опції додавання, зміни та вилучення блоків перекладу та натисніть на кнопку «{{int:pm-savepages-button-label}}» для їх збереження. Натисніть на кнопку «{{int:pm-cancel-button-label}}» для скасування.",
+ "pm-on-save-message-text": "Блоки перекладу було збережено. Тепер Ви можете ввести назву нової сторінки перекладу для її міграції, або зробити зміни до блоків нижче й зберегти нове редагування.",
"tpt-translate-title": "Дозволити переклад заголовка сторінки",
"pp-save-summary": "Підготовлена сторінка для перекладу",
"pagepreparation": "Підготувати сторінку для перекладу",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/ur.json b/www/wiki/extensions/Translate/i18n/pagetranslation/ur.json
index 6a39d56f..045998aa 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/ur.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/ur.json
@@ -2,11 +2,12 @@
"@metadata": {
"authors": [
"පසිඳු කාවින්ද",
- "عثمان خان شاہ"
+ "عثمان خان شاہ",
+ "Obaid Raza",
+ "Muhammad Shuaib"
]
},
"pagetranslation": "صفحہ ترجمہ",
- "tpt-template": "صفحہ کے سانچے",
"tpt-diff-old": "پچھلے ٹیکسٹ",
"tpt-diff-new": "نئے متن",
"tpt-sections-template": "ترجمہ صفحہ سانچے",
@@ -15,7 +16,7 @@
"tpt-old-pages-title": "ترجمہ میں صفحات",
"tpt-other-pages-title": "ٹوٹ کے صفحات",
"tpt-select-prioritylangs-reason": "وجہ:",
- "tpt-sections-prioritylangs": "ترجیح کی زبانیں",
+ "tpt-sections-prioritylangs": "ترجیحی زبانیں",
"tpt-rev-mark": "ترجمہ کے لئے نشان زد کریں",
"tpt-rev-unmark": "ترجمہ سے حذف کریں",
"tpt-rev-encourage": "بحال",
@@ -24,18 +25,27 @@
"tpt-rev-encourage-tooltip": "عمومی ترجمہ کرنے کے لئے اس صفحے کو بحال.",
"translate-tag-translate-link-desc": "اس صفحہ کا ترجمہ",
"translate-tag-markthis": "ترجمہ کے لئے اس صفحے نشان زد کریں",
+ "tpt-translation-intro": "پیش نظر صفحہ [[$2]] کا <span class=\"plainlinks\">[$1 ترجمہ شدہ نسخہ]</span> ہے اور ترجمہ $3 فیصد مکمل ہے۔",
+ "tpt-languages-legend": "دیگر زبانیں:",
"tpt-languages-zero": "اس زبان کے لئے ترجمہ شروع",
"tpt-languages-nonzero": "$1 ($2% ترجمہ ہوا)",
- "tpt-download-page": "ترجمے کے ساتھ اس صفحے کی برآمد",
+ "tpt-tab-translate": "ترجمہ کریں",
+ "tpt-discouraged-language-reason": "وجہ: $1",
"tpt-aggregategroup-add": "شامل کریں",
"tpt-aggregategroup-save": "محفوظ کریں",
"tpt-aggregategroup-add-new": "ایک نیا میرا گروپ شامل کریں",
"tpt-aggregategroup-new-name": "نام:",
"tpt-aggregategroup-invalid-group": "گروپ موجود نہیں",
+ "tpt-aggregategroup-edit-name": "نام:",
+ "tpt-aggregategroup-edit-description": "تفصیل:",
+ "tpt-aggregategroup-update": "محفوظ کریں",
+ "tpt-aggregategroup-update-cancel": "منسوخ",
"log-name-pagetranslation": "صفحہ ترجمہ لاگ ان کریں",
+ "log-action-filter-pagetranslation-move": "منتقل کردہ صفحات",
"pt-movepage-list-pages": "منتقل کرنے کے لئے صفحات کی فہرست",
- "pt-movepage-list-translation": "ترجمہ صفحات",
- "pt-movepage-list-section": "سیکشن کے صفحات",
+ "pt-movepage-list-translation": "ترجمہ {{PLURAL:$1|صفحہ|صفحات}}",
+ "pt-movepage-list-section": "ترجمہ اکائی {{PLURAL:$1|صفحہ|صفحات}}",
+ "pt-movepage-list-other": "دیگر ذیلی {{PLURAL:$1|صفحہ|صفحات}}",
"pt-movepage-legend": "ترجمہ صفحہ منتقل",
"pt-movepage-current": "موجودہ نام:",
"pt-movepage-new": "نیا نام:",
@@ -51,5 +61,12 @@
"pt-deletepage-reason": "وجہ:",
"pt-deletepage-list-pages": "خارج کرنے کے لئے صفحات کی فہرست",
"pt-deletepage-list-translation": "ترجمہ صفحات",
- "pt-deletepage-list-section": "سیکشن کے صفحات"
+ "pt-deletepage-list-section": "اکائی کے صفحات",
+ "pt-deletepage-list-other": "دیگر ذیلی صفحات",
+ "pm-savepages-button-label": "محفوظ کریں",
+ "pm-cancel-button-label": "منسوخ",
+ "pm-page-does-not-exist": "$1 موجود نہیں ہے۔",
+ "pp-save-button-label": "محفوظ کریں",
+ "pp-cancel-button-label": "منسوخ",
+ "tpt-generic-button": "تصدیق"
}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/vep.json b/www/wiki/extensions/Translate/i18n/pagetranslation/vep.json
index e82870d8..92a33f7b 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/vep.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/vep.json
@@ -6,12 +6,9 @@
},
"pagetranslation": "Lehtpoliden kändmine",
"right-pagetranslation": "Znamoita lehpoliden versijad kändmižen täht",
- "tpt-desc": "Ližaprogramm lehtpoliden südäimištod kätes.",
"tpt-section": "Kändmižühtnik $1",
"tpt-section-new": "Uz' kändmižühtnik. Nimi: $1",
"tpt-section-deleted": "Kändmižühtnik $1",
- "tpt-template": "Lehtpolen šablon",
- "tpt-templatediff": "Nece lehtpolen šablon om toižetanus.",
"tpt-diff-old": "Edeline tekst",
"tpt-diff-new": "Uz' tekst",
"tpt-submit": "Znamoita nece versii kändmižen täht.",
@@ -26,7 +23,6 @@
"translate-tag-translate-link-desc": "Käta nece lehtpol'",
"translate-tag-markthis": "Znamoita nece lehtpol' kändmižen täht.",
"tpt-languages-legend": "Toižed keled:",
- "tpt-download-page": "Eksportiruida lehtpol' kändusidenke",
"pt-movepage-list-other": "Toižed alalehtpoled",
"pt-movepage-current": "Olii nimi:",
"pt-movepage-new": "Uz' nimi:",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/vi.json b/www/wiki/extensions/Translate/i18n/pagetranslation/vi.json
index 54664bd7..050a3e7b 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/vi.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/vi.json
@@ -58,6 +58,7 @@
"translate-tag-markthisagain": "Trang này có <span class=\"plainlinks\">[$1 thay đổi]</span> từ khi nó được <span class=\"plainlinks\">[$2 đánh dấu cần dịch]</span> lần cuối.",
"translate-tag-hasnew": "Trang này có <span class=\"plainlinks\">[$1 thay đổi]</span> chưa được đánh dấu cần dịch.",
"tpt-translation-intro": "Trang này là một <span class=\"plainlinks\">[$1 bản dịch]</span> của trang [[$2]] và bản dịch đã hoàn thành $3%.",
+ "tpt-translation-intro-fuzzy": "Các bản dịch lỗi thời được đánh dấu như thế này.",
"tpt-languages-legend": "Ngôn ngữ khác:",
"tpt-languages-zero": "Bắt đầu bản dịch trong ngôn ngữ này",
"tpt-languages-nonzero": "$1 (đã biên dịch $2%)",
@@ -111,6 +112,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2}}đã giới hạn các ngôn ngữ của trang dịch được $3 ra $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2}}đã thêm trang dịch được $3 và nhóm tập hợp $4",
"logentry-pagetranslation-dissociate": "$1 {{GENDER:$2}}đã rút trang dịch được $3 khỏi nhóm tập tin $4",
+ "log-action-filter-pagetranslation": "Kiểu tác vụ:",
+ "log-action-filter-pagetranslation-mark": "Đánh dấu cần dịch",
+ "log-action-filter-pagetranslation-unmark": "Gỡ khỏi hệ thống biên dịch",
+ "log-action-filter-pagetranslation-move": "Di chuyển trang",
+ "log-action-filter-pagetranslation-delete": "Xóa trang",
+ "log-action-filter-pagetranslation-encourage": "Khuyến khích biên dịch",
+ "log-action-filter-pagetranslation-discourage": "Phản đối biên dịch",
+ "log-action-filter-pagetranslation-prioritylanguages": "Thay đổi ngôn ngữ ưu tiên",
+ "log-action-filter-pagetranslation-aggregategroups": "Thay đổi nhóm tổng hợp",
"pt-movepage-title": "Di chuyển trang dịch được $1",
"pt-movepage-blockers": "Trang dịch được không thể được đổi tên vì {{PLURAL:$1|lỗi|các lỗi}} sau:",
"pt-movepage-block-base-exists": "Bản gốc của trang đích dịch được “[[:$1]]” tồn tại.",
@@ -177,6 +187,8 @@
"pm-pagetitle-missing": "Vui lòng nhập tên trang.",
"pm-langcode-missing": "Hình như tên trang thiếu mã ngôn ngữ. Xin vui lòng nhập tên trang ở dạng <tên-trang>/<mã-ngôn-ngữ>.",
"pm-summary-import": "Đã nhập bản dịch bằng cách [[Special:PageMigration|chuyển trang]]",
+ "pm-on-import-message-text": "Các bản dịch cũ đã được nhập. Sử dụng các nút thêm, đổi, và xóa để chỉnh sửa các đơn vị biên dịch và bấm nút “{{int:pm-savepages-button-label}}” để lưu chúng. Bấm nút “{{int:pm-cancel-button-label}}” để vứt bỏ.",
+ "pm-on-save-message-text": "Các đơn vị biên dịch đã được lưu. Bạn có thể điền tên của một trang dịch được để chuyển đổi nó hoặc thay đổi các đơn vị bên dưới và lưu phiên bản mới.",
"tpt-translate-title": "Cho phép dịch tên trang",
"pp-save-summary": "Đã chuẩn bị trang để dịch",
"pagepreparation": "Chuẩn bị trang để dịch",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/xsy.json b/www/wiki/extensions/Translate/i18n/pagetranslation/xsy.json
new file mode 100644
index 00000000..a8fd6f56
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/xsy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lalotahes"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% pinaibih ka ka:i’ )"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/yi.json b/www/wiki/extensions/Translate/i18n/pagetranslation/yi.json
index 4f231c7a..92cd9a87 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/yi.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/yi.json
@@ -52,6 +52,7 @@
"translate-tag-markthisagain": "דער בלאַט האט <span class=\"plainlinks\">[ $1 ענדערונגען]</span> זינט ער איז לעצט געווארן <span class=\"plainlinks\">[ $2 אנגעצייכנט פֿאַר איבערזעצונג].</span>",
"translate-tag-hasnew": "דער בלאַט אַנטהאַלט <span class=\"plainlinks\">[ $1 ענדערונגען]</span> וואָס זענען נישט אנגעצייכנט פֿאַר איבערזעצונג.",
"tpt-translation-intro": "דער דאזיקער בלאט איז א <span class=\"plainlinks\">[$1 איבערגעזעצטע ווערסיע]</span> פון דעם בלאט [[$2]] און די איבערזעצונג איז $3% פארענדיקט.",
+ "tpt-translation-intro-fuzzy": "פארעלטערטע איבערזעצונגען זענען מארקירט אזוי.",
"tpt-languages-legend": "אנדערע שפראַכן:",
"tpt-languages-zero": "אנהייבן איבערזעצן די דאזיקע שפראך",
"tpt-languages-nonzero": "$1 ($2% איבערגעזעצט)",
@@ -74,18 +75,22 @@
"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": "מארקירן פאר איבערזעצונג",
"pt-movepage-title": "באוועגן איבערזעצבארן בלאט \"$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-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-other": "אנדערע {{PLURAL:$1| אונטערבלאַט| אונטערבלעטער}}",
"pt-movepage-list-count": "אינגאנצן $1 {{PLURAL:$1|בלאט|בלעטער}} צו באוועגן.",
"pt-movepage-legend": "באוועגן איבערזעצבארן בלאט",
"pt-movepage-current": "אקטועלער נאמען:",
@@ -95,7 +100,7 @@
"pt-movepage-action-check": "קאנטראלירט צי די באוועגונג איז מעגלעך",
"pt-movepage-action-perform": "פֿירט אויס די באוועגונג",
"pt-movepage-action-other": "ענדערט ציל",
- "pt-movepage-logreason": "טייל פון איבערזעצבארן בלאט \"$1\".",
+ "pt-movepage-logreason": "טייל פון איבערזעצבארן בלאט \"$1\"",
"pt-deletepage-lang-title": "אויסמעקן איבערזעצונג בלאט \"$1\"",
"pt-deletepage-full-title": "אויסמעקן איבערזעצבארן בלאט \"$1\"",
"pt-deletepage-invalid-title": "דער ספעציפירטער בלאט איז נישט גילטיק.",
@@ -113,15 +118,16 @@
"pt-deletepage-list-section": "איבערזעצונג איינהייט בלעטער",
"pt-deletepage-list-other": "אנדערע אונטערבלעטער",
"pt-deletepage-list-count": "אינגאנצן $1 {{PLURAL:$1|בלאט|בלעטער}} אויסצומעקן.",
- "pt-deletepage-full-logreason": "טייל פון איבערזעצבארן בלאט $1.",
- "pt-deletepage-lang-logreason": "טייל פון איבערזעצונג בלאט $1.",
+ "pt-deletepage-full-logreason": "טייל פון איבערזעצבארן בלאט ״$1״.",
+ "pt-deletepage-lang-logreason": "טייל פון איבערזעצונג בלאט \"$1\".",
+ "pagemigration": "איבערזעצונג בלאט מיגראציע",
"pm-import-button-label": "אימפארטירן",
"pm-savepages-button-label": "אויפֿהיטן",
"pm-cancel-button-label": "אַנולירן",
"pm-page-does-not-exist": "$1 עקזיסטירט נישט",
"pm-old-translations-missing": "$1 אנטהאלט נישט קיין אלטע איבערזעצונגען",
"pm-delete-icon-hover-text": "אויסמעקן איינס",
- "pm-langcode-missing": "ביטע איינגעבן שפראכקאג",
+ "pm-langcode-missing": "װײזט אױס אַז דער שפראַכקאד פֿעלט אין קעפל. ביטע איינגעבן בלאַטקעפל אין פֿארמאַט <בלאַטנאָמען>/<שפראַכקאד>.",
"pagepreparation": "צוגרייטן בלאט פאר איבערזעצונג",
"pp-pagename-placeholder": "אײַנגעבן בלאטנאמען",
"pp-prepare-button-label": "צוגרייטן",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/yo.json b/www/wiki/extensions/Translate/i18n/pagetranslation/yo.json
new file mode 100644
index 00000000..e908711f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/yo.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wikicology",
+ "Demmy"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ti jẹ́ yíyípadàlédè)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/zgh.json b/www/wiki/extensions/Translate/i18n/pagetranslation/zgh.json
new file mode 100644
index 00000000..9403534a
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/zgh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amara-Amaziɣ"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ⵉⵜⵜⵓⵙⵓⵖⵍⵏ)"
+}
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/zh-hans.json b/www/wiki/extensions/Translate/i18n/pagetranslation/zh-hans.json
index a92f1d67..681d375d 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/zh-hans.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/zh-hans.json
@@ -40,10 +40,10 @@
"tpt-badtitle": "页面名称 ($1) 不是一个有效的标题",
"tpt-nosuchpage": "页面$1 不存在。",
"tpt-oldrevision": "$2 不是页面 [[:$1]] 的最新版本。只有最新版本可以标记进行翻译。",
- "tpt-notsuitable": "页$1不适合翻译。\n请确保它具有 <nowiki><translate></nowiki> 标记,并具有有效的语法。",
- "tpt-saveok": "页面[[:$1]]已被标记将进行翻译,一共$2个翻译单位。\n本页面现已可以<span class=\"plainlinks\">[$3 翻译]</span>。",
+ "tpt-notsuitable": "页面$1不适合翻译。请确保它具有<nowiki><translate></nowiki>标签,并具有有效的语法。",
+ "tpt-saveok": "页面[[:$1]]已被标记将进行翻译,一共$2个翻译单位。本页面现已可以<span class=\"plainlinks\">[$3 翻译]</span>。",
"tpt-offer-notify": "您可以<span class=\"plainlinks\">[$1 通告关于此页面的翻译]</span>。",
- "tpt-showpage-intro": "以下列出新创、现存及已删除的翻译单元。\n将此版本标记进行翻译之前,请检查来确定该部分极少受修改,以便翻译员避免得到多余的工作。",
+ "tpt-showpage-intro": "以下列出新创、现存及已删除的翻译单元。将此版本标记进行翻译之前,请检查来确定该部分极少受修改,以便翻译员避免得到多余的工作。",
"tpt-mark-summary": "此版本已被标记将进行翻译",
"tpt-mark-nochanges": "没有要复核的更改。将此页面标记翻译将既不会编辑页面,又不会编辑任何现有翻译单元。",
"tpt-edit-failed": "无法更新该页面:$1",
@@ -68,7 +68,7 @@
"tpt-rev-discourage": "不建议",
"tpt-rev-encourage": "恢复",
"tpt-rev-mark-tooltip": "标记本页的最新版本进行翻译。",
- "tpt-rev-unmark-tooltip": "从翻译中删除此页。",
+ "tpt-rev-unmark-tooltip": "从翻译中移除此页面。",
"tpt-rev-discourage-tooltip": "不要再进一步翻译此页。",
"tpt-rev-encourage-tooltip": "将此页面恢复正常翻译模式。",
"translate-tag-translate-link-desc": "翻译本页",
@@ -76,13 +76,14 @@
"translate-tag-markthisagain": "此页面自从最近被<span class=\"plainlinks\">[$2 标记翻译]</span>以来已有<span class=\"plainlinks\">[$1 更改]</span>。",
"translate-tag-hasnew": "此页面有未被标记进行翻译的<span class=\"plainlinks\">[$1 更改]</span>。",
"tpt-translation-intro": "本页是页面[[$2]]的<span class=\"plainlinks\">[$1 翻译版本]</span>,翻译工作已完成$3%。",
+ "tpt-translation-intro-fuzzy": "已过时的翻译就会像这样标记。",
"tpt-languages-legend": "其他语言:",
"tpt-languages-zero": "开始这种语言的翻译",
"tpt-languages-nonzero": "$1($2%已翻译)",
"tpt-tab-translate": "翻译",
- "tpt-target-page": "本页面无法手动更新。\n本页面是[[$1]]页面的翻译版,可以使用[$2 翻译工具]来更新该翻译。",
+ "tpt-target-page": "本页面无法手动更新。本页面是[[$1]]页面的翻译版,可以使用[$2 翻译工具]来更新该翻译。",
"tpt-patrolling-blocked": "此页面不能被巡查。请使用翻译操作复核它。",
- "tpt-unknown-page": "此命名空间是保留给内容页面翻译。\n您尝试编辑的页面似乎没有对应任何被标记进行翻译的页面。",
+ "tpt-unknown-page": "此名字空间是保留给内容页面翻译。您尝试编辑的页面似乎没有对应任何被标记进行翻译的页面。",
"tpt-translation-restricted": "此页面到这种语言的翻译,已被翻译管理员禁止。\n\n原因:$1",
"tpt-discouraged-language-force-header": "此页面不能翻译成$1。",
"tpt-discouraged-language-force-content": "翻译管理员决定此页面只能翻译成$1。",
@@ -109,8 +110,8 @@
"pt-parse-open": "&lt;translate>标签不平衡。\n翻译模板:<pre>$1</pre>",
"pt-parse-close": "&lt;/translate>标签不平衡。\n翻译模板:<pre>$1</pre>",
"pt-parse-nested": "不允许嵌套&lt;translate>翻译单元。\n标签文本:<pre>$1</pre>",
- "pt-shake-multiple": "单一翻译单元含多个翻译单元标记。\n翻译单元文本:<pre>$1</pre>",
- "pt-shake-position": "翻译单元标记在意外位置。\n翻译单元文本:<pre>$1</pre>",
+ "pt-shake-multiple": "单一翻译单元含多个翻译单元标记。翻译单元文本:<pre>$1</pre>",
+ "pt-shake-position": "翻译单元标记在意外位置。翻译单元文本:<pre>$1</pre>",
"pt-shake-empty": "为“$1”的翻译单位标记是空的。",
"log-description-pagetranslation": "页面翻译系统的对应活动日志",
"log-name-pagetranslation": "页面翻译日志",
@@ -129,7 +130,16 @@
"logentry-pagetranslation-prioritylanguages-force": "$1认为$3到$5对此翻译页面的贡献{{GENDER:$2|很有限}}",
"logentry-pagetranslation-associate": "$1{{GENDER:$2|添加}}了翻译页面$3至信息组$4",
"logentry-pagetranslation-dissociate": "$1已在信息组$4的翻译页面$3中{{GENDER:$2|移除}}",
- "pt-movepage-title": "移动可翻译页面$1",
+ "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-encourage": "翻译鼓励",
+ "log-action-filter-pagetranslation-discourage": "翻译劝阻",
+ "log-action-filter-pagetranslation-prioritylanguages": "首选语言修改",
+ "log-action-filter-pagetranslation-aggregategroups": "聚合组修改",
+ "pt-movepage-title": "移动可翻译页面“$1”",
"pt-movepage-blockers": "可翻译页面因下列$1错误无法移动至新名称:",
"pt-movepage-block-base-exists": "可翻译的目标页面“[[:$1]]”已存在。",
"pt-movepage-block-base-invalid": "可翻译的目标页面名称不是一个有效标题。",
@@ -152,9 +162,9 @@
"pt-movepage-action-check": "检查是否可以移动",
"pt-movepage-action-perform": "确认移动",
"pt-movepage-action-other": "更改目标",
- "pt-movepage-intro": "本特殊页面允许您移动被标记进行翻译的页面。\n此移动操作将不会一瞬间,因为有很多页面要移动。\n当页面移动中,不能与该页面交互。\n任何移动失败将在[[Special:Log/pagetranslation|页面翻译日志]]记录,并且需要手动修理。",
- "pt-movepage-logreason": "可翻译页面“$1”的一部分。",
- "pt-movepage-started": "基页面现已移动。\n请检查[[Special:Log/pagetranslation|页面翻译日志]]内的错误和完成消息。",
+ "pt-movepage-intro": "本特殊页面允许您移动被标记进行翻译的页面。此移动操作将不会一瞬间,因为有很多页面要移动。当页面移动中,不能与该页面交互。任何移动失败将在[[Special:Log/pagetranslation|页面翻译日志]]记录,并且需要手动修理。",
+ "pt-movepage-logreason": "可翻译页面“$1”的一部分",
+ "pt-movepage-started": "请过段时间后检查[[Special:Log/pagetranslation|页面翻译日志]]内的错误和完成消息。",
"pt-locked-page": "此页面已被锁定,因为可翻译页面正在被移动。",
"pt-deletepage-lang-title": "正在删除翻译页面“$1”。",
"pt-deletepage-full-title": "正在删除可翻译页面“$1”。",
@@ -165,7 +175,7 @@
"pt-deletepage-action-other": "更改目标",
"pt-deletepage-lang-legend": "删除翻译页面",
"pt-deletepage-full-legend": "删除可翻译页面",
- "pt-deletepage-any-legend": "删除可翻译的页面或翻译信息的页面",
+ "pt-deletepage-any-legend": "删除可翻译页面或翻译页面",
"pt-deletepage-current": "页面名称:",
"pt-deletepage-reason": "原因:",
"pt-deletepage-subpages": "删除所有子页面",
@@ -174,8 +184,8 @@
"pt-deletepage-list-section": "翻译单元页面",
"pt-deletepage-list-other": "其他子页面",
"pt-deletepage-list-count": "共删除$1个页面。",
- "pt-deletepage-full-logreason": "翻译页面$1的一部分。",
- "pt-deletepage-lang-logreason": "翻译页面$1的一部分。",
+ "pt-deletepage-full-logreason": "可翻译页面“$1”的一部分",
+ "pt-deletepage-lang-logreason": "翻译页面“$1”的一部分",
"pt-deletepage-started": "请检查[[Special:Log/pagetranslation|页面翻译日志]]内的错误和完成消息。",
"pt-deletepage-intro": "本特殊页面允许您删除一种语言中一整个可翻译页面或单个翻译页面。\n因为所有相关页会一并删除,此操作不会即时完成。\n失败操作记录于[[Special:Log/pagetranslation|页面翻译日志]]中并且需要手动修理。",
"pagemigration": "翻译页面迁移",
@@ -195,6 +205,8 @@
"pm-pagetitle-missing": "请输入页面标题。",
"pm-langcode-missing": "看起来标题缺少语言代码。请依格式<page-name>/<language-code>输入页面标题。",
"pm-summary-import": "已通过[[Special:PageMigration|页面迁移]]导入翻译",
+ "pm-on-import-message-text": "旧翻译已被导入。使用添加、交换和删除选项以调整翻译单元,并点击“{{int:pm-savepages-button-label}}”按钮添加它们。点击“{{int:pm-cancel-button-label}}”按钮丢弃。",
+ "pm-on-save-message-text": "翻译单元以保存。您现在可以输入新翻译页面的标题以迁移它,或在下方对单元做出更改并保存新版本。",
"tpt-translate-title": "允许页面标题的翻译",
"pp-save-summary": "准备翻译的页面",
"pagepreparation": "准备翻译的页面",
diff --git a/www/wiki/extensions/Translate/i18n/pagetranslation/zh-hant.json b/www/wiki/extensions/Translate/i18n/pagetranslation/zh-hant.json
index 6d2405a8..52941440 100644
--- a/www/wiki/extensions/Translate/i18n/pagetranslation/zh-hant.json
+++ b/www/wiki/extensions/Translate/i18n/pagetranslation/zh-hant.json
@@ -12,66 +12,74 @@
"Liuxinyu970226",
"LNDDYL",
"Zhxy 519",
- "Bowleerin"
+ "Bowleerin",
+ "Alexsh",
+ "Wwycheuk",
+ "Kly",
+ "A2093064"
]
},
"pagetranslation": "頁面翻譯",
- "right-pagetranslation": "標記用來翻譯的頁面版本",
+ "right-pagetranslation": "標記需要翻譯的頁面版本",
"action-pagetranslation": "管理可翻譯頁面",
"tpt-section": "翻譯單元 $1",
"tpt-section-new": "新翻譯單元。\n名稱:$1",
"tpt-section-deleted": "翻譯單元 $1",
"tpt-diff-old": "上個文字",
"tpt-diff-new": "新的文字",
- "tpt-submit": "標記此版本用來翻譯",
+ "tpt-submit": "標記此版本需要翻譯",
"tpt-sections-oldnew": "新的和現有的翻譯單元",
"tpt-sections-deleted": "已刪除的翻譯單元",
"tpt-sections-template": "翻譯頁面模板",
"tpt-action-nofuzzy": "不要作廢翻譯",
"tpt-badtitle": "頁面名稱 ($1) 不是一個有效的標題",
"tpt-nosuchpage": "頁面 $1 不存在。",
- "tpt-oldrevision": "$2 不是頁面 [[:$1]] 的最新版本。\n僅可標記最新版本的頁面用來翻譯。",
+ "tpt-oldrevision": "$2 不是頁面 [[:$1]] 的最新版本。\n僅可標記最新版本的頁面需要翻譯。",
"tpt-notsuitable": "頁面 $1 不適合翻譯。\n請確定該頁面擁有 <nowiki><translate></nowiki> 標籤,且使用有效的語法。",
- "tpt-saveok": "頁面 [[:$1]] 已被標記做為翻譯使用,包含 $2 個翻譯單元。\n現在已可 <span class=\"plainlinks\">[$3 翻譯]</span> 頁面。",
+ "tpt-saveok": "頁面 [[:$1]] 已被標記需要翻譯,包含 $2 個翻譯單元。\n現在已可 <span class=\"plainlinks\">[$3 翻譯]</span> 頁面。",
+ "tpt-saveok-first": "您可以替此頁面[[Special:PageMigration|匯入先前存在的翻譯]](如果有的話)。",
"tpt-offer-notify": "您可以 <span class=\"plainlinks\">[$1 通知翻譯人員]</span> 翻譯此頁。",
- "tpt-showpage-intro": "下列為新的,已存在與已刪除的翻譯單元。\n在將此版本標記為可翻譯之前,請先檢查翻譯單位已最小化,避免翻譯人員不必要的作業。",
+ "tpt-showpage-intro": "下列為新的,已存在與已刪除的翻譯單元。\n在將此版本標記為需要翻譯之前,請先檢查翻譯單元已最小化,避免翻譯人員不必要的作業。",
"tpt-mark-summary": "已標記此版本用來翻譯",
+ "tpt-mark-nochanges": "沒有變更需要審查。標記此頁面需要翻譯不會編輯頁面,也沒有任何現有的翻譯單元。",
"tpt-edit-failed": "無法更新該頁面:$1",
"tpt-duplicate": "翻譯單元名稱 $1 已被使用超過一次。",
- "tpt-already-marked": "此頁面的最新版本已標記用來翻譯。",
+ "tpt-already-marked": "此頁面的最新版本已標記需要翻譯。",
"tpt-unmarked": "頁面 $1 已不標記用來翻譯。",
- "tpt-list-nopages": "沒有頁面已標記要用來翻譯或準備要標記用來翻譯。",
+ "tpt-list-nopages": "沒有頁面已標記需要翻譯或等待標記需要翻譯。",
"tpt-new-pages-title": "建議翻譯的頁面",
"tpt-old-pages-title": "正在翻譯的頁面",
"tpt-other-pages-title": "損壞的頁面",
"tpt-discouraged-pages-title": "不建議的頁面",
- "tpt-new-pages": "下列{{PLURAL:$1|頁面|頁面}}內容包含可翻譯的標籤,\n但目前尚未標記用來翻譯的{{PLURAL:$1|頁面|頁面}}版本。",
+ "tpt-new-pages": "下列{{PLURAL:$1|頁面|頁面}}內容包含需要翻譯的標籤,\n但{{PLURAL:$1|頁面|頁面}}中目前沒有任何標記需要翻譯的版本。",
"tpt-old-pages": "以下{{PLURAL:$1|頁面|頁面}}已有標記用來翻譯的版本。",
- "tpt-other-pages": "下列頁面已標記用來翻譯的{{PLURAL:$1|版本|版本}}為舊版,\n最新的{{PLURAL:$1|版本|版本}}無法標記用來翻譯。",
+ "tpt-other-pages": "下列頁面已標記需要翻譯的{{PLURAL:$1|版本|版本}}為舊版,\n最新的{{PLURAL:$1|版本|版本}}無法標記用來翻譯。",
"tpt-discouraged-pages": "以下{{PLURAL:$1|頁面|頁面}}已不建議用來翻譯。",
"tpt-select-prioritylangs": "優先語言代碼 (以逗號分隔):",
"tpt-select-prioritylangs-force": "防止翻譯成優先語言以外的語言",
"tpt-select-prioritylangs-reason": "原因:",
"tpt-sections-prioritylangs": "優先語言",
- "tpt-rev-mark": "標記用來翻譯",
+ "tpt-rev-mark": "標記需要翻譯",
"tpt-rev-unmark": "從翻譯中刪除",
"tpt-rev-discourage": "不建議",
"tpt-rev-encourage": "還原",
- "tpt-rev-mark-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-markthisagain": "此頁面在 <span class=\"plainlinks\">[$2 標記用來翻譯]</span> 之後,已有 <span class=\"plainlinks\">[$1 變更]</span>。",
+ "translate-tag-markthis": "標記此頁面需要翻譯",
+ "translate-tag-markthisagain": "此頁面在 <span class=\"plainlinks\">[$2 標記需要翻譯]</span> 之後,已有 <span class=\"plainlinks\">[$1 變更]</span>。",
"translate-tag-hasnew": "此頁面包含未被標記用來翻譯的 <span class=\"plainlinks\">[$1 變更]</span>。",
"tpt-translation-intro": "此頁面為頁面 [[$2]] <span class=\"plainlinks\">[$1 翻譯後的版本]</span> 且翻譯完成進度為 $3%。",
+ "tpt-translation-intro-fuzzy": "已過時的翻譯標記為這樣。",
"tpt-languages-legend": "其他語言:",
"tpt-languages-zero": "開始翻譯此語言",
"tpt-languages-nonzero": "$1 ($2% 未翻譯)",
"tpt-tab-translate": "翻譯",
- "tpt-target-page": "此頁面無法手動更新。\n此頁面是頁面 [[$1]] 的翻譯版本,翻譯可使用 [$2 翻譯工具] 更新。",
- "tpt-unknown-page": "此命名空間是保留給內容頁面翻譯使用。\n您嘗試編輯的頁面似乎與任何被標記進行翻譯的頁面沒有關連。",
+ "tpt-target-page": "此頁面無法手動更新。此頁面是頁面[[$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-content": "翻譯管理員決定只將此頁面翻譯為 $1。",
@@ -103,8 +111,8 @@
"pt-shake-empty": "空的翻譯單元標記 \"$1\"。",
"log-description-pagetranslation": "頁面翻譯系統相關的操作日誌",
"log-name-pagetranslation": "頁面翻譯日誌",
- "logentry-pagetranslation-mark": "$1 {{GENDER:$2|已標記}} $3 用來翻譯",
- "logentry-pagetranslation-unmark": "$1 已從翻譯中{{GENDER:$2|移除}} $3",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|已標記}} $3 需要翻譯",
+ "logentry-pagetranslation-unmark": "$1已從翻譯系統中{{GENDER:$2|移除}}$3",
"logentry-pagetranslation-moveok": "$1 {{GENDER:$2|已完成}}重新命名可翻譯頁面 $3 至 $4",
"logentry-pagetranslation-movenok": "$1 移動 $3 至 $4 時{{GENDER:$2|發生}}問題",
"logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|己完成}}刪除可翻譯頁面 $3",
@@ -118,6 +126,15 @@
"logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|限制}}可翻譯頁面 $3 的語言為 $5",
"logentry-pagetranslation-associate": "$1 {{GENDER:$2|已增加}}可翻譯頁面 $3 到集合群組 $4",
"logentry-pagetranslation-dissociate": "$1 已從集合群組 $4 中{{GENDER:$2|移除}}可翻譯頁面 $3",
+ "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-encourage": "鼓勵翻譯",
+ "log-action-filter-pagetranslation-discourage": "不鼓勵翻譯",
+ "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]]\" 已存在。",
@@ -131,7 +148,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": "目前名稱:",
@@ -141,9 +160,9 @@
"pt-movepage-action-check": "檢查是否可移動",
"pt-movepage-action-perform": "確認移動",
"pt-movepage-action-other": "變更目標",
- "pt-movepage-intro": "此特殊頁面允許您移動已標記進行翻譯的頁面。\n由於有許多頁面要移動,移動的操作不是即時的。\n在移動頁面的過程中,無法使用在操作中的頁面。\n任何移動失敗會記錄在 [[Special:Log/pagetranslation|頁面翻譯日誌]],並需要手動修復。",
- "pt-movepage-logreason": "可翻譯頁面 \"$1\" 的部分。",
- "pt-movepage-started": "基礎頁面已移動。\n請檢查 [[Special:Log/pagetranslation|頁面翻譯日誌]] 是否有錯誤與完成訊息。",
+ "pt-movepage-intro": "此特殊頁面允許您移動已標記需要翻譯的頁面,\n由於有許多頁面要移動,移動的操作不是即時的。\n在移動頁面的過程無法即時處理有問題的的頁面,\n任何移動失敗會記錄在 [[Special:Log/pagetranslation|頁面翻譯日誌]],並需要手動修復。",
+ "pt-movepage-logreason": "可翻譯頁面 \"$1\" 的部分",
+ "pt-movepage-started": "請檢查 [[Special:Log/pagetranslation|頁面翻譯日誌]] 內的錯誤和完成訊息。",
"pt-locked-page": "因可翻譯頁面正在移動,此頁面已鎖定。",
"pt-deletepage-lang-title": "刪除翻譯頁面 \"$1\"",
"pt-deletepage-full-title": "刪除可翻譯頁面 \"$1\"",
@@ -163,8 +182,8 @@
"pt-deletepage-list-section": "翻譯單元頁面",
"pt-deletepage-list-other": "其他子頁面",
"pt-deletepage-list-count": "供 $1 個頁面要刪除。",
- "pt-deletepage-full-logreason": "可翻譯頁面 \"$1\" 的部分。",
- "pt-deletepage-lang-logreason": "翻譯頁面 \"$1\" 的部分。",
+ "pt-deletepage-full-logreason": "可翻譯頁面 \"$1\" 的部分",
+ "pt-deletepage-lang-logreason": "翻譯頁面 \"$1\" 的部分",
"pt-deletepage-started": "請檢查 [[Special:Log/pagetranslation|頁面翻譯日誌]] 內的錯誤和完成訊息。",
"pt-deletepage-intro": "此特殊頁面允許您刪除可翻譯頁面或特定語言的翻譯頁面。\n由於相關的頁面也要一併刪除,刪除的操作不是即時的。\n失敗的訊息會記錄在 [[Special:Log/pagetranslation|頁面翻譯日誌]],並需要手動修復。",
"pagemigration": "翻譯頁面遷移",
@@ -174,28 +193,34 @@
"pm-cancel-button-label": "取消",
"pm-page-does-not-exist": "$1 不存在",
"pm-old-translations-missing": "$1 沒有舊的翻譯",
- "pm-extra-units-warning": "可能存在額外的翻譯單位。請確實比對來源與翻譯單位。",
+ "pm-extra-units-warning": "可能存在額外的翻譯單元。請確實比對來源與翻譯單元。",
"pm-pagename-missing": "請輸入頁面名稱",
- "pm-add-icon-hover-text": "新增以下單位",
- "pm-swap-icon-hover-text": "替換以下單位",
- "pm-delete-icon-hover-text": "刪除單位",
- "pm-pagetitle-invalid": "請輸入一個有效的頁面標題",
- "pm-langcode-missing": "請輸入語言代碼",
+ "pm-add-icon-hover-text": "新增以下單元",
+ "pm-swap-icon-hover-text": "替換以下單元",
+ "pm-delete-icon-hover-text": "刪除單元",
+ "pm-pagetitle-placeholder": "輸入頁面標題",
+ "pm-pagetitle-invalid": "請輸入一個有效的頁面標題,格式應為 <page-name>/<language-code>。",
+ "pm-pagetitle-missing": "請輸入頁面標題。",
+ "pm-langcode-missing": "標題似乎缺少語言代碼,請使用 <page-name>/<language-code> 格式輸入頁面標題。",
"pm-summary-import": "已使用 [[Special:PageMigration|頁面遷移]] 匯入翻譯",
+ "pm-on-import-message-text": "已匯入舊的翻譯,使用加入、交換與刪除選項來調整翻譯單元然後點選 \"{{int:pm-savepages-button-label}}\" 按鈕儲存。要放棄請點選 \"{{int:pm-cancel-button-label}}\" 按鈕。",
+ "pm-on-save-message-text": "已儲存翻譯單元。您可以輸入新翻譯頁面的標題來遷移該頁面,或更改以方單元然後儲存為一個新的修訂。",
"tpt-translate-title": "允許翻譯頁面標題",
- "pp-save-summary": "準備翻譯用頁面",
+ "pp-save-summary": "已準備好等候翻譯的頁面",
"pagepreparation": "準備翻譯用頁面",
"pp-pagename-placeholder": "輸入頁面名稱",
"pp-prepare-button-label": "準備",
"pp-save-button-label": "儲存",
"pp-cancel-button-label": "取消",
"pp-save-message": "頁面已儲存。 您可 [$1] 編輯該頁面。",
- "pp-prepare-message": "已準備好翻譯用頁面。 請參考下方差異。 點選 \"{{int:pp-save-button-label}}\" 確認!",
- "pp-already-prepared-message": "該頁面似乎已有翻譯用頁面。 且與先前的版本無任何差異。",
+ "pp-prepare-message": "該頁面已準備好等候翻譯。 請參考下方差異。 點選 \"{{int:pp-save-button-label}}\" 確認!",
+ "pp-already-prepared-message": "該頁面似乎已準備好等候翻譯,但與先前的版本無任何差異。",
"pp-pagename-missing": "請輸入頁面名稱。",
"pp-diff-old-header": "來源內容",
- "pp-diff-new-header": "準備內容",
+ "pp-diff-new-header": "準備好的內容",
"tpt-unlink-confirm": "請確認您真的希望自翻譯系統移除此頁面。\n該語言選擇器與已翻譯的頁面名稱將會停止運作。\n該翻譯頁面將會變成可編輯。",
"tpt-unlink-button": "自翻譯移除",
- "tpt-unlink-summary": "已自翻譯移除頁面"
+ "tpt-unlink-summary": "已自翻譯移除頁面",
+ "tpt-generic-confirm": "請確認動作。",
+ "tpt-generic-button": "確認"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/af.json b/www/wiki/extensions/Translate/i18n/sandbox/af.json
index ea264cad..f715348e 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/af.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/af.json
@@ -3,12 +3,14 @@
"authors": [
"Amire80",
"Naudefj",
- "Winstonza"
+ "Winstonza",
+ "Fwolff"
]
},
"managetranslatorsandbox": "Bestuur vertaler-sandput",
"tsb-filter-pending": "Uitstaande versoeke",
"tsb-reminder-title-generic": "Voltooi u bekendstelling om 'n geverifieerde vertaler te word",
"tsb-reminder-content-generic": "Hallo $1,\n\nDankie dat u op {{SITENAME}} geregistreer het. As u u toesvertalings voltooi, sal die administrateurs spoedig volle regte aan u toeken.\n\nGaan asseblief na $2 om 'n paar vertalings te maak.",
+ "tsb-all-languages-button-label": "Alle tale",
"tsb-create-user-page": "Skep 'n basiese gebruikersblad"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ar.json b/www/wiki/extensions/Translate/i18n/sandbox/ar.json
index 891826d3..86f5759d 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/ar.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ar.json
@@ -2,25 +2,54 @@
"@metadata": {
"authors": [
"محمد أحمد عبد الفتاح",
- "Meno25"
+ "Meno25",
+ "Mido",
+ "ديفيد"
]
},
"managetranslatorsandbox": "إدارة ملعب المترجم",
"tsb-filter-pending": "الطلبات المعلقة",
+ "tsb-reminder-title-generic": "أكمل مقدمتك لتصبح مترجما",
+ "tsb-reminder-content-generic": "مرحبا $1،\n\nشكرا للتسجيل مع {{SITENAME}}.\n\nلو أنك قمت بإكمال ترجمات التجربة الخاصة بك، فالإداريون سيمنحونك صلاحية ترجمة كاملة قريبا بعد ذلك.\n\nمن فضلك تعال وقم بالمزيد من الترجمات هنا:\n$2\n\n$3،\nطاقم {{SITENAME}}",
+ "tsb-reminder-sending": "جارٍ إرسال التذكير...",
+ "tsb-reminder-sent": "{{PLURAL:$1|أرسل $1 تذكير. الوقت: $2.|أرسل $1 تذكيرات. وقت آخر واحد: $2.}}",
+ "tsb-reminder-sent-new": "تم إرسال التذكير",
+ "tsb-reminder-failed": "إرسال التذكير فشل",
"tsb-email-promoted-subject": "أنت الآن مترجم في {{SITENAME}}",
+ "tsb-email-promoted-body": "مرحبا {{GENDER:$1|$1}}،\n\nمبروك! أنا تحققت من ترجمات التجربة التي قمت بها في {{SITENAME}} وأعطيتك صلاحيات مترجم كاملة.\n\nتعال إلى {{SITENAME}} للمتبعة في الترجمة الآن، وكل يوم:\n$2\n\nمرحبا، وشكرا لك لمساهماتك!\n\n{{GENDER:$3|$3}}،\nطاقم {{SITENAME}}",
+ "tsb-email-rejected-subject": "طلبك لتصبح مترجما في {{SITENAME}} تم رفضه",
+ "tsb-email-rejected-body": "مرحبا {{GENDER:$1|$1}}،\n\nشكرا لك للتقدم كمترجم في {{SITENAME}}. أنا نادم لإخبارك أني رفضت طلبك، لأن جودة ترجماتك لم تستوف المتطلبات.\n\nلو أنك تعتقد أن طلبك قد تم رفضه بالخطأ، من فضلك حاول التقدم ثانية كمترجم في {{SITENAME}}. يمكنك تسجيل الدخول هنا:\n$2\n\n{{GENDER:$3|$3}}،\nطاقم {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|طلب|طلبات}}",
"tsb-all-languages-button-label": "كل اللغات",
"tsb-search-requests": "طلبات البحث",
"tsb-accept-button-label": "اقبل",
"tsb-reject-button-label": "ارفض",
+ "tsb-selected-count": "{{PLURAL:$1|$1 مستخدم مختار|$1 مستخدمون مختارون}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|طلب|طلبات}} أقدم",
"tsb-accept-all-button-label": "اقبل الكل",
"tsb-reject-all-button-label": "ارفض الكل",
+ "tsb-user-posted-a-comment": "ليس مترجما",
+ "tsb-reminder-link-text": "أرسل التذكير بالبريد الإلكتروني",
"tsb-didnt-make-any-translations": "لم يقم هذا المستخدم بأية ترجمة.",
"tsb-translations-source": "المصدر",
"tsb-translations-user": "ترجمات {{GENDER:$1|المستخدم|المستخدمة}}",
"tsb-translations-current": "الترجمات الموجودة",
+ "tsb-delete-userpage-summary": "حذف صفحة المستخدم لمستخدم في الملعب",
+ "tsb-reject-confirmation": "تم رفض {{PLURAL:$1|مستخدم|مستخدمين}}",
+ "tsb-accept-confirmation": "تم قبول {{PLURAL:$1|مستخدم|مستخدمين}}",
"translationstash": "مرحبا",
+ "translate-translationstash-welcome": "مرحبا {{GENDER:$1|$1}}، أنت مترجم جديد",
+ "translate-translationstash-welcome-note": "تعرف على أدوات الترجمة. ترجم بعض الرسائل واحصل على صلاحيات الترجمة الكاملة للمشاركة في مشاريعك المفضلة.",
"translate-translationstash-initialtranslation": "ترجمتك الابتدائية",
+ "translate-translationstash-translations": "$1 أكمل {{PLURAL:$1|ترجمة|ترجمات}}",
"translate-translationstash-skip-button-label": "جرب واحدة أخرى",
+ "tsb-limit-reached-title": "شكرا لترجماتك",
+ "tsb-limit-reached-body": "أنت وصلت لحد الترجمة للمترجمين الجدد.\nفريقنا سيتحقق ويرقي حسابك قريبا.\nثم ستصبح قادرا على الترجمة بدون حدود.",
"tsb-no-requests-from-new-users": "لا طلبات من المستخدمين الجدد",
- "log-name-translatorsandbox": "ملعب الترجمة"
+ "tsb-create-user-page": "أنشأ صفحة مستخدم أساسية",
+ "log-name-translatorsandbox": "سجل ملعب الترجمة",
+ "log-description-translatorsandbox": "سجل بالأفعال على مستخدمي ملعب الترجمة",
+ "logentry-translatorsandbox-promoted": "{{GENDER:$2|رقى|رقت}} $1 $3 {{GENDER:$4|لمترجم|لمترجمة}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|رفض|رفضت}} الطلب من \"$3\" ليكون مترجما",
+ "logentry-newusers-tsbpromoted": "حساب المستخدم $3 تم {{GENDER:$2|إنشاؤه}} بواسطة الترقية من الملعب"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ast.json b/www/wiki/extensions/Translate/i18n/sandbox/ast.json
index f1302d0c..9cb23cae 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/ast.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ast.json
@@ -32,6 +32,8 @@
"tsb-translations-user": "Traducciones {{GENDER:$1|del usuariu|de la usuaria}}",
"tsb-translations-current": "Traducciones esistentes",
"tsb-delete-userpage-summary": "Desaniciando la páxina d'usuariu d'un usuariu de pruebes",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Usuariu refugáu|Usuarios refugaos}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Usuariu aceutáu|Usuarios aceutaos}}",
"translationstash": "Bienveníos",
"translate-translationstash-welcome": "{{GENDER:$1|Bienveníu|Bienvenida}}, $1; yá yes {{GENDER:$1|un nuevu traductor|una nueva traductora}}",
"translate-translationstash-welcome-note": "Avézate a les ferramientes de traducción. Traduz dellos mensaxes y consigui permisu de traducción completu pa participar nos tos proyeutos favoritos.",
@@ -42,7 +44,7 @@
"tsb-limit-reached-body": "Llegó a la llende de traducciones pa traductores nuevos.\nEl nuesu equipu pronto comprobará y promocionará la so cuenta.\nDarréu podrá traducir ensin llendes.",
"tsb-no-requests-from-new-users": "Nun hai solicitúes d'usuarios nuevos",
"tsb-create-user-page": "Crear una páxina d'usuariu básica",
- "log-name-translatorsandbox": "Entornu aislláu de traducción",
+ "log-name-translatorsandbox": "Rexistru de la zona de pruebes de traducción",
"log-description-translatorsandbox": "Rexistru d'aiciones de los usuarios del entornu aislláu de traducción",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promovió}} a $3 a {{GENDER:$4|traductor}}",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|refugó}} la solicitú de «$3» de facese traductor",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/bg.json b/www/wiki/extensions/Translate/i18n/sandbox/bg.json
index 55c3e9db..514c5d05 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/bg.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/bg.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "DCLXVI"
+ "DCLXVI",
+ "StanProg"
]
},
"tsb-all-languages-button-label": "Всички езици",
@@ -10,5 +11,7 @@
"tsb-reject-all-button-label": "Отхвърляне на всички",
"tsb-translations-source": "Източник",
"tsb-translations-current": "Съществуващи преводи",
- "tsb-limit-reached-title": "Благодарности за направените преводи"
+ "translationstash": "Добре дошли",
+ "tsb-limit-reached-title": "Благодарности за направените преводи",
+ "logentry-translatorsandbox-promoted": "\n$1 {{GENDER:$2|повиши}} $3 на {{GENDER:$4|преводач}}"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/bn.json b/www/wiki/extensions/Translate/i18n/sandbox/bn.json
index 19b92481..0cc816fe 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/bn.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/bn.json
@@ -2,11 +2,20 @@
"@metadata": {
"authors": [
"Aftab1995",
- "Aftabuzzaman"
+ "Aftabuzzaman",
+ "আফতাবুজ্জামান"
]
},
"managetranslatorsandbox": "অনুবাদক খেলাঘর পরিচালনা",
"tsb-filter-pending": "অপেক্ষমান অনুরোধ",
"tsb-reminder-title-generic": "একজন অনুবাদক হতে আপনার পরিচিতি সমাপ্ত করুন",
- "tsb-reminder-content-generic": "প্রিয় $1,\n\nআপনি সম্প্রতি {{SITENAME}}-এ সাইন আপ করেছেন। বিনামূল্যে অনুবাদ এবং অতিরিক্ত অনুবাদ সাহায্যকারী খুলতে আপনি মাত্র কয়েক ধাপ দূরে।\n\n$2-এ লগ ইন করুন এবং আরো কিছু অনুবাদ করুন।"
+ "tsb-reminder-content-generic": "প্রিয় $1,\n\nআপনি সম্প্রতি {{SITENAME}}-এ সাইন আপ করেছেন। বিনামূল্যে অনুবাদ এবং অতিরিক্ত অনুবাদ সাহায্যকারী খুলতে আপনি মাত্র কয়েক ধাপ দূরে।\n\n$2-এ লগ ইন করুন এবং আরো কিছু অনুবাদ করুন।",
+ "tsb-all-languages-button-label": "সকল ভাষা",
+ "tsb-accept-button-label": "মঞ্জুর করুন",
+ "tsb-reject-button-label": "প্রত্যাখ্যান করুন",
+ "tsb-translations-source": "উৎস",
+ "tsb-reject-confirmation": "{{PLURAL:$1|ব্যবহারকারী}} প্রত্যাখ্যান করেছেন",
+ "tsb-accept-confirmation": "{{PLURAL:$1|ব্যবহারকারী}} গ্রহণ করেছেন",
+ "translationstash": "স্বাগতম",
+ "log-name-translatorsandbox": "খেলাঘর অনুবাদ লগ"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/bs.json b/www/wiki/extensions/Translate/i18n/sandbox/bs.json
index 7e8db324..aaf87811 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/bs.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/bs.json
@@ -4,5 +4,49 @@
"Srdjan m"
]
},
- "log-name-translatorsandbox": "Zapisnik prijevoda u pješčaniku"
+ "managetranslatorsandbox": "Upravljanje prevodilačkim pješčanikom",
+ "tsb-filter-pending": "Zahtjevi na čekanju",
+ "tsb-reminder-title-generic": "Dovršite uvodni rad da biste postali prevodilac",
+ "tsb-reminder-content-generic": "Zdravo, $1,\n\nHvala Vam što ste se registrirali na {{GRAMMAR:dativ|{{SITENAME}}}}.\n\nAko dovršite probne prijevode, administratori će Vam ubrzo nakon tog dodijeliti potpuni pristup prevođenju.\n\nPosjetite naredni sajt i prevedite još poruka:\n$2\n\n$3,\nosoblje {{GRAMMAR:genitiv|{{SITENAME}}}}",
+ "tsb-reminder-sending": "Šaljem podsjetnik...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Poslan $1 podsjetnik. Vrijeme: $2.|Poslana $1 podsjetnika. Posljednji: $2.}}",
+ "tsb-reminder-sent-new": "Pošalji podsjetnik",
+ "tsb-reminder-failed": "Nisam uspio poslati podsjetnik",
+ "tsb-email-promoted-subject": "Sad ste prevodilac na {{GRAMMAR:dativ|{{SITENAME}}}}",
+ "tsb-email-promoted-body": "Zdravo {{GENDER:$1|$1}},\n\nČestitke! {{GENDER:$3|Pregledao|Pregledala}} sam probne prijevode koje ste napravili na {{GRAMMAR:dativ|{{SITENAME}}}} i {{GENDER:$3|dao|dala}} sam Vam puna prevodilačka prava.\n\nDođite na {{GRAMMAR:akuzativ|{{SITENAME}}}} da nastavite prevoditi sada i svaki naredni dan:\n$2\n\nDobro došli i hvala Vam na doprinosima!\n{{GENDER:$3|$3}},\nosoblje {{GRAMMAR:genitiv|{{SITENAME}}}}",
+ "tsb-email-rejected-subject": "Vaša zahtjev da postanete prevodilac na {{GRAMMAR:dativ|{{SITENAME}}}} je odbijen",
+ "tsb-email-rejected-body": "Zdravo, {{GENDER:$1|$1}},\n\nHvala Vam što ste se prijavili da budete prevodilac na {{GRAMMAR:dativ|{{SITENAME}}}}. Nažalost, moram Vas obavijestiti da sam {{GENDER:$3|odbio|odbila}} Vaš zahtjev jer kvaliteta Vaših prijevoda ne odgovara našim potrebama.\n\nAko smatrate da ste greškom odbijeni, ponovo podnesite zahtjev na {{GRAMMAR:dativ|{{SITENAME}}}}. To možete uraditi ovdje:\n$2\n\n{{GENDER:$3|$3}},\nosoblje {{GRAMMAR:genitiv|{{SITENAME}}}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|zahtjev|zahtjeva}}",
+ "tsb-all-languages-button-label": "Svi jezici",
+ "tsb-search-requests": "Pretraži zahtjeve",
+ "tsb-accept-button-label": "Prihvati",
+ "tsb-reject-button-label": "Odbij",
+ "tsb-selected-count": "{{PLURAL:$1|Izabran $1 korisnik|Izabrana $1 korisnika|Izabrano $1 korisnika}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|stariji zahtjev|starija zahtjeva|starijih zahtjeva}}",
+ "tsb-accept-all-button-label": "Prihvati sve",
+ "tsb-reject-all-button-label": "Odbij sve",
+ "tsb-user-posted-a-comment": "Nije prevodilac",
+ "tsb-reminder-link-text": "Pošalji podsjetnik e-poštom",
+ "tsb-didnt-make-any-translations": "Ovaj korisnik nije napravio nijedan prijevod.",
+ "tsb-translations-source": "Izvor",
+ "tsb-translations-user": "{{GENDER:$1|Korisnički}} prijevodi",
+ "tsb-translations-current": "Postojeći prijevodi",
+ "tsb-delete-userpage-summary": "Brisanje korisničke stranice korisnika u pješčaniku",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Korisnik odbijen|Korisnici odbijeni}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Korisnik prihvaćen|Korisnici prihvaćeni}}",
+ "translationstash": "Dobro došli",
+ "translate-translationstash-welcome": "Dobro došli {{GENDER:$1|$1}}, Vi ste novi prevodilac",
+ "translate-translationstash-welcome-note": "Upoznajte se s prevodilačkim alatima. Prevedite nekoliko poruka i steknite puna prevodilačka prava da biste učestvovali u svojim omiljenim projektima.",
+ "translate-translationstash-initialtranslation": "Vaš prvobitan prijevod",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|završen prijevod|završena prijevoda|završenih prijevoda}}",
+ "translate-translationstash-skip-button-label": "Daj mi drugi",
+ "tsb-limit-reached-title": "Hvala Vam na prijevodima",
+ "tsb-limit-reached-body": "Dostigli ste maksimalan broj prijevoda za nove prevodioce.\nNaša ekipa uskoro će ih provjeriti i nadograditi Vaš račun.\nPotom ćete moći prevoditi neograničeno.",
+ "tsb-no-requests-from-new-users": "Nema zahtjeva novih korisnika",
+ "tsb-create-user-page": "Stvaranje osnovne korisničke stranice",
+ "log-name-translatorsandbox": "Zapisnik prijevoda u pješčaniku",
+ "log-description-translatorsandbox": "Zapisnik radnji poduzetih nad korisnicima u prevodilačkom pješčaniku",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promovirao|promovirala}} je $3 u {{GENDER:$4|prevodioca}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|odbio|odbila}} je zahtjev korisnika/korisnice \"$3\" da postane prevodilac",
+ "logentry-newusers-tsbpromoted": "Korisnički račun $3 {{GENDER:$2|napravljen}} je promocijom iz pješčanika"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/da.json b/www/wiki/extensions/Translate/i18n/sandbox/da.json
new file mode 100644
index 00000000..79916c74
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/da.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sarrus",
+ "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",
+ "tsb-accept-all-button-label": "Accepter alle",
+ "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",
+ "tsb-limit-reached-title": "Tak for dine oversættelser"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/de.json b/www/wiki/extensions/Translate/i18n/sandbox/de.json
index 4ca50589..a7ec2e2b 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/de.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/de.json
@@ -3,7 +3,8 @@
"authors": [
"Metalhead64",
"Rillke",
- "J. 'mach' wust"
+ "J. 'mach' wust",
+ "Kghbln"
]
},
"managetranslatorsandbox": "Übersetzer-Spielwiese konfigurieren",
@@ -34,6 +35,8 @@
"tsb-translations-user": "{{GENDER:$1|Benutzerübersetzungen}}",
"tsb-translations-current": "Vorhandene Übersetzungen",
"tsb-delete-userpage-summary": "Benutzerseite eines Spielwiesenbenutzers gelöscht",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Benutzer}} abgelehnt",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Benutzer}} akzeptiert",
"translationstash": "Willkommen",
"translate-translationstash-welcome": "Willkommen $1, du bist {{GENDER:$1|ein neuer Übersetzer|eine neue Übersetzerin}}.",
"translate-translationstash-welcome-note": "Werde mit den Übersetzungswerkzeugen vertraut. Übersetze einige Nachrichten und erhalte die vollen Übersetzerrechte zur Teilnahme an deinen Lieblingsprojekten.",
@@ -48,5 +51,5 @@
"log-description-translatorsandbox": "Es folgt ein Logbuch von Aktionen auf Übersetzungsspielwiesenbenutzer.",
"logentry-translatorsandbox-promoted": "$1 hat $3 {{GENDER:$4|zum Übersetzer|zur Übersetzerin}} {{GENDER:$2|befördert}}",
"logentry-translatorsandbox-rejected": "$1 hat die Anfrage von „$3“ zur Beförderung {{GENDER:$2|zum Übersetzer|zur Übersetzerin}} abgelehnt",
- "logentry-newusers-tsbpromoted": "Das Benutzerkonto $3 wurde durch Beförderung von der Übersetzerspielwiese {{GENDER:$2|erstellt}}"
+ "logentry-newusers-tsbpromoted": "Das Benutzerkonto $3 wurde aufgrund weiterer Berechtigungen auf der Übersetzerspielwiese {{GENDER:$2|erstellt}}"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/diq.json b/www/wiki/extensions/Translate/i18n/sandbox/diq.json
index 378a559d..9d8265fa 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/diq.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/diq.json
@@ -1,16 +1,27 @@
{
"@metadata": {
"authors": [
- "Marmase"
+ "Marmase",
+ "Kumkumuk",
+ "Mirzali",
+ "Gırd",
+ "Gambollar",
+ "Dılmıc"
]
},
"tsb-request-count": "$1 {{PLURAL:$1|waştış|waştışi}}",
"tsb-all-languages-button-label": "Zıwani pêro",
- "tsb-search-requests": "Neticeyê geyrayışi",
- "tsb-accept-button-label": "Qebul",
+ "tsb-search-requests": "Telebê cıgeyrayışi",
+ "tsb-accept-button-label": "Qebul ke",
"tsb-reject-button-label": "Red ke",
"tsb-selected-count": "{{PLURAL:$1|$1 kerber weçineya|$1 karberi weçineyay}}",
+ "tsb-accept-all-button-label": "Hemın qebul ke",
+ "tsb-reject-all-button-label": "Hemın red ke",
+ "tsb-user-posted-a-comment": "Açarnayış niyo",
"tsb-translations-source": "Çıme",
- "tsb-translations-user": "Açarnayışa karberi",
- "translationstash": "Xeyr amey"
+ "tsb-translations-user": "Tadayışê (çarnayışê) {{GENDER:$1|karberi}}",
+ "translationstash": "Xeyr amey",
+ "translate-translationstash-skip-button-label": "Yewbina bıcerrebne",
+ "tsb-limit-reached-title": "Çarnayışê to rê teşekur kenime",
+ "log-name-translatorsandbox": "Qumdora açarnayışi"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/en.json b/www/wiki/extensions/Translate/i18n/sandbox/en.json
index b2950306..ba880400 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/en.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/en.json
@@ -4,7 +4,8 @@
"Nike",
"Siebrand Mazeland",
"Santhosh Thottingal",
- "Amire80"
+ "Amire80",
+ "Zoranzoki21"
]
},
"managetranslatorsandbox": "Manage translator sandbox",
@@ -16,7 +17,7 @@
"tsb-reminder-sent-new": "Sent a reminder",
"tsb-reminder-failed": "Sending the reminder failed",
"tsb-email-promoted-subject": "You are now a translator at {{SITENAME}}",
- "tsb-email-promoted-body": "Hi {{GENDER:$1|$1}},\n\nCongratulations! I checked the test translations that you made at {{SITENAME}} and gave you full translator rights.\n\nCome to {{SITENAME}} to continue translating now, and every day:\n$2\n\nWelcome, and thank you for you contributions!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} staff",
+ "tsb-email-promoted-body": "Hi {{GENDER:$1|$1}},\n\nCongratulations! I checked the test translations that you made at {{SITENAME}} and gave you full translator rights.\n\nCome to {{SITENAME}} to continue translating now, and every day:\n$2\n\nWelcome, and thank you for your contributions!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} staff",
"tsb-email-rejected-subject": "Your application to be a translator at {{SITENAME}} was rejected",
"tsb-email-rejected-body": "Hi {{GENDER:$1|$1}},\n\nThank you for applying as a translator at {{SITENAME}}. I regret to inform you that I have rejected your application, because the quality of your translations did not meet the requirements.\n\nIf you think that your application was rejected by mistake, please try to apply again as a translator at {{SITENAME}}. You can sign up here:\n$2\n\n{{GENDER:$3|$3}},\n{{SITENAME}} staff",
"tsb-request-count": "$1 {{PLURAL:$1|request|requests}}",
@@ -35,6 +36,8 @@
"tsb-translations-user": "{{GENDER:$1|User}} translations",
"tsb-translations-current": "Existing translations",
"tsb-delete-userpage-summary": "Deleting the user page of a sandbox user",
+ "tsb-reject-confirmation": "{{PLURAL:$1|User|Users}} rejected",
+ "tsb-accept-confirmation": "{{PLURAL:$1|User|Users}} accepted",
"translationstash": "Welcome",
"translate-translationstash-welcome": "Welcome {{GENDER:$1|$1}}, you are a new translator",
"translate-translationstash-welcome-note": "Become familiar with the translation tools. Translate some messages and get full-translator rights to participate in your favorite projects.",
@@ -44,8 +47,8 @@
"tsb-limit-reached-title": "Thanks for your translations",
"tsb-limit-reached-body": "You reached the translation limit for new translators.\nOur team will verify and upgrade your account soon.\nThen you will be able to translate without limits.",
"tsb-no-requests-from-new-users": "No requests from new users",
- "tsb-create-user-page": "Create basic user page",
- "log-name-translatorsandbox": "Translation sandbox",
+ "tsb-create-user-page": "Created basic user page",
+ "log-name-translatorsandbox": "Translation sandbox log",
"log-description-translatorsandbox": "A log of actions on translation sandbox users",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promoted}} $3 to {{GENDER:$4|translator}}",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rejected}} the request from \"$3\" to become a translator",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/es.json b/www/wiki/extensions/Translate/i18n/sandbox/es.json
index 4665e3f0..9bc3a724 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/es.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/es.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Fitoschido",
- "Macofe"
+ "Macofe",
+ "Carlosmg.dg"
]
},
"managetranslatorsandbox": "Gestionar la zona de pruebas del traductor",
@@ -33,6 +34,8 @@
"tsb-translations-user": "Traducciones {{GENDER:$1|del usuario|de la usuaria}}",
"tsb-translations-current": "Traducciones existentes",
"tsb-delete-userpage-summary": "Eliminar la página de usuario en la zona de pruebas",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Usuario rechazado|Usuarios rechazados}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Usuario aceptado|Usuarios aceptados}}",
"translationstash": "Te damos la bienvenida",
"translate-translationstash-welcome": "{{GENDER:$1|Bienvenido|Bienvenida}}, $1. Ahora eres {{GENDER:$1|un traductor|una traductora}}",
"translate-translationstash-welcome-note": "Familiarízate con las herramientas de traducción. Traduce algunos mensajes y obtén los permisos completos de traducción para participar en tus proyectos favoritos.",
@@ -42,8 +45,8 @@
"tsb-limit-reached-title": "Gracias por tus traducciones",
"tsb-limit-reached-body": "Alcanzaste el límite de traducción para nuevos traductores.\nNuestro equipo verificará y actualizará tu cuenta pronto.\nLuego serás capaz de traducir sin límites.",
"tsb-no-requests-from-new-users": "No hay solicitudes de usuarios nuevos",
- "tsb-create-user-page": "Crear página de usuario básica",
- "log-name-translatorsandbox": "Zona de pruebas de traducción",
+ "tsb-create-user-page": "Página de usuario básica creada",
+ "log-name-translatorsandbox": "Registro de la zona de pruebas de traducción",
"log-description-translatorsandbox": "Un registro de acciones de usuarios en zona de pruebas de traducción",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promovió}} $3 a {{GENDER:$4|traductor|traductora}}",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rechazó}} la solicitud de «$3» para convertirse en traductor",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/eu.json b/www/wiki/extensions/Translate/i18n/sandbox/eu.json
index c01e32dc..405e4213 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/eu.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/eu.json
@@ -7,6 +7,7 @@
},
"tsb-reminder-sent": "{{PLURAL:$1|Sent $1 reminder. Time: $2.|Sent $1 reminders. Time of the last one: $2.}}",
"tsb-reminder-sent-new": "Gogorarazpena bidali",
+ "tsb-request-count": "{{PLURAL:$1|Eskaera bat|$1 eskaera}}",
"tsb-all-languages-button-label": "Hizkuntza guztiak",
"tsb-accept-button-label": "Onartu",
"tsb-reject-button-label": "Ukatu",
@@ -19,5 +20,7 @@
"tsb-translations-user": "{{GENDER:$1|Lankidearen}} itzulpen",
"translationstash": "Ongi etorri",
"translate-translationstash-welcome": "Ongi etorri {{GENDER:$1|$1}}, itzultzaile berria zara",
- "translate-translationstash-skip-button-label": "Probatu beste bat"
+ "translate-translationstash-initialtranslation": "Zure hasierako itzulpena",
+ "translate-translationstash-skip-button-label": "Probatu beste bat",
+ "tsb-limit-reached-title": "Eskerrik asko zure itzulpenengatik"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/fa.json b/www/wiki/extensions/Translate/i18n/sandbox/fa.json
index a0af1069..f2be5810 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/fa.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/fa.json
@@ -6,7 +6,9 @@
"Ebraminio",
"Alirezaaa",
"Mjbmr",
- "Huji"
+ "Huji",
+ "Ladsgroup",
+ "Physicsch"
]
},
"managetranslatorsandbox": "مدیریت کاربران مترجم",
@@ -37,17 +39,19 @@
"tsb-translations-user": "ترجمه‌های {{GENDER:$1|کاربر}}",
"tsb-translations-current": "ترجمه‌های موجود",
"tsb-delete-userpage-summary": "حذف صفحه کاربری کاربر جعبه شنی",
+ "tsb-reject-confirmation": "{{PLURAL:$1|کاربر|کاربران}} رد شدند",
+ "tsb-accept-confirmation": "{{PLURAL:$1|کاربر|کاربران}} پذیرفته شدند",
"translationstash": "خوش آمدید",
"translate-translationstash-welcome": "خوش آمدید {{GENDER:$1|$1}}، شما یک مترجم تازه هستید",
- "translate-translationstash-welcome-note": "آشنا شدن با ابزارهای ترجمه. چند پیام را ترجمه کنید و تمام حقوق مترجم را برای شرکت در پروژه‌های مورد علاقه خود بدست آورید.",
+ "translate-translationstash-welcome-note": "با ابزارهای ترجمه آشنا شوید. چند پیام را ترجمه کنید و اختیارات کامل ترجمه را به دست بیاورید تا در پروژه‌های مورد علاقهٔ خود شرکت کنید.",
"translate-translationstash-initialtranslation": "ترجمه‌های اولیهٔ شما",
"translate-translationstash-translations": "$1تکمیل شده {{PLURAL:$1|ترجمه|ترجمه‌ها}}",
"translate-translationstash-skip-button-label": "امتحان دیگری",
"tsb-limit-reached-title": "تشکر برای ترجمه‌های شما",
"tsb-limit-reached-body": "شما به حد ترجمه برای مترجمان جدید رسیده‌اید.\nتیم ما بررسی خواهد کرد و حساب شما را به زودی ارتقاء می‌دهد.\nسپس شما قادر به ترجمه بدون محدودیت خواهید بود.",
"tsb-no-requests-from-new-users": "هیچ درخواستی از کاربران تازه نیست",
- "tsb-create-user-page": "ایجاد صفحهٔ کاربری اصلی",
- "log-name-translatorsandbox": "جعبه شنی ترجمه",
+ "tsb-create-user-page": "صفحهٔ کاربری اصلی ایجاد شد",
+ "log-name-translatorsandbox": "محل تمرین ترجمه",
"log-description-translatorsandbox": "سیاهه‌ای از عملکرد بر روی کاربران جعبه شنی ترجمه",
"logentry-translatorsandbox-promoted": "$1، $3 را به {{GENDER:$4|مترجم}} {{GENDER:$2|ترفیع}} داد",
"logentry-translatorsandbox-rejected": "$1 درخواست «$3» را برای مترجم شدن {{GENDER:$2|رد کرد}}",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/fi.json b/www/wiki/extensions/Translate/i18n/sandbox/fi.json
index 7ffb5ab3..43e8fc4c 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/fi.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/fi.json
@@ -2,17 +2,24 @@
"@metadata": {
"authors": [
"Crt",
- "Nike"
+ "Nike",
+ "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ä {{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",
"tsb-reminder-failed": "Muistutuksen lähettäminen epäonnistui",
- "tsb-email-promoted-subject": "{{SITENAME}}: Sinut on hyväksytty kääntäjäksi",
+ "tsb-email-promoted-subject": "Sinut on hyväksytty kääntäjäksi {{GRAMMAR:inessive|{{SITENAME}}}}",
+ "tsb-email-promoted-body": "Hei {{GENDER:$1|$1}},\n\nOnneksi olkoon! Tarkistin {{GRAMMAR:inessive|{{SITENAME}}}} tekemäsi testikäännökset ja annoin sinulle täydet käännösoikeudet.\n\nTule {{GRAMMAR:illative|{{SITENAME}}}} jatkaaksesi kääntämistä nyt, ja joka päivä:\n$2\n\nTervetuloa, ja kiitos osallistumisestasi!\n\n{{GENDER:$3|$3}},\n{{GRAMMAR:genitive|{{SITENAME}}}} henkilökunta",
+ "tsb-email-rejected-subject": "Hakemuksesi kääntäjäksi {{GRAMMAR:inessive|{{SITENAME}}}} hylättiin",
+ "tsb-email-rejected-body": "Hei {{GENDER:$1|$1}},\n\nKiitos hakemuksestasi kääntäjänä {{GRAMMAR:inessive|{{SITENAME}}}}. Pahoittelen ilmoittaakseni sinulle että olen hylännyt hakemuksesi, koska käännöstesi laatu ei täyttänyt vaatimuksia.\n\nJos luulet, että hakemuksesi hylättiin vahingossa, yritä hakea uudelleen kääntäjäksi {{GRAMMAR:inessive|{{SITENAME}}}}. Voit rekisteröityä täällä: \n$2\n\n{{GENDER:$3|$3}},\n{{GRAMMAR:genitive|{{SITENAME}}}} henkilökunta",
"tsb-request-count": "$1 {{PLURAL:$1|hakemus|hakemusta}}",
"tsb-all-languages-button-label": "Kaikki kielet",
"tsb-search-requests": "Hae hakemuksista",
@@ -29,13 +36,21 @@
"tsb-translations-user": "{{GENDER:$1|Käyttäjän käännökset}}",
"tsb-translations-current": "Nykyinen käännös",
"tsb-delete-userpage-summary": "Hiekkalaatikkokäyttäjän käyttäsivun poisto.",
+ "tsb-reject-confirmation": "{{PLURAL:$1|käyttäjä|käyttäjää}} hylätty",
+ "tsb-accept-confirmation": "{{PLURAL:$1|käyttäjä|käyttäjää}} hyväksytty",
"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": "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"
+ "tsb-create-user-page": "Luotu yksinkertainen käyttäjäsivu",
+ "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}} 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/www/wiki/extensions/Translate/i18n/sandbox/fr.json b/www/wiki/extensions/Translate/i18n/sandbox/fr.json
index 9bbb67f0..235fe3e9 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/fr.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/fr.json
@@ -11,7 +11,9 @@
"McDutchie",
"Framafan",
"Pathe",
- "TomT0m"
+ "TomT0m",
+ "Derugon",
+ "Wladek92"
]
},
"managetranslatorsandbox": "Gérer le bac à sable de traduction",
@@ -41,7 +43,9 @@
"tsb-translations-source": "Source",
"tsb-translations-user": "Traductions {{GENDER:$1|de l’utilisateur|de l’utilisatrice}}",
"tsb-translations-current": "Traductions existantes",
- "tsb-delete-userpage-summary": "Suppression de la page utilisateur d’un utilisateur du bac à sable",
+ "tsb-delete-userpage-summary": "Suppression de la page d’utilisateur d’un utilisateur du bac à sable",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Utilisateur rejeté|Utilisateurs rejetés}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Utilisateur accepté|Utilisateurs acceptés}}",
"translationstash": "Bienvenue",
"translate-translationstash-welcome": "Bienvenue {{GENDER:$1|$1}}, vous êtes un nouveau traducteur",
"translate-translationstash-welcome-note": "Familiarisez-vous avec les outils de traduction. Traduisez quelques messages et obtenez les droits complets de traducteur pour participer à vos projets favoris.",
@@ -51,8 +55,8 @@
"tsb-limit-reached-title": "Merci pour vos traductions",
"tsb-limit-reached-body": "Vous avez atteint la limite de traductions pour les nouveaux traducteurs.\nNotre équipe va vérifier et mettre à niveau votre compte bientôt.\nEnsuite, vous serez en mesure de traduire sans limites.",
"tsb-no-requests-from-new-users": "Aucune requête de nouveaux utilisateurs",
- "tsb-create-user-page": "Créer une page utilisateur de base",
- "log-name-translatorsandbox": "Bac à sable de traduction",
+ "tsb-create-user-page": "Page d’utilisateur de base créée",
+ "log-name-translatorsandbox": "Journal du bac à sable de traduction",
"log-description-translatorsandbox": "Un journal des actions sur les utilisateurs du bac à sable de traduction",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|a promu}} $3 en {{GENDER:$4|traducteur|traductrice}}.",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|a rejeté}} la demande de $3 de devenir traducteur",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/fy.json b/www/wiki/extensions/Translate/i18n/sandbox/fy.json
index 36b00388..827fe93d 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/fy.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/fy.json
@@ -1,8 +1,12 @@
{
"@metadata": {
"authors": [
- "Robin0van0der0vliet"
+ "Robin0van0der0vliet",
+ "Robin van der Vliet",
+ "PiefPafPier"
]
},
- "translationstash": "Wolkom"
+ "translationstash": "Wolkom",
+ "tsb-create-user-page": "Ienfâldige meidoggerside oanmakke",
+ "log-name-translatorsandbox": "Oersetsânbakloch"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/gl.json b/www/wiki/extensions/Translate/i18n/sandbox/gl.json
index c03411f9..b52ffd98 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/gl.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/gl.json
@@ -34,6 +34,8 @@
"tsb-translations-user": "Traduccións {{GENDER:$1|do usuario|da usuaria}}",
"tsb-translations-current": "Traducións existentes",
"tsb-delete-userpage-summary": "Borro a páxina de usuario dunha zona de probas de usuario",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Usuario rexeitado|Usuarios rexeitados}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Usuario aceptado|Usuarios aceptados}}",
"translationstash": "Benvido",
"translate-translationstash-welcome": "{{GENDER:$1|Benvido|Benvida}}, $1; xa es {{GENDER:$1|un novo tradutor|unha nova tradutora}}",
"translate-translationstash-welcome-note": "Familiarícese coas ferramentas de tradución. Traduza algunhas mensaxes e obteña todos os dereitos de tradutor para participar nos seus proxectos favoritos.",
@@ -44,7 +46,7 @@
"tsb-limit-reached-body": "Alcanzou o límite de traducións dos tradutores novos.\nO noso equipo ha comprobar e actualizar a súa conta axiña.\nLogo diso, poderá traducir sen límites.",
"tsb-no-requests-from-new-users": "Non hai solicitudes de novos usuarios",
"tsb-create-user-page": "Creo a páxina de usuario básica",
- "log-name-translatorsandbox": "Zona de probas de tradución",
+ "log-name-translatorsandbox": "Rexistro da zona de probas de tradución",
"log-description-translatorsandbox": "Un rexistro de accións sobre os usuarios da zona de probas de tradución",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|converteu a}} $3 en {{GENDER:$4|tradutor|tradutora}}",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rexeitou}} a solicitude de $3 de converterse en tradutor",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/he.json b/www/wiki/extensions/Translate/i18n/sandbox/he.json
index 8003c9ea..40141bfc 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/he.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/he.json
@@ -32,6 +32,8 @@
"tsb-translations-user": "תרגומים של {{GENDER:$1|המשתמש|המשתמשת}}",
"tsb-translations-current": "תרגומים קיימים",
"tsb-delete-userpage-summary": "מחיקת דף משתמש של משתמש בארגז חול",
+ "tsb-reject-confirmation": "{{PLURAL:$1|משתמש נדחה|משתמשים נדחו}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|משתמש התקבל|משתמשים התקבלו}}",
"translationstash": "ברוך בואך",
"translate-translationstash-welcome": "{{GENDER:$1|ברוך הבא $1, אתה מתרגם חדש|ברוכה הבאה $1, את מתרגמת חדשה}}",
"translate-translationstash-welcome-note": "עכשיו נכיר לך את כלי התרגום. אנו מבקשים ממך לתרגם מספר מחרוזות כדי לקבל הרשאות תרגום מלאות ולהשתתף במיזמים שמעניינים אותך.",
@@ -42,7 +44,7 @@
"tsb-limit-reached-body": "הגעת למגבלת התרגומים למתרגמים חדשים.\nהסגל שלנו יבדוק וישדרג את החשבון שלך בקרוב.\nאחרי־כן תהיה לך אפשרות לתרגם בלי הגבלה.",
"tsb-no-requests-from-new-users": "אין בקשות ממשתמשים חדשים",
"tsb-create-user-page": "יצירת דף משתמש בסיסי",
- "log-name-translatorsandbox": "ארגז חול של תרגומים",
+ "log-name-translatorsandbox": "יומן ארגז חול של תרגומים",
"log-description-translatorsandbox": "יומן פעולות על משתמשים בארגז חול של תרגומים",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|קידם|קידמה}} את $3 לתפקיד {{GENDER:$4|מתרגם|מתרגמת}}",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|דחה|דחתה}} את הבקשה של \"$3\" לקבל הרשאת מתרגם",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/hi.json b/www/wiki/extensions/Translate/i18n/sandbox/hi.json
index 5350171d..b5b1c3ec 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/hi.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/hi.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "NehalDaveND"
+ "NehalDaveND",
+ "Sfic"
]
},
"tsb-all-languages-button-label": "सभी भाषाएँ",
@@ -9,6 +10,8 @@
"tsb-reject-button-label": "अस्वीकृत",
"tsb-accept-all-button-label": "सभी स्वीकृत",
"tsb-reject-all-button-label": "सभी अस्वीकृत",
+ "tsb-user-posted-a-comment": "अनुवादक नहीं है",
"tsb-translations-source": "मूल",
- "translationstash": "स्वागत"
+ "translationstash": "स्वागत",
+ "translate-translationstash-welcome": "स्वागत है {{GENDER:$1|$1}} जी, आप नए अनुवादक हैं"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/hr.json b/www/wiki/extensions/Translate/i18n/sandbox/hr.json
new file mode 100644
index 00000000..ebaa643b
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/hr.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bugoslav"
+ ]
+ },
+ "managetranslatorsandbox": "Upravljanje prevoditeljskim pješčanikom",
+ "tsb-filter-pending": "Zahtjevi na čekanju",
+ "tsb-reminder-title-generic": "Dovršite Vaše predstavljanje da bi ste postali prevoditelj/ica",
+ "translationstash": "Dobro došli",
+ "log-name-translatorsandbox": "Evidencija prijevoda u pješčaniku",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promovirao|promovirala}} je $3 u {{GENDER:$4|prevoditelja|prevoditeljicu}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|odbacio|odbacila}} je zahtjev suradnika/suradnice »$3« da postane prevoditelj/ica"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/hu.json b/www/wiki/extensions/Translate/i18n/sandbox/hu.json
new file mode 100644
index 00000000..7a247e43
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/hu.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tacsipacsi"
+ ]
+ },
+ "managetranslatorsandbox": "Fordítói homokozó kezelése",
+ "tsb-filter-pending": "Függőben lévő kérések",
+ "tsb-reminder-title-generic": "Fejezd be a bemutatkozásodat a fordítóvá váláshoz",
+ "tsb-reminder-sending": "Emlékeztető küldése…",
+ "tsb-reminder-sent": "{{PLURAL:$1|Emlékeztető elküldve ekkor: $2.|$1 emlékeztető elküldve. Utolsó kézbesítve: $2.}}",
+ "tsb-reminder-sent-new": "Emlékeztető elküldve",
+ "tsb-reminder-failed": "Az emlékeztető küldése sikertelen",
+ "tsb-email-promoted-subject": "Mostantól fordító vagy a(z) {{SITENAME}} wikin",
+ "tsb-email-rejected-subject": "A fordítói jelentkezésedet a(z) {{SITENAME}} wikin elutasították",
+ "tsb-request-count": "$1 kérés",
+ "tsb-all-languages-button-label": "Minden nyelv",
+ "tsb-search-requests": "Keresés a kérések között",
+ "tsb-accept-button-label": "Elfogadás",
+ "tsb-reject-button-label": "Elutasítás",
+ "tsb-selected-count": "$1 felhasználó kiválasztva",
+ "tsb-older-requests": "$1 régebbi kérés",
+ "tsb-accept-all-button-label": "Összes elfogadása",
+ "tsb-reject-all-button-label": "Összes elutasítása",
+ "tsb-user-posted-a-comment": "Nem fordító",
+ "tsb-reminder-link-text": "Emlékeztető e-mail küldése",
+ "tsb-didnt-make-any-translations": "Ez a felhasználó nem készített fordításokat.",
+ "tsb-translations-source": "Forrás",
+ "tsb-translations-user": "{{GENDER:$1|Felhasználó}} fordításai",
+ "tsb-translations-current": "Létező fordítások",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Felhasználó|Felhasználók}} elutasítva",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Felhasználó|Felhasználók}} elfogadva",
+ "translationstash": "Üdvözlünk",
+ "translate-translationstash-welcome": "Helló $1, új fordító vagy",
+ "translate-translationstash-welcome-note": "Ismerkedj meg a fordítói eszközökkel. Fordíts le néhány üzenetet a teljes jogú fordítóvá váláshoz, hogy részt vehess a kedvenc projektjeidben.",
+ "translate-translationstash-initialtranslation": "Kezdeti fordításod",
+ "translate-translationstash-translations": "$1 befejezett fordítás",
+ "translate-translationstash-skip-button-label": "Próbálkozás másikkal",
+ "tsb-limit-reached-title": "Köszönjük a fordításaidat",
+ "tsb-limit-reached-body": "Elérted az új fordítók fordítási limitjét.\nA csapatunk hamarosan megerősíti és frissíti a fiókodat.\nUtána korlátlanul fordíthatsz.",
+ "tsb-no-requests-from-new-users": "Nincs kérés új felhasználóktól",
+ "tsb-create-user-page": "Alapvető felhasználói lap készítése",
+ "log-name-translatorsandbox": "Fordítói homokozó naplója",
+ "log-description-translatorsandbox": "A fordítói homokozó felhasználóinak műveleteinek naplója",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|visszautasította}} „$3” fordítóvá válási kérését"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ia.json b/www/wiki/extensions/Translate/i18n/sandbox/ia.json
index b0c6f245..2ff68886 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/ia.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ia.json
@@ -9,7 +9,7 @@
"tsb-reminder-title-generic": "Completa le introduction pro devenir traductor",
"tsb-reminder-content-generic": "Salute $1,\n\nGratias pro haber te inscribite a {{SITENAME}}.\n\nSi tu completa le traductiones de test, le administratores te concedera le accesso complete de traduction in un breve periodo.\n\nVeni e face alcun altere traductiones al adresse:\n$2\n\n$3,\nLe equipa de {{SITENAME}}",
"tsb-reminder-sending": "Invio del rememoration...",
- "tsb-reminder-sent": "{{PLURAL:$1|$1 rememoration inviate $2|$1 rememorationes inviate; le ultime se inviava $2}}",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 rememoration inviate. Hora: $2|$1 rememorationes inviate. Hora del ultime: $2}}",
"tsb-reminder-sent-new": "Un rememoration inviate",
"tsb-reminder-failed": "Le invio del rememoration ha fallite",
"tsb-email-promoted-subject": "Tu es ora traductor in {{SITENAME}}",
@@ -29,7 +29,7 @@
"tsb-reminder-link-text": "Inviar e-mail de rememoration",
"tsb-didnt-make-any-translations": "Iste usator non ha facite alcun traduction.",
"tsb-translations-source": "Fonte",
- "tsb-translations-user": "Traductiones del usator",
+ "tsb-translations-user": "Traductiones del {{GENDER:$1|usator}}",
"tsb-translations-current": "Traductiones existente",
"tsb-delete-userpage-summary": "Deletion del pagina de usator de un usator in cassa a sablo",
"translationstash": "Benvenite",
@@ -41,8 +41,8 @@
"tsb-limit-reached-title": "Gratias pro tu traductiones",
"tsb-limit-reached-body": "Tu ha attingite le numero limite de traductiones pro le nove traductores. Nostre equipa va verificar e promover tu conto bentosto. Postea tu potera traducer sin limite.",
"tsb-no-requests-from-new-users": "Il non ha requestas de nove usatores",
- "tsb-create-user-page": "Crear un pagina de usator basic",
- "log-name-translatorsandbox": "Cassa a sablo de traduction",
+ "tsb-create-user-page": "Creation de un pagina de usator basic",
+ "log-name-translatorsandbox": "Registro del cassa a sablo de traduction",
"log-description-translatorsandbox": "Un registro de actiones sur usatores in le cassa a sablo de traduction",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promoveva}} $3 a {{GENDER:$4|traductor}}",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rejectava}} le requesta de \"$3\" de devenir traductor",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/is.json b/www/wiki/extensions/Translate/i18n/sandbox/is.json
new file mode 100644
index 00000000..24282b75
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/is.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sveinn í Felli"
+ ]
+ },
+ "tsb-all-languages-button-label": "Öll tungumál",
+ "tsb-accept-button-label": "Samþykkja",
+ "tsb-reject-button-label": "Hafna",
+ "tsb-accept-all-button-label": "Samþykkja allt",
+ "tsb-reject-all-button-label": "Hafna öllu",
+ "tsb-translations-source": "Uppruni",
+ "translationstash": "Velkomin"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ja.json b/www/wiki/extensions/Translate/i18n/sandbox/ja.json
index 93f558b5..236c11a8 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/ja.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ja.json
@@ -3,7 +3,8 @@
"authors": [
"Shirayuki",
"Sujiniku",
- "Otokoume"
+ "Otokoume",
+ "Omotecho"
]
},
"managetranslatorsandbox": "翻訳者サンドボックスの管理",
@@ -41,8 +42,8 @@
"tsb-limit-reached-title": "翻訳していただいてありがとうございます",
"tsb-limit-reached-body": "新規翻訳者の翻訳数の上限に達しました。\n私たちのチームがまもなく、アカウントを検証してアップグレードします。\nその後、上限なしで翻訳できるようになります。",
"tsb-no-requests-from-new-users": "新規利用者からの申請はありません",
- "tsb-create-user-page": "基礎的な利用者ページを作成",
- "log-name-translatorsandbox": "翻訳サンドボックス",
+ "tsb-create-user-page": "基礎的な利用者ページが作成されました",
+ "log-name-translatorsandbox": "翻訳サンドボックス記録",
"log-description-translatorsandbox": "翻訳サンドボックス利用者への操作の記録",
"logentry-translatorsandbox-promoted": "$1 が $3 を{{GENDER:$4|翻訳者}}に{{GENDER:$2|昇格させました}}",
"logentry-translatorsandbox-rejected": "$1 が「$3」の翻訳者権限の付与申請を{{GENDER:$2|却下しました}}",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/kab.json b/www/wiki/extensions/Translate/i18n/sandbox/kab.json
new file mode 100644
index 00000000..cdf40346
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/kab.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Belkacem77"
+ ]
+ },
+ "tsb-all-languages-button-label": "Akk tutlayin",
+ "tsb-accept-all-button-label": "Qbel meṛṛa",
+ "tsb-reject-all-button-label": "Agwi meṛṛa",
+ "tsb-user-posted-a-comment": "Mačči d amsuqel",
+ "tsb-reminder-link-text": "Azen imayl n usmekti",
+ "tsb-didnt-make-any-translations": "Aseqdac-agi ur isuqel ara yakan.",
+ "tsb-translations-source": "Aɣbalu",
+ "tsb-translations-user": "Tisiqilin n{{GENDER:$1|useqdac|tseqdact}}",
+ "tsb-translations-current": "Tisuqilin yellan",
+ "tsb-reject-confirmation": "{{PLURAL:$1|n usqdac yettwagwin|n iseqdacen yettwagwin}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|n useqdac yettwaqeblen|n iseqdacen yettwaqeblen}}",
+ "translationstash": "Anṣuf",
+ "translate-translationstash-welcome": "Anṣuf {{GENDER:$1|$1}}, aqla-k d amsuqel amaynut",
+ "translate-translationstash-initialtranslation": "Tasuqilt-ik tamezwarut",
+ "translate-translationstash-translations": "Tfukeḍ $1 {{PLURAL:$1|n tsuqilt|n tsuqilin}}.",
+ "translate-translationstash-skip-button-label": "Ɛreḍ tayeḍ",
+ "tsb-limit-reached-title": "Tanemmirt ɣef tsuqilin-ik",
+ "tsb-no-requests-from-new-users": "Ulac tuttriwin n iseqdacen imaynuten",
+ "tsb-create-user-page": "Rnu asebter aseqdac azadur",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|yessuli}} $3 ar {{GENDER:$4|umsuqel|tamsuqelt}}.",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|yugwi|tugwi}} asuter n $3 akken ad yuɣal d amsuqel"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/kjp.json b/www/wiki/extensions/Translate/i18n/sandbox/kjp.json
new file mode 100644
index 00000000..9d40b3d6
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/kjp.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "tsb-translations-source": "အ်ုထိုဝ်",
+ "translationstash": "အင်းၯးလင်ဖဝ်ႋ"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ko.json b/www/wiki/extensions/Translate/i18n/sandbox/ko.json
index 91449d2b..9d82561c 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/ko.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ko.json
@@ -7,7 +7,8 @@
"Priviet",
"Revi",
"Hwangjy9",
- "Kurousagi"
+ "Kurousagi",
+ "Ykhwong"
]
},
"managetranslatorsandbox": "번역자 연습장 관리",
@@ -18,7 +19,7 @@
"tsb-reminder-sent": "{{PLURAL:$1|알림 $1개를 보냈습니다. 시간: $2.|알림 $1개를 보냈습니다. 마지막으로 보낸 시간: $2.}}",
"tsb-reminder-sent-new": "알림을 보냄",
"tsb-reminder-failed": "알림 보내기를 실패했습니다",
- "tsb-email-promoted-subject": "당신은 {{SITENAME}}의 번역가가 됐습니다.",
+ "tsb-email-promoted-subject": "당신은 {{SITENAME}}의 번역자가 됐습니다.",
"tsb-email-promoted-body": "안녕하세요. {{GENDER:$1|$1}} 님\n\n축하드립니다! {{SITENAME}}에서 하신 테스트 번역을 확인학 전체 번역 권한을 부여해드렸습니다.\n\n지금 {{SITENAME}}에 오셔서 번역을 계속해주세요:\n$2\n\n오신 것을 환영하며 당신의 기여에 감사드립니다.\n\n{{SITENAME}} 직원, {{GENDER:$3|$3}}",
"tsb-email-rejected-subject": "당신의 {{SITENAME}}의 번역자 지원서가 거절됐습니다.",
"tsb-email-rejected-body": "안녕하세요. {{GENDER:$1|$1}} 님\n\n{{SITENAME}}의 번역자에 지원해주셔서 감사합니다. 안타깝게도 귀하의 지원서는 귀하의 번역이 필수 조건을 충족하지 않아 채택되지 못하였습니다.\n\n만약 당신의 지원서가 잘못 또는 실수로 채택되지 못하였다고 생각하신다면 {{SITENAME}}의 번역자로서 다시 지원해주시기 바랍니다. 여기에서 등록하실 수 있습니다: $2\n\n{{SITENAME}} 담당자, {{GENDER:$3|$3}}",
@@ -40,17 +41,17 @@
"tsb-delete-userpage-summary": "연습 사용자의 사용자 문서 삭제",
"translationstash": "환영합니다",
"translate-translationstash-welcome": "$1님 환영합니다, 당신은 이제 번역자입니다.",
- "translate-translationstash-welcome-note": "번역 도구에 익숙해지세요. 몇개의 메시지를 번역하고, 당신이 좋아하는 위키에서 번역자 권한을 얻어 위키에 기여하세요.",
+ "translate-translationstash-welcome-note": "번역 도구에 익숙해지세요. 몇 개의 메시지를 번역하시고 완전한 번역자 권한을 얻어 좋아하는 프로젝트에 참여하세요.",
"translate-translationstash-initialtranslation": "내 초기 번역",
"translate-translationstash-translations": "완성한 {{PLURAL:$1|번역}} $1개",
"translate-translationstash-skip-button-label": "다른 문서",
"tsb-limit-reached-title": "당신의 번역에 감사드립니다.",
"tsb-limit-reached-body": "새 번역자를 위한 번역 제한에 도달했습니다. 저희가 당신의 계정을 확인하고 업그레이드한 후에, 제한 없이 번역하실 수 있습니다.",
"tsb-no-requests-from-new-users": "새 사용자의 요청 없음",
- "tsb-create-user-page": "기본 사용자 문서 만들기",
- "log-name-translatorsandbox": "번역 연습장",
+ "tsb-create-user-page": "기본 사용자 문서를 만듦",
+ "log-name-translatorsandbox": "번역 연습장 기록",
"log-description-translatorsandbox": "번역 연습 사용자의 명령 기록",
- "logentry-translatorsandbox-promoted": "$1 사용자가 $3 사용자를 {{GENDER:$4|번역자}}로 {{GENDER:$2|승격시켰습니다}}",
- "logentry-translatorsandbox-rejected": "$1 사용자가 $3 사용자의 승격 신청을 {{GENDER:$2|거절했습니다}}",
+ "logentry-translatorsandbox-promoted": "$1님이 $3님을 {{GENDER:$4|번역자}}로 {{GENDER:$2|승격시켰습니다}}",
+ "logentry-translatorsandbox-rejected": "$1님이 \"$3\"님의 번역자 승격 신청을 {{GENDER:$2|거절했습니다}}",
"logentry-newusers-tsbpromoted": "$3 사용자 계정은 연습장에서의 승격에 따라 {{GENDER:$2|만들어졌습니다}}"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ksh.json b/www/wiki/extensions/Translate/i18n/sandbox/ksh.json
index a0edceeb..e62a4bcc 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/ksh.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ksh.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Purodha"
+ "Purodha",
+ "Als-Holder"
]
},
"managetranslatorsandbox": "Donn en Schpellwiß för de Övversäzer ennreeschde un verwallde.",
@@ -9,7 +10,7 @@
"tsb-reminder-title-generic": "Maach Ding Sällefsvörschtällong fähdesch, öm enen beschtääteschten Övversäzzer ze wääde.",
"tsb-reminder-content-generic": "Daach $1,\nmer bedangke ons dat De Desch köözlesch {{ucfirst:{{GRAMMAR:em|{{ucfirst:{{SITENAME}}}}}}}} aanjemälldt häs. Wann Do jraad noch e paa Övversäzonge för et Pröhve fähdesch mähß, künne de Wikki_Kööbeße desch freischallde för et Övversäzze.\n\nBes esu jood un donn Desch op {{GRAMMAR:Dativ|$2}} enlogge un maach e paa Övversäzonge.\n\n$3\nvum Päsonaal {{ucfirst:{{GRAMMAR:gen|{{ucfirst:{{SITENAME}}}}}}}}",
"tsb-reminder-sending": "Ben de Äennerong aam schecke&nbsp;…",
- "tsb-reminder-sent": "{{PLURAL:$1|Ein Ä'ennerong öm $2 Uhr jeschek|$1 Ä'enneronge jeschek, zerläz öm $2 Uhr|Kein Ä'ennerong öm $2 Uhr jeschek}}.\n<!-- https://phabricator.wikimedia.org/T124635 https://phabricator.wikimedia.org/T130196 -->",
+ "tsb-reminder-sent": "{{PLURAL:$1|Ein Ännerong öm $2 Uhr jeschek|$1 Änneronge jeschek, zerläz öm $2 Uhr|Kein Ännerong öm $2 Uhr jeschek}}.",
"tsb-reminder-sent-new": "Han de Ä'ennerong verscheck.",
"tsb-reminder-failed": "Han kein Äennerong verscheck. Et hät nit jeflupp.",
"tsb-email-promoted-subject": "Do bes jäds_ene Övversäzer em {{SITENAME}}",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ku-latn.json b/www/wiki/extensions/Translate/i18n/sandbox/ku-latn.json
index 018d8e1c..9d9a05b8 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/ku-latn.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ku-latn.json
@@ -1,9 +1,12 @@
{
"@metadata": {
"authors": [
- "Bikarhêner"
+ "Bikarhêner",
+ "George Animal"
]
},
"tsb-all-languages-button-label": "Hemû ziman",
- "tsb-accept-button-label": "Bipejirîne"
+ "tsb-search-requests": "Lê daxwaziyan bigere",
+ "tsb-accept-button-label": "Bipejirîne",
+ "tsb-translations-source": "Çavkanî"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/lag.json b/www/wiki/extensions/Translate/i18n/sandbox/lag.json
new file mode 100644
index 00000000..734c29b0
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/lag.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baba Tabita"
+ ]
+ },
+ "tsb-translations-source": "Nchoongo",
+ "translationstash": "Teenga"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/lb.json b/www/wiki/extensions/Translate/i18n/sandbox/lb.json
index 42828e6c..25e0e6b2 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/lb.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/lb.json
@@ -30,6 +30,8 @@
"tsb-translations-user": "{{GENDER:$1|Benotzer}} Iwwersetzungen",
"tsb-translations-current": "Iwwersetzungen déi et gëtt",
"tsb-delete-userpage-summary": "Benotzersäit vun engem Sandbox-Benotzer läschen",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Benotzer}} refuséiert",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Benotzer}} akzeptéiert",
"translationstash": "Wëllkomm",
"translate-translationstash-welcome": "Wëllkomm {{GENDER:$1|$1}}, Dir sidd en neien Iwwersetzer",
"translate-translationstash-initialtranslation": "Är éischt Iwwersetzung",
@@ -39,7 +41,7 @@
"tsb-limit-reached-body": "Dir hutt d'Iwwersetzungslimit fir nei Iwwersetzer erreecht.\nEis Equipe kuckt Äre Benotzerkont geschwënn no a setzt en erop.\nDa kënnt Dir ouni Limitatiounen iwwersetzen.",
"tsb-no-requests-from-new-users": "Keng Ufroe vun neie Benotzer",
"tsb-create-user-page": "Eng einfach Benotzersäit uleeën",
- "log-name-translatorsandbox": "Iwwersetzungs-Sandkëscht",
+ "log-name-translatorsandbox": "Logbuch vun der Iwwersetzungs-Sandkëscht",
"logentry-translatorsandbox-rejected": "$1 huet d'Ufro vum \"$3\" fir {{GENDER:$2|Iwwersetzesch|Iwwersetzer}} ze gi refuséiert",
"logentry-newusers-tsbpromoted": "De Benotzerkont $3 gouf {{GENDER:$2|ugeluecht}} duerch d'Promotioun aus der Sandkëscht"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/lki.json b/www/wiki/extensions/Translate/i18n/sandbox/lki.json
index fb67a4d5..4db8b79a 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/lki.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/lki.json
@@ -26,7 +26,7 @@
"tsb-user-posted-a-comment": "یک مترجم نیست",
"tsb-reminder-link-text": "ارسال ایمیل یادآور",
"tsb-didnt-make-any-translations": "این کاربر هیچ ترجمه‌ای انجام نداده.",
- "tsb-translations-source": "بِنچۀک/مۀنبۀع",
+ "tsb-translations-source": "بنچەک(منبع)",
"translationstash": "خؤةش هةتین/هاتین",
"translate-translationstash-welcome": "خؤةش هةتین {{GENDER:$1|$1}}، شما یک مترجم تازه هستید",
"translate-translationstash-welcome-note": "آشنا شدن با ابزارهای ترجمه. چند پیام را ترجمه کنید و تمام حقوق مترجم را برای شرکت در پروژه‌های مورد علاقه خود بدست آورید.",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/lt.json b/www/wiki/extensions/Translate/i18n/sandbox/lt.json
new file mode 100644
index 00000000..4f3943f8
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/lt.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200",
+ "Manvydasz"
+ ]
+ },
+ "managetranslatorsandbox": "Tvarkyti vertėjo smėlio dėžę",
+ "tsb-filter-pending": "Neišnagrinėti prašymai",
+ "tsb-reminder-title-generic": "Užbaigti įvadą ir tapti vertėju",
+ "tsb-reminder-sending": "Siunčiamas priminimas...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Išsiųstas $1 priminimas. Laikas: $2.|Išsiųsti $1 priminimai. Paskutinio laikas: $2.}}",
+ "tsb-reminder-sent-new": "Išsiųstas priminimas",
+ "tsb-reminder-failed": "Priminimo išsiųsti nepavyko",
+ "tsb-email-promoted-subject": "Dabar esate {{SITENAME}} vertėjas",
+ "tsb-email-promoted-body": "Sveiki, {{GENDER:$1|$1}},\n\nSveikinu! Aš patikrinau jūsų bandomuosius vertimus, kuriuos jūs atlikote {{SITENAME}} ir suteikiau jums visas vertėjo teises.\n\nEikite į {{SITENAME}}, kad galėtumėte versti dabar ir kiekvieną dieną:\n$2\n\nSveiki atvykę ir ačiū už jūsų įnašą!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} darbuotojas",
+ "tsb-email-rejected-subject": "Jūsų prašymas tapti {{SITENAME}} vertėju buvo atmestas",
+ "tsb-request-count": "$1 {{PLURAL:$1|prašymas|prašymai}}",
+ "tsb-all-languages-button-label": "Visos kalbos",
+ "tsb-search-requests": "Ieškoti prašymų",
+ "tsb-accept-button-label": "Priimti",
+ "tsb-reject-button-label": "Atmesti",
+ "tsb-selected-count": "{{PLURAL:$1|$1 pasirinktas vartotojas|$1 pasirinkti vartotojai}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|senesnis prašymas|senesni prašymai}}",
+ "tsb-accept-all-button-label": "Priimti visus",
+ "tsb-reject-all-button-label": "Atmesti visus",
+ "tsb-user-posted-a-comment": "Ne vertėjas",
+ "tsb-reminder-link-text": "Siųsti priminimą el. paštu",
+ "tsb-didnt-make-any-translations": "Šis vartotojas neatliko jokių vertimų.",
+ "tsb-translations-source": "Šaltinis",
+ "tsb-translations-user": "{{GENDER:$1|Vartotojo|Vartotojos}} vertimai",
+ "tsb-translations-current": "Egzistuojantys vertimai",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Vartotojas atmestas|Vartotojai atmesti}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Vartotojas priimtas|Vartotojai priimti}}",
+ "translationstash": "Sveiki atvykę",
+ "translate-translationstash-welcome": "Sveiki atvykę, {{GENDER:$1|$1}}, esate {{GENDER:$1|naujas vertėjas|nauja vertėja}}",
+ "translate-translationstash-welcome-note": "Susipažinkite su vertimo įrankiais. Išverskite kelis pranešimus ir gaukite pilnas vertėjo teises, kad galėtumėte dalyvauti savo mėgstamiausiuose projektuose.",
+ "translate-translationstash-initialtranslation": "Jūsų pirmininis vertimas",
+ "translate-translationstash-translations": "$1 atliko {{PLURAL:$1|vertimą|vertimus}}",
+ "translate-translationstash-skip-button-label": "Pabandyti kitą",
+ "tsb-limit-reached-title": "Ačiū už jūsų vertimus",
+ "tsb-limit-reached-body": "Jūs pasiekėte naujų vertėjų vertimų limitą.\nMūsų komanda netrukus patikrins ir atnaujins jūsų paskyra.\nTada galėsite versti be limitų.",
+ "tsb-no-requests-from-new-users": "Nėra prašymų iš naujų vartotojų",
+ "tsb-create-user-page": "Sukurti pagrindinį vartotojo puslapį",
+ "log-name-translatorsandbox": "Vertimo smėlio dėžės žurnalas"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/mk.json b/www/wiki/extensions/Translate/i18n/sandbox/mk.json
index 3eb905c3..97311417 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/mk.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/mk.json
@@ -15,7 +15,7 @@
"tsb-email-promoted-subject": "Сега сте преведувач на {{SITENAME}}",
"tsb-email-promoted-body": "Здраво {{GENDER:$1|$1}},\n\nЧеститки! Го проверив пробниот превод што го направивте на {{SITENAME}} и Ви доделив полни преведувачки права.\n\nПојдете на {{SITENAME}} за да продолжите со преведување сега и секој нареден ден:\n$2\n\nДобре дојдовте и Ви благодариме за учеството!\n\n{{GENDER:$3|$3}},\nЧлен на кадарот на {{SITENAME}}",
"tsb-email-rejected-subject": "Вашата пријавница за преведувач на {{SITENAME}} е одбиена",
- "tsb-email-rejected-body": "Здраво {{GENDER:$1|$1}},\n\nВи благодариме што се пријавивте за преведувач на {{SITENAME}}. Нажалост, ќе мораме да Ве известиме дека пријавницата Ви е одбиена бидејќи квалитетот на Вашите преводи не одговара на нашите потреби.\n\nДоколку сметате дека сте одбиени по грешка, поднесете друга на {{SITENAME}}. Тоа можете да го направите тука:\n$2\n\n{{GENDER:$3|$3}},\nКадарот на {{SITENAME}}",
+ "tsb-email-rejected-body": "Здраво {{GENDER:$1|$1}},\n\nВи благодариме што се пријавивте за преведувач на {{SITENAME}}. За жал, ќе мораме да Ве известиме дека пријавницата Ви е одбиена бидејќи квалитетот на Вашите преводи не одговара на нашите потреби.\n\nДоколку сметате дека сте одбиени по грешка, поднесете друга на {{SITENAME}}. Тоа можете да го направите тука:\n$2\n\n{{GENDER:$3|$3}},\nКадарот на {{SITENAME}}",
"tsb-request-count": "{{PLURAL:$1|Едно барање|$1 барања}}",
"tsb-all-languages-button-label": "Сите јазици",
"tsb-search-requests": "Пребарајте барања",
@@ -32,6 +32,8 @@
"tsb-translations-user": "{{GENDER:$1|Кориснички}} преводи",
"tsb-translations-current": "Постоечки преводи",
"tsb-delete-userpage-summary": "Бришење на корисничка страница на песочнички корисник",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Корисникот е одбиен|Корисниците се одбиени}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Корисникот е прифатен|Корисниците се прифатени}}",
"translationstash": "Добре дојдовте",
"translate-translationstash-welcome": "Добре дојдовте {{GENDER:$1|$1}}, вие сте нов преведувач",
"translate-translationstash-welcome-note": "Запознајте се со преводните алатки. Преведете некои пораки и стекнете полни преведувачки права за да учествувате во вашите омилени проекти.",
@@ -41,8 +43,8 @@
"tsb-limit-reached-title": "Ви благодариме за преводите",
"tsb-limit-reached-body": "Ја достигнавте границата на преводи од нови преведувачи.\nНаскоро нашата екипа ќе ви ја провери и надгради сметката.\nПотоа ќе можете да преведувате неограничено.",
"tsb-no-requests-from-new-users": "Нема барања од нови корисници",
- "tsb-create-user-page": "Создавање на основна корисничка страница",
- "log-name-translatorsandbox": "Преводен песочник",
+ "tsb-create-user-page": "Создадена основна корисничка страница",
+ "log-name-translatorsandbox": "Дневник на Преводниот песочник",
"log-description-translatorsandbox": "Дневник на дејства со корисници на преводниот песочник",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$4|го|ја}} {{GENDER:$2|унапреди}} $3 во {{GENDER:$4|преведувач}}",
"logentry-translatorsandbox-rejected": "$1 го {{GENDER:$2|одби}} барањето од „$3“ за да стане преведувач",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/mr.json b/www/wiki/extensions/Translate/i18n/sandbox/mr.json
index 3d73f774..1026ca46 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/mr.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/mr.json
@@ -1,9 +1,53 @@
{
"@metadata": {
"authors": [
- "V.narsikar"
+ "V.narsikar",
+ "Sureshkhole"
]
},
+ "managetranslatorsandbox": "भाषांतरासाठीची धुळपाटी संचालित करा",
+ "tsb-filter-pending": "पडून राहिलेल्या विनंत्या",
+ "tsb-reminder-title-generic": "भाषांतरकार बनण्यासाठी तुमची पुर्ण ओळख द्या",
+ "tsb-reminder-content-generic": "नमस्कार $1,\n\nया संकेतस्थळावर नोंदणी केल्याबद्दल धन्यवाद {{SITENAME}}.\nजर तुम्ही भाषांतराची चाचणी उत्तीर्ण झालात तर प्रचालक लागलीच तुम्हांला भाषांतरासाठीचे संपुर्ण अधिकार बहाल करतील.\n\nया ठिकाणी येऊन काही भाषांतरे पुर्ण करा :\n$2\n\n$3,\n{{SITENAME}} सदस्य",
+ "tsb-reminder-sending": "आठवण करुन देत आहे...",
+ "tsb-reminder-sent": "{{PLURAL:$1| $1 आठवण करुन देणारा संदेश पाठवला . वेळ: $2.|$1 आठवण करुन देणारे संदेश पाठवले. शेवटच्या संदेशाची वेळ: $2.}}",
+ "tsb-reminder-sent-new": "आठवण करुन देणारा संदेश पाठवला",
+ "tsb-reminder-failed": "आठवण करुन देणारा संदेश पाठवणे शक्य नाही.",
+ "tsb-email-promoted-subject": "तुम्ही आता {{SITENAME}} येथे भाषांतरकार आहात",
+ "tsb-email-promoted-body": "नमस्कार {{GENDER:$1|$1}},\n\nअभिनंदन! आपण {{SITENAME}} येथे केलेली चाचणी भाषांतरे मी तपासलीत व आपणास भाषांतरकाराचे पूर्ण अधिकार दिलेत.\nभाषांतर पुढे सुरु ठेवण्यास, {{SITENAME}} या संकेतस्थळावर या व दररोज या: $2\nस्वागत, आणि आपल्या योगदानाबद्दल आपणास धन्यवाद!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} कर्मचारी",
+ "tsb-email-rejected-subject": "{{SITENAME}} वरील भाषांतरकार होण्यासाठीचा तुमचा अर्ज नाकारण्यात आला आहे.",
+ "tsb-email-rejected-body": "नमस्कार {{GENDER:$1|$1}},\n\n{{SITENAME}} या संकेतस्थळावर आपण भाषांतरकार होण्यासाठी अर्ज दिलात त्याबद्द्ल आपले आभार. परंतू आपल्याला हे कळवण्यास आम्हांला दु:ख होत आहे की आपल्या भाषांतराचा दर्जा कमी असल्यामुळे आमच्या अपेक्षांची पुर्तता आपल्या भाषांतराने होत नसल्याचे लक्षात आल्याने. आपला हा अर्ज नाकारण्यात आलेला आहे. \n\nजर तुम्हांला असे वाटत आहे की आपला अर्ज नजरचुकीमुळे नाकारला गेला आहे, तर आपण {{SITENAME}} ह्या ठिकाणी परत एकदा अर्ज करु शकता. येथे परत सनोंद-प्रवेश करा:\n$2\n\n{{GENDER:$3|$3}},\n{{SITENAME}} कर्मचारी",
+ "tsb-request-count": "$1 {{PLURAL:$1|विनंती|विनंत्या}}",
+ "tsb-all-languages-button-label": "सर्व भाषा",
+ "tsb-search-requests": "शोध निकाल",
+ "tsb-accept-button-label": "स्वीकारा",
+ "tsb-reject-button-label": "नामंजूर",
"tsb-selected-count": "{{PLURAL:$1|$1 सदस्य निवडला|$1 सदस्य निवडले}}",
- "tsb-no-requests-from-new-users": "नविन सदस्यांपासून काहीच विनंत्या नाहीत"
+ "tsb-older-requests": "$1 जुन्या{{PLURAL:$1|विनंती|विनंत्या}}",
+ "tsb-accept-all-button-label": "सर्व स्वीकारा",
+ "tsb-reject-all-button-label": "सर्व नाकारा",
+ "tsb-user-posted-a-comment": "भाषांतरकार नाही",
+ "tsb-reminder-link-text": "वि-पत्राने आठवण करणारा संदेश पाठवा.",
+ "tsb-didnt-make-any-translations": "ह्या सदस्याने कोणतीही भाषांतरे केली नाहीत.",
+ "tsb-translations-source": "स्रोत",
+ "tsb-translations-user": "{{GENDER:$1|सदस्य}} भाषांतरे",
+ "tsb-translations-current": "सध्याची भाषांतरे",
+ "tsb-delete-userpage-summary": "धुळपाटी सदस्याचे सदस्यपान काढून टाकीत आहे",
+ "tsb-reject-confirmation": "{{PLURAL:$1|सदस्य|सदस्ये}} नाकारले",
+ "tsb-accept-confirmation": "{{PLURAL:$1|सदस्य|सदस्ये}} स्वीकारले",
+ "translationstash": "सुस्वागतम्‌",
+ "translate-translationstash-welcome": "सुस्वागतम {{GENDER:$1|$1}}, तुम्ही नविन भाषांतरकार आहात",
+ "translate-translationstash-welcome-note": "भाषांतराच्या साधनांची ओळख करुन घ्या. काही संदेशांचे भाषांतर करा, जेणेकरुन तुम्हांला भाषांतराचे संपुर्ण अधिकार मिळतील आणि मग तुम्ही तुमच्या आवडत्या प्रकल्पांमध्ये तुमचे योगदान देऊ शकाल.",
+ "translate-translationstash-initialtranslation": "तुमची सुरुवातीची भाषांतरे",
+ "translate-translationstash-translations": "$1 पुर्ण झाले {{PLURAL:$1|भाषांतर|भाषांतरे}}",
+ "translate-translationstash-skip-button-label": "दुसरे चाचपडा",
+ "tsb-limit-reached-title": "तुमच्या भाषांतराबद्दल धन्यवाद",
+ "tsb-limit-reached-body": "तुम्ही नविन भाषांतरांच्या चाचणी मर्यादेपर्यंत पोहोचला आहात.\nआमच्या तपासणी गटाकडून आपली भाषांतरे लवकरच तपासली जातील.\nआणि तुम्ही अमर्यादित भाषांतरे करु शकाल.",
+ "tsb-no-requests-from-new-users": "नविन सदस्यांपासून कोणत्याही विनंत्या नाहीत",
+ "tsb-create-user-page": "आपले सदस्यपान तयार करा",
+ "log-name-translatorsandbox": "भाषांतर धुळपाटी नोंदी",
+ "log-description-translatorsandbox": "भाषांतर धुळपाटी सदस्यांच्या क्रियांच्या नोंदी",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|पदोन्नती}} $3 to {{GENDER:$4|भाषांतरकार}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|नाकारले}} भाषांतरकार बनण्यासाठीचा $3 यांचा अर्ज.",
+ "logentry-newusers-tsbpromoted": "धुळपाटीवरुन पदोन्नती होऊन $3 {{GENDER:$2|created}} यांचे सदस्यखाते बनवण्यात आले."
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ms.json b/www/wiki/extensions/Translate/i18n/sandbox/ms.json
index f358a384..f045cdfa 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/ms.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ms.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Anakmalaysia"
+ "Anakmalaysia",
+ "Jeluang Terluang"
]
},
"managetranslatorsandbox": "Uruskan kotak pasir penterjemah",
@@ -15,7 +16,7 @@
"tsb-email-promoted-subject": "Anda kini seorang penterjemah di {{SITENAME}}",
"tsb-email-promoted-body": "{{GENDER:$1|$1}},\n\nTahniah! Saya telah memeriksa terjemahan ujian yang telah anda lakukan di {{SITENAME}}, dan ole itu memberi anda hak penterjemah sepenuhnya.\n\nDatanglah ke {{SITENAME}} untuk terus menterjemah sekarang dan setiap hari:\n$2\n\nSelamat datang dan terima kasih atas sumbangan anda!\n\n{{GENDER:$3|$3}},\nKakitangan {{SITENAME}}",
"tsb-email-rejected-subject": "Permohonan anda untuk menjadi penterjemah di {{SITENAME}} telah ditolak",
- "tsb-email-rejected-body": "{{GENDER:$1|$1}},\n\nTerima kasih kerana memohon untuk menjadi penterjemah di {{SITENAME}}. Dengan dukacitanya ingin saya maklumkan bahawa saya telah menolak permohonan anda kerana mutu penterjemahan anda tidak memenuhi syarat.\n\nJika anda berpendapat bahawa penolakan permohonan anda adalah kesilapan, sila cuba untuk memohon semula sebagai penterjemah di {{SITENAME}}. Anda boleh mendaftar di sini:\n$2\n\n{{GENDER:$3|$3}},\nKakitangan {{SITENAME}}",
+ "tsb-email-rejected-body": "{{GENDER:$1|$1}},\n\nTerima kasih kerana memohon untuk menjadi penterjemah di {{SITENAME}}. Dengan dukacitanya ingin saya maklumkan bahawa saya telah menolak permohonan anda kerana mutu penterjemahan anda tidak memenuhi syarat.\n\nJika anda berpendapat bahawa penolakan permohonan anda ialah kesilapan, sila cuba untuk memohon semula sebagai penterjemah di {{SITENAME}}. Anda boleh mendaftar di sini:\n$2\n\n{{GENDER:$3|$3}},\nKakitangan {{SITENAME}}",
"tsb-request-count": "$1 {{PLURAL:$1|permintaan}}",
"tsb-all-languages-button-label": "Semua bahasa",
"tsb-search-requests": "Permohonan carian",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/my.json b/www/wiki/extensions/Translate/i18n/sandbox/my.json
new file mode 100644
index 00000000..fb3b1a65
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/my.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dr Lotus Black"
+ ]
+ },
+ "managetranslatorsandbox": "ဘာသာပြန်သူ သဲပုံးကို စီမံရန်",
+ "tsb-filter-pending": "ဆိုင်းငံ့ထားသော တောင်းဆိုချက်များ",
+ "tsb-reminder-title-generic": "ဘာသာပြန်သူတစ်ဦးဖြစ်ရန် သင်၏ မိတ်ဆက်ကို ပြီးဆုံအောင်ဆောင်ရွက်ပါ",
+ "tsb-reminder-content-generic": "မင်္ဂလာပါ $1၊\n\n{{SITENAME}} တွင် မှတ်ပုံတင်သည့်အတွက် ကျေးဇူးတင်ပါသည်။\n\nသင်၏ အစမ်းဘာသာပြန်များကို ပြီးမြောက်ပါက အက်ဒမင်များသည် မကြာခင် ဘာသာပြန်အခွင့်အရေး အပြည့်အဝအပ်နှင်းပေးပါလိမ့်မည်။\n\nဤနေရာတွင် လာရောက်၍ ဘာသာပြန်ဆိုခြင်းများကို ဆောင်ရွက်ပေးပါ: \n$2\n\n$3၊\n{{SITENAME}} ဝန်ထမ်း",
+ "tsb-email-promoted-subject": "သင်သည် ယခု {{SITENAME}} တွင် ဘာသာပြန်သူတစ်ဦး ဖြစ်ပါပြီ",
+ "tsb-email-promoted-body": "မင်္ဂလာပါ {{GENDER:$1|$1}}၊\n\nဂုဏ်ယူပါသည်။ {{SITENAME}} တွင် သင် လုပ်ဆောင်ခဲ့သည့် ဘာသာပြန်အစမ်းများကို ကျွန်ုပ် စစ်ဆေးခဲ့ပြီး သင်အား ဘာသာပြန်အခွင့်အရေး အပြည့်အဝ ပေးအပ်လိုက်ပါသည်။\n\nနေ့စဉ် ဆက်လက် ဘာသာပြန်ဆိုရန် {{SITENAME}} တွင်လာရောက်ပေးပါ:\n$2\n\nကြိုဆိုပါသည်၊ သင်၏ပံ့ပိုးမှုများအတွက် ကျေးဇူးတင်ပါသည်။\n\n{{GENDER:$3|$3}}၊\n{{SITENAME}} ဝန်ထမ်း",
+ "tsb-email-rejected-subject": "{{SITENAME}} ရှိ ဘာသာပြန်သူတစ်ဦးဖြစ်ရန် သင်၏လျှောက်လွှာကို ငြင်းပယ်လိုက်သည်",
+ "tsb-email-rejected-body": "မင်္ဂလပါ {{GENDER:$1|$1}}၊\n\n{{SITENAME}} တွင် ဘာသာပြန်တစ်ဦးအဖြစ် လျှောက်လွှာတင်သည့်အတွက် ကျေးဇူးတင်ပါသည်။ သင်၏လျှောက်လွှာကို ငြင်းပယ်လိုက်သည်ဟု အသိပေးရမှာ ကျွန်ုပ် နောင်တရမိပါသည်၊ အကြောင်းမှာ သင်၏ ဘာသာပြန်အရည်အသွေးများမှာ လိုအပ်ချက်များနှင့် မကိုက်ညီသောကြောင့်ဖြစ်ပါသည်။\n\nသင်၏လျှောက်လွှာ ငြင်းပယ်ခံရသည်မှာ အမှားဟုထင်မိပါက ကျေးဇူးပြု၍ {{SITENAME}} တွင် ဘာသာပြန်တစ်ဦးအဖြစ် ထပ်မံလျှောက်လွှာတင်ပေးပါ။ ဤနေရာတွင် သင် မှတ်ပုံတင်နိုင်ပါသည်။:\n$2\n\n{{GENDER:$3|$3}}၊\n{{SITENAME}} ဝန်ထမ်း",
+ "tsb-request-count": "{{PLURAL:$1|တောင်းဆိုမှု|တောင်းဆိုမှုများ}} $1",
+ "tsb-all-languages-button-label": "ဘာသာစကားများ အားလုံး",
+ "tsb-search-requests": "တောင်းဆိုချက်များ ရှာဖွေရန်",
+ "tsb-accept-button-label": "လက်ခံသည်",
+ "tsb-reject-button-label": "လက်မခံပါ",
+ "tsb-selected-count": "{{PLURAL:$1|$1 အသုံးပြုသူ ရွေးချယ်ထား|$1 အသုံးပြုသူများ ရွေးချယ်ထား}}",
+ "tsb-older-requests": "ပိုဟောင်းသော {{PLURAL:$1|တောင်းဆိုမှု|တောင်းဆိုမှုများ}} $1",
+ "tsb-accept-all-button-label": "အကုန် လက်ခံသည်",
+ "tsb-reject-all-button-label": "အကုန် လက်မခံပါ",
+ "tsb-user-posted-a-comment": "ဘာသာပြန်သူတစ်ဦး မဟုတ်",
+ "tsb-didnt-make-any-translations": "ဤအသုံးပြုသူသည် မည်သည့်ဘာသာပြန်မှုမျှ မလုပ်ဆောင်ခဲ့ပါ။",
+ "tsb-translations-source": "ရင်းမြစ်",
+ "tsb-translations-user": "{{GENDER:$1|အသုံးပြုသူ}} ဘာသာပြန်များ",
+ "tsb-translations-current": "ရှိနှင့်ပြီးသား ဘာသာပြန်များ",
+ "tsb-reject-confirmation": "{{PLURAL:$1|အသုံးပြုသူ|အသုံးပြုသူများ}}ကို ငြင်းပယ်လိုက်သည်",
+ "tsb-accept-confirmation": "{{PLURAL:$1|အသုံးပြုသူ|အသုံးပြုသူများ}}ကို လက်ခံလိုက်သည်",
+ "translationstash": "ကြိုဆိုပါသည်",
+ "translate-translationstash-welcome": "ကြိုဆိုပါသည် {{GENDER:$1|$1}}၊ သင်သည် လူသစ် ဘာသာပြန်သူတစ်ဦးဖြစ်သည်",
+ "translate-translationstash-welcome-note": "ဘာသာပြန် ကိရိယာများနှင့် ရင်းနှီးအောင် လုပ်ဆောင်ပါ။ မက်ဆေ့အချို့ကို ဘာသာပြန်ပြီး သင် နှစ်သက်သော ပရောဂျက်များတွင် ပါဝင်ရန် ဘာသာပြန်အခွင့်အရေး အပြည့်အဝ ရယူလိုက်ပါ။",
+ "translate-translationstash-initialtranslation": "သင်၏ ကနဦး ဘာသာပြန်ဆိုမှု",
+ "translate-translationstash-translations": "{{PLURAL:$1|ဘာသာပြန်|ဘာသာပြန်များ}} $1 ခုပြီးမြောက်သည်",
+ "translate-translationstash-skip-button-label": "နောက်တစ်ခု စမ်းကြည့်ပါ",
+ "tsb-limit-reached-title": "သင်၏ဘာသာပြန်ဆိုမှုများအတွက် ကျေးဇူးတင်ပါသည်",
+ "tsb-limit-reached-body": "လူသစ် ဘာသာပြန်သူများအတွက် ကန့်သတ်ချက်ကို သင် ရောက်ရှိသွားပါပြီ။ ကျွန်ုပ်တို့အဖွဲ့က မကြာခင် သင်၏အကောင့်ကို အတည်ပြုစစ်ဆေးပြီး အဆင့်မြှင့်တင်ပါလိမ့်မည်။ သင်သည် ကန့်သတ်ချက်မရှိဘဲ ဘာသာပြန်နိုင်တော့မည်ဖြစ်ပါသည်။",
+ "tsb-no-requests-from-new-users": "အသုံးပြုသူအသစ်များမှ တောင်းဆိုချက်များ မရှိပါ",
+ "tsb-create-user-page": "အခြေခံ အသုံးပြုသူစာမျက်နှာ ဖန်တီးရန်",
+ "log-name-translatorsandbox": "ဘာသာပြန်မှုသဲပုံး မှတ်တမ်း",
+ "log-description-translatorsandbox": "ဘာသာပြန်သဲပုံး အသုံးပြုသူများရှိ လုပ်ဆောင်ချက်များ မှတ်တမ်း",
+ "logentry-translatorsandbox-promoted": "$1 က $3 ကို {{GENDER:$4|ဘာသာပြန်သူ}}အဖြစ် {{GENDER:$2|ရာထူးတိုးပေးခဲ့သည်}}",
+ "logentry-translatorsandbox-rejected": "$1 က \"$3\" ၏ ဘာသာပြန်သူတစ်ဦးဖြစ်ရန် တောင်းဆိုမှုကို {{GENDER:$2|ငြင်းပယ်လိုက်သည်}}",
+ "logentry-newusers-tsbpromoted": "အသုံးပြုသူအကောင့် $3 သည် သဲပုံးမှရာထူးတိုးကာ {{GENDER:$2|ဖန်တီးခဲ့သည်}}"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/nb.json b/www/wiki/extensions/Translate/i18n/sandbox/nb.json
new file mode 100644
index 00000000..86431a2d
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/nb.json
@@ -0,0 +1,53 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jon Harald Søby",
+ "Matěj Suchánek"
+ ]
+ },
+ "managetranslatorsandbox": "Behandle oversettelsessandkasse",
+ "tsb-filter-pending": "Ventende forespørsler",
+ "tsb-reminder-title-generic": "Fullfør introduksjonen din for å bli en oversetter",
+ "tsb-reminder-content-generic": "Hei, $1\n\nTakk for at du registrerte deg på {{SITENAME}}.\n\nOm du fullfører testoversettelsene dine vil administratorene gi deg full oversettelsestilgang snart.\n\nKom gjerne tilbake og oversett mer her:\n$2\n\n$3,\nPersonalet på {{SITENAME}}",
+ "tsb-reminder-sending": "Sender påminnelsen ...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Sendte $1 påminnelse. Tid: $2|Sendte $1 påminnelser. Tiden for den siste: $2.}}",
+ "tsb-reminder-sent-new": "Sendte en påminnelse",
+ "tsb-reminder-failed": "Sending av påminnelsen mislyktes",
+ "tsb-email-promoted-subject": "Du er nå en oversetter på {{SITENAME}}",
+ "tsb-email-promoted-body": "Hei, {{GENDER:$1|$1}}\n\nGratulerer! Jeg sjekket testoversettelsene du gjorde på {{SITENAME}} og ga deg full oversettelsestilgang.\n\nKom til {{SITENAME}} for å fortsette å oversette nå:\n$2\n\nVelkommen, og takk for at du bidrar!\n\n{{GENDER:$3|$3}},\nPersonalet på {{SITENAME}}",
+ "tsb-email-rejected-subject": "Søknaden din om å bli en oversetter på {{SITENAME}} ble avvist",
+ "tsb-email-rejected-body": "Hei {{GENDER:$1|$1}}\n\nTakk for at du søkte om å bli oversetter på {{SITENAME}}. Jeg må dessverre meddele at jeg har avvist søknaden din, fordi kvaliteten på oversettelsene dine ikke oppfylte kravene.\n\nOm du mener at dette er en feil, søk om å bli oversetter på {{SITENAME}} igjen. Du kan melde deg på her:\n$2\n\n{{GENDER:$3|$3}},\nPersonalet på {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|forespørsel|forespørsler}}",
+ "tsb-all-languages-button-label": "Alle språk",
+ "tsb-search-requests": "Søk i forespørsler",
+ "tsb-accept-button-label": "Godkjenn",
+ "tsb-reject-button-label": "Avslå",
+ "tsb-selected-count": "{{PLURAL:$1|$1 bruker|$1 brukere}} valgt",
+ "tsb-older-requests": "$1 eldre {{PLURAL:$1|forespørsel|forespørsler}}",
+ "tsb-accept-all-button-label": "Godkjenn alle",
+ "tsb-reject-all-button-label": "Avslå alle",
+ "tsb-user-posted-a-comment": "Ikke en oversetter",
+ "tsb-reminder-link-text": "Send påminnelse på epost",
+ "tsb-didnt-make-any-translations": "Brukeren har ikke gjort noen oversettelser.",
+ "tsb-translations-source": "Kilde",
+ "tsb-translations-user": "{{GENDER:$1|Brukeroversettelser}}",
+ "tsb-translations-current": "Eksisterende oversettelser",
+ "tsb-delete-userpage-summary": "Sletter brukersiden til en sandkassebruker",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Avvist bruker|Avviste brukere}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Godtatt bruker|Godtatte brukere}}",
+ "translationstash": "Velkommen",
+ "translate-translationstash-welcome": "Velkommen {{GENDER:$1|$1}}, du er en ny oversetter",
+ "translate-translationstash-welcome-note": "Bli kjent med oversettelsesverktøyene. Oversett noen beskjeder og få full oversettelsestillatelse for å delta i dine favorittprosjekter.",
+ "translate-translationstash-initialtranslation": "Din første oversettelse",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|fullført oversettelse|fullførte oversettelser}}",
+ "translate-translationstash-skip-button-label": "Prøv en annen",
+ "tsb-limit-reached-title": "Takk for oversettelsene dine",
+ "tsb-limit-reached-body": "Du har nådd grensa for oversettelser av nye oversettere.\nTeamet vårt vil sjekke og oppgradere kontoen din snart.\nDa vil du kunne oversette uten begrensninger.",
+ "tsb-no-requests-from-new-users": "Ingen forespørsler fra nye brukere",
+ "tsb-create-user-page": "Opprett enkel brukerside",
+ "log-name-translatorsandbox": "Logg for oversettelsessandkasse",
+ "log-description-translatorsandbox": "En logg over handlinger på brukere av oversettelsessandkassa",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|forfremmet}} $3 til {{GENDER:$4|oversetter}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|avslo}} forespørselen fra «$3» om å bli oversetter",
+ "logentry-newusers-tsbpromoted": "Brukerkontoen $3 ble {{GENDER:$2|opprettet}} ved forfremmelse fra sandkassa"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/nl.json b/www/wiki/extensions/Translate/i18n/sandbox/nl.json
index 3b029ba7..2477a4df 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/nl.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/nl.json
@@ -4,7 +4,10 @@
"SPQRobin",
"Siebrand",
"Sjoerddebruin",
- "Arent"
+ "Arent",
+ "Mainframe98",
+ "Mar(c)",
+ "Jeroen N"
]
},
"managetranslatorsandbox": "Vertalersszandbak beheren",
@@ -12,11 +15,11 @@
"tsb-reminder-title-generic": "Voltooi uw introductie om vertaler te worden",
"tsb-reminder-content-generic": "Hallo $1,\n\nBedankt voor het registreren bij {{SITENAME}}.\n\nAls u uw testvertalingen afrondt, kunnen de beheerders u snel volledige vertaaltoegang geven.\n\nMaak alstublieft nog wat meer vertalingen:\n$2\n\n$3,\nMedewerker van {{SITENAME}}",
"tsb-reminder-sending": "Herinnering verzenden...",
- "tsb-reminder-sent": "{{PLURAL:$1|Herinnering $2 verzonden|$1 herinneringen verzonden, de laatste $2}}",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 herinnering $2 verzonden. Verzendtijd: $2.|$1 herinneringen verzonden. Verzendtijd van de laatste: $2}}",
"tsb-reminder-sent-new": "Herinnering verzonden",
"tsb-reminder-failed": "Herinnering verzenden mislukt",
"tsb-email-promoted-subject": "U bent nu vertaler bij {{SITENAME}}",
- "tsb-email-promoted-body": "Hallo {{GENDER:$1|$1}},\n\nGefeliciteerd! Ik heb de testvertalingen gecontroleerd die u op {{SITENAME}} hebt gemaakt en heb uw permanente vertaalrechten gegeven.\n\nKom nu (en bij voorkeur iedere dag) naar {{SITENAME}} om door te gaan met vertalen:\n$2\n\nWelkom en dank u wel voor uw bijdragen!\n\n{{GENDER:$3|$3}},\nMedewerker van {{SITENAME}}",
+ "tsb-email-promoted-body": "Hallo {{GENDER:$1|$1}},\n\nGefeliciteerd! Ik heb de testvertalingen gecontroleerd die u op {{SITENAME}} hebt gemaakt en heb u permanente vertaalrechten gegeven.\n\nKom nu (en bij voorkeur iedere dag) naar {{SITENAME}} om door te gaan met vertalen:\n$2\n\nWelkom en dank u wel voor uw bijdragen!\n\n{{GENDER:$3|$3}},\nMedewerker van {{SITENAME}}",
"tsb-email-rejected-subject": "Uw aanvraag om vertaler te worden bij {{SITENAME}} is afgewezen",
"tsb-email-rejected-body": "Hallo {{GENDER:$1|$1}},\n\nDank u voor de aanmelding als vertaler bij {{SITENAME}}. Ik vind het jammer u moeten melden dat ik de aanmelding heb geweigerd aangezien de kwaliteit van uw vertalingen niet aan de eisen voldoet.\n\nAls u van mening bent dat deze afwijzing onjuist is, dan kunt u zich opnieuw als vertaler aanmelden bij {{SITENAME}}. U kunt zich hieronder inschrijven:\n$2\n\n{{GENDER:$3|$3}}, \n{{SITENAME}} staff",
"tsb-request-count": "{{PLURAL:$1|Eén verzoek|$1 verzoeken}}",
@@ -35,6 +38,8 @@
"tsb-translations-user": "{{GENDER:$1|Gebruikersvertalingen}}",
"tsb-translations-current": "Bestaande vertalingen",
"tsb-delete-userpage-summary": "Gebruikerspagina van een zandbakgebruiker verwijderd",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Gebruiker|Gebruikers}} afgewezen",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Gebruiker|Gebruikers}} toegelaten",
"translationstash": "Welkomstpagina voor vertalers",
"translate-translationstash-welcome": "Welkom {{GENDER:$1|$1}}, u bent nu vertaler",
"translate-translationstash-welcome-note": "Raak vertrouwd met de vertaalhulpmiddelen. Vertaal een aantal willekeurig geselecteerde berichten en krijg volledige vertaalrechten voor uw favoriete projecten.",
@@ -42,10 +47,10 @@
"translate-translationstash-translations": "$1 voltooide {{PLURAL:$1|vertaling|vertalingen}}",
"translate-translationstash-skip-button-label": "Nog één proberen",
"tsb-limit-reached-title": "Bedankt voor uw vertalingen",
- "tsb-limit-reached-body": "U hebt de limiet voor het aantal vertalingen voor nieuwe vertalers bereikt.\nOns team gaat ze snel controleren en promoveert uw gebruiker snel, zodat u zonder beperkingen kunt gaan vertalen.",
+ "tsb-limit-reached-body": "U hebt de limiet voor het aantal vertalingen voor nieuwe vertalers bereikt.\nOns team gaat ze snel controleren en promoveert uw account snel, zodat u zonder beperkingen kunt gaan vertalen.",
"tsb-no-requests-from-new-users": "Geen verzoeken van nieuwe gebruikers",
"tsb-create-user-page": "Eenvoudige gebruikerspagina aangemaakt",
- "log-name-translatorsandbox": "Vertalingenzandbak",
+ "log-name-translatorsandbox": "Vertalingenzandbaklogboek",
"log-description-translatorsandbox": "Een logboek van de handelingen van gebruikers in de vertalingenzandbak.",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|heeft}} $3 gepromoveerd tot {{GENDER:$4|vertaler}}",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|heeft}} het verzoek van \"$3\" om vertaler te worden geweigerd",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/oc.json b/www/wiki/extensions/Translate/i18n/sandbox/oc.json
index 08b8c6e8..830a392f 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/oc.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/oc.json
@@ -7,5 +7,11 @@
"managetranslatorsandbox": "Gerir lo nauc de sabla de traduccion",
"tsb-filter-pending": "Requèstas en espèra",
"tsb-reminder-title-generic": "Completatz vòstra presentacion per venir un traductor",
- "tsb-reminder-content-generic": "Bonjorn $1,\n\nMercé de vos èsser inscrich sus {{SITENAME}}. Se acabatz vòstras traduccions de tèst, los administrators poiràn lèu vos acordar un plen accès a las traduccions.\n\nVenètz sus $2 e fasètz qualques traduccions mai."
+ "tsb-reminder-content-generic": "Bonjorn $1,\n\nMercé de vos èsser inscrit sus {{SITENAME}}.\n\nSe acabatz vòstras traduccions de tèst, los administrators vos poiràn lèu acordar un plen accès a las traduccions.\n\nVenètz sus $2 e fasètz qualques traduccions mai.\n\n$2\n\n$3,\nL’equipa de {{SITENAME}}",
+ "tsb-all-languages-button-label": "Totas las lengas",
+ "tsb-didnt-make-any-translations": "Aqueste utilizaire a pas fait cap de traduccion.",
+ "tsb-translations-user": "Traduccions {{GENDER:$1|de l’utilizaire|de l’utilizaira}}",
+ "tsb-translations-current": "Traduccions existentas",
+ "translate-translationstash-translations": "Avètz acabat $1 {{PLURAL:$1|traduccion|traduccions}}.",
+ "tsb-limit-reached-title": "Mercé per vòstras traduccions"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/pl.json b/www/wiki/extensions/Translate/i18n/sandbox/pl.json
index 3203c051..5f3e5c8b 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/pl.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/pl.json
@@ -1,32 +1,44 @@
{
"@metadata": {
"authors": [
- "Chrumps"
+ "Chrumps",
+ "CiaPan"
]
},
"managetranslatorsandbox": "Zarządzanie brudnopisem tłumacza",
"tsb-filter-pending": "Oczekujące wnioski",
"tsb-reminder-sending": "Wysyłanie przypomnienia...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Wysłane $1 przypomnienie. Czas: $2.|Wysłane $1 przypomnienia. Czas ostatniego: $2|Wysłane $1 przypomnień. Czas ostatniego: $2}}",
"tsb-reminder-sent-new": "Wyślij przypomnienie",
"tsb-reminder-failed": "Wysłanie przypomnienia nie powiodło się",
"tsb-email-promoted-subject": "Teraz jesteś tłumaczem w serwisie {{SITENAME}}",
- "tsb-email-rejected-subject": "Twój wniosek o uzyskanie uprawnień tłumacza witryny {{SITENAME}} została odrzucony",
+ "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ł 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",
"tsb-accept-button-label": "Akceptuj",
"tsb-reject-button-label": "Odrzuć",
+ "tsb-selected-count": "{{PLURAL:$1|$1 wybrany użytkownik|$1 wybranych użytkowników}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|starszy wniosek|starsze wnioski|starszych wniosków}}",
"tsb-accept-all-button-label": "Akceptuje wszystkie",
"tsb-reject-all-button-label": "Odrzuć wszystkie",
"tsb-didnt-make-any-translations": "Ten użytkownik nie wykonał żadnego tłumaczenia.",
"tsb-translations-source": "Źródło",
"tsb-translations-user": "Tłumaczenia {{GENDER:$1|użytkownika|użytkowniczki}}",
"tsb-translations-current": "Istniejące tłumaczenia",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Użytkownik odrzucony|Użytkownicy odrzuceni}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Użytkownik zaakceptowany|Użytkownicy zaakceptowani}}",
"translationstash": "Powitanie",
"translate-translationstash-welcome": "Witaj $1, jesteś {{GENDER:$1|nowym tłumaczem|nową tłumaczką}}",
+ "translate-translationstash-welcome-note": "Zapoznaj się z narzędziami tłumacza. Przetłumacz część komunikatów i zostań pełnoprawnym tłumaczem aby uczestniczyć w wybranych projektach.",
+ "translate-translationstash-initialtranslation": "Twoje pierwotne tłumaczenie",
"translate-translationstash-translations": "$1 {{PLURAL:$1|ukończone tłumaczenie|ukończone tłumaczenia|ukończonych tłumaczeń}}",
+ "translate-translationstash-skip-button-label": "Spróbuj innego",
"tsb-limit-reached-title": "Dziękuję za Twoje tłumaczenia",
- "tsb-create-user-page": "Utwórz prostą stronę użytkownika",
- "log-name-translatorsandbox": "Brudnopis tłumaczeń",
+ "tsb-no-requests-from-new-users": "Brak wniosków od nowych użytkowników",
+ "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ę}}",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|odrzucił|odrzuciła}} wniosek „$3”, aby przyznać uprawnienia tłumacza"
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ps.json b/www/wiki/extensions/Translate/i18n/sandbox/ps.json
index a92b9fff..d2611d1e 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/ps.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ps.json
@@ -30,5 +30,5 @@
"translate-translationstash-skip-button-label": "بل آزمويل",
"tsb-limit-reached-title": "له ژباړو څخه مو مننه",
"tsb-create-user-page": "يو بنسټيز کارن مخ جوړول",
- "log-name-translatorsandbox": "د ژباړې شگبکس"
+ "log-name-translatorsandbox": "د ژباړې شگبکس يادښت"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/pt-br.json b/www/wiki/extensions/Translate/i18n/sandbox/pt-br.json
index fe703f2c..c731a992 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/pt-br.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/pt-br.json
@@ -1,8 +1,54 @@
{
"@metadata": {
"authors": [
- "Fabsouza1"
+ "Fabsouza1",
+ "Felipe L. Ewald",
+ "Eduardo Addad de Oliveira"
]
},
- "tsb-reminder-title-generic": "Complete a sua apresentação para tornar-se um tradutor"
+ "managetranslatorsandbox": "Gerenciar tradutor da página de testes",
+ "tsb-filter-pending": "Solicitações pendentes",
+ "tsb-reminder-title-generic": "Complete a sua apresentação para tornar-se um tradutor",
+ "tsb-reminder-content-generic": "Oi $1,\n\nObrigado por se registrar com {{SITENAME}}.\n\nSe você completar as suas traduções de teste, os administradores irão conceder acesso de tradução completo logo depois.\n\nPor favor, faça mais traduções aqui:\n$2\n\n$3,\n equipe {{SITENAME}}",
+ "tsb-reminder-sending": "Enviando o lembrete ...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Enviado $1 lembrete. Tempo: $2.|Enviados $1 lembretes. Hora do último: $2.}}",
+ "tsb-reminder-sent-new": "Enviar um lembrete",
+ "tsb-reminder-failed": "O envio do lembrete falhou",
+ "tsb-email-promoted-subject": "Você agora é tradutor em {{SITENAME}}",
+ "tsb-email-promoted-body": "Oi {{GENDER:$1|$1}},\n\nParabéns! Verifiquei as traduções de teste que você fez em {{SITENAME}} e dei-lhe direitos de tradutor completo.\n\nVá para {{SITENAME}} para continuar a traduzir agora e todos os dias:\n$2\nNBem-vindo e obrigado por suas contribuições!\n\n{{GENDER:$3|$3}},\n equipe {{SITENAME}}",
+ "tsb-email-rejected-subject": "Sua candidatura para ser um tradutor em {{SITENAME}} foi rejeitada",
+ "tsb-email-rejected-body": "Oi {{GENDER:$1|$1}},\n\nObrigado por se candidatar como tradutor em {{SITENAME}}. Lamento informar-lhe que eu rejeitei o seu pedido, porque a qualidade das suas traduções não cumpriu os requisitos.\n\nSe você acha que o seu pedido foi rejeitado por engano, tente se candidatar novamente como tradutor em {{SITENAME}}. Você pode se inscrever aqui: \n$2\n\n{{GENDER:$3|$3}},\nequipe {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|pedido|pedidos}}",
+ "tsb-all-languages-button-label": "Todos os idiomas",
+ "tsb-search-requests": "Buscar pedidos",
+ "tsb-accept-button-label": "Aceitar",
+ "tsb-reject-button-label": "Rejeitar",
+ "tsb-selected-count": "{{PLURAL:$1|$1 usuário selecionado|$1 usuários selecionados}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|pedido mais antigo|pedidos mais antigos}}",
+ "tsb-accept-all-button-label": "Aceitar todos",
+ "tsb-reject-all-button-label": "Rejeitar todas",
+ "tsb-user-posted-a-comment": "Não é um tradutor",
+ "tsb-reminder-link-text": "Enviar lembrete de e-mail",
+ "tsb-didnt-make-any-translations": "Este usuário não fez nenhuma tradução.",
+ "tsb-translations-source": "Fonte",
+ "tsb-translations-user": "{{GENDER:$1|Traduções do usuário|Traduções da usuária}}",
+ "tsb-translations-current": "Traduções existentes",
+ "tsb-delete-userpage-summary": "Excluindo a página de usuário de um usuário da página de testes",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Usuário rejeitado|Usuários rejeitados}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Usuário aceito|Usuários aceitos}}",
+ "translationstash": "Bem-vindo(a)",
+ "translate-translationstash-welcome": "Bem-vindo {{GENDER:$1|$1}}, você é um novo tradutor",
+ "translate-translationstash-welcome-note": "Familiarize-se com as ferramentas de tradução. Traduza algumas mensagens e obtenha direitos de tradutor completos para participar dos seus projetos favoritos.",
+ "translate-translationstash-initialtranslation": "Sua tradução inicial",
+ "translate-translationstash-translations": "$1 completou {{PLURAL:$1|a tradução|as traduções}}",
+ "translate-translationstash-skip-button-label": "Tentar outro",
+ "tsb-limit-reached-title": "Obrigado pelas suas traduções",
+ "tsb-limit-reached-body": "Você alcançou o limite de tradução para novos tradutores.\nO nosso time verificará e atualizará sua conta em breve.\nEntão você poderá traduzir sem limites.",
+ "tsb-no-requests-from-new-users": "Nenhuma solicitação de novos usuários",
+ "tsb-create-user-page": "Página de usuário básica criada",
+ "log-name-translatorsandbox": "Registro da página de testes de tradução",
+ "log-description-translatorsandbox": "Um registro de ações dos usuários de página de testes de tradução",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promoveu}} $3 para {{GENDER:$4|tradutor|tradutora}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rejeitou}} o pedido de \"$3\" para se tornar um tradutor",
+ "logentry-newusers-tsbpromoted": "A conta de usuário $3 foi {{GENDER:$2|criada}} por promoção da página de testes"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/pt.json b/www/wiki/extensions/Translate/i18n/sandbox/pt.json
index 57c3e0cf..948e6871 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/pt.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/pt.json
@@ -3,7 +3,8 @@
"authors": [
"Hamilton Abreu",
"Vitorvicentevalente",
- "Fúlvio"
+ "Fúlvio",
+ "Felipe L. Ewald"
]
},
"managetranslatorsandbox": "Administrar a área de teste de tradutores",
@@ -14,8 +15,8 @@
"tsb-reminder-sent": "{{PLURAL:$1|Enviou $1 lembrança. Hora: $2.|Enviou $1 lembranças. Hora da última: $2.}}",
"tsb-reminder-sent-new": "Enviou uma lembrança",
"tsb-reminder-failed": "O envio da lembrança falhou",
- "tsb-email-promoted-subject": "É agora tradutor(a) na wiki {{SITENAME}}",
- "tsb-email-promoted-body": "Olá {{GENDER:$1|$1}},\n\nParabéns! Revi as traduções que fez na wiki {{SITENAME}} e concedi-lhe todos os privilégios de tradução.\n\nVenha hoje e todos os dias à wiki {{SITENAME}} para continuar a traduzir:\n$2\n\nBem-vindo(a) e obrigado pelas suas contribuições!\n\n{{GENDER:$3|$3}},\nA equipa da wiki {{SITENAME}}",
+ "tsb-email-promoted-subject": "É agora tradutor na wiki {{SITENAME}}",
+ "tsb-email-promoted-body": "Olá {{GENDER:$1|$1}},\n\nParabéns! Revi as traduções de teste que fez na wiki {{SITENAME}} e concedi-lhe todos os privilégios de tradução.\n\nVenha hoje e todos os dias à wiki {{SITENAME}} para continuar a traduzir:\n$2\n\nBem-vindo(a) e obrigado pelas suas contribuições!\n\n{{GENDER:$3|$3}},\nA equipa da wiki {{SITENAME}}",
"tsb-email-rejected-subject": "O seu pedido para tornar-se tradutor na wiki {{SITENAME}} foi rejeitado",
"tsb-email-rejected-body": "Olá {{GENDER:$1|$1}},\n\nObrigado por se ter candidatado a tradutor na wiki {{SITENAME}}. Lamento informar que rejeitei o seu pedido, porque a qualidade das traduções não preencheu os requisitos.\n\nSe acredita que a rejeição resulta de um erro de avaliação, tente candidatar-se novamente a tradutor na wiki {{SITENAME}}, por favor. Pode inscrever-se aqui:\n$2\n\n{{GENDER:$3|$3}},\nA equipa da wiki {{SITENAME}}",
"tsb-request-count": "$1 {{PLURAL:$1|pedido|pedidos}}",
@@ -31,9 +32,11 @@
"tsb-reminder-link-text": "Enviar lembrança por correio eletrónico",
"tsb-didnt-make-any-translations": "Este utilizador não fez traduções.",
"tsb-translations-source": "Fonte",
- "tsb-translations-user": "Traduções {{GENDER:$1|do utilizador|da utilizadora|do(a) utilizador(a)}}",
+ "tsb-translations-user": "Traduções {{GENDER:$1|do utilizador|da utilizadora}}",
"tsb-translations-current": "Traduções existentes",
"tsb-delete-userpage-summary": "A eliminar a página de utilizador de um utilizador da área de teste de tradutores",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Utilizador rejeitado|Utilizadores rejeitados}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Utilizador aceitado|Utilizadores aceitados}}",
"translationstash": "Bem-vindo(a)",
"translate-translationstash-welcome": "{{GENDER:$1|Bem-vindo $1, é um novo tradutor|Bem-vinda $1, é uma nova tradutora}}",
"translate-translationstash-welcome-note": "Familiarize-se com as ferramentas de tradução. Traduza algumas mensagens o obtenha todos os privilégios de tradutor para participar nos seus projetos preferidos.",
@@ -47,6 +50,6 @@
"log-name-translatorsandbox": "Registo da área de teste de tradutores",
"log-description-translatorsandbox": "Um registo das operações sobre utilizadores da área de teste de tradutores",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promoveu}} $3 a {{GENDER:$4|tradutor|tradutora}}",
- "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rejeitou}} o pedido de \"$3\" para tornar-se tradutor",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rejeitou}} o pedido de \"$3\" para se tornar tradutor",
"logentry-newusers-tsbpromoted": "A conta $3 foi {{GENDER:$2|criada}} por promoção da área de teste"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/qqq.json b/www/wiki/extensions/Translate/i18n/sandbox/qqq.json
index def19265..44841bec 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/qqq.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/qqq.json
@@ -39,6 +39,8 @@
"tsb-translations-user": "Table header label for user translations in [[Special:TranslateSandbox]].\n\nParameters:\n* $1 - user, can be used for GENDER",
"tsb-translations-current": "Table header label for existing translations in [[Special:TranslateSandbox]].",
"tsb-delete-userpage-summary": "Edit summary for deleting the user page of a sandboxed user.",
+ "tsb-reject-confirmation": "Bubble notification confirming user(s) has been rejected",
+ "tsb-accept-confirmation": "Bubble notification confirming user(s) has been accepted",
"translationstash": "Page title for [[Special:TranslationStash]].\n{{Identical|Welcome}}",
"translate-translationstash-welcome": "Title text shown for the [[Special:TranslationStash]]. Parameters:\n* $1 - user name of the new translator",
"translate-translationstash-welcome-note": "Title note for the [[Special:TranslationStash]].",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/qu.json b/www/wiki/extensions/Translate/i18n/sandbox/qu.json
new file mode 100644
index 00000000..089969d1
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/qu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "translate-translationstash-initialtranslation": "Qampa ñawpaq t'ikrayniyki"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ro.json b/www/wiki/extensions/Translate/i18n/sandbox/ro.json
index 89ba9263..faecf9ee 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/ro.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ro.json
@@ -1,10 +1,11 @@
{
"@metadata": {
"authors": [
- "Minisarm"
+ "Minisarm",
+ "Strainu"
]
},
- "managetranslatorsandbox": "Administrare cutie cu nisip traducător",
+ "managetranslatorsandbox": "Administrați pagina de teste a traducătorului",
"tsb-filter-pending": "Cereri în așteptare",
"tsb-reminder-title-generic": "Finalizați-vă propria prezentare pentru a deveni un traducător",
"tsb-all-languages-button-label": "Toate limbile",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ru.json b/www/wiki/extensions/Translate/i18n/sandbox/ru.json
index 0688100c..426ad472 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/ru.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ru.json
@@ -2,7 +2,11 @@
"@metadata": {
"authors": [
"Kaganer",
- "Okras"
+ "Okras",
+ "Redredsonia",
+ "Ole Yves",
+ "Stjn",
+ "Vlad5250"
]
},
"managetranslatorsandbox": "Управление песочницей переводчика",
@@ -33,6 +37,8 @@
"tsb-translations-user": "Переводы {{GENDER:$1|пользователя}}",
"tsb-translations-current": "Существующие переводы",
"tsb-delete-userpage-summary": "Удаление страницы участника, относящейся к участнику из песочницы",
+ "tsb-reject-confirmation": "Отклонено: $1 участник{{PLURAL:$1||а|ов}}",
+ "tsb-accept-confirmation": "Принято: $1 участник{{PLURAL:$1||а|ов}}",
"translationstash": "Добро пожаловать",
"translate-translationstash-welcome": "Добро пожаловать, {{GENDER:$1|$1}}, теперь вы новый переводчик",
"translate-translationstash-welcome-note": "Ознакомьтесь с инструментами перевода. Переведите несколько сообщений и получите полные права переводчика, чтобы принять участие в понравившемся проекте.",
@@ -42,10 +48,10 @@
"tsb-limit-reached-title": "Спасибо за ваши переводы",
"tsb-limit-reached-body": "Вы достигли предела переводов для новых переводчиков.\nНаша команда проверит и обновит вашу учётную запись в ближайшее время.\nПосле этого вы сможете переводить без ограничений.",
"tsb-no-requests-from-new-users": "Нет запросов от новых участников",
- "tsb-create-user-page": "Создал простую страницу участника",
- "log-name-translatorsandbox": "Песочница для переводов",
+ "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/www/wiki/extensions/Translate/i18n/sandbox/sah.json b/www/wiki/extensions/Translate/i18n/sandbox/sah.json
new file mode 100644
index 00000000..22c0ed51
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/sah.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Туллук"
+ ]
+ },
+ "tsb-email-promoted-body": "Үтүө күнүнэн, {{GENDER:$1|$1}}\nЭҕэрдэлиибин! Мин эн {{SITENAME}}ка оҥорбут тылбаастаргын бэрэбиэркэлээтим, мантан ыла эйиэхэ тылбаасчыт толору бырааба бэриллэр.\n\nмантан ыла күн аайы тылбаастыырга, {{SITENAME}} сайтка көс\n$2\n Нөрүн нөргүй, эн кылаатын иһин махталбын тириэрдэбин\n{{GENDER:$3|$3}},\n{{SITENAME}} үлэһит"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/sd.json b/www/wiki/extensions/Translate/i18n/sandbox/sd.json
new file mode 100644
index 00000000..88b07423
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/sd.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mehtab ahmed"
+ ]
+ },
+ "tsb-filter-pending": "رڪيل درخواستون",
+ "tsb-reminder-title-generic": "ترجميڪار ٿيڻ لاءِ پنھنجو تعارف مڪمل ڪريو",
+ "tsb-email-promoted-subject": "توھان ھاڻي {{SITENAME}} تي ترجميڪار آھيو",
+ "tsb-request-count": "$1 {{PLURAL:$1|درخواست|درخواستون}}",
+ "tsb-all-languages-button-label": "سڀ ٻوليون",
+ "tsb-search-requests": "درخواستون ڳوليو",
+ "tsb-accept-button-label": "قبوليو",
+ "tsb-reject-button-label": "رد ڪريو",
+ "tsb-selected-count": "{{PLURAL:$1|$1 رڪن چونڊيل}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|پراڻي درخواست|پراڻيون درخواستون}}",
+ "tsb-accept-all-button-label": "سڀ قبوليو",
+ "tsb-reject-all-button-label": "سڀ رد ڪريو",
+ "tsb-user-posted-a-comment": "ترجميڪار نہ آھيو",
+ "tsb-didnt-make-any-translations": "ھن رڪن ڪي بہ ترجما نہ ڪيا.",
+ "tsb-translations-source": "ذريعو",
+ "tsb-translations-user": "{{GENDER:$1|رڪن}} جا ترجما",
+ "tsb-translations-current": "موجود ترجما",
+ "translationstash": "ڀليڪار",
+ "translate-translationstash-welcome": "ڀليڪار {{GENDER:$1|$1}} توھان نوان ترجميڪار آھيو",
+ "translate-translationstash-initialtranslation": "توھان جاشروعاتي ترجما",
+ "translate-translationstash-translations": "$1 مڪمل ڪيل {{PLURAL:$1|ترجمو|ترجما}}",
+ "translate-translationstash-skip-button-label": "ھڪ ٻيو آزمايو",
+ "tsb-limit-reached-title": "توھان جي ترجمن لاءِ مھرباني",
+ "tsb-no-requests-from-new-users": "نون رڪنن مان ڪي بہ درخواستون نہ آھن",
+ "tsb-create-user-page": "بنيادي واپرائيندڙ صفحو سرجيو",
+ "log-name-translatorsandbox": "ترجمي جي مشق پٽيءَ جو لاگ",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|ترقي ڏن}} $3 ڏانھن {{GENDER:$4|ترجميڪار}}",
+ "logentry-newusers-tsbpromoted": "رڪن کاتو $3 {{GENDER:$2|تخليق ڪيو}} ويو مشقي تختي جي ترقيءَ سان"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/sk.json b/www/wiki/extensions/Translate/i18n/sandbox/sk.json
new file mode 100644
index 00000000..257037bd
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/sk.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "LacoR",
+ "Lexected"
+ ]
+ },
+ "tsb-reject-confirmation": "{{PLURAL:$1|User|Users}} úspešne zamietnutý",
+ "tsb-accept-confirmation": "{{PLURAL:$1|User|Users}} úspešne prijatý",
+ "tsb-limit-reached-title": "Ďakujeme za vaše preklady",
+ "log-name-translatorsandbox": "Záznam z pieskoviska prekladov"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/skr-arab.json b/www/wiki/extensions/Translate/i18n/sandbox/skr-arab.json
new file mode 100644
index 00000000..f66aa7b2
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/skr-arab.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saraiki"
+ ]
+ },
+ "tsb-all-languages-button-label": "ساریاں زباناں",
+ "tsb-accept-button-label": "منظور",
+ "translationstash": "ست بسم اللہ"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/sr-ec.json b/www/wiki/extensions/Translate/i18n/sandbox/sr-ec.json
index 1949c3a2..4d85284e 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/sr-ec.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/sr-ec.json
@@ -1,9 +1,19 @@
{
"@metadata": {
"authors": [
- "Milicevic01"
+ "Milicevic01",
+ "Obsuser",
+ "BadDog"
]
},
+ "tsb-all-languages-button-label": "Сви језици",
+ "tsb-accept-button-label": "Прихвати",
+ "tsb-reject-button-label": "Одбиј",
"tsb-accept-all-button-label": "Прихвати све",
- "tsb-reject-all-button-label": "Одбији све"
+ "tsb-reject-all-button-label": "Одбији све",
+ "tsb-translations-source": "Извор",
+ "tsb-create-user-page": "Направљена основна корисничка страница",
+ "log-name-translatorsandbox": "Дневник превода у песку",
+ "logentry-translatorsandbox-promoted": "$1 је {{GENDER:$2|унапредио|унапредила}} $3 у {{GENDER:$4|преводиоца}}",
+ "logentry-translatorsandbox-rejected": "$1 је {{GENDER:$2|одбио|одбила}} захтев корисника/це „$3” да постане преводилац"
}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/sr-el.json b/www/wiki/extensions/Translate/i18n/sandbox/sr-el.json
new file mode 100644
index 00000000..b618f68b
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/sr-el.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Zoranzoki21"
+ ]
+ },
+ "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/www/wiki/extensions/Translate/i18n/sandbox/sv.json b/www/wiki/extensions/Translate/i18n/sandbox/sv.json
index 4fb0b676..878e9a5e 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/sv.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/sv.json
@@ -34,6 +34,8 @@
"tsb-translations-user": "{{GENDER:$1|Användar}}översättningar",
"tsb-translations-current": "Befintliga översättningar",
"tsb-delete-userpage-summary": "Tar bort användarsidan för en sandlådeanvändare",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Användare nekad|Användare nekade}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Användare accepterad|Användare accepterade}}",
"translationstash": "Välkommen",
"translate-translationstash-welcome": "Välkommen {{GENDER:$1|$1}}, du är en ny översättare",
"translate-translationstash-welcome-note": "Bekanta dig med översättningsverktygen. Översätt några meddelanden och få fullständiga översättningsrättigheter för att delta i dina favoritprojekt.",
@@ -43,8 +45,8 @@
"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",
- "log-name-translatorsandbox": "Översättningssandlåda",
+ "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}}",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|avvisade}} begäran från \"$3\" att bli en översättare",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/ta.json b/www/wiki/extensions/Translate/i18n/sandbox/ta.json
new file mode 100644
index 00000000..c035e286
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/ta.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rakeshonwiki"
+ ]
+ },
+ "tsb-email-promoted-body": "வணக்கம் {{GENDER:$1|$1}},\n\nவாழ்த்துக்கள் ! நான் உங்களின் மொழிபெயப்புகளை {{SITENAME}} இல் ஆய்வு செய்தேன். இதன் மூலம் உங்களுக்கான மொழிபெயர்ப்பு உரிமத்தை வழங்குகிறேன்.\n\n{{SITENAME}} க்கு வந்து உங்களின் மொழிபெயர்ப்பை இன்றும் , என்றும் தொடருங்கள்:\n$2\n\nநல்வரவு, உங்களின் பங்களிப்ப்பிற்கு மிக்க நன்றி!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} பணியாள்"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/tcy.json b/www/wiki/extensions/Translate/i18n/sandbox/tcy.json
new file mode 100644
index 00000000..b347c08f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/tcy.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vishwanatha Badikana",
+ "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}} ಸಿಬಂದಿ",
+ "tsb-all-languages-button-label": "ಮಾಂತಾ ಬಾಸೆಲೆಡ್",
+ "tsb-search-requests": "ನಾಡ್‍ಪತ್ತ್‌ನೆದ ಪಲಿತಾಂಸೊಲು",
+ "tsb-accept-button-label": "ಒತ್ತೋನಿ",
+ "tsb-reject-button-label": "ತಿರಸ್ಕಾರ ಮಲ್ಪುಲೆ",
+ "tsb-accept-confirmation": "{{PLURAL:$1|User|ಸದಸ್ಯೆರ್}} ಒಪ್ಪಿಯೇರ್",
+ "translationstash": "ಸೊಲ್ಮೆಲೋ",
+ "translate-translationstash-skip-button-label": "ನನೊಂಜಿ ಪ್ರಯತ್ನ ಮಾಂಪಿ",
+ "tsb-limit-reached-title": "ಈರೆನ ಅನುವಾದಾಗ್ ಉಡಲ್ ದಿಂಜಿ ಸೊಲ್ಮೆಲೋ",
+ "tsb-create-user-page": "ಸರಳ ಬಳಕೆದಾರೆ ಪುಟ ರಚಿಸಾಂಡ್"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/tg-cyrl.json b/www/wiki/extensions/Translate/i18n/sandbox/tg-cyrl.json
new file mode 100644
index 00000000..771e6314
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/sandbox/tg-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ToJack"
+ ]
+ },
+ "tsb-create-user-page": "Саҳифаи оддии корбар сохта шуд"
+}
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/tr.json b/www/wiki/extensions/Translate/i18n/sandbox/tr.json
new file mode 100644
index 00000000..571a3869
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/i18n/sandbox/uk.json b/www/wiki/extensions/Translate/i18n/sandbox/uk.json
index 152797f3..6df2e9f5 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/uk.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/uk.json
@@ -4,7 +4,8 @@
"Andriykopanytsia",
"Base",
"Ата",
- "Piramidion"
+ "Piramidion",
+ "Vlad5250"
]
},
"managetranslatorsandbox": "Керування грамайданчиком перекладачів",
@@ -35,6 +36,8 @@
"tsb-translations-user": "Переклади {{GENDER:$1|користувача|користувачки}}",
"tsb-translations-current": "Існуючі переклади",
"tsb-delete-userpage-summary": "Видалення сторінки користувача з користувача пісочниці",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Користувача|Користувачів}} відхилено",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Користувача|Користувачів}} прийнято",
"translationstash": "Ласкаво просимо",
"translate-translationstash-welcome": "Вітаємо {{GENDER:$1|$1}}, ви - {{GENDER:$1|новий перекладач|нова перекладачка}}",
"translate-translationstash-welcome-note": "Ознайомитися з інструментами перекладу. Перекладіть деякі повідомлення і отримайте повні права перекладача для участі у ваших улюблених проектах.",
@@ -44,8 +47,8 @@
"tsb-limit-reached-title": "Спасибі за ваші переклади",
"tsb-limit-reached-body": "Вами досягнута межа перекладу для нових перекладачів.\nНаша команда невдовзі перевірить і оновить ваш обліковий запис.\nПотім зможете перекладати без обмежень.",
"tsb-no-requests-from-new-users": "Немає запитів від нових користувачів",
- "tsb-create-user-page": "Створити основну сторінку користувача",
- "log-name-translatorsandbox": "Пісочниця перекладу",
+ "tsb-create-user-page": "Створено основну сторінку користувача",
+ "log-name-translatorsandbox": "Журнал пісочниці перекладу",
"log-description-translatorsandbox": "Журнал дій користувачів у пісочниці перекладу",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|підвищив|підвищила}} $3 до {{GENDER:$4|перекладача|перекладачки}}",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|відхилив|відхилила}} запит від \"$3\" стати перекладачем",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/vi.json b/www/wiki/extensions/Translate/i18n/sandbox/vi.json
index 19829f67..9b3c9bc7 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/vi.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/vi.json
@@ -32,6 +32,8 @@
"tsb-translations-user": "Bản dịch của {{GENDER:$1}}người dùng",
"tsb-translations-current": "Bản dịch hiện có",
"tsb-delete-userpage-summary": "Đã xóa trang cá nhân của người dùng chỗ thử biên dịch",
+ "tsb-reject-confirmation": "Đã từ chối {{PLURAL:$1|người dùng|những người dùng}}",
+ "tsb-accept-confirmation": "Đã chấp nhận {{PLURAL:$1|người dùng|những người dùng}}",
"translationstash": "Hoan nghênh",
"translate-translationstash-welcome": "Chào mừng {{GENDER:$1}}$1 đã trở thành biên dịch viên mới",
"translate-translationstash-welcome-note": "Hãy quen thuộc với các công cụ biên dịch. Hãy dịch một số thông điệp và giành được quyền biên dịch viên đầy đủ để tham gia các dự án ưa thích của bạn.",
@@ -42,7 +44,7 @@
"tsb-limit-reached-body": "Bạn đã đạt đến giới hạn bản dịch cho biên dịch viên mới.\nChúng tôi sẽ kiểm tra và nâng cấp tài khoản của bạn không lâu.\nSau đó bạn sẽ có thể biên dịch thoải mái không có giới hạn.",
"tsb-no-requests-from-new-users": "Không có yêu cầu từ người dùng mới",
"tsb-create-user-page": "Đã tạo trang cá nhân cơ bản",
- "log-name-translatorsandbox": "Chỗ thử biên dịch",
+ "log-name-translatorsandbox": "Nhật trình chỗ thử biên dịch",
"log-description-translatorsandbox": "Các tác vụ có liên quan đến người dùng chỗ thử biên dịch",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2}}đã phong cấp $3 trở thành {{GENDER:$4}}biên dịch viên",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2}}đã từ chối lời yêu cầu của “$3” để trở thành biên dịch viên",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/zh-hans.json b/www/wiki/extensions/Translate/i18n/sandbox/zh-hans.json
index 258ac019..423cc0f2 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/zh-hans.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/zh-hans.json
@@ -6,18 +6,19 @@
"Qiyue2001",
"Shizhao",
"Xiaomingyan",
- "Yfdyh000"
+ "Yfdyh000",
+ "A Chinese Wikipedian"
]
},
"managetranslatorsandbox": "管理译者沙盒",
"tsb-filter-pending": "等待的请求",
- "tsb-reminder-title-generic": "填写你的自我介绍,成为一名译者",
- "tsb-reminder-content-generic": "你好 $1,\n\n感谢你注册{{SITENAME}}。\n\n如果您完成你的测试翻译,我们的管理员将尽快授予您完整的翻译访问权。\n\n来这里做些翻译吧:\n$2\n\n$3,\n{{SITENAME}}员工",
+ "tsb-reminder-title-generic": "填写您的自我介绍,成为一名译者",
+ "tsb-reminder-content-generic": "您好 $1,\n\n感谢您注册{{SITENAME}}。\n\n如果您完成您的测试翻译,我们的管理员将尽快授予您完整的翻译访问权。\n\n来这里做些翻译吧:\n$2\n\n$3,\n{{SITENAME}}员工",
"tsb-reminder-sending": "正在发送提醒...",
"tsb-reminder-sent": "{{PLURAL:$1|已发送$1份提醒。时间:$2。|已发送$1份提醒。最近一次时间:$2。}}",
"tsb-reminder-sent-new": "发送提醒",
"tsb-reminder-failed": "发送提醒失败",
- "tsb-email-promoted-subject": "你现在是一名{{SITENAME}}的译者了",
+ "tsb-email-promoted-subject": "您现在是一名{{SITENAME}}的译者了",
"tsb-email-promoted-body": "嗨,{{GENDER:$1|$1}}:\n\n祝贺您!我检查了您在{{SITENAME}}的试验翻译,决定授予您完整的译者权限。\n\n现在以及今后的每一天都来{{SITENAME}}继续翻译吧:\n$2\n\n我们欢迎您加入译者队伍,感谢您的贡献!\n\n{{GENDER:$3|$3}},\n{{SITENAME}}工作人员",
"tsb-email-rejected-subject": "您在{{SITENAME}}的译者请求被拒绝",
"tsb-email-rejected-body": "嗨,{{GENDER:$1|$1}}:\n\n感谢您在{{SITENAME}}申请成为译者。但我不得不遗憾地通知您,我拒绝了您的申请,因为您的的译文质量不符合要求。\n\n如果您认为您的申请是被错误地拒绝了,请尝试在{{SITENAME}}重新申请成为译者。您可以在这里登记:\n$2\n\n{{GENDER:$3|$3}},\n{{SITENAME}}工作人员",
@@ -27,7 +28,7 @@
"tsb-accept-button-label": "接受",
"tsb-reject-button-label": "拒绝",
"tsb-selected-count": "{{PLURAL:$1|$1位已选定用户}}",
- "tsb-older-requests": "$1个旧有申请",
+ "tsb-older-requests": "$1个旧有{{PLURAL:$1|申请}}",
"tsb-accept-all-button-label": "接受所有",
"tsb-reject-all-button-label": "拒绝所有",
"tsb-user-posted-a-comment": "不是一位译者",
@@ -37,17 +38,19 @@
"tsb-translations-user": "{{GENDER:$1|用户}}翻译",
"tsb-translations-current": "现有翻译",
"tsb-delete-userpage-summary": "删除沙盒用户的用户页面",
+ "tsb-reject-confirmation": "{{PLURAL:$1|用户}}已被拒绝",
+ "tsb-accept-confirmation": "{{PLURAL:$1|用户}}已被接受",
"translationstash": "欢迎",
"translate-translationstash-welcome": "欢迎您{{GENDER:$1|$1}},您已成为新的译者",
"translate-translationstash-welcome-note": "逐渐熟悉翻译工具。翻译一些信息,获得完整的译者权限去参与你喜欢的项目。",
- "translate-translationstash-initialtranslation": "你的初始翻译",
+ "translate-translationstash-initialtranslation": "您的初始翻译",
"translate-translationstash-translations": "$1完成了翻译",
"translate-translationstash-skip-button-label": "尝试其他",
"tsb-limit-reached-title": "感谢您的翻译",
"tsb-limit-reached-body": "您已达到新进译者的翻译限制。\n我们的团队将尽快核实和升级您的账户。\n那时您就可以无限制的参与翻译了。",
"tsb-no-requests-from-new-users": "没有新用户请求",
- "tsb-create-user-page": "创建基础用户页",
- "log-name-translatorsandbox": "翻译沙盒",
+ "tsb-create-user-page": "创建了基础用户页",
+ "log-name-translatorsandbox": "翻译沙盒日志",
"log-description-translatorsandbox": "翻译沙盒用户的操作日志",
"logentry-translatorsandbox-promoted": "$1将$3{{GENDER:$2|提拔}}为{{GENDER:$4|译者}}",
"logentry-translatorsandbox-rejected": "$1{{GENDER:$2|拒绝了}}来自“$3”的成为译者请求",
diff --git a/www/wiki/extensions/Translate/i18n/sandbox/zh-hant.json b/www/wiki/extensions/Translate/i18n/sandbox/zh-hant.json
index 19c79502..9794677d 100644
--- a/www/wiki/extensions/Translate/i18n/sandbox/zh-hant.json
+++ b/www/wiki/extensions/Translate/i18n/sandbox/zh-hant.json
@@ -4,7 +4,10 @@
"Simon Shek",
"Liuxinyu970226",
"Cwlin0416",
- "LNDDYL"
+ "LNDDYL",
+ "和平奮鬥救地球",
+ "Kly",
+ "Sean"
]
},
"managetranslatorsandbox": "管理翻譯人員沙盒",
@@ -35,17 +38,19 @@
"tsb-translations-user": "{{GENDER:$1|使用者}}翻譯",
"tsb-translations-current": "現有翻譯",
"tsb-delete-userpage-summary": "刪除沙盒使用者中的使用者頁面",
+ "tsb-reject-confirmation": "{{PLURAL:$1|使用者|使用者}}已拒絕",
+ "tsb-accept-confirmation": "{{PLURAL:$1|使用者|使用者}}已接受",
"translationstash": "歡迎光臨",
"translate-translationstash-welcome": "歡迎光臨 {{GENDER:$1|$1}},您是一名新進的翻譯人員",
"translate-translationstash-welcome-note": "為了要熟悉翻譯工具,請先試著翻譯部份訊息,再取得完整的翻譯人員權限以加入您想翻譯的專案。",
"translate-translationstash-initialtranslation": "您的第一次翻譯",
- "translate-translationstash-translations": "$1 人已完成翻譯",
+ "translate-translationstash-translations": "已完成 $1 筆翻譯",
"translate-translationstash-skip-button-label": "嘗試其他",
"tsb-limit-reached-title": "感謝您的翻譯",
- "tsb-limit-reached-body": "您的翻譯已超過新進翻譯人員的限制。\n我們的團隊會儘快確認您的翻譯資格並升級您的帳號,\n屆時您便可不受限制的翻譯。",
+ "tsb-limit-reached-body": "您的翻譯已達到新進翻譯人員的限制。\n我們的團隊會儘快審核並升級您的帳號,\n屆時您便可不受限制的翻譯。",
"tsb-no-requests-from-new-users": "沒有來自新使用者的請求",
- "tsb-create-user-page": "建立基本使用者頁面",
- "log-name-translatorsandbox": "翻譯沙盒",
+ "tsb-create-user-page": "已建立的基本使用者頁面",
+ "log-name-translatorsandbox": "翻譯沙盒日誌",
"log-description-translatorsandbox": "翻譯沙盒使用者的工作日誌",
"logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|授權}} $3 成為 {{GENDER:$4|翻譯人員}}",
"logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|拒絕}} 來自 \"$3\" 申請成為翻譯人員的請求",
diff --git a/www/wiki/extensions/Translate/i18n/search/af.json b/www/wiki/extensions/Translate/i18n/search/af.json
new file mode 100644
index 00000000..53cdd60e
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/af.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fwolff"
+ ]
+ },
+ "tux-sst-facet-language": "Tale"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/ais.json b/www/wiki/extensions/Translate/i18n/search/ais.json
new file mode 100644
index 00000000..b41c8bdc
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/ais.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bunukwiki",
+ "Tokoabibi"
+ ]
+ },
+ "tux-sst-search": "kilim",
+ "tux-sst-next": "zikuzan a cacay ›",
+ "tux-sst-default": "mibelih"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/ar.json b/www/wiki/extensions/Translate/i18n/search/ar.json
index 8a02354d..b2347aa1 100644
--- a/www/wiki/extensions/Translate/i18n/search/ar.json
+++ b/www/wiki/extensions/Translate/i18n/search/ar.json
@@ -1,7 +1,9 @@
{
"@metadata": {
"authors": [
- "محمد أحمد عبد الفتاح"
+ "محمد أحمد عبد الفتاح",
+ "Meno25",
+ "ديفيد"
]
},
"searchtranslations": "ابحث في الترجمات",
@@ -9,11 +11,13 @@
"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": "الترجمات",
@@ -22,6 +26,9 @@
"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": "مراعاة حالة الأحرف"
+ "tux-sst-case-sensitive": "مراعاة حالة الأحرف",
+ "tux-sst-error-offset": "لا يمكن عرض المزيد من نتائج البحث؛ يُرجَى تضييق بحثك.",
+ "tux-sst-error-language": "لا يمكن استخدام هذه اللغة مع هذا النوع من البحث."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/ast.json b/www/wiki/extensions/Translate/i18n/search/ast.json
index 553bdabd..5a8cd5c9 100644
--- a/www/wiki/extensions/Translate/i18n/search/ast.json
+++ b/www/wiki/extensions/Translate/i18n/search/ast.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|Alcontrose un resultáu|Alcontráronse $1 resultaos}}",
"tux-sst-facet-language": "Llingües",
"tux-sst-facet-group": "Grupos de mensaxes",
- "tux-sst-facet-orphan": "(güérfanos)",
"tux-sst-nosolr-title": "La gueta nun ta disponible",
"tux-sst-nosolr-body": "Esta wiki nun tien un serviciu de gueta de traducciones.",
"tux-sst-solr-offline-title": "La gueta nun ta disponible",
diff --git a/www/wiki/extensions/Translate/i18n/search/atj.json b/www/wiki/extensions/Translate/i18n/search/atj.json
new file mode 100644
index 00000000..fd45c786
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/atj.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Benoit Rochon"
+ ]
+ },
+ "tux-sst-search": "Nantona"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/az.json b/www/wiki/extensions/Translate/i18n/search/az.json
index eda2dae6..4e07de78 100644
--- a/www/wiki/extensions/Translate/i18n/search/az.json
+++ b/www/wiki/extensions/Translate/i18n/search/az.json
@@ -11,7 +11,6 @@
"tux-sst-count": "{{PLURAL:$1|Bir nəticə tapıldı|$1 nəticə tapıldı}}",
"tux-sst-facet-language": "Dillər",
"tux-sst-facet-group": "Mesaj qrupları",
- "tux-sst-facet-orphan": "(yetim)",
"tux-sst-nosolr-title": "Axtarış mümkün deyil",
"tux-sst-nosolr-body": "Bu viki üçün tərcümə axtarış sistemi yoxdur."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/be-tarask.json b/www/wiki/extensions/Translate/i18n/search/be-tarask.json
index a5e96016..5a27642e 100644
--- a/www/wiki/extensions/Translate/i18n/search/be-tarask.json
+++ b/www/wiki/extensions/Translate/i18n/search/be-tarask.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|Знойдзены $1 вынік|Знойдзена $1 вынікі|Знойдзена $1 вынікаў}}",
"tux-sst-facet-language": "Мовы",
"tux-sst-facet-group": "Групы паведамленьняў",
- "tux-sst-facet-orphan": "(сіраціна)",
"tux-sst-nosolr-title": "Пошук недаступны",
"tux-sst-nosolr-body": "Гэтая вікі ня мае службы пошуку перакладаў.",
"tux-sst-solr-offline-title": "Пошук недаступны",
diff --git a/www/wiki/extensions/Translate/i18n/search/be.json b/www/wiki/extensions/Translate/i18n/search/be.json
new file mode 100644
index 00000000..334cc008
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/be.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Artsiom91"
+ ]
+ },
+ "tux-sst-default": "Пераклады"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/bg.json b/www/wiki/extensions/Translate/i18n/search/bg.json
index 327207e4..2e18f39b 100644
--- a/www/wiki/extensions/Translate/i18n/search/bg.json
+++ b/www/wiki/extensions/Translate/i18n/search/bg.json
@@ -2,14 +2,25 @@
"@metadata": {
"authors": [
"DCLXVI",
- "StanProg"
+ "StanProg",
+ "Vlad5250"
]
},
"searchtranslations": "Търсене на преводи",
+ "tux-sst-edit": "Редактиране на превода",
"tux-sst-search": "Търсене",
"tux-sst-search-ph": "Търсене на преводи",
"tux-sst-facet-language": "Езици",
+ "tux-sst-facet-group": "Групи съобщения",
"tux-sst-solr-offline-body": "Услугата за търсене е временно недостъпна.",
"tux-sst-next": "Следващи ›",
- "tux-sst-prev": "‹ Предишни"
+ "tux-sst-prev": "‹ Предишни",
+ "tux-sst-default": "Преводи",
+ "tux-sst-translated": "Преводи от $1",
+ "tux-sst-untranslated": "Без превод от $1",
+ "tux-sst-outdated": "Неактуални преводи от $1",
+ "tux-sst-ellipsis-outdated": "Неактуални преводи",
+ "tux-sst-case-sensitive": "Чувствително към регистъра на буквите",
+ "tux-sst-error-offset": "Не мога да показвам повече резултати. Уточнете търсенето.",
+ "tux-sst-error-language": "Този език не може да се използва за такъв вид търсене."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/bn.json b/www/wiki/extensions/Translate/i18n/search/bn.json
index 9425a4bb..97d5b0ec 100644
--- a/www/wiki/extensions/Translate/i18n/search/bn.json
+++ b/www/wiki/extensions/Translate/i18n/search/bn.json
@@ -3,7 +3,8 @@
"authors": [
"Aftab1995",
"Nasir8891",
- "Aftabuzzaman"
+ "Aftabuzzaman",
+ "আফতাবুজ্জামান"
]
},
"searchtranslations": "অনুবাদ অনুসন্ধান",
@@ -14,7 +15,6 @@
"tux-sst-count": "{{PLURAL:$1|একটি ফলাফল পাওয়া গিয়েছে|$1টি ফলাফল পাওয়া গিয়েছে}}",
"tux-sst-facet-language": "ভাষাসমূহ",
"tux-sst-facet-group": "বার্তা সংকলন",
- "tux-sst-facet-orphan": "(পিতৃহীন)",
"tux-sst-nosolr-title": "অনুসন্ধান সম্ভব নয়",
"tux-sst-nosolr-body": "এই উইকিতে অনুবাদ অনুসন্ধান সক্রিয় নেই।",
"tux-sst-solr-offline-title": "অনুসন্ধান সক্রিয় নেই",
diff --git a/www/wiki/extensions/Translate/i18n/search/br.json b/www/wiki/extensions/Translate/i18n/search/br.json
index 35aac5ef..f4d1f099 100644
--- a/www/wiki/extensions/Translate/i18n/search/br.json
+++ b/www/wiki/extensions/Translate/i18n/search/br.json
@@ -7,6 +7,5 @@
"tux-sst-search": "Klask",
"tux-sst-search-ph": "Klask troidigezhioù",
"tux-sst-count": "{{PLURAL:$1|Un disoc'h kavet|$1 disoc'h kavet}}",
- "tux-sst-facet-language": "Yezhoù",
- "tux-sst-facet-orphan": "(emzivad)"
+ "tux-sst-facet-language": "Yezhoù"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/bs.json b/www/wiki/extensions/Translate/i18n/search/bs.json
new file mode 100644
index 00000000..d76749d4
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/bs.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Srdjan m",
+ "Obsuser"
+ ]
+ },
+ "searchtranslations": "Pretraga prijevoda",
+ "tux-sst-edit": "Uredi prijevod",
+ "tux-sst-view-foreign": "Pogledaj na $1",
+ "tux-sst-search": "Pretraži",
+ "tux-sst-search-ph": "Pretraži prijevode",
+ "tux-sst-count": "{{PLURAL:$1|Pronađen jedan rezultat|Pronađena $1 rezultata|Pronađeno $1 rezultata}}",
+ "tux-sst-facet-language": "Jezici",
+ "tux-sst-facet-group": "Grupe poruka",
+ "tux-sst-nosolr-title": "Pretraga nije dostupna",
+ "tux-sst-nosolr-body": "Ovaj wiki nema uslugu za pretragu prijevoda.",
+ "tux-sst-solr-offline-title": "Pretraga nije dostupna",
+ "tux-sst-solr-offline-body": "Usluga za pretragu privremeno nije dostupna.",
+ "tux-sst-next": "Sljedeće ›",
+ "tux-sst-prev": "‹ Prethodno",
+ "tux-sst-default": "Prijevodi",
+ "tux-sst-translated": "Prijevodi s $1",
+ "tux-sst-untranslated": "Nema prijevoda s $1",
+ "tux-sst-outdated": "Zastarjeli prijevodi s $1",
+ "tux-sst-ellipsis-untranslated": "Nema prijevoda",
+ "tux-sst-ellipsis-outdated": "Zastarjeli prijevodi",
+ "tux-sst-link-all-match": "Zahtijevaj sve riječi.",
+ "tux-sst-match-message": "Prikazani su prijevodi koji odgovaraju bilo kojoj riječi iz pretrage. $1",
+ "tux-sst-case-sensitive": "Razlikuj velika i mala slova"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/ca.json b/www/wiki/extensions/Translate/i18n/search/ca.json
index ac3f29e3..dbf12da1 100644
--- a/www/wiki/extensions/Translate/i18n/search/ca.json
+++ b/www/wiki/extensions/Translate/i18n/search/ca.json
@@ -2,11 +2,13 @@
"@metadata": {
"authors": [
"Toniher",
- "Fitoschido"
+ "Fitoschido",
+ "Ssola"
]
},
"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}}",
@@ -16,12 +18,15 @@
"tux-sst-nosolr-body": "Aquest wiki no té un servei de cerca de les traduccions.",
"tux-sst-solr-offline-title": "Cerca no disponible",
"tux-sst-solr-offline-body": "El servei de cerca no està disponible temporalment.",
- "tux-sst-next": "Resultats següents",
- "tux-sst-prev": "Resultats anteriors",
+ "tux-sst-next": "Següents →",
+ "tux-sst-prev": "← Anteriors",
"tux-sst-default": "Traduccions",
"tux-sst-translated": "Traduccions de $1",
+ "tux-sst-untranslated": "Sense traducció de $1",
"tux-sst-outdated": "Traduccions desactualitzades de $1",
"tux-sst-ellipsis-untranslated": "Sense traducció",
"tux-sst-ellipsis-outdated": "Traduccions desactualitzades",
- "tux-sst-match-message": "Es mostren les traduccions que coincideixen amb qualssevol paraules de la cerca. $1"
+ "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/www/wiki/extensions/Translate/i18n/search/ce.json b/www/wiki/extensions/Translate/i18n/search/ce.json
index 58ef2143..b3ffbd51 100644
--- a/www/wiki/extensions/Translate/i18n/search/ce.json
+++ b/www/wiki/extensions/Translate/i18n/search/ce.json
@@ -6,13 +6,24 @@
},
"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-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-case-sensitive": "регистр лоруш"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/ckb.json b/www/wiki/extensions/Translate/i18n/search/ckb.json
new file mode 100644
index 00000000..61e9450f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/ckb.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sarchia",
+ "Lost Whispers",
+ "Épine"
+ ]
+ },
+ "tux-sst-search": "گەڕان",
+ "tux-sst-translated": "وەرگێڕانەکان لە $1ەوە",
+ "tux-sst-match-message": "ھەموو ئەو وەرگێڕانانە پیشان دەدرێت کە لەگەڵ وشەکانی بەکارھێندراون بۆ گەڕان دەگونجێت. $1"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/cs.json b/www/wiki/extensions/Translate/i18n/search/cs.json
index d7f48675..705f8afe 100644
--- a/www/wiki/extensions/Translate/i18n/search/cs.json
+++ b/www/wiki/extensions/Translate/i18n/search/cs.json
@@ -13,7 +13,6 @@
"tux-sst-count": "{{PLURAL:$1|Nalezen jeden výsledek|Nalezeny $1 výsledky|Nalezeno $1 výsledků}}",
"tux-sst-facet-language": "Jazyky",
"tux-sst-facet-group": "Skupiny zpráv",
- "tux-sst-facet-orphan": "(sirotek)",
"tux-sst-nosolr-title": "Hledání není dostupné",
"tux-sst-nosolr-body": "Tato wiki nedisponuje službou pro vyhledávání překladů.",
"tux-sst-solr-offline-title": "Hledání není dostupné",
diff --git a/www/wiki/extensions/Translate/i18n/search/da.json b/www/wiki/extensions/Translate/i18n/search/da.json
index 52b25dcd..50e15b10 100644
--- a/www/wiki/extensions/Translate/i18n/search/da.json
+++ b/www/wiki/extensions/Translate/i18n/search/da.json
@@ -1,21 +1,29 @@
{
"@metadata": {
"authors": [
- "Byrial"
+ "Byrial",
+ "Saederup92"
]
},
"searchtranslations": "Søg oversættelser",
"tux-sst-edit": "Redigér oversættelse",
+ "tux-sst-view-foreign": "Vis på $1",
"tux-sst-search": "Søg",
"tux-sst-search-ph": "Søg oversættelser",
"tux-sst-count": "{{PLURAL:$1|Ét resultat fundet|$1 resultater fundet}}",
"tux-sst-facet-language": "Sprog",
"tux-sst-facet-group": "Beskedgrupper",
- "tux-sst-facet-orphan": "(ingen)",
"tux-sst-nosolr-title": "Søgning er ikke tilgængelig",
"tux-sst-nosolr-body": "Denne wiki har ikke mulighed for oversættelsessøgning.",
"tux-sst-solr-offline-title": "Søgning er ikke tilgængelig",
"tux-sst-solr-offline-body": "Søgning er midlertidig utilgængelig.",
- "tux-sst-next": "Næste resultater",
- "tux-sst-prev": "Forrige resultater"
+ "tux-sst-next": "Næste ›",
+ "tux-sst-prev": "‹ Forrige",
+ "tux-sst-default": "Oversættelser",
+ "tux-sst-translated": "Oversættelser fra $1",
+ "tux-sst-untranslated": "Ingen oversættelser fra $1",
+ "tux-sst-outdated": "Forældede oversættelser fra $1",
+ "tux-sst-ellipsis-untranslated": "Ingen oversættelse",
+ "tux-sst-ellipsis-outdated": "Forældede oversættelser",
+ "tux-sst-link-all-match": "Kræv alle søgeord."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/de.json b/www/wiki/extensions/Translate/i18n/search/de.json
index bd68dc12..1a2d653b 100644
--- a/www/wiki/extensions/Translate/i18n/search/de.json
+++ b/www/wiki/extensions/Translate/i18n/search/de.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|Ein Ergebnis gefunden|$1 Ergebnisse gefunden}}",
"tux-sst-facet-language": "Sprachen",
"tux-sst-facet-group": "Nachrichtengruppen",
- "tux-sst-facet-orphan": "(verwaist)",
"tux-sst-nosolr-title": "Suche nicht verfügbar",
"tux-sst-nosolr-body": "Dieses Wiki hat keinen Übersetzungssuchservice.",
"tux-sst-solr-offline-title": "Die Suche ist nicht verfügbar",
@@ -27,5 +26,7 @@
"tux-sst-ellipsis-outdated": "Veraltete Übersetzungen",
"tux-sst-link-all-match": "Alle Suchwörter erforderlich machen.",
"tux-sst-match-message": "Es werden Übersetzungen angezeigt, die mit jedem Suchwort übereinstimmen. $1",
- "tux-sst-case-sensitive": "Groß-/Kleinschreibung"
+ "tux-sst-case-sensitive": "Groß-/Kleinschreibung",
+ "tux-sst-error-offset": "Es können keine weiteren Suchergebnisse angezeigt werden. Bitte schränke deine Suche ein.",
+ "tux-sst-error-language": "Diese Sprache kann nicht mit diesem Suchtyp verwendet werden."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/diq.json b/www/wiki/extensions/Translate/i18n/search/diq.json
index 44a6c39d..ee78e761 100644
--- a/www/wiki/extensions/Translate/i18n/search/diq.json
+++ b/www/wiki/extensions/Translate/i18n/search/diq.json
@@ -2,21 +2,36 @@
"@metadata": {
"authors": [
"Mirzali",
- "Marmase"
+ "Marmase",
+ "Kumkumuk",
+ "Gırd",
+ "Asmen",
+ "Orbot707"
]
},
- "searchtranslations": "Bı geyr açarnayışa",
- "tux-sst-edit": "Açarnayışi bıvurne",
+ "searchtranslations": "Şıma tadayışan (çarnayışan) bıgeyrê",
+ "tux-sst-edit": "Çarnayışi bıvırne",
+ "tux-sst-view-foreign": "$1 de bıvêne",
"tux-sst-search": "Cı geyre",
- "tux-sst-search-ph": "Bı geyr açarnayışa",
- "tux-sst-count": "{{PLURAL:$1|Jew netice vineya|$1 neticey vineyay|0=teba nêvineya}}",
+ "tux-sst-search-ph": "Şıma tadayışan (çarnayışan) bıgeyrê",
+ "tux-sst-count": "{{PLURAL:$1|Yew peyni vêniya|$1 peyniy vêniyay|0=teba nêvêniya}}",
"tux-sst-facet-language": "Zıwani",
"tux-sst-facet-group": "Gruba mesacan",
- "tux-sst-facet-orphan": "(seyqur)",
"tux-sst-nosolr-title": "Cı geyrayışo nêgurweyêno",
"tux-sst-nosolr-body": "Na wiki de xızmeta açarnayışi çıniya",
"tux-sst-solr-offline-title": "Cı geyrayışo nêgurweyêno",
"tux-sst-solr-offline-body": "Xızmeta cı geyrayışi ya enewke nêgurweyêna.",
- "tux-sst-next": "Neticeyo bahdoyên",
- "tux-sst-prev": "Neticeyê verêni"
+ "tux-sst-next": "Bahdoyên>",
+ "tux-sst-prev": "<Verêni",
+ "tux-sst-default": "Açarnayışi",
+ "tux-sst-translated": "$1 ra açarnayış",
+ "tux-sst-untranslated": "$1 ra nêaçarneya",
+ "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ê.",
+ "tux-sst-match-message": "Motena çarnayışanê ke pê qısanê cıgeyrayan kewnê tê. $1",
+ "tux-sst-case-sensitive": "Herfan rê hessas",
+ "tux-sst-error-offset": "Neticeyê asayeyê zêdêri çıniyê. Kerem ke, cıgeyrayışê xo teng ke.",
+ "tux-sst-error-language": "Tipê nê cıgeyrayışi be nê zıwani ra nêgureniyeno."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/dsb.json b/www/wiki/extensions/Translate/i18n/search/dsb.json
index befda732..d6b42a02 100644
--- a/www/wiki/extensions/Translate/i18n/search/dsb.json
+++ b/www/wiki/extensions/Translate/i18n/search/dsb.json
@@ -11,7 +11,6 @@
"tux-sst-count": "{{PLURAL:$1|Jaden wuslědk namakany|$1 wuslědka namakanej|$1 wuslědki namakane|$1 wuslědkow namakane}}",
"tux-sst-facet-language": "Rěcy",
"tux-sst-facet-group": "Zdźěleńske kupki",
- "tux-sst-facet-orphan": "(wósyrośone)",
"tux-sst-nosolr-title": "Pytanje njestoj k dispoziciji",
"tux-sst-nosolr-body": "Toś ten wiki njama słužbu za pytanje pśełožkow.",
"tux-sst-solr-offline-title": "Pytanje njestoj k dispoziciji",
diff --git a/www/wiki/extensions/Translate/i18n/search/el.json b/www/wiki/extensions/Translate/i18n/search/el.json
index 0f71a63c..81563ca6 100644
--- a/www/wiki/extensions/Translate/i18n/search/el.json
+++ b/www/wiki/extensions/Translate/i18n/search/el.json
@@ -13,7 +13,6 @@
"tux-sst-count": "{{PLURAL:$1|Βρέθηκε ένα αποτέλεσμα|Βρέθηκαν $1 αποτελέσματα}}",
"tux-sst-facet-language": "Γλώσσες",
"tux-sst-facet-group": "Ομάδες μηνυμάτων",
- "tux-sst-facet-orphan": "(ορφανά)",
"tux-sst-nosolr-title": "Αναζήτηση μη διαθέσιμη",
"tux-sst-nosolr-body": "Αυτό το wiki δεν έχει υπηρεσία αναζήτησης για μεταφράσεις.",
"tux-sst-solr-offline-title": "Αναζήτηση μη διαθέσιμη",
diff --git a/www/wiki/extensions/Translate/i18n/search/en.json b/www/wiki/extensions/Translate/i18n/search/en.json
index dc6eced1..8057a420 100644
--- a/www/wiki/extensions/Translate/i18n/search/en.json
+++ b/www/wiki/extensions/Translate/i18n/search/en.json
@@ -26,5 +26,7 @@
"tux-sst-ellipsis-outdated": "Outdated translations",
"tux-sst-link-all-match": "Require all search words.",
"tux-sst-match-message": "Showing translations which match any of the search words. $1",
- "tux-sst-case-sensitive": "Case sensitive"
+ "tux-sst-case-sensitive": "Case sensitive",
+ "tux-sst-error-offset": "No more search results can be shown. Please narrow your search.",
+ "tux-sst-error-language": "This language cannot be used with this type of search."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/eo.json b/www/wiki/extensions/Translate/i18n/search/eo.json
new file mode 100644
index 00000000..e3fa73b8
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/eo.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "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": "← 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/www/wiki/extensions/Translate/i18n/search/es.json b/www/wiki/extensions/Translate/i18n/search/es.json
index 386ea58e..c95afb32 100644
--- a/www/wiki/extensions/Translate/i18n/search/es.json
+++ b/www/wiki/extensions/Translate/i18n/search/es.json
@@ -18,8 +18,8 @@
"tux-sst-nosolr-body": "Este wiki no tiene un servicio de búsqueda de traducciones.",
"tux-sst-solr-offline-title": "Búsqueda no disponible",
"tux-sst-solr-offline-body": "El servicio de búsqueda no está disponible temporalmente.",
- "tux-sst-next": "Siguientes ›",
- "tux-sst-prev": "‹ Anteriores",
+ "tux-sst-next": "Siguientes →",
+ "tux-sst-prev": "← Anteriores",
"tux-sst-default": "Traducciones",
"tux-sst-translated": "Traducciones del $1",
"tux-sst-untranslated": "Sin traducción del $1",
diff --git a/www/wiki/extensions/Translate/i18n/search/et.json b/www/wiki/extensions/Translate/i18n/search/et.json
index 58e47e07..d85e22c5 100644
--- a/www/wiki/extensions/Translate/i18n/search/et.json
+++ b/www/wiki/extensions/Translate/i18n/search/et.json
@@ -11,11 +11,17 @@
"tux-sst-count": "{{PLURAL:$1|Üks tulemus leitud|$1 tulemust leitud}}",
"tux-sst-facet-language": "Keeled",
"tux-sst-facet-group": "Sõnumirühmad",
- "tux-sst-facet-orphan": "(orb)",
"tux-sst-nosolr-title": "Otsing pole saadaval",
"tux-sst-nosolr-body": "Sellel vikil pole tõlkeotsimisteenust.",
"tux-sst-solr-offline-title": "Otsing pole saadaval",
"tux-sst-solr-offline-body": "Otsimisteenus pole ajutiselt saadaval.",
"tux-sst-next": "Järgmised ›",
- "tux-sst-prev": "‹ Eelmised"
+ "tux-sst-prev": "‹ Eelmised",
+ "tux-sst-default": "Tõlked",
+ "tux-sst-translated": "Tõlgitud lähtekeelest \"$1\"",
+ "tux-sst-untranslated": "Tõlkimata lähtekeelest \"$1\"",
+ "tux-sst-ellipsis-outdated": "Iganenud tõlked",
+ "tux-sst-link-all-match": "Nõua kõiki otsisõnu.",
+ "tux-sst-match-message": "Näidatakse tõlkeid, mis vastavad vähemalt ühele otsisõnale. $1",
+ "tux-sst-case-sensitive": "Tõstutundlik"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/eu.json b/www/wiki/extensions/Translate/i18n/search/eu.json
index c59b173d..c0d18248 100644
--- a/www/wiki/extensions/Translate/i18n/search/eu.json
+++ b/www/wiki/extensions/Translate/i18n/search/eu.json
@@ -11,7 +11,7 @@
"tux-sst-search-ph": "Itzulpenak bilatu",
"tux-sst-count": "{{PLURAL:$1|Emaitza bat aurkitu da|$1 emaitza aurkitu dira}}",
"tux-sst-facet-language": "Hizkuntzak",
- "tux-sst-facet-orphan": "(umezurtza)",
+ "tux-sst-facet-group": "Mezu-taldeak",
"tux-sst-nosolr-title": "Bilaketa ez dago erabilgarri",
"tux-sst-solr-offline-title": "Bilaketa ez dago erabilgarri",
"tux-sst-solr-offline-body": "Une honetan bilaketa zerbitzua ez dago erabilgarri.",
diff --git a/www/wiki/extensions/Translate/i18n/search/fa.json b/www/wiki/extensions/Translate/i18n/search/fa.json
index bb6aef61..b6ca4854 100644
--- a/www/wiki/extensions/Translate/i18n/search/fa.json
+++ b/www/wiki/extensions/Translate/i18n/search/fa.json
@@ -14,7 +14,7 @@
"tux-sst-search-ph": "جستجوی ترجمه‌ها",
"tux-sst-count": "{{PLURAL:$1|0=هیچ نتیجه‌ای یافت نشد|یک نتیجه یافت شد|$1 نتیجه یافت شد}}",
"tux-sst-facet-language": "زبان‌ها",
- "tux-sst-facet-group": "گروه‌های پیام",
+ "tux-sst-facet-group": "گروه‌های پیغام",
"tux-sst-nosolr-title": "جستجوی ناموجود است",
"tux-sst-nosolr-body": "این ویکی خدمات جستجوی ترجمه ندارد.",
"tux-sst-solr-offline-title": "جستجوی ناموجود است",
@@ -23,7 +23,7 @@
"tux-sst-prev": "→ پیشین",
"tux-sst-default": "ترجمه‌ها",
"tux-sst-translated": "ترجمه‌ها از $1",
- "tux-sst-untranslated": "هیچ ترجمه‌ای از $1 موجود نیست",
+ "tux-sst-untranslated": "فاقد ترجمه از $1",
"tux-sst-outdated": "ترجمه‌های تاریخ گذشته از $1",
"tux-sst-ellipsis-untranslated": "هیچ ترجمه‌ای موجود نیست",
"tux-sst-ellipsis-outdated": "ترجمه‌های تاریخ گذشته",
diff --git a/www/wiki/extensions/Translate/i18n/search/fo.json b/www/wiki/extensions/Translate/i18n/search/fo.json
index fdee5a10..77e88615 100644
--- a/www/wiki/extensions/Translate/i18n/search/fo.json
+++ b/www/wiki/extensions/Translate/i18n/search/fo.json
@@ -11,7 +11,6 @@
"tux-sst-count": "{{PLURAL:$1|Eitt úrslit funnið|$1 úrslit funnin}}",
"tux-sst-facet-language": "Mál",
"tux-sst-facet-group": "Boðbólkar",
- "tux-sst-facet-orphan": "(foreldraleys)",
"tux-sst-nosolr-title": "Leiting ber ikki til",
"tux-sst-nosolr-body": "Henda wiki'in hevur ikki eina tænastu har til ber at leita eftir týðingum.",
"tux-sst-solr-offline-title": "Leitan ber ikki til",
diff --git a/www/wiki/extensions/Translate/i18n/search/fr.json b/www/wiki/extensions/Translate/i18n/search/fr.json
index 3e16c6a3..a4290c29 100644
--- a/www/wiki/extensions/Translate/i18n/search/fr.json
+++ b/www/wiki/extensions/Translate/i18n/search/fr.json
@@ -6,7 +6,10 @@
"TomT0m",
"Wladek92",
"Titip1995",
- "Bluenaranja"
+ "Bluenaranja",
+ "Verdy p",
+ "Pols12",
+ "Urhixidur"
]
},
"searchtranslations": "Recherche de traductions",
@@ -14,23 +17,24 @@
"tux-sst-view-foreign": "Voir sur $1",
"tux-sst-search": "Rechercher",
"tux-sst-search-ph": "Recherche de traductions",
- "tux-sst-count": "{{PLURAL:$1|Un résultat trouvé|$1 résultats trouvés}}",
+ "tux-sst-count": "{{PLURAL:$1|0=Aucun résultat trouvé|1=Un résultat trouvé|$1 résultats trouvés}}",
"tux-sst-facet-language": "Langues",
"tux-sst-facet-group": "Groupes de message",
- "tux-sst-facet-orphan": "(orphelin)",
"tux-sst-nosolr-title": "Recherche indisponible",
"tux-sst-nosolr-body": "Ce wiki n’a pas de service de recherche de traduction.",
"tux-sst-solr-offline-title": "Recherche indisponible",
"tux-sst-solr-offline-body": "Le service de recherche est temporairement indisponible.",
"tux-sst-next": "Suivant →",
- "tux-sst-prev": "< Précédent",
+ "tux-sst-prev": "← Précédent",
"tux-sst-default": "Traductions",
- "tux-sst-translated": "Traductions à partir de $1",
- "tux-sst-untranslated": "Pas de traduction à partir de $1",
+ "tux-sst-translated": "Déjà traduits à partir de $1",
+ "tux-sst-untranslated": "Pas encore traduits de $1",
"tux-sst-outdated": "Traductions périmées à partir de $1",
"tux-sst-ellipsis-untranslated": "Non traduit",
- "tux-sst-ellipsis-outdated": "Traductions obsolètes",
+ "tux-sst-ellipsis-outdated": "Traductions désuètes",
"tux-sst-link-all-match": "Requiert tous les termes de recherche",
"tux-sst-match-message": "Montre les traductions qui correspondent à chacun des mots de la recherche. $1",
- "tux-sst-case-sensitive": "Sensible à la casse"
+ "tux-sst-case-sensitive": "Sensible à la casse",
+ "tux-sst-error-offset": "Plus aucun résultat de recherche ne peut être affiché. Veuillez réduire votre recherche.",
+ "tux-sst-error-language": "Cette langue ne peut pas être utilisée avec ce type de recherche."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/fy.json b/www/wiki/extensions/Translate/i18n/search/fy.json
index 2f5ae4f8..0005400d 100644
--- a/www/wiki/extensions/Translate/i18n/search/fy.json
+++ b/www/wiki/extensions/Translate/i18n/search/fy.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Robin0van0der0vliet"
+ "Robin0van0der0vliet",
+ "Robin van der Vliet"
]
},
"tux-sst-edit": "Oersetting bewurkje",
diff --git a/www/wiki/extensions/Translate/i18n/search/gl.json b/www/wiki/extensions/Translate/i18n/search/gl.json
index 92f11904..e80439de 100644
--- a/www/wiki/extensions/Translate/i18n/search/gl.json
+++ b/www/wiki/extensions/Translate/i18n/search/gl.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Toliño",
- "Elisardojm"
+ "Elisardojm",
+ "Fitoschido"
]
},
"searchtranslations": "Procurar nas traducións",
@@ -13,13 +14,12 @@
"tux-sst-count": "{{PLURAL:$1|Atopouse 1 resultado|Atopáronse $1 resultados}}",
"tux-sst-facet-language": "Linguas",
"tux-sst-facet-group": "Grupos de mensaxes",
- "tux-sst-facet-orphan": "(orfos)",
"tux-sst-nosolr-title": "A procura non está dispoñible",
"tux-sst-nosolr-body": "Este wiki non dispón dun servizo de procura de traducións.",
"tux-sst-solr-offline-title": "A procura non está dispoñible",
"tux-sst-solr-offline-body": "O servizo de procura non está dispoñible temporalmente.",
- "tux-sst-next": "Seguintes ›",
- "tux-sst-prev": "< Anteriores",
+ "tux-sst-next": "Seguintes →",
+ "tux-sst-prev": "← Anteriores",
"tux-sst-default": "Traducións",
"tux-sst-translated": "Traducións do $1",
"tux-sst-untranslated": "Non hai traducións do $1",
@@ -27,6 +27,6 @@
"tux-sst-ellipsis-untranslated": "Sen tradución",
"tux-sst-ellipsis-outdated": "Traducións obsoletas",
"tux-sst-link-all-match": "Esixir todas as palabras da procura.",
- "tux-sst-match-message": "Mostrando as traducións que coinciden con calquera das palabras da procura. $1",
+ "tux-sst-match-message": "Amosando as traducións que coinciden con calquera das palabras da procura. $1",
"tux-sst-case-sensitive": "Distinguir entre maiúsculas e minúsculas"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/gu.json b/www/wiki/extensions/Translate/i18n/search/gu.json
index 2c2f910f..e783b68d 100644
--- a/www/wiki/extensions/Translate/i18n/search/gu.json
+++ b/www/wiki/extensions/Translate/i18n/search/gu.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|એક પરિણામ મળ્યું|$1 પરિણામો મળ્યા}}",
"tux-sst-facet-language": "ભાષાઓ",
"tux-sst-facet-group": "સંદેશ જૂથો",
- "tux-sst-facet-orphan": "(અનાથ)",
"tux-sst-nosolr-title": "શોધ ઉપલબ્ધ નથી",
"tux-sst-nosolr-body": "આ વિકિ પર ભાષાંતર શોધ સેવા ઉપલબ્ધ નથી.",
"tux-sst-solr-offline-title": "શોધ ઉપલબ્ધ નથી",
diff --git a/www/wiki/extensions/Translate/i18n/search/he.json b/www/wiki/extensions/Translate/i18n/search/he.json
index 0d234bf9..c6e5077e 100644
--- a/www/wiki/extensions/Translate/i18n/search/he.json
+++ b/www/wiki/extensions/Translate/i18n/search/he.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|נמצאה תוצאה אחת|נמצאו $1 תוצאות}}",
"tux-sst-facet-language": "שפות",
"tux-sst-facet-group": "קבוצות הודעות",
- "tux-sst-facet-orphan": "(יתומים)",
"tux-sst-nosolr-title": "החיפוש אינו זמין",
"tux-sst-nosolr-body": "בוויקי הזה אין שירות חיפוש בתרגומים.",
"tux-sst-solr-offline-title": "החיפוש אינו זמין",
@@ -27,5 +26,7 @@
"tux-sst-ellipsis-outdated": "תרגומים מיושנים",
"tux-sst-link-all-match": "לדרוש את כל מילות החיפוש.",
"tux-sst-match-message": "הצגת תרגומים שמתאימים למילה כלשהי ממילות החיפוש. $1",
- "tux-sst-case-sensitive": "תלוי רישיות"
+ "tux-sst-case-sensitive": "תלוי רישיות",
+ "tux-sst-error-offset": "לא היה אפשר להראות עוד תוצאות. נא לצמצם את החיפוש שלך.",
+ "tux-sst-error-language": "לא ניתן להשתמש בשפה הזאת עם סוג כזה של חיפוש."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/hi.json b/www/wiki/extensions/Translate/i18n/search/hi.json
index fab429fa..f86ecdc8 100644
--- a/www/wiki/extensions/Translate/i18n/search/hi.json
+++ b/www/wiki/extensions/Translate/i18n/search/hi.json
@@ -1,14 +1,17 @@
{
"@metadata": {
"authors": [
- "NehalDaveND"
+ "NehalDaveND",
+ "Sfic"
]
},
"tux-sst-edit": "अनुवाद सम्पादित करें",
+ "tux-sst-view-foreign": "$1 में देखें",
"tux-sst-search": "खोजें",
"tux-sst-search-ph": "अनुवाद ढूँढे",
"tux-sst-facet-language": "भाषाएँ",
"tux-sst-facet-group": "संदेश-समूह",
"tux-sst-next": "अग्रिम ›",
- "tux-sst-prev": "‹ पिछला"
+ "tux-sst-prev": "‹ पिछला",
+ "tux-sst-ellipsis-outdated": "पुराने अनुवाद"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/hr.json b/www/wiki/extensions/Translate/i18n/search/hr.json
new file mode 100644
index 00000000..33428d05
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/hr.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "MaGa"
+ ]
+ },
+ "searchtranslations": "Pretraga prijevoda",
+ "tux-sst-edit": "Uredi prijevod",
+ "tux-sst-view-foreign": "Vidi na $1",
+ "tux-sst-search": "Pretraži",
+ "tux-sst-search-ph": "Pretraga prijevoda",
+ "tux-sst-count": "{{PLURAL:$1|Pronađen jedan rezultat|Pronađena $1 rezultata|Pronađeno $1 rezultata}}",
+ "tux-sst-facet-language": "Jezici",
+ "tux-sst-facet-group": "Grupe poruka",
+ "tux-sst-nosolr-title": "Pretraživanje nije dostupno",
+ "tux-sst-nosolr-body": "Ovaj wiki nema uslugu pretrage prijevoda.",
+ "tux-sst-solr-offline-title": "Pretraživanje nije dostupno",
+ "tux-sst-solr-offline-body": "Tražilica je privremeno nedostupna.",
+ "tux-sst-next": "Sljedeće ›",
+ "tux-sst-prev": "‹ Prethodno",
+ "tux-sst-default": "Prijevodi",
+ "tux-sst-translated": "Prijevodi s $1",
+ "tux-sst-untranslated": "Nema prijevoda s $1",
+ "tux-sst-outdated": "Zastarjeli prijevodi s $1",
+ "tux-sst-ellipsis-untranslated": "Nema prijevoda",
+ "tux-sst-ellipsis-outdated": "Zastarjeli prijevodi",
+ "tux-sst-link-all-match": "Pretraga prema cijelom izrazu.",
+ "tux-sst-match-message": "Prikazuju se prijevodi koji odgovaraju svim riječima iz pretrage. $1",
+ "tux-sst-case-sensitive": "Razlikuj velika i mala slova"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/hsb.json b/www/wiki/extensions/Translate/i18n/search/hsb.json
index 12fddb79..4c95f899 100644
--- a/www/wiki/extensions/Translate/i18n/search/hsb.json
+++ b/www/wiki/extensions/Translate/i18n/search/hsb.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Michawiki"
+ "Michawiki",
+ "J budissin"
]
},
"searchtranslations": "Přełožki pytać",
@@ -11,11 +12,11 @@
"tux-sst-count": "{{PLURAL:$1|Jedyn wuslědk namakany|$1 wuslědkaj namakanej|$1 wuslědki namakane|$1 wuslědkow namakane}}",
"tux-sst-facet-language": "Rěče",
"tux-sst-facet-group": "Zdźělenske skupiny",
- "tux-sst-facet-orphan": "(wosyroćene)",
"tux-sst-nosolr-title": "Pytanje k dispoziciji njesteji",
"tux-sst-nosolr-body": "Tutón wiki nima słužbu za pytanje přełožkow.",
"tux-sst-solr-offline-title": "Pytanje k dispoziciji njesteji",
"tux-sst-solr-offline-body": "Pytanska słužba tuchwilu k dispoziciji njesteji.",
"tux-sst-next": "Přichodne wuslědki",
- "tux-sst-prev": "Předchadne wuslědki"
+ "tux-sst-prev": "Předchadne wuslědki",
+ "tux-sst-default": "Přełožki"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/hu.json b/www/wiki/extensions/Translate/i18n/search/hu.json
new file mode 100644
index 00000000..3a6cd83e
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/hu.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tacsipacsi"
+ ]
+ },
+ "searchtranslations": "Fordítások keresése",
+ "tux-sst-edit": "Fordítás szerkesztése",
+ "tux-sst-view-foreign": "Megtekintés itt: $1",
+ "tux-sst-search": "Keresés",
+ "tux-sst-search-ph": "Fordítások keresése",
+ "tux-sst-count": "$1 találat",
+ "tux-sst-facet-language": "Nyelvek",
+ "tux-sst-facet-group": "Üzenetcsoportok",
+ "tux-sst-nosolr-title": "A kereső nem érhető el",
+ "tux-sst-nosolr-body": "Ez a wiki nem rendelkezik fordításkereső szolgáltatással.",
+ "tux-sst-solr-offline-title": "A kereső nem érhető el",
+ "tux-sst-solr-offline-body": "A keresőszolgáltatás ideiglenesen nem elérhető.",
+ "tux-sst-next": "Következő ›",
+ "tux-sst-prev": "‹ Előző",
+ "tux-sst-default": "Fordítások",
+ "tux-sst-translated": "Fordítások $1 nyelvről",
+ "tux-sst-untranslated": "Nincs fordítás $1 nyelvről",
+ "tux-sst-outdated": "Elavult fordítások $1 nyelvről",
+ "tux-sst-ellipsis-untranslated": "Nincs fordítás",
+ "tux-sst-ellipsis-outdated": "Elavult fordítások",
+ "tux-sst-link-all-match": "Az összes keresőszó megkövetelése.",
+ "tux-sst-match-message": "Minden fordítás látható, ami legalább egy keresett szót tartalmaz. $1",
+ "tux-sst-case-sensitive": "Kisbetű/nagybetű-érzékeny"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/ia.json b/www/wiki/extensions/Translate/i18n/search/ia.json
index cad828b0..8a3cfaa5 100644
--- a/www/wiki/extensions/Translate/i18n/search/ia.json
+++ b/www/wiki/extensions/Translate/i18n/search/ia.json
@@ -11,11 +11,10 @@
"tux-sst-count": "{{PLURAL:$1|Un resultato trovate|$1 resultatos trovate}}",
"tux-sst-facet-language": "Linguas",
"tux-sst-facet-group": "Gruppos de messages",
- "tux-sst-facet-orphan": "(orphano)",
"tux-sst-nosolr-title": "Recerca indisponibile",
"tux-sst-nosolr-body": "Iste wiki non ha un servicio de recerca de traductiones.",
"tux-sst-solr-offline-title": "Recerca indisponibile",
"tux-sst-solr-offline-body": "Le servicio de recerca es temporarimente indisponibile.",
- "tux-sst-next": "Sequente resultatos",
- "tux-sst-prev": "Precedente resultatos"
+ "tux-sst-next": "Sequente ›",
+ "tux-sst-prev": "‹ Precedente"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/ig.json b/www/wiki/extensions/Translate/i18n/search/ig.json
new file mode 100644
index 00000000..05317e20
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/ig.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ukabia"
+ ]
+ },
+ "tux-sst-search": "Tùwe"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/ilo.json b/www/wiki/extensions/Translate/i18n/search/ilo.json
index b826ea56..a3cf9481 100644
--- a/www/wiki/extensions/Translate/i18n/search/ilo.json
+++ b/www/wiki/extensions/Translate/i18n/search/ilo.json
@@ -6,16 +6,15 @@
},
"searchtranslations": "Agbiruk kadagiti patarus",
"tux-sst-edit": "Urnosen ti patarus",
- "tux-sst-search": "Biruken",
+ "tux-sst-search": "Agbiruk",
"tux-sst-search-ph": "Agbiruk kadagiti patarus",
"tux-sst-count": "{{PLURAL:$1|Maysa a resulta a nabirukan|Dagiti $1 a resulta a nabirukan}}",
"tux-sst-facet-language": "Dagiti pagsasao",
"tux-sst-facet-group": "Dagiti grupo ti mensahe",
- "tux-sst-facet-orphan": "(ulila)",
"tux-sst-nosolr-title": "Saan a magun-od ti panagbiruk",
"tux-sst-nosolr-body": "Daytoy a wiki ket awan ti serbisio a panagbiruk ti patarus",
"tux-sst-solr-offline-title": "Saan a magun-od ti panagbiruk",
"tux-sst-solr-offline-body": "Ti serbisio ti panagbiruk ket temporario a saan a magun-od",
- "tux-sst-next": "Dagiti sumaruno a resulta",
- "tux-sst-prev": "Dagiti dati a resulta"
+ "tux-sst-next": "Sumaruno ›",
+ "tux-sst-prev": "‹ Napalabas"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/inh.json b/www/wiki/extensions/Translate/i18n/search/inh.json
index 74145a78..495c3a30 100644
--- a/www/wiki/extensions/Translate/i18n/search/inh.json
+++ b/www/wiki/extensions/Translate/i18n/search/inh.json
@@ -1,8 +1,11 @@
{
"@metadata": {
"authors": [
- "Adam-Yourist"
+ "Adam-Yourist",
+ "Tusholi"
]
},
- "tux-sst-search": "Хьалáха"
+ "tux-sst-search": "Хьалаха",
+ "tux-sst-facet-language": "Метташ",
+ "tux-sst-default": "Таржамаш"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/is.json b/www/wiki/extensions/Translate/i18n/search/is.json
new file mode 100644
index 00000000..1d10c24f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/is.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sveinn í Felli"
+ ]
+ },
+ "searchtranslations": "Leita í þýðingum",
+ "tux-sst-edit": "Breyta þýðingu",
+ "tux-sst-view-foreign": "Skoða á $1",
+ "tux-sst-search": "Leita",
+ "tux-sst-search-ph": "Leita í þýðingum",
+ "tux-sst-count": "{{PLURAL:$1|En niðurstaða fannst|$1 niðurstöður fundust}}",
+ "tux-sst-facet-language": "Tungumál",
+ "tux-sst-facet-group": "Þýðingahópar",
+ "tux-sst-nosolr-title": "Leit er ekki tiltæk",
+ "tux-sst-nosolr-body": "Þetta wiki er ekki með þýðingaleitarþjónustu.",
+ "tux-sst-solr-offline-title": "Leit er ekki tiltæk",
+ "tux-sst-solr-offline-body": "Í augnablikinu er leitarþjónustan ekki tiltæk.",
+ "tux-sst-next": "Næsta ›",
+ "tux-sst-prev": "‹ Fyrra",
+ "tux-sst-default": "Þýðingar",
+ "tux-sst-translated": "Þýðingar úr $1",
+ "tux-sst-untranslated": "Engin þýðing úr $1",
+ "tux-sst-outdated": "Úreltar þýðingar frá $1",
+ "tux-sst-ellipsis-untranslated": "Engin þýðing",
+ "tux-sst-ellipsis-outdated": "Úreltar þýðingar",
+ "tux-sst-link-all-match": "Nota öll leitarorðin.",
+ "tux-sst-match-message": "Birtir þýðingar sem samsvara einhverju leitarorðanna. $1",
+ "tux-sst-case-sensitive": "Háð há/lágstöfum"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/it.json b/www/wiki/extensions/Translate/i18n/search/it.json
index 8cea57b7..ae5071f2 100644
--- a/www/wiki/extensions/Translate/i18n/search/it.json
+++ b/www/wiki/extensions/Translate/i18n/search/it.json
@@ -17,7 +17,6 @@
"tux-sst-count": "{{PLURAL:$1|Un risultato trovato|$1 risultati trovati}}",
"tux-sst-facet-language": "Lingue",
"tux-sst-facet-group": "Gruppi di messaggi",
- "tux-sst-facet-orphan": "(orfano)",
"tux-sst-nosolr-title": "Ricerca non disponibile",
"tux-sst-nosolr-body": "Questo wiki non ha un servizio di ricerca delle traduzioni.",
"tux-sst-solr-offline-title": "Ricerca non disponibile",
@@ -30,5 +29,7 @@
"tux-sst-outdated": "Traduzioni non aggiornate da $1",
"tux-sst-ellipsis-untranslated": "Nessuna traduzione",
"tux-sst-ellipsis-outdated": "Traduzioni non aggiornate",
- "tux-sst-case-sensitive": "Distingui maiuscole e minuscole"
+ "tux-sst-case-sensitive": "Distingui maiuscole e minuscole",
+ "tux-sst-error-offset": "Non è possibile visualizzare ulteriori risultati. Restringi la ricerca.",
+ "tux-sst-error-language": "Questa lingua non può essere utilizzata con questo tipo di ricerca."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/ja.json b/www/wiki/extensions/Translate/i18n/search/ja.json
index ae68848e..881ccfac 100644
--- a/www/wiki/extensions/Translate/i18n/search/ja.json
+++ b/www/wiki/extensions/Translate/i18n/search/ja.json
@@ -8,12 +8,12 @@
},
"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-facet-orphan": "(孤立)",
"tux-sst-nosolr-title": "検索は利用できません",
"tux-sst-nosolr-body": "このウィキには翻訳の検索サービスはありません。",
"tux-sst-solr-offline-title": "検索は利用できません",
diff --git a/www/wiki/extensions/Translate/i18n/search/ka.json b/www/wiki/extensions/Translate/i18n/search/ka.json
index 83831428..27f6b000 100644
--- a/www/wiki/extensions/Translate/i18n/search/ka.json
+++ b/www/wiki/extensions/Translate/i18n/search/ka.json
@@ -11,7 +11,6 @@
"tux-sst-count": "{{PLURAL:$1|ნაპოვნია ერთი შედეგი|ნაპოვნია $1 შედეგი}}",
"tux-sst-facet-language": "ენები",
"tux-sst-facet-group": "შეტყობინების ჯგუფები",
- "tux-sst-facet-orphan": "(ობოლი)",
"tux-sst-nosolr-title": "ძიება მიუწვდომელია",
"tux-sst-nosolr-body": "ამ ვიკიში არ არის თარგმანების ძიების სერვისი.",
"tux-sst-solr-offline-title": "ძიება მიუწვდომელია",
diff --git a/www/wiki/extensions/Translate/i18n/search/kab.json b/www/wiki/extensions/Translate/i18n/search/kab.json
new file mode 100644
index 00000000..adccbe24
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/kab.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Belkacem77"
+ ]
+ },
+ "searchtranslations": "Nadi tisuqilin",
+ "tux-sst-edit": "Ẓreg tasuqilt",
+ "tux-sst-view-foreign": "Sken di $1",
+ "tux-sst-search": "Nadi",
+ "tux-sst-search-ph": "Nadi tisuqilin",
+ "tux-sst-count": "{{PLURAL:$1|0=Ulac agmuḍ|1=yiwen n ugmuḍ|$1 n igmaḍ}} yettwafen",
+ "tux-sst-facet-language": "Tutlayin",
+ "tux-sst-facet-group": "Igrawen n yiznan",
+ "tux-sst-nosolr-title": "Ulac anadi",
+ "tux-sst-nosolr-body": "Awiki-agi ur ɣur-s ara amezlu n unadi n tsuqilt.",
+ "tux-sst-solr-offline-title": "Ulac anadi",
+ "tux-sst-solr-offline-body": "Ameẓlu n unadi ulac-it akka tura.",
+ "tux-sst-next": "Ar zdat ›",
+ "tux-sst-prev": "‹ ar deffir",
+ "tux-sst-default": "Tisuqilin",
+ "tux-sst-translated": "Tisuqilin si $1",
+ "tux-sst-untranslated": "Ur yettwasuqel ara si $1",
+ "tux-sst-outdated": "Tisuqilin ifaten si $1",
+ "tux-sst-ellipsis-untranslated": "Ur yettwasuqel ara",
+ "tux-sst-ellipsis-outdated": "Tisuqilin ifaten",
+ "tux-sst-link-all-match": "Yesra akk awalen n unadi.",
+ "tux-sst-case-sensitive": "Yettqadaṛ taruẓi n usekkil"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/kiu.json b/www/wiki/extensions/Translate/i18n/search/kiu.json
new file mode 100644
index 00000000..40eae0a7
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/kiu.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kumkumuk",
+ "Mirzali"
+ ]
+ },
+ "tux-sst-ellipsis-untranslated": "Açarnayış çıniyo",
+ "tux-sst-error-offset": "Neticê asayeyê jêdêri çinê. Kerem ke, cıcêrayışê xo teng ke.",
+ "tux-sst-error-language": "Tipê nê cıcêrayışi be nê zıwani ra nêgurenino."
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/kjp.json b/www/wiki/extensions/Translate/i18n/search/kjp.json
new file mode 100644
index 00000000..53d77670
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/kjp.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "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-next": "မေံယာႋ »",
+ "tux-sst-prev": "« မ်ုထါင်လင်ႋခါင့်",
+ "tux-sst-default": "ခၠယ့်ဖှ်ေက်ုဆာႋလ်ုဖး"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/kk-cyrl.json b/www/wiki/extensions/Translate/i18n/search/kk-cyrl.json
index d27e0cd4..82891bdf 100644
--- a/www/wiki/extensions/Translate/i18n/search/kk-cyrl.json
+++ b/www/wiki/extensions/Translate/i18n/search/kk-cyrl.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|Бір нәтиже табылды|$1 нәтиже табылды}}",
"tux-sst-facet-language": "Тілдер",
"tux-sst-facet-group": "Хабарлама топтары",
- "tux-sst-facet-orphan": "(жекелей)",
"tux-sst-nosolr-title": "Іздеу қол жетімді емес",
"tux-sst-nosolr-body": "Уиикиде аударманы іздеу сервисі жоқ.",
"tux-sst-solr-offline-title": "Іздеу қол жетімді емес",
diff --git a/www/wiki/extensions/Translate/i18n/search/km.json b/www/wiki/extensions/Translate/i18n/search/km.json
index fc9f402d..348daf2a 100644
--- a/www/wiki/extensions/Translate/i18n/search/km.json
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/i18n/search/ko.json b/www/wiki/extensions/Translate/i18n/search/ko.json
index a0766475..d2718c81 100644
--- a/www/wiki/extensions/Translate/i18n/search/ko.json
+++ b/www/wiki/extensions/Translate/i18n/search/ko.json
@@ -2,7 +2,9 @@
"@metadata": {
"authors": [
"아라",
- "SeoJeongHo"
+ "SeoJeongHo",
+ "Nuevo Paso",
+ "Ykhwong"
]
},
"searchtranslations": "번역 검색",
@@ -13,7 +15,6 @@
"tux-sst-count": "{{PLURAL:$1|결과 한 개를 찾았습니다|결과 $1개를 찾았습니다}}",
"tux-sst-facet-language": "언어",
"tux-sst-facet-group": "메시지 그룹",
- "tux-sst-facet-orphan": "(외톨이)",
"tux-sst-nosolr-title": "검색을 사용할 수 없음",
"tux-sst-nosolr-body": "이 위키는 번역 검색 서비스가 없습니다.",
"tux-sst-solr-offline-title": "검색을 사용할 수 없음",
@@ -21,12 +22,14 @@
"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": "모든 검색 낱말이 필요합니다.",
"tux-sst-match-message": "검색 낱말과 일치하는 번역을 보여줍니다. $1",
- "tux-sst-case-sensitive": "대소문자 구분"
+ "tux-sst-case-sensitive": "대소문자 구분",
+ "tux-sst-error-offset": "더 많은 검색 결과를 표시할 수 없습니다. 검색 조건을 좁혀 주십시오.",
+ "tux-sst-error-language": "이 언어는 이 유형의 검색에 사용할 수 없습니다."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/ksh.json b/www/wiki/extensions/Translate/i18n/search/ksh.json
index ff947ee6..fd26b838 100644
--- a/www/wiki/extensions/Translate/i18n/search/ksh.json
+++ b/www/wiki/extensions/Translate/i18n/search/ksh.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|Eine|$1|Nix}} jefonge",
"tux-sst-facet-language": "Schprohche",
"tux-sst-facet-group": "Nohreeschtejroppe",
- "tux-sst-facet-orphan": "(kein Jropp)",
"tux-sst-nosolr-title": "Söhke es nit müjjelesch.",
"tux-sst-nosolr-body": "En heh däm Wiki kammer nit noh Översäzonge söhke.",
"tux-sst-solr-offline-title": "Söhke es nit müjjelesch.",
diff --git a/www/wiki/extensions/Translate/i18n/search/ku-latn.json b/www/wiki/extensions/Translate/i18n/search/ku-latn.json
index 8aa44879..0d18238a 100644
--- a/www/wiki/extensions/Translate/i18n/search/ku-latn.json
+++ b/www/wiki/extensions/Translate/i18n/search/ku-latn.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|Encamek hat dîtin|$1 encam hatin dîtin}}",
"tux-sst-facet-language": "Ziman",
"tux-sst-facet-group": "Komên peyaman",
- "tux-sst-facet-orphan": "(sêwî)",
"tux-sst-nosolr-title": "Lêgerîn tune ye",
"tux-sst-solr-offline-title": "Lêgerîn tune ye",
"tux-sst-next": "Pêşve›",
diff --git a/www/wiki/extensions/Translate/i18n/search/lag.json b/www/wiki/extensions/Translate/i18n/search/lag.json
new file mode 100644
index 00000000..561b498f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/lag.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baba Tabita"
+ ]
+ },
+ "tux-sst-view-foreign": "Laangɨra kwa $1",
+ "tux-sst-search": "Saakɨra",
+ "tux-sst-facet-language": "Ndʉʉsɨka"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/lb.json b/www/wiki/extensions/Translate/i18n/search/lb.json
index 2bbeed3d..e12e4146 100644
--- a/www/wiki/extensions/Translate/i18n/search/lb.json
+++ b/www/wiki/extensions/Translate/i18n/search/lb.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|Ee Resultat|$1 Resultater}} fonnt",
"tux-sst-facet-language": "Sproochen",
"tux-sst-facet-group": "Gruppe vu Messagen",
- "tux-sst-facet-orphan": "(verwaist)",
"tux-sst-nosolr-title": "Sichen ass net disponibel",
"tux-sst-nosolr-body": "Dës Wiki huet d'Sichfonctioun vun den Iwwersetzungen net.",
"tux-sst-solr-offline-title": "Sichen ass net disponibel",
diff --git a/www/wiki/extensions/Translate/i18n/search/lfn.json b/www/wiki/extensions/Translate/i18n/search/lfn.json
new file mode 100644
index 00000000..beb61b57
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/lfn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robin van der Vliet"
+ ]
+ },
+ "tux-sst-facet-language": "Linguas"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/lkt.json b/www/wiki/extensions/Translate/i18n/search/lkt.json
new file mode 100644
index 00000000..24bb3d4f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/lkt.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "R12ntech"
+ ]
+ },
+ "tux-sst-search": "Wóle"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/lrc.json b/www/wiki/extensions/Translate/i18n/search/lrc.json
index 1eb27d51..4f0e52de 100644
--- a/www/wiki/extensions/Translate/i18n/search/lrc.json
+++ b/www/wiki/extensions/Translate/i18n/search/lrc.json
@@ -10,7 +10,6 @@
"tux-sst-search-ph": "پی جوری لرسنيا",
"tux-sst-facet-language": "زونيا",
"tux-sst-facet-group": "پيغوم گرويا",
- "tux-sst-facet-orphan": "(يتيم)",
"tux-sst-nosolr-title": "پی جوری د دسرس نئ",
"tux-sst-solr-offline-title": "پی جوری د دسرس نئ",
"tux-sst-next": "نتيجيا نيايی",
diff --git a/www/wiki/extensions/Translate/i18n/search/lt.json b/www/wiki/extensions/Translate/i18n/search/lt.json
new file mode 100644
index 00000000..cc43d93f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/lt.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200"
+ ]
+ },
+ "searchtranslations": "Ieškoti vertimų",
+ "tux-sst-edit": "Redaguoti vertimą",
+ "tux-sst-view-foreign": "Žiūrėti $1",
+ "tux-sst-search": "Ieškoti",
+ "tux-sst-search-ph": "Ieškoti vertimų",
+ "tux-sst-count": "{{PLURAL:$1|Rastas vienas rezultatas|Rasta $1 rezultatų}}",
+ "tux-sst-facet-language": "Kalbos",
+ "tux-sst-facet-group": "Pranešimo grupės",
+ "tux-sst-nosolr-title": "Paieška nepasiekiama",
+ "tux-sst-nosolr-body": "Ši viki neturi vertimų paieškos paslaugos.",
+ "tux-sst-solr-offline-title": "Paieška nepasiekiama",
+ "tux-sst-solr-offline-body": "Paieškos paslauga laikinai neprieinama.",
+ "tux-sst-next": "Kitas ›",
+ "tux-sst-prev": "‹ Ankstesnis",
+ "tux-sst-default": "Vertimai",
+ "tux-sst-translated": "Vertimai iš $1",
+ "tux-sst-untranslated": "nėra vertimų iš $1",
+ "tux-sst-outdated": "Pasenę vertimai iš $1",
+ "tux-sst-ellipsis-untranslated": "Nėra vertimų",
+ "tux-sst-ellipsis-outdated": "Pasenę vertimai",
+ "tux-sst-link-all-match": "Reikalauti visų paieškos žodžių."
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/mk.json b/www/wiki/extensions/Translate/i18n/search/mk.json
index 7166af43..2998e42f 100644
--- a/www/wiki/extensions/Translate/i18n/search/mk.json
+++ b/www/wiki/extensions/Translate/i18n/search/mk.json
@@ -9,10 +9,9 @@
"tux-sst-view-foreign": "Пог. на $1",
"tux-sst-search": "Пребарај",
"tux-sst-search-ph": "Пребарајте преводи",
- "tux-sst-count": "{{PLURAL:$1|Пронајден е еден резултат|Пронајдени се $1 резултати}}",
+ "tux-sst-count": "{{PLURAL:$1|Пронајдена е една ставка|Пронајдени се $1 ставки}}",
"tux-sst-facet-language": "Јазици",
"tux-sst-facet-group": "Групи на пораки",
- "tux-sst-facet-orphan": "(осамена)",
"tux-sst-nosolr-title": "Пребарувањето е недостапно",
"tux-sst-nosolr-body": "Ова вики нема пребарувач.",
"tux-sst-solr-offline-title": "Пребарувањето е недостапно",
@@ -27,5 +26,7 @@
"tux-sst-ellipsis-outdated": "Застарени преводи",
"tux-sst-link-all-match": "Дај за пребараното како целина",
"tux-sst-match-message": "Прикажани се преводите што одговараат на било кој од пребараните зборови. $1",
- "tux-sst-case-sensitive": "Разликувај големи/мали букви"
+ "tux-sst-case-sensitive": "Разликувај големи/мали букви",
+ "tux-sst-error-offset": "Не можам да прикажам повеќе исходни ставки. Уточнете го пребарувањето.",
+ "tux-sst-error-language": "Овој јазик не може да се користи за ваков вид пребарување."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/mr.json b/www/wiki/extensions/Translate/i18n/search/mr.json
index b9a77b79..f81036f2 100644
--- a/www/wiki/extensions/Translate/i18n/search/mr.json
+++ b/www/wiki/extensions/Translate/i18n/search/mr.json
@@ -9,10 +9,9 @@
"tux-sst-view-foreign": "$1 वर पहा",
"tux-sst-search": "शोधा",
"tux-sst-search-ph": "भाषांतर शोधा",
- "tux-sst-count": "{{PLURAL:$1|एक निकाल सापडला|$1 निकाल सापडले}}",
+ "tux-sst-count": "{{PLURAL:$1|$1 निकाल सापडला/ले}}",
"tux-sst-facet-language": "भाषा",
"tux-sst-facet-group": "संदेश गट",
- "tux-sst-facet-orphan": "(अनाथ)",
"tux-sst-nosolr-title": "'शोध' उपलब्ध नाही",
"tux-sst-nosolr-body": "या विकिवर 'भाषांतर शोध सेवा' नाही.",
"tux-sst-solr-offline-title": "'शोध' उपलब्ध नाही",
diff --git a/www/wiki/extensions/Translate/i18n/search/ms.json b/www/wiki/extensions/Translate/i18n/search/ms.json
index 85b25b24..04a16000 100644
--- a/www/wiki/extensions/Translate/i18n/search/ms.json
+++ b/www/wiki/extensions/Translate/i18n/search/ms.json
@@ -11,7 +11,6 @@
"tux-sst-count": "$1 hasil dijumpai",
"tux-sst-facet-language": "Bahasa",
"tux-sst-facet-group": "Message groups",
- "tux-sst-facet-orphan": "(yatim)",
"tux-sst-nosolr-title": "Tidak boleh mencari",
"tux-sst-nosolr-body": "Wiki ini tiada ciri mencari terjemahan.",
"tux-sst-solr-offline-title": "Tidak boleh mencari",
diff --git a/www/wiki/extensions/Translate/i18n/search/mwl.json b/www/wiki/extensions/Translate/i18n/search/mwl.json
new file mode 100644
index 00000000..4f8cf7d0
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/mwl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "MokaAkashiyaPT",
+ "Athena in Wonderland"
+ ]
+ },
+ "tux-sst-default": "Traduçones"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/my.json b/www/wiki/extensions/Translate/i18n/search/my.json
new file mode 100644
index 00000000..5aa89cb6
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/my.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dr Lotus Black",
+ "Ninjastrikers"
+ ]
+ },
+ "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/www/wiki/extensions/Translate/i18n/search/nb.json b/www/wiki/extensions/Translate/i18n/search/nb.json
index fe367ca9..75430196 100644
--- a/www/wiki/extensions/Translate/i18n/search/nb.json
+++ b/www/wiki/extensions/Translate/i18n/search/nb.json
@@ -1,8 +1,31 @@
{
"@metadata": {
"authors": [
- "Kingu"
+ "Kingu",
+ "Jon Harald Søby"
]
},
- "tux-sst-next": "Neste >"
+ "searchtranslations": "Søk i oversettelser",
+ "tux-sst-edit": "Rediger oversettelse",
+ "tux-sst-view-foreign": "Vis på $1",
+ "tux-sst-search": "Søk",
+ "tux-sst-search-ph": "Søk i oversettelser",
+ "tux-sst-count": "{{PLURAL:$1|Ett resultat|$1 resultater}} funnet",
+ "tux-sst-facet-language": "Språk",
+ "tux-sst-facet-group": "Beskjedgrupper",
+ "tux-sst-nosolr-title": "Søk utilgjengelig",
+ "tux-sst-nosolr-body": "Denne wikien har ikke tjenesten for oversettelsessøk.",
+ "tux-sst-solr-offline-title": "Søk utilgjengelig",
+ "tux-sst-solr-offline-body": "Søketjenesten er midlertidig utilgjengelig.",
+ "tux-sst-next": "Neste >",
+ "tux-sst-prev": "‹ Forrige",
+ "tux-sst-default": "Oversettelser",
+ "tux-sst-translated": "Oversettelser fra $1",
+ "tux-sst-untranslated": "Ingen oversettelse fra $1",
+ "tux-sst-outdated": "Utdaterte oversettelser fra $1",
+ "tux-sst-ellipsis-untranslated": "Ingen oversettelse",
+ "tux-sst-ellipsis-outdated": "Utdaterte oversettelser",
+ "tux-sst-link-all-match": "Krev alle søkeord.",
+ "tux-sst-match-message": "Viser oversettelser som matcher noen søkeord. $1",
+ "tux-sst-case-sensitive": "Skill mellom store og små bokstaver"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/ne.json b/www/wiki/extensions/Translate/i18n/search/ne.json
index 9adc7c14..bcc013de 100644
--- a/www/wiki/extensions/Translate/i18n/search/ne.json
+++ b/www/wiki/extensions/Translate/i18n/search/ne.json
@@ -1,12 +1,14 @@
{
"@metadata": {
"authors": [
- "NehalDaveND"
+ "NehalDaveND",
+ "हिमाल सुबेदी",
+ "Nirajan pant"
]
},
"tux-sst-search": "खोज",
"tux-sst-facet-language": "भाषाहरू",
- "tux-sst-facet-group": "संदेश समूह",
+ "tux-sst-facet-group": "सन्देश समूहहरू",
"tux-sst-next": "अर्को ›",
"tux-sst-prev": "‹ पछिल्लो"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/nl.json b/www/wiki/extensions/Translate/i18n/search/nl.json
index 2c728452..02c6d003 100644
--- a/www/wiki/extensions/Translate/i18n/search/nl.json
+++ b/www/wiki/extensions/Translate/i18n/search/nl.json
@@ -4,7 +4,8 @@
"Siebrand",
"Robin0van0der0vliet",
"Robin van der Vliet",
- "Sjoerddebruin"
+ "Sjoerddebruin",
+ "Mainframe98"
]
},
"searchtranslations": "Vertalingen zoeken",
@@ -22,7 +23,11 @@
"tux-sst-next": "Volgende ›",
"tux-sst-prev": "‹ Vorige",
"tux-sst-default": "Vertalingen",
+ "tux-sst-translated": "Vertaling voor $1",
+ "tux-sst-untranslated": "Geen vertalingen voor $1",
+ "tux-sst-outdated": "Verouderde vertalingen voor $1",
"tux-sst-ellipsis-untranslated": "Geen vertaling",
"tux-sst-ellipsis-outdated": "Verouderde vertalingen",
- "tux-sst-case-sensitive": "Hoofdlettergevoelig"
+ "tux-sst-case-sensitive": "Hoofdlettergevoelig",
+ "tux-sst-error-language": "Deze taal kan niet worden gebruikt met dit type zoekopdracht."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/nn.json b/www/wiki/extensions/Translate/i18n/search/nn.json
index a713be57..b03a2b72 100644
--- a/www/wiki/extensions/Translate/i18n/search/nn.json
+++ b/www/wiki/extensions/Translate/i18n/search/nn.json
@@ -15,6 +15,15 @@
"tux-sst-nosolr-body": "Denne wikien har ikkje eit omsetjingssøk",
"tux-sst-solr-offline-title": "Søket er ikkje tilgjengeleg",
"tux-sst-solr-offline-body": "Søket er mellombels utilgjengeleg",
- "tux-sst-next": "Dei neste resultata",
- "tux-sst-prev": "Dei førre resultata"
+ "tux-sst-next": "Neste >",
+ "tux-sst-prev": "‹ Førre",
+ "tux-sst-default": "Omsetjingar",
+ "tux-sst-translated": "Omsetjingar frå $1",
+ "tux-sst-untranslated": "Inga omsetjing frå $1",
+ "tux-sst-outdated": "Utdaterte omsetjingar frå $1",
+ "tux-sst-ellipsis-untranslated": "Inga omsetjing",
+ "tux-sst-ellipsis-outdated": "Utdaterte omsetjingar",
+ "tux-sst-link-all-match": "Krev alle søkjeord.",
+ "tux-sst-match-message": "Viser omsetjingar som passar med eitt eller fleire av søkjeorda. $1",
+ "tux-sst-case-sensitive": "Skil mellom store og små bokstavar"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/oc.json b/www/wiki/extensions/Translate/i18n/search/oc.json
index e2cc2b12..3df21682 100644
--- a/www/wiki/extensions/Translate/i18n/search/oc.json
+++ b/www/wiki/extensions/Translate/i18n/search/oc.json
@@ -7,8 +7,18 @@
"searchtranslations": "Recèrca de traduccions",
"tux-sst-edit": "Modificar la traduccion",
"tux-sst-search": "Recercar",
+ "tux-sst-search-ph": "Recèrca de traduccions",
+ "tux-sst-count": "{{PLURAL:$1|0=Cap de resultat pas trobat|1=Un resultat trobat|$1 resultats trobats}}",
"tux-sst-facet-language": "Lengas",
"tux-sst-facet-group": "Gropes de messatge",
- "tux-sst-facet-orphan": "(orfanèl)",
- "tux-sst-nosolr-title": "Recèrca indisponibla"
+ "tux-sst-nosolr-title": "Recèrca indisponibla",
+ "tux-sst-prev": "< Precedent",
+ "tux-sst-default": "Traduccions",
+ "tux-sst-translated": "Traduccions de $1",
+ "tux-sst-untranslated": "Pas encara traduits de $1",
+ "tux-sst-outdated": "Traduccions perimidas a partir de $1",
+ "tux-sst-ellipsis-outdated": "Traduccions obsolètas",
+ "tux-sst-link-all-match": "Requerís totes los tèrmes de recèrca",
+ "tux-sst-match-message": "Fa veire las traduccions que correspondon a cadun dels mots de la recèrca. $1",
+ "tux-sst-case-sensitive": "Sensible a la cassa"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/pl.json b/www/wiki/extensions/Translate/i18n/search/pl.json
index 67976a18..f3c695fb 100644
--- a/www/wiki/extensions/Translate/i18n/search/pl.json
+++ b/www/wiki/extensions/Translate/i18n/search/pl.json
@@ -12,7 +12,6 @@
"tux-sst-count": "Znaleziono {{PLURAL:$1|jeden wynik|$1 wyników}}",
"tux-sst-facet-language": "Języki",
"tux-sst-facet-group": "Grupa komunikatów",
- "tux-sst-facet-orphan": "(sierota)",
"tux-sst-nosolr-title": "Wyszukiwanie nie jest dostępne",
"tux-sst-nosolr-body": "W tej wiki nie ma usługi wyszukiwania tłumaczeń.",
"tux-sst-solr-offline-title": "Wyszukiwanie nie jest dostępne",
@@ -25,5 +24,6 @@
"tux-sst-outdated": "Przestarzałe tłumaczenia z $1",
"tux-sst-ellipsis-untranslated": "Brak tłumaczeń",
"tux-sst-ellipsis-outdated": "Przestarzałe tłumaczenia",
+ "tux-sst-match-message": "Wyświetlanie tłumaczeń pasujących do dowolnych słów wyszukiwania. $1",
"tux-sst-case-sensitive": "Rozróżniaj wielkość liter"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/pms.json b/www/wiki/extensions/Translate/i18n/search/pms.json
index b92c73cb..9400b265 100644
--- a/www/wiki/extensions/Translate/i18n/search/pms.json
+++ b/www/wiki/extensions/Translate/i18n/search/pms.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|Un arzultà trovà|$1 arzultà trovà}}",
"tux-sst-facet-language": "Lenghe",
"tux-sst-facet-group": "Partìe ëd mëssagi",
- "tux-sst-facet-orphan": "(orfanin)",
"tux-sst-nosolr-title": "Arserca nen disponìbil",
"tux-sst-nosolr-body": "La wiki a l'ha pa un servissi d'arserca ëd tradussion."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/ps.json b/www/wiki/extensions/Translate/i18n/search/ps.json
index 2fa0a896..767d32cb 100644
--- a/www/wiki/extensions/Translate/i18n/search/ps.json
+++ b/www/wiki/extensions/Translate/i18n/search/ps.json
@@ -11,7 +11,6 @@
"tux-sst-search-ph": "ژباړې پلټل",
"tux-sst-facet-language": "ژبې",
"tux-sst-facet-group": "پيغام ډلې",
- "tux-sst-facet-orphan": "(یتیم)",
"tux-sst-next": "راتلونکی ›",
"tux-sst-prev": "‹ پخوانی",
"tux-sst-default": "ژباړې",
diff --git a/www/wiki/extensions/Translate/i18n/search/pt-br.json b/www/wiki/extensions/Translate/i18n/search/pt-br.json
index f42adfc2..3d203211 100644
--- a/www/wiki/extensions/Translate/i18n/search/pt-br.json
+++ b/www/wiki/extensions/Translate/i18n/search/pt-br.json
@@ -1,8 +1,35 @@
{
"@metadata": {
"authors": [
- "Luckas"
+ "Luckas",
+ "Felipe L. Ewald",
+ "TheEduGobi",
+ "Eduardo Addad de Oliveira"
]
},
- "tux-sst-edit": "Editar tradução"
+ "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": "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",
+ "tux-sst-nosolr-title": "Pesquisa indisponível",
+ "tux-sst-nosolr-body": "Esta wiki não possui um serviço de pesquisa de tradução.",
+ "tux-sst-solr-offline-title": "Pesquisa indisponível",
+ "tux-sst-solr-offline-body": "O serviço de pesquisa está temporariamente indisponível.",
+ "tux-sst-next": "Próximo »",
+ "tux-sst-prev": "‹ Anterior",
+ "tux-sst-default": "Traduções",
+ "tux-sst-translated": "Traduções de $1",
+ "tux-sst-untranslated": "Sem tradução de $1",
+ "tux-sst-outdated": "Traduções desatualizadas de $1",
+ "tux-sst-ellipsis-untranslated": "Sem tradução",
+ "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-error-offset": "Nenhum outro resultado de pesquisa pode ser exibido. Por favor, restrinja sua pesquisa.",
+ "tux-sst-error-language": "Esse idioma não pode ser usado com este tipo de pesquisa."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/pt.json b/www/wiki/extensions/Translate/i18n/search/pt.json
index 683da2bc..c608f502 100644
--- a/www/wiki/extensions/Translate/i18n/search/pt.json
+++ b/www/wiki/extensions/Translate/i18n/search/pt.json
@@ -16,7 +16,6 @@
"tux-sst-count": "{{PLURAL:$1|Foi encontrado um resultado|Foram encontrados $1 resultados}}",
"tux-sst-facet-language": "Idiomas",
"tux-sst-facet-group": "Grupos de mensagens",
- "tux-sst-facet-orphan": "(orfãs)",
"tux-sst-nosolr-title": "Pesquisa indisponível",
"tux-sst-nosolr-body": "Esta wiki não tem um serviço de pesquisa de traduções.",
"tux-sst-solr-offline-title": "Pesquisa indisponível",
@@ -25,11 +24,13 @@
"tux-sst-prev": "‹ Anteriores",
"tux-sst-default": "Traduções",
"tux-sst-translated": "Traduções para $1",
- "tux-sst-untranslated": "Nenhuma tradução de $1",
+ "tux-sst-untranslated": "Sem tradução de $1",
"tux-sst-outdated": "Traduções desatualizadas de $1",
"tux-sst-ellipsis-untranslated": "Nenhuma tradução",
"tux-sst-ellipsis-outdated": "Traduções desatualizadas",
- "tux-sst-link-all-match": "Solicitar todas as palavras.",
- "tux-sst-match-message": "Mostrar as traduções que correspondam a nenhuma das palavras pesquisadas. $1",
- "tux-sst-case-sensitive": "Maiúsculas e minúsculas"
+ "tux-sst-link-all-match": "Traduções com todas as palavras pesquisadas.",
+ "tux-sst-match-message": "A mostrar as traduções que contêm qualquer das palavras pesquisadas. $1",
+ "tux-sst-case-sensitive": "Maiúsculas e minúsculas",
+ "tux-sst-error-offset": "Não é possível mostrar mais resultados de pesquisa. Torne a pesquisa mais restrita, por favor.",
+ "tux-sst-error-language": "Esta língua não pode ser usada com este tipo de pesquisa."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/qqq.json b/www/wiki/extensions/Translate/i18n/search/qqq.json
index 5090dbd1..073b5268 100644
--- a/www/wiki/extensions/Translate/i18n/search/qqq.json
+++ b/www/wiki/extensions/Translate/i18n/search/qqq.json
@@ -14,8 +14,8 @@
"tux-sst-search": "A button text.\n{{Identical|Search}}",
"tux-sst-search-ph": "Placeholder text in input field.\n{{Identical|Search translation}}",
"tux-sst-count": "Parameters:\n* $1 - the number of search results",
- "tux-sst-facet-language": "Label for a facet in [[Special:TranslationSearch]].\n{{Identical|Language}}",
- "tux-sst-facet-group": "Label for a facet in [[Special:TranslationSearch]].\n{{Identical|Message group}}",
+ "tux-sst-facet-language": "Label for a facet in [[Special:SearchTranslations]].\n{{Identical|Language}}",
+ "tux-sst-facet-group": "Label for a facet in [[Special:SearchTranslations]].\n{{Identical|Message group}}",
"tux-sst-nosolr-title": "Used as title of error page.\n\nThe body of error message is {{msg-mw|Tux-sst-nosolr-body}}.\n{{Identical|Search unavailable}}",
"tux-sst-nosolr-body": "Used as error message.\n\nThe page title for this message is {{msg-mw|Tux-sst-nosolr-title}}.",
"tux-sst-solr-offline-title": "Used as title of error page.\n\nThe body of error message is {{msg-mw|Tux-sst-solr-offline-body}}.\n{{Identical|Search unavailable}}",
@@ -30,5 +30,7 @@
"tux-sst-ellipsis-outdated": "Used as label for an ellipsis to hide outdated messages.",
"tux-sst-link-all-match": "Link to filter the results to match all search words.",
"tux-sst-match-message": "Used to inform users about an option to get results for all search words. Parameters:\n* $1 - {{msg-mw|tux-sst-link-all-match}}.",
- "tux-sst-case-sensitive": "Label for a case sensitive checkbox"
+ "tux-sst-case-sensitive": "Label for a case sensitive checkbox",
+ "tux-sst-error-offset": "Shown on Special:SearchTranslations when offset is too large.",
+ "tux-sst-error-language": "Shown on Special:SearchTranslations when search query is invalid."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/qu.json b/www/wiki/extensions/Translate/i18n/search/qu.json
index 10ecb4f0..4fe145fa 100644
--- a/www/wiki/extensions/Translate/i18n/search/qu.json
+++ b/www/wiki/extensions/Translate/i18n/search/qu.json
@@ -4,5 +4,9 @@
"AlimanRuna"
]
},
- "tux-sst-facet-language": "Rimaykuna"
+ "tux-sst-edit": "T'ikrasqata llamk'apuy",
+ "tux-sst-search-ph": "T'ikrasqakunata maskay",
+ "tux-sst-facet-language": "Rimaykuna",
+ "tux-sst-untranslated": "$1 nisqaqa manam t'ikrasqachu",
+ "tux-sst-ellipsis-untranslated": "Mana t'ikrasqa"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/ro.json b/www/wiki/extensions/Translate/i18n/search/ro.json
index 36e3ed80..1463c6b7 100644
--- a/www/wiki/extensions/Translate/i18n/search/ro.json
+++ b/www/wiki/extensions/Translate/i18n/search/ro.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|Un rezultat găsit|$1 rezultate găsite|$1 de rezultate găsite}}",
"tux-sst-facet-language": "Limbi",
"tux-sst-facet-group": "Grupuri de mesaje",
- "tux-sst-facet-orphan": "(orfan)",
"tux-sst-nosolr-title": "Căutarea nu este disponibilă",
"tux-sst-nosolr-body": "Acest wiki nu dispune de un serviciu de căutare a traducerilor.",
"tux-sst-solr-offline-title": "Căutarea nu este disponibilă",
diff --git a/www/wiki/extensions/Translate/i18n/search/roa-tara.json b/www/wiki/extensions/Translate/i18n/search/roa-tara.json
index c4df8907..8611b471 100644
--- a/www/wiki/extensions/Translate/i18n/search/roa-tara.json
+++ b/www/wiki/extensions/Translate/i18n/search/roa-tara.json
@@ -12,7 +12,6 @@
"tux-sst-count": "{{PLURAL:$1|'Nu resultate acchiate|$1 resultate acchiate}}",
"tux-sst-facet-language": "Lènghe",
"tux-sst-facet-group": "Gruppe de messàgge",
- "tux-sst-facet-orphan": "(orfane)",
"tux-sst-nosolr-title": "Ricerche non disponibbile",
"tux-sst-nosolr-body": "Sta uicchi non g'ave 'nu servizie de ricerche pe le traduziune.",
"tux-sst-solr-offline-title": "Ricerche non disponibbile",
@@ -27,5 +26,7 @@
"tux-sst-ellipsis-outdated": "Traduziune non aggiornate",
"tux-sst-link-all-match": "Vole tutte le parole de ricerche.",
"tux-sst-match-message": "Fà 'ndrucà le traduziune ca s'accocchiane cu quacche parole de ricerche. $1",
- "tux-sst-case-sensitive": "Sensibbile a le maiuscole/minuscole"
+ "tux-sst-case-sensitive": "Sensibbile a le maiuscole/minuscole",
+ "tux-sst-error-offset": "Nisciune otre resultate d'a recerche pò essere 'ndrucate. Pe piacere accurce 'a recerca toje.",
+ "tux-sst-error-language": "Sta lènghe non ge pò essere ausate cu stu tipe de recerche."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/ru.json b/www/wiki/extensions/Translate/i18n/search/ru.json
index 7c4aa8f6..4dce82dd 100644
--- a/www/wiki/extensions/Translate/i18n/search/ru.json
+++ b/www/wiki/extensions/Translate/i18n/search/ru.json
@@ -4,17 +4,21 @@
"Kaganer",
"Lockal",
"Okras",
- "Translatobecomer"
+ "Translatobecomer",
+ "Mailman",
+ "Ole Yves",
+ "Stjn",
+ "Vlad5250"
]
},
"searchtranslations": "Поиск переводов",
"tux-sst-edit": "Редактировать перевод",
+ "tux-sst-view-foreign": "Смотреть в $1",
"tux-sst-search": "Найти",
"tux-sst-search-ph": "Поиск переводов",
"tux-sst-count": "{{PLURAL:$1|Найден $1 результат|Найдены $1 результата|Найдено $1 результатов}}",
"tux-sst-facet-language": "Языки",
"tux-sst-facet-group": "Группы сообщений",
- "tux-sst-facet-orphan": "(сирота)",
"tux-sst-nosolr-title": "Поиск недоступен",
"tux-sst-nosolr-body": "В этой вики отсутствует сервис поиска переводов.",
"tux-sst-solr-offline-title": "Поиск недоступен",
@@ -22,7 +26,14 @@
"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-case-sensitive": "с учётом регистра"
+ "tux-sst-link-all-match": "Считать обязательными все поисковые слова.",
+ "tux-sst-match-message": "Показаны переводы, которые соответствуют любому из поисковых слов. $1",
+ "tux-sst-case-sensitive": "с учётом регистра",
+ "tux-sst-error-offset": "Больше невозможно показать результаты. Пожалуйста, уточните поиск.",
+ "tux-sst-error-language": "Этот язык не может использоваться для такого типа поиска."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/sd.json b/www/wiki/extensions/Translate/i18n/search/sd.json
new file mode 100644
index 00000000..57e8deba
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/sd.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mehtab ahmed"
+ ]
+ },
+ "tux-sst-next": "اڳيون",
+ "tux-sst-prev": "‹ پويون",
+ "tux-sst-link-all-match": "ڳولا جا سڀ لفظ گھرجن ٿا."
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/sk.json b/www/wiki/extensions/Translate/i18n/search/sk.json
index 3c5681d6..42e22ce0 100644
--- a/www/wiki/extensions/Translate/i18n/search/sk.json
+++ b/www/wiki/extensions/Translate/i18n/search/sk.json
@@ -2,9 +2,11 @@
"@metadata": {
"authors": [
"Sudo77(new)",
- "Kusavica"
+ "Kusavica",
+ "Helix84"
]
},
+ "tux-sst-edit": "Upraviť preklad",
"tux-sst-search": "Hľadať",
"tux-sst-facet-language": "Jazyky",
"tux-sst-next": "Ďalej ›",
diff --git a/www/wiki/extensions/Translate/i18n/search/sl.json b/www/wiki/extensions/Translate/i18n/search/sl.json
new file mode 100644
index 00000000..cc37e744
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/sl.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Janezdrilc"
+ ]
+ },
+ "searchtranslations": "Išči prevode",
+ "tux-sst-edit": "Uredi prevod",
+ "tux-sst-view-foreign": "Ogled na: $1",
+ "tux-sst-search": "Išči",
+ "tux-sst-search-ph": "Išči prevode",
+ "tux-sst-count": "{{PLURAL:$1|En najden zadetek|$1 najdena zadetka|$1 najdeni zadetki|$1 najdenih zadetkov}}",
+ "tux-sst-facet-language": "Jeziki",
+ "tux-sst-facet-group": "Skupine sporočil",
+ "tux-sst-nosolr-title": "Iskanje ni na voljo",
+ "tux-sst-nosolr-body": "Ta wiki ne omogoča iskanje prevodov.",
+ "tux-sst-solr-offline-title": "Iskanje ni na voljo",
+ "tux-sst-solr-offline-body": "Iskanje trenutno ni na voljo.",
+ "tux-sst-next": "Naslednji ›",
+ "tux-sst-prev": "‹ Prejšnji",
+ "tux-sst-default": "Prevodi",
+ "tux-sst-translated": "Prevodi iz jezika: $1",
+ "tux-sst-untranslated": "Ni prevodov iz jezika: $1",
+ "tux-sst-outdated": "Zastareli prevodi iz jezika: $1",
+ "tux-sst-ellipsis-untranslated": "Brez prevoda",
+ "tux-sst-ellipsis-outdated": "Zastareli prevodi",
+ "tux-sst-link-all-match": "Zahteva vse besede iskanja.",
+ "tux-sst-match-message": "Prikazuje prevode, ki se ujemajo s katerokoli od vpisanih besed. $1",
+ "tux-sst-case-sensitive": "Razlikuj velike in male črke"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/sr-ec.json b/www/wiki/extensions/Translate/i18n/search/sr-ec.json
index 4a73c27b..dfe56baa 100644
--- a/www/wiki/extensions/Translate/i18n/search/sr-ec.json
+++ b/www/wiki/extensions/Translate/i18n/search/sr-ec.json
@@ -3,21 +3,32 @@
"authors": [
"Милан Јелисавчић",
"Milicevic01",
- "Сербијана"
+ "Сербијана",
+ "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 резултата пронађено}}",
+ "tux-sst-search-ph": "Претражите преводе",
+ "tux-sst-count": "{{PLURAL:$1|Пронађен је један резултат|Пронађена су $1 резултата|Пронађено је $1 резултата|0=Резултати нису пронађени}}",
"tux-sst-facet-language": "Језици",
"tux-sst-facet-group": "Групе порука",
- "tux-sst-facet-orphan": "(сироче)",
- "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-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/www/wiki/extensions/Translate/i18n/search/sr-el.json b/www/wiki/extensions/Translate/i18n/search/sr-el.json
new file mode 100644
index 00000000..e0e56ede
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/sr-el.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "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/www/wiki/extensions/Translate/i18n/search/sv.json b/www/wiki/extensions/Translate/i18n/search/sv.json
index 7569f6da..3956a17f 100644
--- a/www/wiki/extensions/Translate/i18n/search/sv.json
+++ b/www/wiki/extensions/Translate/i18n/search/sv.json
@@ -13,7 +13,6 @@
"tux-sst-count": "{{PLURAL:$1|Ett|$1}} resultat hittades",
"tux-sst-facet-language": "Språk",
"tux-sst-facet-group": "Meddelandegrupper",
- "tux-sst-facet-orphan": "(föräldralös)",
"tux-sst-nosolr-title": "Sökning är inte tillgänglig",
"tux-sst-nosolr-body": "Denna wiki har inte en tjänst för att söka efter översättningar.",
"tux-sst-solr-offline-title": "Sökning är inte tillgänglig",
@@ -26,6 +25,8 @@
"tux-sst-outdated": "Föråldrade översättningar från $1",
"tux-sst-ellipsis-untranslated": "Ingen översättning",
"tux-sst-ellipsis-outdated": "Föråldrade översättningar",
+ "tux-sst-link-all-match": "Kräv alla sökord.",
"tux-sst-match-message": "Visar översättningar som överensstämmer något sökord. $1",
- "tux-sst-case-sensitive": "Skiftlägeskänsligt"
+ "tux-sst-case-sensitive": "Skiftlägeskänsligt",
+ "tux-sst-error-language": "Detta språk kan inte användas med denna sökningstyp."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/tay.json b/www/wiki/extensions/Translate/i18n/search/tay.json
new file mode 100644
index 00000000..e73456df
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/tay.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Akamycoco"
+ ]
+ },
+ "tux-sst-search": "Hhkangi’"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/tcy.json b/www/wiki/extensions/Translate/i18n/search/tcy.json
new file mode 100644
index 00000000..125e1954
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/tcy.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kiranpoojary",
+ "Ravi Mundkur"
+ ]
+ },
+ "searchtranslations": "ತರ್ಜುಮೆಲೆನ್ ನಾಡ್‌ಲೆ",
+ "tux-sst-error-offset": "ನನಾತ್ ನಾಡಿನ ಪಲತಾಂಶೊಲೆನ್ ತೋಜಾವರೆ ಆಪುಜಿ.ದಯಮಲ್ತ್ ಇರೆನ ನಾಡುನೆನ್ ಸಪೂರ ಮಲ್ಪುಲೆ.",
+ "tux-sst-error-language": "ಇಂಚಿನ ಬಗೆತ ನಾಡುನೆಕ್ಕ್ ಈ ಭಾಷೆನ್ ಉಪಯೋಗಿಸಾವರೆ ಆಪುಜಿ."
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/te.json b/www/wiki/extensions/Translate/i18n/search/te.json
new file mode 100644
index 00000000..fdc2708f
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/te.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Veeven"
+ ]
+ },
+ "tux-sst-facet-language": "భాషలు",
+ "tux-sst-facet-group": "సందేశాల సమూహాలు",
+ "tux-sst-default": "అనువాదాలు",
+ "tux-sst-ellipsis-untranslated": "అనువాదం లేదు",
+ "tux-sst-ellipsis-outdated": "పాతబడిన అనువాదాలు"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/tg-cyrl.json b/www/wiki/extensions/Translate/i18n/search/tg-cyrl.json
new file mode 100644
index 00000000..2ab4a6b9
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/tg-cyrl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "ToJack"
+ ]
+ },
+ "tux-sst-search": "Ҷустуҷӯ",
+ "tux-sst-facet-language": "Забонҳо"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/th.json b/www/wiki/extensions/Translate/i18n/search/th.json
new file mode 100644
index 00000000..d87f878d
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/th.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Octahedron80"
+ ]
+ },
+ "tux-sst-count": "ค้นพบ $1 {{PLURAL:$1|ผลลัพธ์|ผลลัพธ์}}"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/tr.json b/www/wiki/extensions/Translate/i18n/search/tr.json
index dc9134d6..c3a31c39 100644
--- a/www/wiki/extensions/Translate/i18n/search/tr.json
+++ b/www/wiki/extensions/Translate/i18n/search/tr.json
@@ -5,7 +5,9 @@
"Joseph",
"Meelo",
"Sayginer",
- "McAang"
+ "McAang",
+ "Rapsar",
+ "Mirzali"
]
},
"searchtranslations": "Çevirileri ara",
@@ -15,12 +17,14 @@
"tux-sst-count": "{{PLURAL:$1|Bir sonuç bulundu|$1 sonuç bulundu|0=Sonuç bulunamadı}}",
"tux-sst-facet-language": "Diller",
"tux-sst-facet-group": "İleti grupları",
- "tux-sst-facet-orphan": "(yetim)",
"tux-sst-nosolr-title": "Arama kullanılamıyor",
"tux-sst-nosolr-body": "Bu wikide bir çeviri arama hizmeti yok.",
"tux-sst-solr-offline-title": "Arama kullanılamıyor",
"tux-sst-solr-offline-body": "Arama hizmeti geçici olarak kullanılamıyor.",
"tux-sst-next": "Sonraki ›",
"tux-sst-prev": "‹ Önceki",
- "tux-sst-match-message": "Aranan kelimelerin herhangi biriyle eşleşen çeviriler gösteriliyor. $1"
+ "tux-sst-link-all-match": "Tüm arama kelimelerini iste.",
+ "tux-sst-match-message": "Aranan kelimelerin herhangi biriyle eşleşen çeviriler gösteriliyor. $1",
+ "tux-sst-error-offset": "Daha fazla arama sonucu gösterilemez. Lütfen aramanızı daraltın.",
+ "tux-sst-error-language": "Bu dil bu tür arama ile kullanılamaz."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/tt-cyrl.json b/www/wiki/extensions/Translate/i18n/search/tt-cyrl.json
index d867271b..2e42be38 100644
--- a/www/wiki/extensions/Translate/i18n/search/tt-cyrl.json
+++ b/www/wiki/extensions/Translate/i18n/search/tt-cyrl.json
@@ -4,5 +4,6 @@
"Ильнар"
]
},
- "tux-sst-facet-language": "Телләр"
+ "tux-sst-facet-language": "Телләр",
+ "tux-sst-default": "Тәрҗемәләр"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/udm.json b/www/wiki/extensions/Translate/i18n/search/udm.json
new file mode 100644
index 00000000..ed721a07
--- /dev/null
+++ b/www/wiki/extensions/Translate/i18n/search/udm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaganer"
+ ]
+ },
+ "tux-sst-facet-language": "Кылъёс"
+}
diff --git a/www/wiki/extensions/Translate/i18n/search/uk.json b/www/wiki/extensions/Translate/i18n/search/uk.json
index bf49a35b..9dace454 100644
--- a/www/wiki/extensions/Translate/i18n/search/uk.json
+++ b/www/wiki/extensions/Translate/i18n/search/uk.json
@@ -3,7 +3,8 @@
"authors": [
"Base",
"Ата",
- "Dars"
+ "Dars",
+ "Vlad5250"
]
},
"searchtranslations": "Пошук перекладів",
@@ -14,7 +15,6 @@
"tux-sst-count": "{{PLURAL:$1|Знайдено один результат|Знайдено $1 результати|Знайдено $1 результатів}}",
"tux-sst-facet-language": "Мови",
"tux-sst-facet-group": "Групи повідомлень",
- "tux-sst-facet-orphan": "(сирота)",
"tux-sst-nosolr-title": "Пошук недоступний",
"tux-sst-nosolr-body": "У цій вікі немає служби пошуку перекладів.",
"tux-sst-solr-offline-title": "Пошук не доступний",
@@ -29,5 +29,6 @@
"tux-sst-ellipsis-outdated": "Застарілі переклади",
"tux-sst-link-all-match": "Потребуються всі слова пошуку.",
"tux-sst-match-message": "Показані переклади, в яких збігається хоча б одне із пошукових слів. $1",
- "tux-sst-case-sensitive": "Чутливий до регістру"
+ "tux-sst-case-sensitive": "Чутливий до регістру",
+ "tux-sst-error-offset": "Неможливо показати більше результатів пошуку. Будь ласка, уточніть Ваш пошук."
}
diff --git a/www/wiki/extensions/Translate/i18n/search/vi.json b/www/wiki/extensions/Translate/i18n/search/vi.json
index 735708fd..17891910 100644
--- a/www/wiki/extensions/Translate/i18n/search/vi.json
+++ b/www/wiki/extensions/Translate/i18n/search/vi.json
@@ -12,7 +12,6 @@
"tux-sst-count": "Tìm thấy $1 kết quả",
"tux-sst-facet-language": "Ngôn ngữ",
"tux-sst-facet-group": "Nhóm thông điệp",
- "tux-sst-facet-orphan": "(mồ côi)",
"tux-sst-nosolr-title": "Công cụ tìm kiếm không có sẵn",
"tux-sst-nosolr-body": "Wiki này không có công cụ tìm bản dịch.",
"tux-sst-solr-offline-title": "Công cụ tìm kiếm không có sẵn",
diff --git a/www/wiki/extensions/Translate/i18n/search/yi.json b/www/wiki/extensions/Translate/i18n/search/yi.json
index f8e925fa..cc5a41a8 100644
--- a/www/wiki/extensions/Translate/i18n/search/yi.json
+++ b/www/wiki/extensions/Translate/i18n/search/yi.json
@@ -6,16 +6,25 @@
},
"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-facet-orphan": "(יתום)",
"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-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/www/wiki/extensions/Translate/i18n/search/zh-hans.json b/www/wiki/extensions/Translate/i18n/search/zh-hans.json
index 34900085..9669099f 100644
--- a/www/wiki/extensions/Translate/i18n/search/zh-hans.json
+++ b/www/wiki/extensions/Translate/i18n/search/zh-hans.json
@@ -5,7 +5,8 @@
"Li3939108",
"Xiaomingyan",
"Yfdyh000",
- "Liuxinyu970226"
+ "Liuxinyu970226",
+ "Angrydog001"
]
},
"searchtranslations": "搜索译文",
@@ -16,7 +17,6 @@
"tux-sst-count": "{{PLURAL:$1|找到$1个结果}}",
"tux-sst-facet-language": "语言",
"tux-sst-facet-group": "信息组",
- "tux-sst-facet-orphan": "(孤立)",
"tux-sst-nosolr-title": "搜索不可用",
"tux-sst-nosolr-body": "本wiki没有译文搜索服务。",
"tux-sst-solr-offline-title": "搜索不可用",
@@ -24,12 +24,14 @@
"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": "区分大小写"
+ "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": "区分大小写",
+ "tux-sst-error-offset": "没有更多可以显示的搜索结果。请缩小搜索范围。",
+ "tux-sst-error-language": "该语言不能用于此类型的搜索。"
}
diff --git a/www/wiki/extensions/Translate/i18n/search/zh-hant.json b/www/wiki/extensions/Translate/i18n/search/zh-hant.json
index 76b344f9..0b7d0aad 100644
--- a/www/wiki/extensions/Translate/i18n/search/zh-hant.json
+++ b/www/wiki/extensions/Translate/i18n/search/zh-hant.json
@@ -3,7 +3,8 @@
"authors": [
"Cwlin0416",
"Simon Shek",
- "LNDDYL"
+ "LNDDYL",
+ "Kly"
]
},
"searchtranslations": "搜尋翻譯",
@@ -28,5 +29,7 @@
"tux-sst-ellipsis-outdated": "已過時的翻譯",
"tux-sst-link-all-match": "需要全部搜尋文字。",
"tux-sst-match-message": "顯示符合任何搜尋關鍵字的翻譯。$1",
- "tux-sst-case-sensitive": "大小寫視為相異"
+ "tux-sst-case-sensitive": "大小寫視為相異",
+ "tux-sst-error-offset": "沒有更多搜尋結果可顯示出。請縮小您的搜尋。",
+ "tux-sst-error-language": "此語言不可與此搜尋類型使用。"
}
diff --git a/www/wiki/extensions/Translate/insertables/CombinedInsertablesSuggester.php b/www/wiki/extensions/Translate/insertables/CombinedInsertablesSuggester.php
new file mode 100644
index 00000000..5f3c468a
--- /dev/null
+++ b/www/wiki/extensions/Translate/insertables/CombinedInsertablesSuggester.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * A class to combine multiple insertables suggesters.
+ */
+class CombinedInsertablesSuggester implements InsertablesSuggester {
+
+ /**
+ * @var InsertablesSuggester[]
+ */
+ protected $suggesters = [];
+
+ /**
+ * @param InsertablesSuggester[] $suggesters Array of InsertablesSuggester objects to combine.
+ */
+ public function __construct( $suggesters = [] ) {
+ $this->suggesters = $suggesters;
+ }
+
+ public function getInsertables( $text ) {
+ $insertables = [];
+ foreach ( $this->suggesters as $suggester ) {
+ $new = $suggester->getInsertables( $text );
+ $insertables = array_merge( $insertables, $new );
+ }
+
+ return array_unique( $insertables, SORT_REGULAR );
+ }
+}
diff --git a/www/wiki/extensions/Translate/insertables/Insertable.php b/www/wiki/extensions/Translate/insertables/Insertable.php
index 5b67d3ef..bab7adff 100644
--- a/www/wiki/extensions/Translate/insertables/Insertable.php
+++ b/www/wiki/extensions/Translate/insertables/Insertable.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
diff --git a/www/wiki/extensions/Translate/insertables/InsertablesSuggester.php b/www/wiki/extensions/Translate/insertables/InsertablesSuggester.php
index c02a7aad..70cc9702 100644
--- a/www/wiki/extensions/Translate/insertables/InsertablesSuggester.php
+++ b/www/wiki/extensions/Translate/insertables/InsertablesSuggester.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
diff --git a/www/wiki/extensions/Translate/insertables/MediaWikiInsertablesSuggester.php b/www/wiki/extensions/Translate/insertables/MediaWikiInsertablesSuggester.php
index f4a9cbff..11aea35b 100644
--- a/www/wiki/extensions/Translate/insertables/MediaWikiInsertablesSuggester.php
+++ b/www/wiki/extensions/Translate/insertables/MediaWikiInsertablesSuggester.php
@@ -2,7 +2,7 @@
/**
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -12,27 +12,34 @@
*/
class MediaWikiInsertablesSuggester {
public function getInsertables( $text ) {
- $insertables = array();
+ $insertables = [];
- $matches = array();
+ $matches = [];
preg_match_all( '/\$(1[a-z]+|[0-9]+)/', $text, $matches, PREG_SET_ORDER );
- $new = array_map( function( $match ) {
+ $new = array_map( function ( $match ) {
return new Insertable( $match[0], $match[0] );
}, $matches );
$insertables = array_merge( $insertables, $new );
- $matches = array();
+ $matches = [];
preg_match_all(
'/({{((?:PLURAL|GENDER|GRAMMAR):[^|]*)\|).*?(}})/i',
$text,
$matches,
PREG_SET_ORDER
);
- $new = array_map( function( $match ) {
+ $new = array_map( function ( $match ) {
return new Insertable( $match[2], $match[1], $match[3] );
}, $matches );
$insertables = array_merge( $insertables, $new );
+ $matches = [];
+ preg_match_all( '/<\/?[a-z]+>/', $text, $matches, PREG_SET_ORDER );
+ $new = array_map( function ( $match ) {
+ return new Insertable( $match[0], $match[0] );
+ }, $matches );
+ $insertables = array_merge( $insertables, $new );
+
return $insertables;
}
}
diff --git a/www/wiki/extensions/Translate/insertables/NumericalParameterInsertablesSuggester.php b/www/wiki/extensions/Translate/insertables/NumericalParameterInsertablesSuggester.php
new file mode 100644
index 00000000..13ffd4af
--- /dev/null
+++ b/www/wiki/extensions/Translate/insertables/NumericalParameterInsertablesSuggester.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Insertables suggester for numerical parameters such as $1, $2, $3
+ *
+ * @file
+ * @author Geoffrey Mon
+ * @license GPL-2.0-or-later
+ */
+
+class NumericalParameterInsertablesSuggester implements InsertablesSuggester {
+ public function getInsertables( $text ) {
+ $insertables = [];
+
+ // $1, $2, $3 etc.
+ $matches = [];
+ preg_match_all(
+ '/\$\d+/',
+ $text,
+ $matches,
+ PREG_SET_ORDER
+ );
+ $new = array_map( function ( $match ) {
+ return new Insertable( $match[0], $match[0] );
+ }, $matches );
+ $insertables = array_merge( $insertables, $new );
+
+ return $insertables;
+ }
+}
diff --git a/www/wiki/extensions/Translate/insertables/TranslatablePageInsertablesSuggester.php b/www/wiki/extensions/Translate/insertables/TranslatablePageInsertablesSuggester.php
index adc69768..61582606 100644
--- a/www/wiki/extensions/Translate/insertables/TranslatablePageInsertablesSuggester.php
+++ b/www/wiki/extensions/Translate/insertables/TranslatablePageInsertablesSuggester.php
@@ -2,7 +2,7 @@
/**
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,7 +16,7 @@ class TranslatablePageInsertablesSuggester extends MediaWikiInsertablesSuggester
// Translatable pages allow naming the variables. Basically anything is
// allowed in a variable name, but here we are stricter to avoid too many
// false positives.
- $matches = array();
+ $matches = [];
preg_match_all( '/\$([a-zA-Z0-9-_]+)/', $text, $matches, PREG_SET_ORDER );
$new = array_map( function ( $match ) {
diff --git a/www/wiki/extensions/Translate/messagegroups/AggregateMessageGroup.php b/www/wiki/extensions/Translate/messagegroups/AggregateMessageGroup.php
index 1dae741e..040521d5 100644
--- a/www/wiki/extensions/Translate/messagegroups/AggregateMessageGroup.php
+++ b/www/wiki/extensions/Translate/messagegroups/AggregateMessageGroup.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2010-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -24,7 +24,7 @@ class AggregateMessageGroup extends MessageGroupBase {
}
public function load( $code ) {
- $messages = array();
+ $messages = [];
/**
* @var $group MessageGroup
@@ -46,7 +46,7 @@ class AggregateMessageGroup extends MessageGroupBase {
public function getGroups() {
if ( !isset( $this->groups ) ) {
- $groups = array();
+ $groups = [];
$ids = (array)$this->conf['GROUPS'];
$ids = MessageGroups::expandWildcards( $ids );
@@ -76,14 +76,14 @@ class AggregateMessageGroup extends MessageGroupBase {
}
protected function loadMessagesFromCache( $groups ) {
- $messages = array();
+ $messages = [];
foreach ( $groups as $group ) {
if ( $group instanceof MessageGroupOld ) {
$messages += $group->getDefinitions();
continue;
}
- if ( $group instanceof AggregateMessageGroup ) {
+ if ( $group instanceof self ) {
$messages += $this->loadMessagesFromCache( $group->getGroups() );
continue;
}
@@ -143,7 +143,7 @@ class AggregateMessageGroup extends MessageGroupBase {
}
public function getTags( $type = null ) {
- $tags = array();
+ $tags = [];
/**
* @var $group MessageGroup
@@ -156,23 +156,25 @@ class AggregateMessageGroup extends MessageGroupBase {
}
public function getKeys() {
- $keys = array();
+ $keys = [];
/**
* @var $group MessageGroup
*/
foreach ( $this->getGroups() as $group ) {
// @todo Not all oldstyle groups have getKeys yet
if ( method_exists( $group, 'getKeys' ) ) {
- $keys = array_merge( $keys, $group->getKeys() );
+ $moreKeys = $group->getKeys();
} else {
- $keys = array_keys( $group->getDefinitions() );
+ $moreKeys = array_keys( $group->getDefinitions() );
+ }
+
+ // Array merge is *really* slow (tested in PHP 7.1), so avoiding it. A loop
+ // followed by array_unique (which we need anyway) is magnitudes faster.
+ foreach ( $moreKeys as $key ) {
+ $keys[] = $key;
}
}
- /* In case some groups are included directly and indirectly
- * via other subgroup, we might get the same keys multiple
- * times. Since this is a list we need to remove duplicates
- * manually */
- return array_unique( $keys );
+ return array_values( array_unique( $keys ) );
}
}
diff --git a/www/wiki/extensions/Translate/messagegroups/FileBasedMessageGroup.php b/www/wiki/extensions/Translate/messagegroups/FileBasedMessageGroup.php
index a36dfd69..627a7f89 100644
--- a/www/wiki/extensions/Translate/messagegroups/FileBasedMessageGroup.php
+++ b/www/wiki/extensions/Translate/messagegroups/FileBasedMessageGroup.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2010-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -22,22 +22,22 @@ class FileBasedMessageGroup extends MessageGroupBase implements MetaYamlSchemaEx
/**
* Constructs a FileBasedMessageGroup from any normal message group.
* Useful for doing special Gettext exports from any group.
- * @param $group MessageGroup
- * @return FileBasedMessageGroup
+ * @param MessageGroup $group
+ * @return self
*/
public static function newFromMessageGroup( $group ) {
- $conf = array(
- 'BASIC' => array(
- 'class' => 'FileBasedMessageGroup',
+ $conf = [
+ 'BASIC' => [
+ 'class' => self::class,
'id' => $group->getId(),
'label' => $group->getLabel(),
'namespace' => $group->getNamespace(),
- ),
- 'FILES' => array(
+ ],
+ 'FILES' => [
'sourcePattern' => '',
'targetPattern' => '',
- ),
- );
+ ],
+ ];
return MessageGroupBase::factory( $conf );
}
@@ -51,7 +51,7 @@ class FileBasedMessageGroup extends MessageGroupBase implements MetaYamlSchemaEx
$ffs = $this->getFFS();
$data = $ffs->read( $code );
- return $data ? $data['MESSAGES'] : array();
+ return $data ? $data['MESSAGES'] : [];
}
/**
@@ -110,17 +110,15 @@ class FileBasedMessageGroup extends MessageGroupBase implements MetaYamlSchemaEx
* @since 2014.02 Made public
*/
public function replaceVariables( $pattern, $code ) {
- // @codingStandardsIgnoreStart Ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
global $IP, $wgTranslateGroupRoot;
- // @codingStandardsIgnoreEnd
- $variables = array(
+ $variables = [
'%CODE%' => $this->mapCode( $code ),
'%MWROOT%' => $IP,
'%GROUPROOT%' => $wgTranslateGroupRoot,
- );
+ ];
- Hooks::run( 'TranslateMessageGroupPathVariables', array( $this, &$variables ) );
+ Hooks::run( 'TranslateMessageGroupPathVariables', [ $this, &$variables ] );
return str_replace( array_keys( $variables ), array_values( $variables ), $pattern );
}
@@ -150,37 +148,37 @@ class FileBasedMessageGroup extends MessageGroupBase implements MetaYamlSchemaEx
}
public static function getExtraSchema() {
- $schema = array(
- 'root' => array(
+ $schema = [
+ 'root' => [
'_type' => 'array',
- '_children' => array(
- 'FILES' => array(
+ '_children' => [
+ 'FILES' => [
'_type' => 'array',
- '_children' => array(
- 'class' => array(
+ '_children' => [
+ 'class' => [
'_type' => 'text',
'_not_empty' => true,
- ),
- 'codeMap' => array(
+ ],
+ 'codeMap' => [
'_type' => 'array',
'_ignore_extra_keys' => true,
- '_children' => array(),
- ),
- 'definitionFile' => array(
+ '_children' => [],
+ ],
+ 'definitionFile' => [
'_type' => 'text',
- ),
- 'sourcePattern' => array(
+ ],
+ 'sourcePattern' => [
'_type' => 'text',
'_not_empty' => true,
- ),
- 'targetPattern' => array(
+ ],
+ 'targetPattern' => [
'_type' => 'text',
- ),
- )
- )
- )
- )
- );
+ ],
+ ]
+ ]
+ ]
+ ]
+ ];
return $schema;
}
diff --git a/www/wiki/extensions/Translate/messagegroups/MediaWikiExtensionMessageGroup.php b/www/wiki/extensions/Translate/messagegroups/MediaWikiExtensionMessageGroup.php
index b4a387f8..6cea415a 100644
--- a/www/wiki/extensions/Translate/messagegroups/MediaWikiExtensionMessageGroup.php
+++ b/www/wiki/extensions/Translate/messagegroups/MediaWikiExtensionMessageGroup.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -17,7 +17,7 @@ class MediaWikiExtensionMessageGroup extends FileBasedMessageGroup {
* describing them. This override method implements the logic
* to retrieve them. Also URLs are included if available.
* Needs the Configure extension.
- * @param IContextSource $context
+ * @param IContextSource|null $context
* @return string
*/
public function getDescription( IContextSource $context = null ) {
diff --git a/www/wiki/extensions/Translate/messagegroups/MessageGroup.php b/www/wiki/extensions/Translate/messagegroups/MessageGroup.php
index a22ad02d..254a7481 100644
--- a/www/wiki/extensions/Translate/messagegroups/MessageGroup.php
+++ b/www/wiki/extensions/Translate/messagegroups/MessageGroup.php
@@ -6,7 +6,7 @@
* @defgroup MessageGroup Message group
* @author Niklas Laxström
* @copyright Copyright © 2010-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -36,7 +36,7 @@ interface MessageGroup {
/**
* Returns the human readable label (as plain text).
* Parameter $context was added in 2012-10-22.
- * @param IContextSource $context Context can be used by subclasses to provide
+ * @param IContextSource|null $context Context can be used by subclasses to provide
* translated descriptions, for example.
* @return string
*/
@@ -45,10 +45,9 @@ interface MessageGroup {
/**
* Returns a longer description about the group. Description can use wikitext.
* Parameter $context was added in 2012-10-22.
- * @param IContextSource $context Context can be used by subclasses to provide
+ * @param IContextSource|null $context Context can be used by subclasses to provide
* translated descriptions, for example.
* @return string
- *
*/
public function getDescription( IContextSource $context = null );
@@ -105,7 +104,7 @@ interface MessageGroup {
/**
* Initialises a message collection with the given language code,
* message definitions and message tags.
- * @param $code
+ * @param string $code
* @return MessageCollection
*/
public function initCollection( $code );
@@ -115,20 +114,21 @@ interface MessageGroup {
* that list may be identical with the translation in the wiki. For other
* groups the messages may be loaded from a file (and differ from the
* current translations or definitions).
- * @param $code
+ * @param string $code
* @return array
*/
public function load( $code );
/**
* Shortcut for load( getSourceLanguage() ).
+ * @return string[]
*/
public function getDefinitions();
/**
* Returns message tags. If type is given, only message keys with that
* tag are returned. Otherwise an array[tag => keys] is returned.
- * @param $type string
+ * @param string|null $type
* @return array
*/
public function getTags( $type = null );
diff --git a/www/wiki/extensions/Translate/messagegroups/MessageGroupBase.php b/www/wiki/extensions/Translate/messagegroups/MessageGroupBase.php
index 45ade3c0..665e8203 100644
--- a/www/wiki/extensions/Translate/messagegroups/MessageGroupBase.php
+++ b/www/wiki/extensions/Translate/messagegroups/MessageGroupBase.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2010-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -31,7 +31,7 @@ abstract class MessageGroupBase implements MessageGroup {
}
/**
- * @param $conf
+ * @param array $conf
*
* @return MessageGroup
*/
@@ -84,7 +84,7 @@ abstract class MessageGroupBase implements MessageGroup {
}
protected function getFromConf( $section, $key ) {
- return isset( $this->conf[$section][$key] ) ? $this->conf[$section][$key] : null;
+ return $this->conf[$section][$key] ?? null;
}
/**
@@ -124,7 +124,7 @@ abstract class MessageGroupBase implements MessageGroup {
}
foreach ( $checks as $check ) {
- $checker->addCheck( array( $checker, $check ) );
+ $checker->addCheck( [ $checker, $check ] );
}
return $checker;
@@ -157,19 +157,34 @@ abstract class MessageGroupBase implements MessageGroup {
/**
* Returns the configured InsertablesSuggester if any.
* @since 2013.09
+ * @return CombinedInsertablesSuggester
*/
public function getInsertablesSuggester() {
+ $allClasses = [];
+
$class = $this->getFromConf( 'INSERTABLES', 'class' );
+ if ( $class !== null ) {
+ $allClasses[] = $class;
+ }
- if ( !$class ) {
- return null;
+ $classes = $this->getFromConf( 'INSERTABLES', 'classes' );
+ if ( $classes !== null ) {
+ $allClasses = array_merge( $allClasses, $classes );
}
- if ( !class_exists( $class ) ) {
- throw new MWException( "InsertablesSuggester class $class does not exist." );
+ array_unique( $allClasses, SORT_REGULAR );
+
+ $suggesters = [];
+
+ foreach ( $allClasses as $class ) {
+ if ( !class_exists( $class ) ) {
+ throw new MWException( "InsertablesSuggester class $class does not exist." );
+ }
+
+ $suggesters[] = new $class();
}
- return new $class();
+ return new CombinedInsertablesSuggester( $suggesters );
}
/**
@@ -192,7 +207,7 @@ abstract class MessageGroupBase implements MessageGroup {
*/
public function initCollection( $code ) {
$namespace = $this->getNamespace();
- $messages = array();
+ $messages = [];
$cache = new MessageGroupCache( $this, $this->getSourceLanguage() );
if ( !$cache->exists() ) {
@@ -243,7 +258,7 @@ abstract class MessageGroupBase implements MessageGroup {
public function getTags( $type = null ) {
if ( $type === null ) {
- $taglist = array();
+ $taglist = [];
foreach ( $this->getRawTags() as $type => $patterns ) {
$taglist[$type] = $this->parseTags( $patterns );
@@ -258,7 +273,7 @@ abstract class MessageGroupBase implements MessageGroup {
protected function parseTags( $patterns ) {
$messageKeys = $this->getKeys();
- $matches = array();
+ $matches = [];
/**
* Collect exact keys, no point running them trough string matcher
@@ -291,7 +306,7 @@ abstract class MessageGroupBase implements MessageGroup {
protected function getRawTags( $type = null ) {
if ( !isset( $this->conf['TAGS'] ) ) {
- return array();
+ return [];
}
$tags = $this->conf['TAGS'];
@@ -303,7 +318,7 @@ abstract class MessageGroupBase implements MessageGroup {
return $tags[$type];
}
- return array();
+ return [];
}
protected function setTags( MessageCollection $collection ) {
@@ -345,7 +360,7 @@ abstract class MessageGroupBase implements MessageGroup {
global $wgTranslateWorkflowStates;
if ( !$wgTranslateWorkflowStates ) {
// Not configured
- $conf = array();
+ $conf = [];
} else {
$conf = $wgTranslateWorkflowStates;
}
@@ -361,6 +376,8 @@ abstract class MessageGroupBase implements MessageGroup {
// @todo Replace deprecated call.
$conf = $this->getWorkflowConfiguration();
+ Hooks::run( 'Translate:modifyMessageGroupStates', [ $this->getId(), &$conf ] );
+
return new MessageGroupStates( $conf );
}
@@ -370,41 +387,56 @@ abstract class MessageGroupBase implements MessageGroup {
* @return array|null The language codes as array keys.
*/
public function getTranslatableLanguages() {
+ global $wgTranslateBlacklist;
+
$groupConfiguration = $this->getConfiguration();
if ( !isset( $groupConfiguration['LANGUAGES'] ) ) {
// No LANGUAGES section in the configuration.
return null;
}
- $lists = $groupConfiguration['LANGUAGES'];
- $codes = array(); // The list of languages to return
+ $codes = array_flip( array_keys( TranslateUtils::getLanguageNames( null ) ) );
+ $lists = $groupConfiguration['LANGUAGES'];
if ( isset( $lists['blacklist'] ) ) {
$blacklist = $lists['blacklist'];
- if ( is_array( $blacklist ) ) {
- $codes = array_flip( array_keys( TranslateUtils::getLanguageNames( 'en' ) ) );
+ if ( $blacklist === '*' ) {
+ // All languages blacklisted
+ $codes = [];
+ } elseif ( is_array( $blacklist ) ) {
foreach ( $blacklist as $code ) {
unset( $codes[$code] );
}
- } else {
- // All languages blacklisted. This is very rare but not impossible.
- $codes = array();
+ }
+ } else {
+ // Treat lack of explicit blacklist the same as blacklisting everything. This way,
+ // when one defines only whitelist, it means that only those languages are allowed.
+ $codes = [];
+ }
+
+ // DWIM with $wgTranslateBlacklist, e.g. languages in that list should not unexpectedly
+ // be enabled when a whitelist is used to whitelist any language.
+ $checks = [ $this->getId(), strtok( $this->getId(), '-' ), '*' ];
+ foreach ( $checks as $check ) {
+ if ( isset( $wgTranslateBlacklist[ $check ] ) ) {
+ foreach ( array_keys( $wgTranslateBlacklist[ $check ] ) as $blacklistedCode ) {
+ unset( $codes[ $blacklistedCode ] );
+ }
}
}
- $whitelist = array();
if ( isset( $lists['whitelist'] ) ) {
$whitelist = $lists['whitelist'];
if ( $whitelist === '*' ) {
- // All languages whitelisted
+ // All languages whitelisted (except $wgTranslateBlacklist)
return null;
+ } elseif ( is_array( $whitelist ) ) {
+ foreach ( $whitelist as $code ) {
+ $codes[$code] = true;
+ }
}
}
- foreach ( $whitelist as $code ) {
- $codes[$code] = true;
- }
-
return $codes;
}
diff --git a/www/wiki/extensions/Translate/messagegroups/MessageGroupOld.php b/www/wiki/extensions/Translate/messagegroups/MessageGroupOld.php
index 4f5820e9..34af7a36 100644
--- a/www/wiki/extensions/Translate/messagegroups/MessageGroupOld.php
+++ b/www/wiki/extensions/Translate/messagegroups/MessageGroupOld.php
@@ -8,7 +8,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -24,7 +24,7 @@ abstract class MessageGroupOld implements MessageGroup {
protected $label = 'none';
/**
- * @param IContextSource $context
+ * @param IContextSource|null $context
* @return string
*/
public function getLabel( IContextSource $context = null ) {
@@ -32,7 +32,7 @@ abstract class MessageGroupOld implements MessageGroup {
}
/**
- * @param $value string
+ * @param string $value
*/
public function setLabel( $value ) {
$this->label = $value;
@@ -51,7 +51,7 @@ abstract class MessageGroupOld implements MessageGroup {
}
/**
- * @param $value string
+ * @param string $value
*/
public function setId( $value ) {
$this->id = $value;
@@ -64,12 +64,18 @@ abstract class MessageGroupOld implements MessageGroup {
*/
protected $namespace = NS_MEDIAWIKI;
- /// Get the namespace where all the messages of this group belong.
+ /**
+ * Get the namespace where all the messages of this group belong.
+ * @return int
+ */
public function getNamespace() {
return $this->namespace;
}
- /// Set the namespace where all the messages of this group belong.
+ /**
+ * Set the namespace where all the messages of this group belong.
+ * @param int $ns
+ */
public function setNamespace( $ns ) {
$this->namespace = $ns;
}
@@ -78,7 +84,7 @@ abstract class MessageGroupOld implements MessageGroup {
* List of messages that are hidden by default, but can still be translated if
* needed.
*/
- protected $optional = array();
+ protected $optional = [];
/**
* @return array
@@ -88,7 +94,7 @@ abstract class MessageGroupOld implements MessageGroup {
}
/**
- * @param $value array
+ * @param array $value
*/
public function setOptional( $value ) {
$this->optional = $value;
@@ -97,7 +103,7 @@ abstract class MessageGroupOld implements MessageGroup {
/**
* List of messages that are always hidden and cannot be translated.
*/
- protected $ignored = array();
+ protected $ignored = [];
/**
* @return array
@@ -107,7 +113,7 @@ abstract class MessageGroupOld implements MessageGroup {
}
/**
- * @param $value array
+ * @param array $value
*/
public function setIgnored( $value ) {
$this->ignored = $value;
@@ -171,7 +177,7 @@ abstract class MessageGroupOld implements MessageGroup {
}
public function load( $code ) {
- return array();
+ return [];
}
/**
@@ -197,7 +203,7 @@ abstract class MessageGroupOld implements MessageGroup {
* @return array
*/
public function getUniqueDefinitions() {
- return $this->meta ? array() : $this->getDefinitions();
+ return $this->meta ? [] : $this->getDefinitions();
}
/**
@@ -214,7 +220,7 @@ abstract class MessageGroupOld implements MessageGroup {
}
$key = strtolower( str_replace( ' ', '_', $key ) );
- return isset( $this->messages[$code][$key] ) ? $this->messages[$code][$key] : null;
+ return $this->messages[$code][$key] ?? null;
}
public static function normaliseKeys( $array ) {
@@ -222,7 +228,7 @@ abstract class MessageGroupOld implements MessageGroup {
return null;
}
- $new = array();
+ $new = [];
foreach ( $array as $key => $v ) {
$key = strtolower( str_replace( ' ', '_', $key ) );
$new[$key] = $v;
@@ -234,7 +240,7 @@ abstract class MessageGroupOld implements MessageGroup {
/**
* All the messages for this group, by language code.
*/
- protected $messages = array();
+ protected $messages = [];
/**
* Returns path to the file where translation of language code $code are.
@@ -251,7 +257,7 @@ abstract class MessageGroupOld implements MessageGroup {
}
/**
- * @param $code
+ * @param string $code
* @return bool|string
*/
public function getMessageFileWithPath( $code ) {
@@ -272,8 +278,8 @@ abstract class MessageGroupOld implements MessageGroup {
/**
* Creates a new MessageCollection for this group.
*
- * @param $code \string Language code for this collection.
- * @param $unique \bool Whether to build collection for messages unique to this
+ * @param string $code Language code for this collection.
+ * @param bool $unique Whether to build collection for messages unique to this
* group only.
* @return MessageCollection
*/
@@ -310,27 +316,30 @@ abstract class MessageGroupOld implements MessageGroup {
}
public function getTags( $type = null ) {
- $tags = array(
+ $tags = [
'optional' => $this->optional,
'ignored' => $this->ignored,
- );
+ ];
if ( !$type ) {
return $tags;
}
- return isset( $tags[$type] ) ? $tags[$type] : array();
+ return $tags[$type] ?? [];
}
/**
- * @param $code string
+ * @param string $code
* @return bool
*/
protected function isSourceLanguage( $code ) {
return $code === $this->getSourceLanguage();
}
- // Unsupported stuff, just to satisfy the new interface
+ /**
+ * Unsupported stuff, just to satisfy the new interface
+ * @param array $conf
+ */
public function setConfiguration( $conf ) {
}
@@ -348,7 +357,7 @@ abstract class MessageGroupOld implements MessageGroup {
global $wgTranslateWorkflowStates;
if ( !$wgTranslateWorkflowStates ) {
// Not configured
- $conf = array();
+ $conf = [];
} else {
$conf = $wgTranslateWorkflowStates;
}
@@ -364,6 +373,8 @@ abstract class MessageGroupOld implements MessageGroup {
// @todo Replace deprecated call.
$conf = $this->getWorkflowConfiguration();
+ Hooks::run( 'Translate:modifyMessageGroupStates', [ $this->getId(), &$conf ] );
+
return new MessageGroupStates( $conf );
}
@@ -379,6 +390,8 @@ abstract class MessageGroupOld implements MessageGroup {
protected static function addContext( Message $message, IContextSource $context = null ) {
if ( $context ) {
$message->inLanguage( $context->getLanguage() );
+ } else {
+ $message->inLanguage( 'en' );
}
return $message;
diff --git a/www/wiki/extensions/Translate/messagegroups/RecentAdditionsMessageGroup.php b/www/wiki/extensions/Translate/messagegroups/RecentAdditionsMessageGroup.php
index 6a6d6bbd..217af1e5 100644
--- a/www/wiki/extensions/Translate/messagegroups/RecentAdditionsMessageGroup.php
+++ b/www/wiki/extensions/Translate/messagegroups/RecentAdditionsMessageGroup.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -13,7 +13,7 @@
* @ingroup MessageGroup
*/
class RecentAdditionsMessageGroup extends RecentMessageGroup {
- protected $groupInfoCache = array();
+ protected $groupInfoCache = [];
public function getId() {
return '!additions';
@@ -35,14 +35,20 @@ class RecentAdditionsMessageGroup extends RecentMessageGroup {
protected function getQueryConditions() {
global $wgTranslateMessageNamespaces;
- $db = wfGetDB( DB_SLAVE );
- $conds = array(
+ $db = wfGetDB( DB_REPLICA );
+ $conds = [
'rc_title ' . $db->buildLike( $db->anyString(), '/en' ),
'rc_namespace' => $wgTranslateMessageNamespaces,
'rc_type != ' . RC_LOG,
'rc_id > ' . $this->getRCCutoff(),
- 'rc_user' => FuzzyBot::getUser()->getId(),
- );
+ ];
+
+ if ( class_exists( ActorMigration::class ) ) {
+ $conds[] = ActorMigration::newMigration()
+ ->getWhere( $db, 'rc_user', FuzzyBot::getUser() )['conds'];
+ } else {
+ $conds['rc_user'] = FuzzyBot::getUser()->getId();
+ }
return $conds;
}
@@ -52,7 +58,7 @@ class RecentAdditionsMessageGroup extends RecentMessageGroup {
* as they are not displayed in other places.
*
* @param MessageHandle $handle
- * @return boolean
+ * @return bool
*/
protected function matchingMessage( MessageHandle $handle ) {
return MessageGroups::isTranslatableMessage( $handle );
diff --git a/www/wiki/extensions/Translate/messagegroups/RecentMessageGroup.php b/www/wiki/extensions/Translate/messagegroups/RecentMessageGroup.php
index f3aaf463..60593494 100644
--- a/www/wiki/extensions/Translate/messagegroups/RecentMessageGroup.php
+++ b/www/wiki/extensions/Translate/messagegroups/RecentMessageGroup.php
@@ -6,7 +6,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -52,25 +52,26 @@ class RecentMessageGroup extends WikiMessageGroup {
}
protected function getRCCutoff() {
- $db = wfGetDB( DB_SLAVE );
+ $db = wfGetDB( DB_REPLICA );
$tables = 'recentchanges';
- $max = $db->selectField( $tables, 'MAX(rc_id)', array(), __METHOD__ );
+ $max = $db->selectField( $tables, 'MAX(rc_id)', [], __METHOD__ );
return max( 0, $max - 50000 );
}
/**
* Allows subclasses to partially customize the query.
+ * @return array
*/
protected function getQueryConditions() {
global $wgTranslateMessageNamespaces;
- $db = wfGetDB( DB_SLAVE );
- $conds = array(
+ $db = wfGetDB( DB_REPLICA );
+ $conds = [
'rc_title ' . $db->buildLike( $db->anyString(), '/' . $this->language ),
'rc_namespace' => $wgTranslateMessageNamespaces,
'rc_type != ' . RC_LOG,
'rc_id > ' . $this->getRCCutoff(),
- );
+ ];
return $conds;
}
@@ -79,7 +80,7 @@ class RecentMessageGroup extends WikiMessageGroup {
* Allows subclasses to filter out more unwanted messages.
*
* @param MessageHandle $msg
- * @return boolean
+ * @return bool
*/
protected function matchingMessage( MessageHandle $msg ) {
return true;
@@ -90,17 +91,36 @@ class RecentMessageGroup extends WikiMessageGroup {
throw new MWException( 'Language not set' );
}
- $db = wfGetDB( DB_SLAVE );
- $tables = 'recentchanges';
- $fields = array( 'rc_namespace', 'rc_title' );
+ $db = wfGetDB( DB_REPLICA );
+
+ if ( is_callable( RecentChange::class, 'getQueryInfo' ) ) {
+ $rcQuery = RecentChange::getQueryInfo();
+ $tables = $rcQuery['tables'];
+ $joins = $rcQuery['joins'];
+ } else {
+ $tables = 'recentchanges';
+ $joins = [];
+ }
+
+ $fields = [ 'rc_namespace', 'rc_title' ];
$conds = $this->getQueryConditions();
- $options = array(
+ $options = [
'ORDER BY' => 'rc_id DESC',
'LIMIT' => 5000
- );
- $res = $db->select( $tables, $fields, $conds, __METHOD__, $options );
+ ];
+ $res = $db->select( $tables, $fields, $conds, __METHOD__, $options, $joins );
+
+ $groupIdsPreload = [];
+ foreach ( $res as $row ) {
+ $title = Title::makeTitle( $row->rc_namespace, $row->rc_title );
+ $handle = new MessageHandle( $title );
+ if ( $handle->isValid() ) {
+ $groupIdsPreload[] = $handle->getGroup()->getId();
+ }
+ }
+ TranslateMetadata::preloadGroups( $groupIdsPreload );
- $defs = array();
+ $defs = [];
foreach ( $res as $row ) {
$title = Title::makeTitle( $row->rc_namespace, $row->rc_title );
$handle = new MessageHandle( $title );
diff --git a/www/wiki/extensions/Translate/messagegroups/SandboxMessageGroup.php b/www/wiki/extensions/Translate/messagegroups/SandboxMessageGroup.php
index 64556c95..f0aa1d8b 100644
--- a/www/wiki/extensions/Translate/messagegroups/SandboxMessageGroup.php
+++ b/www/wiki/extensions/Translate/messagegroups/SandboxMessageGroup.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -48,7 +48,7 @@ class SandboxMessageGroup extends WikiMessageGroup {
global $wgTranslateSandboxSuggestions, $wgTranslateSandboxLimit;
// This will contain the list of messages shown to the user
- $list = array();
+ $list = [];
// Ugly
$store = new TranslationStashStorage( wfGetDB( DB_MASTER ) );
@@ -77,12 +77,10 @@ class SandboxMessageGroup extends WikiMessageGroup {
$list[$index] = '';
}
- // Message index of all known messages
- $mi = MessageIndex::singleton();
// Get some random keys
- $all = array_keys( $mi->retrieve() );
+ $all = MessageIndex::singleton()->getKeys();
// In case there aren't any messages
- if ( $all === array() ) {
+ if ( $all === [] ) {
return $list;
}
$min = 0;
diff --git a/www/wiki/extensions/Translate/messagegroups/WikiMessageGroup.php b/www/wiki/extensions/Translate/messagegroups/WikiMessageGroup.php
index d7b4bd5b..e7b08240 100644
--- a/www/wiki/extensions/Translate/messagegroups/WikiMessageGroup.php
+++ b/www/wiki/extensions/Translate/messagegroups/WikiMessageGroup.php
@@ -6,7 +6,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -48,12 +48,12 @@ class WikiMessageGroup extends MessageGroupOld {
* @return array Array of messages keys with definitions.
*/
public function getDefinitions() {
- $definitions = array();
+ $definitions = [];
// In theory the page could have templates that are substitued
$source = wfMessage( $this->source );
if ( $source->isDisabled() ) {
- return array();
+ return [];
}
$contents = $source->text();
diff --git a/www/wiki/extensions/Translate/messagegroups/WikiPageMessageGroup.php b/www/wiki/extensions/Translate/messagegroups/WikiPageMessageGroup.php
index cbe315d5..5208d179 100644
--- a/www/wiki/extensions/Translate/messagegroups/WikiPageMessageGroup.php
+++ b/www/wiki/extensions/Translate/messagegroups/WikiPageMessageGroup.php
@@ -5,27 +5,31 @@
* @file
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
* Wraps the translatable page sections into a message group.
* @ingroup PageTranslation MessageGroup
*/
-class WikiPageMessageGroup extends WikiMessageGroup {
+class WikiPageMessageGroup extends WikiMessageGroup implements IDBAccessObject, \Serializable {
/**
* @var Title|string
*/
protected $title;
/**
+ * @var int
+ */
+ protected $namespace = NS_TRANSLATIONS;
+
+ /**
* @param string $id
* @param Title|string $source
*/
public function __construct( $id, $source ) {
$this->id = $id;
$this->title = $source;
- $this->namespace = NS_TRANSLATIONS;
}
public function getSourceLanguage() {
@@ -59,12 +63,12 @@ class WikiPageMessageGroup extends WikiMessageGroup {
$dbr = TranslateUtils::getSafeReadDB();
$tables = 'translate_sections';
- $vars = array( 'trs_key', 'trs_text' );
- $conds = array( 'trs_page' => $this->getTitle()->getArticleID() );
- $options = array( 'ORDER BY' => 'trs_order' );
+ $vars = [ 'trs_key', 'trs_text' ];
+ $conds = [ 'trs_page' => $this->getTitle()->getArticleID() ];
+ $options = [ 'ORDER BY' => 'trs_order' ];
$res = $dbr->select( $tables, $vars, $conds, __METHOD__, $options );
- $defs = array();
+ $defs = [];
$prefix = $this->getTitle()->getPrefixedDBkey() . '/';
foreach ( $res as $r ) {
@@ -73,13 +77,25 @@ class WikiPageMessageGroup extends WikiMessageGroup {
$defs[$r->trs_key] = $section->getTextWithVariables();
}
- $new_defs = array();
+ $new_defs = [];
foreach ( $defs as $k => $v ) {
$k = str_replace( ' ', '_', $k );
$new_defs[$prefix . $k] = $v;
}
- return $this->definitions = $new_defs;
+ $this->definitions = $new_defs;
+ return $this->definitions;
+ }
+
+ /**
+ * Overriding the getLabel method and deriving the label from the title.
+ * Mainly to reduce the amount of data stored in the cache.
+ *
+ * @param IContextSource|null $context
+ * @return string
+ */
+ public function getLabel( IContextSource $context = null ) {
+ return $this->getTitle()->getPrefixedText();
}
/**
@@ -99,7 +115,7 @@ class WikiPageMessageGroup extends WikiMessageGroup {
return $this->getDefinitions();
}
- return array();
+ return [];
}
/**
@@ -108,9 +124,10 @@ class WikiPageMessageGroup extends WikiMessageGroup {
*
* @param string $key Message key
* @param string $code Language code
+ * @param int $flags READ_* class constant bitfield
* @return string|null Stored translation or null.
*/
- public function getMessage( $key, $code ) {
+ public function getMessage( $key, $code, $flags = self::READ_LATEST ) {
if ( $this->isSourceLanguage( $code ) ) {
$stuff = $this->load( $code );
@@ -119,14 +136,18 @@ class WikiPageMessageGroup extends WikiMessageGroup {
$key = $title->getPrefixedDBkey();
}
- return isset( $stuff[$key] ) ? $stuff[$key] : null;
+ return $stuff[$key] ?? null;
}
$title = Title::makeTitleSafe( $this->getNamespace(), "$key/$code" );
- $flags = RequestContext::getMain()->getRequest()->wasPosted()
- ? Revision::READ_LATEST
- : 0; // bug T95753
- $rev = Revision::newFromTitle( $title, false, $flags );
+ if ( PageTranslationHooks::$renderingContext ) {
+ $revFlags = Revision::READ_NORMAL; // bug T95753
+ } else {
+ $revFlags = ( $flags & self::READ_LATEST ) == self::READ_LATEST
+ ? Revision::READ_LATEST
+ : Revision::READ_NORMAL;
+ }
+ $rev = Revision::newFromTitle( $title, false, $revFlags );
if ( !$rev ) {
return null;
@@ -140,13 +161,11 @@ class WikiPageMessageGroup extends WikiMessageGroup {
*/
public function getChecker() {
$checker = new MediaWikiMessageChecker( $this );
- $checker->setChecks( array(
- array( $checker, 'pluralCheck' ),
- array( $checker, 'XhtmlCheck' ),
- array( $checker, 'braceBalanceCheck' ),
- array( $checker, 'pagenameMessagesCheck' ),
- array( $checker, 'miscMWChecks' )
- ) );
+ $checker->setChecks( [
+ [ $checker, 'pluralCheck' ],
+ [ $checker, 'braceBalanceCheck' ],
+ [ $checker, 'miscMWChecks' ]
+ ] );
return $checker;
}
@@ -176,4 +195,54 @@ class WikiPageMessageGroup extends WikiMessageGroup {
return $msg->plain() . $customText;
}
+
+ public function serialize() {
+ $toSerialize = [
+ 'title' => $this->getTitle()->getPrefixedText(),
+ 'id' => $this->id,
+ '_v' => 1 // version - to track incompatible changes
+ ];
+
+ // NOTE: get_class_vars returns properties before the constructor has run so if any default
+ // values have to be set for properties, do them while declaring the properties themselves.
+ // Also any properties that are object will automatically be serialized because `===`
+ // does not actually compare object properties to see that they are same.
+
+ // Using array_diff_key to unset the properties already set earlier.
+ $defaultProps = array_diff_key( get_class_vars( self::class ), $toSerialize );
+
+ foreach ( $defaultProps as $prop => $defaultVal ) {
+ if ( $this->{$prop} === $defaultVal ) {
+ continue;
+ }
+
+ $toSerialize[$prop] = $this->{$prop};
+ }
+
+ return FormatJson::encode( $toSerialize, false, FormatJson::ALL_OK );
+ }
+
+ public function unserialize( $serialized ) {
+ $deserialized = FormatJson::decode( $serialized );
+ if ( $deserialized === false ) {
+ // Unrecoverable. This should not happen but still.
+ throw new \UnexpectedValueException(
+ 'Error while deserializing to WikiPageMessageGroup object - FormatJson::decode failed. ' .
+ "Serialize string - $serialized."
+ );
+ }
+
+ // Use as needed in the future to track incompatible changes.
+ // $version = $deserialized->_v;
+ // unset($deserialized->_v);
+
+ // Only set the properties that are present in the class and the deserialized object.
+ $classProps = array_keys( get_class_vars( self::class ) );
+
+ foreach ( $classProps as $prop ) {
+ if ( property_exists( $deserialized, $prop ) ) {
+ $this->{$prop} = $deserialized->{$prop};
+ }
+ }
+ }
}
diff --git a/www/wiki/extensions/Translate/messagegroups/WorkflowStatesMessageGroup.php b/www/wiki/extensions/Translate/messagegroups/WorkflowStatesMessageGroup.php
index 415bed4a..c4a7dd74 100644
--- a/www/wiki/extensions/Translate/messagegroups/WorkflowStatesMessageGroup.php
+++ b/www/wiki/extensions/Translate/messagegroups/WorkflowStatesMessageGroup.php
@@ -6,7 +6,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -37,7 +37,7 @@ class WorkflowStatesMessageGroup extends WikiMessageGroup {
public function getDefinitions() {
$groups = MessageGroups::getAllGroups();
- $keys = array();
+ $keys = [];
/**
* @var $g MessageGroup
diff --git a/www/wiki/extensions/Translate/package.json b/www/wiki/extensions/Translate/package.json
index 3d089673..dab8e13c 100644
--- a/www/wiki/extensions/Translate/package.json
+++ b/www/wiki/extensions/Translate/package.json
@@ -4,11 +4,12 @@
"test": "grunt test"
},
"devDependencies": {
- "grunt": "0.4.5",
- "grunt-cli": "0.1.13",
- "grunt-contrib-jshint": "1.0.0",
- "grunt-jscs": "2.8.0",
- "grunt-jsonlint": "1.0.7",
- "grunt-banana-checker": "0.5.0"
+ "eslint-config-wikimedia": "0.11.0",
+ "grunt": "1.0.4",
+ "grunt-banana-checker": "0.6.0",
+ "grunt-eslint": "21.0.0",
+ "grunt-jsonlint": "1.1.0",
+ "grunt-stylelint": "0.10.1",
+ "stylelint-config-wikimedia": "0.5.0"
}
}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.css b/www/wiki/extensions/Translate/resources/css/ext.translate.css
index e1a93ff4..9b4c65d6 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.css
@@ -1,3 +1,7 @@
+.mw-translate-fuzzy {
+ background-color: #fdd;
+}
+
.mw-pt-translate-header {
font-size: x-small;
text-align: center;
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.dropdownmenu.css b/www/wiki/extensions/Translate/resources/css/ext.translate.dropdownmenu.css
index e2e54509..46d17ed8 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.dropdownmenu.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.dropdownmenu.css
@@ -1,9 +1,7 @@
.tux-dropdown-menu {
border: 1px solid #c9c9c9;
/* @noflip */
- -webkit-box-shadow: 0 3px 3px -3px rgba(0, 0, 0, 0.5);
- /* @noflip */
- box-shadow: 0 3px 3px -3px rgba(0, 0, 0, 0.5);
+ box-shadow: 0 3px 3px -3px rgba( 0, 0, 0, 0.5 );
font-size: 14px;
margin: 0;
list-style: none;
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.editor.css b/www/wiki/extensions/Translate/resources/css/ext.translate.editor.css
index 38118113..f981bf44 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.editor.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.editor.css
@@ -1,47 +1,60 @@
.tux-message-editor {
position: relative;
border: 1px solid #777;
- background-color: #FFFFFF;
+ background-color: #fff;
cursor: default;
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 2px 6px rgba( 0, 0, 0, 0.3 );
}
-/* Temporary fix for T111685 */
.grid .tux-message-editor .close {
- background: url('../images/close.png') no-repeat scroll center center transparent;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/close.svg);
+ background: no-repeat center center;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/close.svg);
- padding: 15px;
+ background-image: linear-gradient( transparent, transparent ), url( ../images/close.svg );
+ padding: 16px;
cursor: pointer;
float: right;
+ opacity: 0.87;
}
-/* Temporary fix for T111685 */
.grid .tux-message-editor .editor-info-toggle {
- padding: 15px;
+ padding: 16px;
cursor: pointer;
float: right;
}
.tux-message-editor .editor-contract {
- background: url('../images/contract-ltr.png') no-repeat scroll center center transparent;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/contract-ltr.svg);
+ background: no-repeat center center;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/contract-ltr.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/contract-ltr.svg );
}
.tux-message-editor .editor-expand {
- background: url('../images/expand-ltr.png') no-repeat scroll center center transparent;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/expand-ltr.svg);
+ background: no-repeat center center;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/expand-ltr.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/expand-ltr.svg );
}
.tux-message-editor .editcolumn {
- border-right: 1px solid #AAA;
- -webkit-transition: width 0.5s;
+ border-right: 1px solid #aaa;
transition: width 0.5s;
+ background-color: #fff;
+ z-index: 1;
+ /* Padding to have space for the arrow indicating split section */
+ padding-right: 40px;
+}
+
+.grid .tux-message-editor--expanded .editcolumn {
+ width: 100%;
+ padding-right: 5px;
+}
+
+.grid .tux-message-editor .tux-editor-titletools {
+ /* Ignore the padding added for the arrow */
+ margin-right: -40px;
+}
+
+.grid .tux-message-editor--expanded .tux-editor-titletools {
+ margin-right: -5px;
}
.tux-message-editor textarea {
@@ -49,6 +62,8 @@
font-size: 16px;
/* The (30px + 5px paddings) 40px for bottom is for the insertables */
padding: 5px 5px 40px 5px;
+ /* Normalize margin across skins (esp. Timeless) */
+ margin: 0;
height: 100px;
min-height: 150px;
overflow-y: auto;
@@ -56,6 +71,23 @@
z-index: 100;
/* We have automatic resizing for height, and horizontal makes no sense */
resize: none;
+ /* Avoid weird extra space appearing at the bottom of enclosing div when
+ * the default value inline-block is used in Chrome.
+ * https://stackoverflow.com/questions/5196424/inconsistent-textarea-handling-in-browsers */
+ display: block;
+}
+
+.tux-editor-editsummary-block input {
+ border: 1px solid #c0c0c0;
+ font-size: 14px;
+ width: 100%;
+ height: 30px;
+ margin: 5px 0 0;
+ padding: 1px 4px;
+}
+
+.tux-editor-editsummary-block input:disabled {
+ background-color: #f8f8f8;
}
.tux-message-editor .editarea {
@@ -64,7 +96,7 @@
/* Temporary fix for T111685 */
.grid .tux-message-editor .messagekey {
- color: #252525;
+ color: #222;
font-size: 13px;
font-weight: bold;
padding: 5px 0 5px 10px;
@@ -72,7 +104,7 @@
}
.tux-message-editor .messagekey .caret {
- border-top: 4px solid #252525;
+ border-top: 4px solid #222;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
display: inline-block;
@@ -96,17 +128,17 @@
font-size: 14px;
}
-.tux-message-editor .button {
- text-overflow: ellipsis;
- font-size: 16px;
- height: 35px;
- margin: 10px 5px;
-}
-
.tux-message-editor .shortcutinfo {
+ color: #54595d;
font-size: 13px;
- color: #555;
padding: 0 5px 5px 10px;
+ display: none;
+}
+
+@media screen and ( min-width: 980px ) {
+ .tux-message-editor .shortcutinfo {
+ display: block;
+ }
}
.tux-message-editor .infocolumn-block .infocolumn {
@@ -122,36 +154,38 @@
/* Temporary fix for T111685 */
.grid .tux-message-editor .infocolumn-block {
font-size: 12pt;
- background: #FCFCFC;
+ background: #fcfcfc;
position: absolute;
top: 0;
right: 0;
bottom: 0;
padding: 0;
- -webkit-transition: width 0.5s;
transition: width 0.5s;
}
-.tux-message-editor .infocolumn-block .caret:before {
+.tux-message-editor__caret:before,
+.tux-message-editor__caret:after {
border-top: 20px solid transparent;
- border-right: 20px solid #AAA;
+ border-right: 20px solid #aaa;
border-bottom: 20px solid transparent;
- content: "";
+ content: '';
display: inline-block;
left: -21px;
position: absolute;
bottom: 50%;
+ z-index: 2;
+ transition: visibility 0s 0.5s;
}
-.tux-message-editor .infocolumn-block .caret:after {
- border-top: 20px solid transparent;
- border-right: 20px solid #FCFCFC;
- border-bottom: 20px solid transparent;
- content: "";
- display: inline-block;
+.tux-message-editor__caret:after {
+ border-right: 20px solid #fcfcfc;
left: -20px;
- position: absolute;
- bottom: 50%;
+}
+
+.tux-message-editor--expanded .tux-message-editor__caret:before,
+.tux-message-editor--expanded .tux-message-editor__caret:after {
+ visibility: hidden;
+ transition: visibility 0s 0s;
}
.infocolumn-block .infocolumn .message-desc-editor {
@@ -172,7 +206,7 @@
.infocolumn-block .infocolumn .message-desc.long {
font-size: 14px;
- border-bottom: 1px solid #DDD;
+ border-bottom: 1px solid #ddd;
}
.infocolumn-block .infocolumn .message-desc.compact {
@@ -188,16 +222,14 @@
.message-desc-control .read-more {
font-size: 14px;
- color: #3366BB;
+ color: #36c;
cursor: pointer;
margin-right: 5px;
}
.message-desc-edit {
- background: transparent url(../images/action-edit.png) left center no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/action-edit.svg);
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/action-edit.svg);
+ background: left center no-repeat;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/action-edit.svg );
background-size: 18px 18px;
padding-left: 19px;
}
@@ -213,7 +245,7 @@
.in-other-language {
font-size: 14px;
border: 1px solid #ddd;
- border-left: 2px solid #3366BB;
+ border-left: 2px solid #36c;
padding: 5px 5px 5px 10px;
background-color: #f5f5f5;
}
@@ -226,11 +258,11 @@
.tm-suggestion:hover,
.in-other-language:hover {
cursor: pointer;
- box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 3px rgba( 0, 0, 0, 0.2 );
}
.in-other-language .language {
- color: #565656;
+ color: #54595d;
overflow: hidden;
text-overflow: ellipsis;
}
@@ -250,11 +282,11 @@
}
.tux-warning {
- background-color: #FFFFCC;
+ background-color: #ffc;
}
.tux-highlight {
- background-color: #C9C9C9;
+ background-color: #c9c9c9;
}
.tux-warning-message {
@@ -273,7 +305,7 @@
}
.editarea .tux-more-warnings {
- background-color: #FBF6AD;
+ background-color: #fbf6ad;
position: absolute;
right: 0;
padding: 2px 5px;
@@ -283,31 +315,25 @@
}
.tux-warning-message.validation {
- background-image: url(../images/label-flag.png);
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/label-flag.svg);
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/label-flag.svg);
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/label-flag.svg );
}
.tux-warning-message.diff {
- background-image: url(../images/label-clock.png);
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/label-clock.svg);
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/label-clock.svg);
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/label-clock.svg );
}
.tux-warning-message .show-diff-link {
- color: #3366BB;
+ color: #36c;
cursor: pointer;
padding-left: 5px;
}
.editarea .tux-more-warnings:before {
- content: "";
- border-bottom: 1em solid #FBF6AD;
+ content: '';
+ border-bottom: 1em solid #fbf6ad;
border-top: 1em solid transparent;
border-left: 1em solid transparent;
- border-right: 1em solid #FBF6AD;
+ border-right: 1em solid #fbf6ad;
display: inline-block;
position: absolute;
right: 100%;
@@ -317,7 +343,7 @@
.tux-editor-request-right {
font-size: 13px;
padding: 0 5px;
- color: #555;
+ color: #54595d;
}
.tux-editor-ask-permission {
@@ -328,6 +354,10 @@
padding: 0 5px;
}
+.tux-editor-editsummary-block {
+ padding: 0 5px;
+}
+
.tux-editor-actions-block {
position: relative;
}
@@ -342,36 +372,44 @@
}
.tux-editor-insert-buttons button {
- padding: 4px;
- border: 1px solid #DDD;
- background: #FBFBFB;
- color: #252525;
+ padding: 0 5px;
+ min-width: 30px;
+ margin-right: 5px;
+ margin-bottom: 5px;
+ border: 1px solid #ddd;
+ background: #fbfbfb;
+ color: #222;
font-size: 13px;
+ line-height: 30px;
height: 30px;
}
.tux-editor-insert-buttons .tux-editor-paste-original-button {
- background: #FBFBFB url(../images/paste.png) left center no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/paste.svg);
+ background: #fbfbfb left center no-repeat;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/paste.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/paste.svg );
background-size: 16px 16px;
padding-left: 18px;
}
+.message-desc-editor .mw-ui-button,
+.tux-editor-control-buttons .mw-ui-button {
+ margin: 10px 5px;
+}
+
.sourcemessage,
.suggestiontext {
white-space: pre-wrap;
}
.infocolumn .loading {
+ color: #54595d;
padding: 10px;
font-size: 14px;
- color: #565656;
}
.tux-message-tools-menu li a {
- color: #555555;
+ color: #54595d;
display: block;
font-size: 14px;
padding: 0 2px;
@@ -381,15 +419,14 @@
.tux-message-tools-menu li a:hover {
cursor: pointer;
background-color: #f0f0f0;
- color: #252525;
+ color: #222;
}
.tux-message-tools-menu li.selected {
- background: url(../images/label-tick.png) right no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/label-tick.svg);
+ background: right no-repeat;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/label-tick.svg);
- color: #252525;
+ background-image: linear-gradient( transparent, transparent ), url( ../images/label-tick.svg );
+ color: #222;
}
/*
@@ -409,19 +446,15 @@
}
.shortcut-popup {
- /* Firefox likes to add "relative" inline for elements with offset */
- position: absolute !important;
- width: 17px;
- height: 17px;
- line-height: 17px;
+ width: 18px;
+ height: 18px;
+ line-height: 18px;
overflow: hidden;
font-size: 13px;
text-align: center;
- border: 1px dashed gray;
+ border: 1px dashed #808080;
border-radius: 100%;
z-index: 110;
- background-color: white;
- margin-top: -10px;
- /* @noflip */
- margin-left: -10px;
+ background-color: #fff;
+ padding: 3px;
}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.groupselector.less b/www/wiki/extensions/Translate/resources/css/ext.translate.groupselector.less
new file mode 100644
index 00000000..025dfa85
--- /dev/null
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.groupselector.less
@@ -0,0 +1,143 @@
+@import 'mediawiki.mixins';
+
+/**
+ * Group selector
+ */
+.tux-groupselector {
+ position: absolute;
+ top: 14px;
+ right: 0;
+ z-index: 1000;
+ display: none;
+ margin-top: 13px;
+ width: 600px;
+ padding: 0;
+ border: 1px solid #a2a9b1;
+ background-color: #f0f0f0;
+ border-radius: 5px;
+ box-shadow: 0 5px 10px rgba( 0, 0, 0, 0.2 );
+}
+
+/* The triangle shaped callout */
+.tux-groupselector:before {
+ border-bottom: 7px solid #a2a9b1;
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ content: '';
+ display: inline-block;
+ left: 99px;
+ position: absolute;
+ top: -7px;
+}
+
+.tux-groupselector:after {
+ border-bottom: 6px solid #f0f0f0;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ content: '';
+ display: inline-block;
+ left: 100px;
+ position: absolute;
+ top: -6px;
+}
+
+/* Remove the triangle shaped callout */
+.tux-groupselector.removecallout:before,
+.tux-groupselector.removecallout:after {
+ content: none;
+}
+
+.tux-groupselector__filter {
+ padding-top: 10px;
+}
+
+.tux-groupselector__filter__search__input {
+ font-size: 14px;
+ width: 100%;
+ height: 28px;
+ border: 1px solid #c9c9c9;
+ padding: 2px;
+ margin: 0;
+}
+
+.tux-groupselector__filter__search__icon {
+ .background-image( '../images/search.svg' );
+ background-repeat: no-repeat;
+ background-position: right center;
+ background-size: 25px;
+ height: 28px;
+}
+
+/*
+ * Group tab
+ */
+.tux-grouptab {
+ color: #222;
+ line-height: 30px;
+ height: 30px;
+ cursor: pointer;
+ padding: 2px 5px;
+ margin: 0 4px;
+ display: inline-block;
+}
+
+.tux-grouptab--selected {
+ border-bottom: 2px solid #0645ad;
+}
+
+/*
+ * Group list
+ */
+.tux-grouplist {
+ max-height: 400px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ background-color: #fff;
+ min-height: 200px;
+ border-radius: 0 0 5px 5px;
+}
+
+.tux-grouplist__item {
+ position: relative;
+ border-bottom: 1px solid #eee;
+ height: 50px;
+ cursor: pointer;
+
+ &:hover {
+ background-color: #f8f8f8;
+ }
+}
+
+.grid .tux-grouplist__item__label {
+ padding-bottom: 0; /* grid override */
+ padding-left: 15px; /* grid override */
+ line-height: 32px;
+ cursor: pointer;
+ white-space: nowrap;
+}
+
+.tux-grouplist__item__label .tux-statsbar {
+ position: absolute;
+ bottom: 0;
+ width: 150px;
+}
+
+.tux-grouplist__item__icon {
+ .background-image( '../images/project.svg' );
+ background-repeat: no-repeat;
+ background-position: right center;
+ /* Keep this in sync with js! */
+ background-size: 32px;
+ height: 50px;
+}
+
+.grid .row .tux-grouplist__item__subgroups {
+ color: #72777d;
+ position: absolute; /* grid override */
+ padding: 0 15px 2px 0; /* grid override */
+ line-height: 1.25em;
+ bottom: 0;
+ right: 0;
+ text-align: right;
+ font-size: 10pt;
+}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.legacy.css b/www/wiki/extensions/Translate/resources/css/ext.translate.legacy.css
index 153f6768..62353931 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.legacy.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.legacy.css
@@ -1,11 +1,11 @@
/* Form at Special:Translate */
.mw-sp-translate-error {
font-style: italic;
- background-color: yellow;
+ background-color: #ff0;
}
/* This gets pretty far on wide screens... */
-.mw-sp-translate-settings input[type=submit] {
+.mw-sp-translate-settings input[ type='submit' ] {
float: right;
}
@@ -43,7 +43,7 @@
}
.mw-sp-translate-table tr.opt {
- background-color: #F2F200;
+ background-color: #f2f200;
}
.mw-sp-translate-table .untranslated {
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.loader.css b/www/wiki/extensions/Translate/resources/css/ext.translate.loader.css
index 73594ea0..07d6dc18 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.loader.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.loader.css
@@ -2,28 +2,29 @@
@-webkit-keyframes tux-loading-indicator-spin {
from {
- -webkit-transform: rotate(0deg);
+ -webkit-transform: rotate( 0deg );
}
+
to {
- -webkit-transform: rotate(360deg);
+ -webkit-transform: rotate( 360deg );
}
}
@keyframes tux-loading-indicator-spin {
from {
- transform: rotate(0deg);
+ transform: rotate( 0deg );
}
+
to {
- transform: rotate(360deg);
+ transform: rotate( 360deg );
}
}
.tux-loading-indicator {
float: left;
- background: transparent url(../images/loading.gif) right bottom no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/loading.svg);
+ background: transparent url( ../images/loading.gif ) right bottom no-repeat;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/loading.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/loading.svg );
background-size: 100%;
-webkit-animation-name: tux-loading-indicator-spin;
-webkit-animation-duration: 1.5s;
@@ -43,3 +44,8 @@
left: 50%;
position: absolute;
}
+
+.tux-loading-indicator--stopped {
+ -webkit-animation: none;
+ animation: none;
+}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.messagetable.less b/www/wiki/extensions/Translate/resources/css/ext.translate.messagetable.less
new file mode 100644
index 00000000..d01b6b10
--- /dev/null
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.messagetable.less
@@ -0,0 +1,283 @@
+@import 'mediawiki.mixins';
+
+/* Default colors */
+.tux-messagelist {
+ background-color: #f8f8f8;
+ color: #222;
+ max-width: 800px;
+}
+
+.grid.ext-translate-container .row {
+ min-width: 300px !important;
+}
+
+@media screen and ( max-width: 600px ) {
+ .grid.ext-translate-container .tux-messagelist .tux-list-message {
+ width: 100%;
+ }
+
+ .tux-list-status,
+ .tux-list-edit {
+ display: none;
+ }
+}
+
+.tux-message {
+ height: auto;
+ cursor: pointer;
+}
+
+/* The "block" views of page mode and proofreading mode have 0 margin on
+ * .tux-message. To make the actual editor be of same width, set 0 margin on
+ * the open editor (overriding the -5px set by the grid) */
+.grid .tux-message.open {
+ margin: 0 auto;
+}
+
+.tux-message-item {
+ line-height: 50px;
+ height: 50px;
+ overflow: hidden;
+ margin-right: 5px !important;
+ margin-left: 5px !important;
+ vertical-align: middle;
+ border-bottom: 1px solid #c9c9c9;
+ background: #fff;
+}
+
+.tux-message-item.translated,
+.tux-message-item.translated:hover,
+.tux-message-item.proofread,
+.tux-message-item.proofread:hover {
+ background-color: #f0f0f0;
+}
+
+.tux-message-item:hover {
+ background-color: #f8f8f8;
+}
+
+.tux-list-status span,
+.tux-list-edit {
+ padding: 5px;
+ /* 15px space for icon */
+ padding-left: 20px;
+ /* Do not combine these two, unless you also fix the
+ * tux-status-* styles below. That includes you, Siebrand ;)
+ */
+ background-position: left;
+ background-repeat: no-repeat;
+}
+
+.tux-info {
+ background-color: #f0f0f0;
+}
+
+.tux-list-source {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ unicode-bidi: -webkit-isolate;
+ unicode-bidi: -moz-isolate;
+ unicode-bidi: isolate;
+}
+
+.tux-list-translation {
+ color: #54595d;
+ white-space: nowrap;
+ padding-left: 5px;
+ text-overflow: ellipsis;
+ unicode-bidi: -webkit-isolate;
+ unicode-bidi: -moz-isolate;
+ unicode-bidi: isolate;
+}
+
+.tux-list-message {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.tux-status-unsaved {
+ .background-image( '../images/label-pen.svg' );
+}
+
+.tux-status-translated,
+.tux-status-proofread {
+ .background-image( '../images/label-tick.svg' );
+}
+
+.tux-status-fuzzy {
+ .background-image( '../images/label-clock.svg' );
+}
+
+.tux-list-edit a {
+ .background-image( '../images/action-edit.svg' );
+ background-position: left center;
+ background-repeat: no-repeat;
+ background-size: 18px 18px;
+ padding-left: 19px;
+}
+
+.tux-messagetable-loader {
+ color: #54595d;
+ padding: 15px;
+ top: 0;
+ background: #f0f0f0 16px 50%;
+ box-shadow: 0 1px 4px rgba( 0, 0, 0, 0.3 ), 0 0 20px rgba( 0, 0, 0, 0.1 ) inset;
+}
+
+.tux-messagetable-loader-info {
+ padding-left: 46px;
+ font-size: 25px;
+}
+
+.tux-action-bar {
+ background-color: #f0f0f0;
+ color: #222;
+ box-shadow: 0 2px 6px rgba( 0, 0, 0, 0.3 );
+ transition: width 250ms;
+}
+
+@media screen and ( min-height: 500px ) {
+ .tux-action-bar.floating {
+ border-top: 1px solid #ddd;
+ position: fixed;
+ bottom: 0;
+ z-index: 200;
+ }
+}
+
+.tux-action-bar .tux-statsbar {
+ position: relative;
+ top: 30px;
+}
+
+.tux-action-bar .tux-view-switcher {
+ padding: 0 5px;
+}
+
+.tux-action-bar button {
+ min-height: 40px;
+ font-size: 14px;
+ margin: 5px 0;
+ cursor: pointer;
+ background-color: #e6e6e6;
+ font-weight: bold;
+ line-height: 1;
+ background-image: linear-gradient( #f0f0f0, #e6e6e6 );
+ border: 1px #c9c9c9 solid;
+}
+
+.tux-action-bar button:hover {
+ background-color: #f0f0f0;
+ background-image: linear-gradient( #f8f8f8, #f0f0f0 );
+}
+
+.tux-action-bar button:active,
+.tux-action-bar button.down {
+ background: #222;
+ color: #fff;
+}
+
+.tux-action-bar button.disabled,
+.tux-action-bar button.disabled:hover {
+ color: #c9c9c9;
+ cursor: default;
+ background-color: #f0f0f0;
+ border-color: #e3e3e3;
+}
+
+.tux-view-switcher button {
+ padding: 0 2px 0 0;
+}
+
+.tux-view-switcher button:first-child {
+ border-radius: 3px 0 0 3px;
+ border-right: 0;
+}
+
+.tux-view-switcher button:last-child {
+ border-radius: 0 3px 3px 0;
+ border-left: 0;
+}
+
+.tux-view-switcher button:before {
+ content: '';
+ height: 15px;
+ width: 25px;
+ display: inline-block;
+ vertical-align: bottom;
+}
+
+.tux-action-bar .translate-mode-button {
+ width: 30%;
+}
+
+.tux-action-bar .translate-mode-button:before {
+ .background-image( '../images/view-list.svg' );
+}
+
+.tux-action-bar .translate-mode-button.down:before {
+ .background-image( '../images/view-list-hi.svg' );
+}
+
+.tux-action-bar .page-mode-button {
+ width: 30%;
+}
+
+.tux-action-bar .page-mode-button:before {
+ .background-image( '../images/view-page.svg' );
+}
+
+.tux-action-bar .page-mode-button.down:before {
+ .background-image( '../images/view-page-hi.svg' );
+}
+
+.tux-action-bar .proofread-mode-button {
+ width: 36%;
+}
+
+.tux-action-bar .proofread-mode-button:before {
+ .background-image( '../images/view-proofread.svg' );
+}
+
+.tux-action-bar .proofread-mode-button.down:before {
+ .background-image( '../images/view-proofread-hi.svg' );
+}
+
+.tux-message-filter-result {
+ color: #222;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ border-bottom: 1px solid #c9c9c9;
+ background: #fff5aa;
+ padding: 5px;
+
+ & button {
+ background: inherit;
+ }
+}
+
+.tux-empty-list {
+ padding: 20px;
+}
+
+.tux-empty-list-header {
+ font-size: 25px;
+ padding: 5px 0;
+}
+
+.tux-empty-list-guide {
+ color: #54595d;
+ font-size: 15px;
+ padding: 5px 0;
+}
+
+.tux-empty-list-actions {
+ font-size: 15px;
+ padding: 8px 0;
+}
+
+.tux-empty-list-actions a {
+ cursor: pointer;
+ margin: 0 10px;
+}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.navitoggle.css b/www/wiki/extensions/Translate/resources/css/ext.translate.navitoggle.css
index 96882ad7..afe45f4b 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.navitoggle.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.navitoggle.css
@@ -1,10 +1,13 @@
/**
* Introduces a toggle icon than can be used to hide navigation menu in vector
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
.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,18 +16,11 @@
cursor: pointer;
}
-.tux-navitoggle {
- background: url('../images/expand-rtl.png') no-repeat scroll right center transparent;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/expand-rtl.svg);
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/expand-rtl.svg);
-}
-
.tux-navi-collapsed .tux-navitoggle {
- background: url('../images/expand-ltr.png') no-repeat scroll right center transparent;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/expand-ltr.svg);
+ background: no-repeat scroll right center transparent;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/expand-ltr.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/expand-ltr.svg );
+ left: 40px !important;
}
.tux-navi-collapsed #mw-panel {
@@ -39,10 +35,6 @@
left: 0;
}
-.tux-navi-collapsed .tux-navitoggle {
- left: 40px !important;
-}
-
.tux-navi-minilogo {
display: none;
position: absolute;
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.pagemode.css b/www/wiki/extensions/Translate/resources/css/ext.translate.pagemode.css
index 3a272d2f..d1f1d274 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.pagemode.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.pagemode.css
@@ -2,7 +2,7 @@
min-height: 50px;
margin: 0 auto;
vertical-align: middle;
- background: #F8F8F8;
+ background: #f8f8f8;
}
.ext-translate-container .tux-messagelist .tux-message-pagemode .tux-message-item-compact {
@@ -13,26 +13,26 @@
margin-left: auto;
vertical-align: middle;
border-bottom: 1px solid #f0f0f0;
- border-left: 1px solid #DDDDDD;
- border-right: 1px solid #DDDDDD;
- background: #FFFFFF;
+ border-left: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+ background: #fff;
max-width: 900px;
}
.ext-translate-container .tux-messagelist .tux-message-pagemode .tux-message-item-compact:hover {
- background: #FCFCFC;
+ background: #fcfcfc;
}
.ext-translate-container .tux-messagelist .tux-message-pagemode:first-child .tux-message-item-compact {
margin-top: 10px;
padding-top: 60px;
- border-top: 1px solid #DDDDDD;
+ border-top: 1px solid #ddd;
}
.ext-translate-container .tux-messagelist .tux-message-pagemode:last-child .tux-message-item-compact {
margin-bottom: 10px;
padding-bottom: 60px;
- border-bottom: 1px solid #DDDDDD;
+ border-bottom: 1px solid #ddd;
}
.tux-pagemode-source,
@@ -48,7 +48,7 @@
}
.tux-messagelist .tux-message-pagemode .tux-pagemode-source {
- color: #555;
+ color: #54595d;
font-size: 16px;
line-height: 1.5em;
padding-right: 25px;
@@ -56,7 +56,7 @@
}
.tux-messagelist .tux-message-pagemode .tux-pagemode-translation {
- color: #252525;
+ color: #222;
font-size: 16px;
line-height: 1.5em;
padding-left: 20px;
@@ -73,24 +73,21 @@
}
.tux-pagemode-status.fuzzy {
- background: url(../images/outdated-ltr.png) left center no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/outdated-ltr.svg);
+ background: left center no-repeat;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/outdated-ltr.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/outdated-ltr.svg );
}
.tux-pagemode-status.untranslated {
- background: url(../images/translate-ltr.png) left center no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/translate-ltr.svg);
+ background: left center no-repeat;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/translate-ltr.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/translate-ltr.svg );
}
.tux-pagemode-action {
- background: url(../images/check-sprite-ltr.png) right top no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/check-sprite-ltr.svg);
+ background: right top no-repeat;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/check-sprite-ltr.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/check-sprite-ltr.svg );
height: 31px;
cursor: pointer;
}
@@ -100,10 +97,7 @@
}
.tux-pagemode-edit {
- background-image: url(../images/edit-mark.png);
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/edit-mark.svg);
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/edit-mark.svg);
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/edit-mark.svg );
background-repeat: no-repeat;
background-position: right center;
height: 40px;
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.proofread.css b/www/wiki/extensions/Translate/resources/css/ext.translate.proofread.css
index 2e9c8d49..69eddee1 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.proofread.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.proofread.css
@@ -2,7 +2,7 @@
min-height: 50px;
margin: 0 auto;
vertical-align: middle;
- background: #F8F8F8;
+ background: #f8f8f8;
}
.ext-translate-container .tux-messagelist .tux-message-proofread .tux-message-item-compact {
@@ -12,26 +12,26 @@
margin-left: auto;
vertical-align: middle;
border-bottom: 1px solid #f0f0f0;
- border-left: 1px solid #DDDDDD;
- border-right: 1px solid #DDDDDD;
- background: #FFFFFF;
+ border-left: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+ background: #fff;
max-width: 900px;
}
.ext-translate-container .tux-messagelist .tux-message-proofread .tux-message-item-compact:hover {
- background: #FCFCFC;
+ background: #fcfcfc;
}
.ext-translate-container .tux-messagelist .tux-message-proofread:first-child .tux-message-item-compact {
margin-top: 10px;
padding-top: 60px;
- border-top: 1px solid #DDDDDD;
+ border-top: 1px solid #ddd;
}
.ext-translate-container .tux-messagelist .tux-message-proofread:last-child .tux-message-item-compact {
margin-bottom: 10px;
padding-bottom: 60px;
- border-bottom: 1px solid #DDDDDD;
+ border-bottom: 1px solid #ddd;
}
.tux-proofread-source,
@@ -48,7 +48,7 @@
}
.tux-messagelist .tux-message-proofread .tux-proofread-source {
- color: #555;
+ color: #54595d;
font-size: 16px;
line-height: 1.5em;
padding-right: 25px;
@@ -56,7 +56,7 @@
}
.tux-messagelist .tux-message-proofread .tux-proofread-translation {
- color: #252525;
+ color: #222;
font-size: 16px;
line-height: 1.5em;
padding-left: 20px;
@@ -69,21 +69,24 @@
.ext-translate-container .tux-messagelist .tux-message-proofread.own-translation,
.ext-translate-container .tux-messagelist .tux-message-proofread.own-translation:hover {
- background: #FBFBFB;
+ background: #fbfbfb;
+}
+
+.tux-messagelist.tux-hide-own .tux-message-proofread.own-translation {
+ display: none;
}
.translated-by-self {
- color: #777;
+ color: #72777d;
text-align: right;
font-size: 12px;
margin-right: 5px;
margin-left: auto;
width: 18px;
height: 18px; /* Icon height + 3px */
- background: url(../images/user-small.png) top right no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/user-small.svg);
+ background: top right no-repeat;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/user-small.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/user-small.svg );
}
.tux-proofread-status {
@@ -91,28 +94,23 @@
}
.tux-proofread-status.fuzzy {
- background: url(../images/outdated-ltr.png) left center no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/outdated-ltr.svg);
+ background: left center no-repeat;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/outdated-ltr.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/outdated-ltr.svg );
height: 40px;
}
.tux-proofread-status.untranslated {
- background: url(../images/translate-ltr.png) left center no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/translate-ltr.svg);
+ background: left center no-repeat;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/translate-ltr.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/translate-ltr.svg );
height: 40px;
}
.tux-proofread-action {
background-position: right top;
background-repeat: no-repeat;
- background-image: url(../images/check-sprite-ltr.png);
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/check-sprite-ltr.svg);
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/check-sprite-ltr.svg);
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/check-sprite-ltr.svg );
/* There is 1px white row between each icon */
height: 30px;
cursor: pointer;
@@ -141,10 +139,7 @@
}
.tux-proofread-edit {
- background-image: url(../images/edit-mark.png);
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/edit-mark.svg);
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/edit-mark.svg);
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/edit-mark.svg );
background-repeat: no-repeat;
background-position: right center;
height: 50px;
@@ -158,8 +153,8 @@
}
.tux-proofread-edit-label {
+ color: #72777d;
position: relative;
- color: #777777;
display: inline-block;
font-size: 13px;
padding-top: 30px;
@@ -167,7 +162,7 @@
}
.tux-proofread-count {
- color: #777;
+ color: #72777d;
font-size: 15px;
padding-right: 5px;
text-align: right;
@@ -176,10 +171,9 @@
.tux-proofread-count:before {
content: '';
display: inline-block;
- background: url(../images/check-small.png) left bottom no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/check-small.svg);
+ background: left bottom no-repeat;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/check-small.svg);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/check-small.svg );
height: 12px;
width: 14px;
}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.quickedit.css b/www/wiki/extensions/Translate/resources/css/ext.translate.quickedit.css
index aaeeeb63..37b9c4d3 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.quickedit.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.quickedit.css
@@ -1,25 +1,5 @@
-.mw-ajax-dialog .mw-ajax-loader {
- margin: 2em;
-}
-
-.mw-ajax-dialog {
- font-size: small;
-}
-
-.tqe-inlineeditable {
- height: auto;
-}
-
-table .tqe-inlineeditable .mw-ajax-dialog {
- margin: 10px;
-}
-
-.tqe-editor-loaded {
- background-color: #FFF !important;
-}
-
.mw-sp-translate-edit-fields a {
- color: blue;
+ color: #00f;
}
.mw-translate-tmsug {
@@ -29,7 +9,7 @@ table .tqe-inlineeditable .mw-ajax-dialog {
.mw-sp-translate-edit-fields fieldset {
line-height: normal;
margin: 0;
- border: 1px solid #DBDBDB;
+ border: 1px solid #dbdbdb;
/* Browsers suck
max-height: 250px; */
overflow: auto;
@@ -40,18 +20,15 @@ table .tqe-inlineeditable .mw-ajax-dialog {
}
.mw-translate-edit-extra {
- border-bottom: 1px solid black;
-}
-
-.mw-translate-legend {
- font-weight: bold;
+ border-bottom: 1px solid #000;
}
.mw-translate-legend {
- border-left: 1px solid black;
+ border-left: 1px solid #000;
float: right;
margin-left: 1em;
padding-left: 5pt;
+ font-weight: bold;
}
/* Align the adder according to the target language */
@@ -101,43 +78,23 @@ table .tqe-inlineeditable .mw-ajax-dialog {
/* Blue tints for translate fieldsets */
.mw-sp-translate-edit-inother {
- background-color: #F8F8FF;
+ background-color: #f8f8ff;
}
.mw-sp-translate-in-other-small {
- background-color: #F0F8FF;
+ background-color: #f0f8ff;
}
.mw-sp-translate-in-other-big {
- background-color: #F0F8FF;
+ background-color: #f0f8ff;
}
.mw-sp-translate-message-documentation {
- background-color: #EBEBEB;
+ background-color: #ebebeb;
}
.mw-sp-translate-edit-definition {
- background-color: #EAF3FC;
-}
-
-.mw-sp-translate-edit-warnings {
- background-color: #FFDBDB;
-}
-
-.tqe-fakeheader {
- border: 1px solid #CCC;
- padding: .75em;
- font-weight: bold;
- line-height: 2em;
-}
-
-.tqe-fakeheader input {
- height: 2em;
- font-weight: bold;
-}
-
-.mw-translate-close {
- float: right;
+ background-color: #eaf3fc;
}
.mw-translate-inputs {
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.special.aggregategroups.css b/www/wiki/extensions/Translate/resources/css/ext.translate.special.aggregategroups.css
index 7b7b3385..98c80b09 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.special.aggregategroups.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.special.aggregategroups.css
@@ -1,31 +1,22 @@
span.tp-aggregate-remove-ag-button,
span.tp-aggregate-remove-button {
- background: url(../images/remove.png) no-repeat scroll left center transparent;
- /* @embed */
- background-image: -webkit-linear-gradient(transparent, transparent), url('../images/remove.svg');
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url('../images/remove.svg');
+ background: no-repeat scroll left center transparent;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/remove.svg );
padding: 10px;
cursor: pointer;
}
span.tp-aggregate-edit-ag-button {
- background: url(../images/action-edit.png) no-repeat scroll left center transparent;
- /* @embed */
- background-image: -webkit-linear-gradient(transparent, transparent), url('../images/action-edit.svg');
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url('../images/action-edit.svg');
+ background: no-repeat scroll left center transparent;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/action-edit.svg );
background-size: 18px 18px;
padding: 10px;
cursor: pointer;
}
a.tpt-add-new-group {
- background: url(../images/add.png) no-repeat scroll left center transparent;
- /* @embed */
- background-image: -webkit-linear-gradient(transparent, transparent), url('../images/add.svg');
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url('../images/add.svg');
+ background: no-repeat scroll left center transparent;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/add.svg );
padding-left: 20px;
}
@@ -48,3 +39,15 @@ div.hidden {
.tp-aggregategroup-edit-description {
width: 500px;
}
+
+.client-nojs .tpt-add-new-group,
+.client-nojs .tp-aggregate-edit-ag-button,
+.client-nojs .tp-aggregate-remove-button,
+.client-nojs .tp-aggregate-remove-ag-button,
+.client-nojs .mw-tpa-group input {
+ display: none;
+}
+
+.client-js .tux-nojs {
+ display: none;
+}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css b/www/wiki/extensions/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css
index d22bf197..4f5aa752 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css
@@ -3,7 +3,7 @@
* @author Niklas Laxström
* @author Sucheta Ghoshal
* @author Pau Giner
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/* Hide the page title to give more space for the content */
@@ -20,11 +20,9 @@
font-size: 24px;
}
-.search.pane {
- background: url('../images/search.png') no-repeat scroll left top transparent;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/search.svg);
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/search.svg);
+.grid .search.pane {
+ background: no-repeat scroll left top transparent;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/search.svg );
background-size: 25px;
padding-left: 25px;
}
@@ -33,13 +31,13 @@
font-size: 14px;
height: 28px;
width: 100%;
- border: 1px solid #C9C9C9;
+ border: 1px solid #c9c9c9;
padding: 0 5px;
}
.tsb-body {
border: 1px solid #c9c9c9;
- border-top: none;
+ border-top: 0;
}
.requests.pane,
@@ -52,16 +50,16 @@
overflow: auto;
}
-.details.pane {
- border-left: 1px solid #DDDDDD;
+.grid .details.pane {
+ border-left: 1px solid #ddd;
left: -1px;
padding: 5px 20px 10px 20px;
}
/* Requests pane */
-.requests.pane,
-.requests.pane .request,
-.requests.pane .request-header {
+.grid .requests.pane,
+.grid .requests.pane .request,
+.grid .requests.pane .request-header {
margin: 0;
padding: 0;
}
@@ -73,7 +71,7 @@
}
.request:last-child {
- border-bottom: none;
+ border-bottom: 0;
}
.request:hover {
@@ -84,10 +82,10 @@
background-color: #f0f0f0;
}
-.request .amount {
+.grid .request .amount {
height: 100%;
font-size: 3em;
- color: #96989A;
+ color: #96989a;
background-color: #f7f8f8;
padding: 20px 5px;
text-align: center;
@@ -122,23 +120,24 @@
overflow: hidden;
}
-.request .request-info,
-.request .approval {
+.grid .request .request-info,
+.grid .request .approval {
padding-top: 5px;
}
/* Details pane */
.tsb-details-no-translations {
- color: #999999;
+ color: #72777d;
}
+
.signup-comment-label {
- color: #E85355;
+ color: #e85355;
font-size: 14px;
}
.signup-comment-text {
- color: #333333;
+ color: #222;
font-size: 16px;
line-height: 1.5em;
padding: 5px 0;
@@ -179,25 +178,25 @@
font-size: 22px;
}
-.actions .button {
+.actions button {
margin-right: 1.5em;
}
.request-header {
+ color: #72777d;
border-right: 1px solid #c9c9c9;
- border-bottom: 1px solid #AAAAAA;
+ border-bottom: 1px solid #aaa;
line-height: 40px;
- color: #969696;
- background-color: #F8F8F8;
+ background-color: #f8f8f8;
}
.request-footer {
+ color: #72777d;
border-right: 1px solid #c9c9c9;
- border-top: 1px solid #AAAAAA;
- color: #969696;
+ border-top: 1px solid #aaa;
line-height: 40px;
padding: 0 5px;
- background-color: #F8F8F8;
+ background-color: #f8f8f8;
}
.request-footer .selected-counter,
@@ -212,7 +211,7 @@
margin: 10px 0;
border-radius: 3px;
background: #f8f8f8;
- border: 1px solid #CCCCCC;
+ border: 1px solid #ccc;
cursor: pointer;
font-size: 1em;
display: block;
@@ -221,7 +220,7 @@
.clear-language-selector {
border-radius: 0 3px 3px 0;
- border-left: none;
+ border-left: 0;
}
.language-selector.selected {
@@ -235,12 +234,12 @@
}
.language-selector:hover {
- border-color: #AAAAAA;
+ border-color: #aaa;
}
.language-selector.unselected:after {
- content: "";
- border-top: 4px solid #AAAAAA;
+ content: '';
+ border-top: 4px solid #aaa;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
display: inline-block;
@@ -261,7 +260,7 @@ textarea.body {
.translations .title {
font-size: 16px;
- background-color: #F7F8F8;
+ background-color: #f7f8f8;
font-weight: bold;
}
@@ -275,3 +274,11 @@ textarea.body {
*/
text-align: left;
}
+
+.client-nojs .grid {
+ display: none;
+}
+
+.client-js .tux-nojs {
+ display: none;
+}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.special.pagemigration.css b/www/wiki/extensions/Translate/resources/css/ext.translate.special.pagemigration.css
index af246e1b..06c061cf 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.special.pagemigration.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.special.pagemigration.css
@@ -2,17 +2,13 @@
.mw-tpm-sp-unit__target {
overflow-y: auto;
height: 150px;
- border: 2px solid gray;
+ border: 2px solid #808080;
}
#title {
width: 35%;
}
-.mw-tpm-sp-unit__actions {
- border: 2px solid transparent;
-}
-
.hide {
display: none;
}
@@ -26,6 +22,10 @@
padding-bottom: 10px;
}
+.grid .mw-tpm-sp-unit textarea {
+ padding: 10px;
+}
+
.mw-tpm-sp-unit__source,
.mw-tpm-sp-unit__target,
.mw-tpm-sp-unit__actions {
@@ -33,37 +33,44 @@
}
.mw-tpm-sp-action {
- width: 10%;
- height: 10%;
- float: left;
- margin-left: 5%;
- margin-right: 5%;
+ width: 25px;
+ height: 150px;
cursor: pointer;
display: inline-block;
+ margin-left: 20px;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: 25px 25px;
}
.mw-tpm-sp-action--delete {
- background: url('../images/trash_darkgray.png') transparent no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url('../images/trash_darkgray.svg');
- background-image: linear-gradient(transparent, transparent), url('../images/trash_darkgray.svg');
+ background-image: linear-gradient( transparent, transparent ), url( ../images/trash_darkgray.svg );
}
.mw-tpm-sp-action--swap {
- background: url('../images/switch.png') transparent no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url('../images/switch.svg');
- background-image: linear-gradient(transparent, transparent), url('../images/switch.svg');
+ background-image: linear-gradient( transparent, transparent ), url( ../images/switch.svg );
}
.mw-tpm-sp-action--add {
- background: url('../images/plus_darkgray.png') transparent no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url('../images/plus_darkgray.svg');
- background-image: linear-gradient(transparent, transparent), url('../images/plus_darkgray.svg');
+ background-image: linear-gradient( transparent, transparent ), url( ../images/plus_darkgray.svg );
}
.mw-tpm-sp-error__message {
font-size: 0.9em;
word-wrap: break-word;
- color: #C00;
- border: 1px solid #FAC5C5;
- background-color: #FAE3E3;
+ color: #c00;
+ border: 1px solid #fac5c5;
+ background-color: #fae3e3;
+}
+
+.mw-tpm-sp-instructions {
+ margin: 0.7em 0;
+}
+
+.client-nojs .grid {
+ display: none;
+}
+
+.client-js .tux-nojs {
+ display: none;
}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.special.pagepreparation.css b/www/wiki/extensions/Translate/resources/css/ext.translate.special.pagepreparation.css
index 390f6af8..d68d6072 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.special.pagepreparation.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.special.pagepreparation.css
@@ -1,3 +1,11 @@
#page {
width: 35%;
}
+
+.client-nojs .grid {
+ display: none;
+}
+
+.client-js .tux-nojs {
+ display: none;
+}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.special.searchtranslations.css b/www/wiki/extensions/Translate/resources/css/ext.translate.special.searchtranslations.css
index 77815faa..c866a818 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.special.searchtranslations.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.special.searchtranslations.css
@@ -5,7 +5,7 @@
*/
.tux-searchpage .tux-selectedbox .facet-item {
- background-color: #EDEDED;
+ background-color: #ededed;
margin-right: 5px;
}
@@ -16,8 +16,8 @@
/* Facets */
.tux-searchpage .facet {
+ color: #222;
font-size: 24px;
- color: #252525;
padding: 20px 0 10px 0;
}
@@ -36,7 +36,7 @@
}
.tux-searchpage .facet-item .facet-count {
- color: #AAA;
+ color: #aaa;
float: right;
margin-right: 5%;
}
@@ -63,18 +63,18 @@
.tux-searchpage .facet-item a:visited,
.tux-searchpage .facet-item a:link {
- color: #0645AD;
+ color: #0645ad;
}
/* Results */
.tux-searchpage .count {
- color: #555;
+ color: #54595d;
font-size: 16px;
padding-bottom: 10px;
}
.tux-searchpage .searchcontent .results {
- color: #252525;
+ color: #222;
padding-left: 10px;
}
@@ -86,7 +86,7 @@
.tux-searchpage .results .tux-title {
text-align: left;
- color: #555;
+ color: #54595d;
}
/* Pagination links */
@@ -107,43 +107,13 @@
}
.tux-searchpage .searchinput .searchinputbox {
- font-size: 16px;
- padding: 5px;
width: 60%;
-}
-
-.tux-searchpage .searchinput input.button {
- font-size: 16px;
- background-color: #E6E6E6;
- background-image: -webkit-linear-gradient(top, #f0f0f0, #e6e6e6);
- background-image: -moz-linear-gradient(center top, #F0F0F0, #E6E6E6);
- background-image: linear-gradient(#F0F0F0, #E6E6E6);
- border: 1px solid #C9C9C9;
- border-radius: 3px 3px 3px 3px;
- color: #252525;
- cursor: pointer;
display: inline-block;
- padding: 6px 20px;
- text-align: center;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
- margin: 0 5px;
-}
-
-.tux-searchpage .searchinput input.button:hover {
- background-color: #F0F0F0;
- background-image: -webkit-linear-gradient(top, #f8f8f8, #f0f0f0);
- background-image: -moz-linear-gradient(center top, #F8F8F8, #F0F0F0);
- background-image: linear-gradient(#F8F8F8, #F0F0F0);
- border-color: #C9C9C9;
+ margin-right: 5px;
}
-.tux-searchpage .searchinput input.button:active,
-.tux-searchpage .searchinput input.button.down {
- background-color: #D8D8D8;
- background-image: -webkit-linear-gradient(top, #d3d3d3, #d8d8d8);
- background-image: -moz-linear-gradient(center top, #D3D3D3, #D8D8D8);
- background-image: linear-gradient(#D3D3D3, #D8D8D8);
- border-color: #C9C9C9;
+.tux-search-operators {
+ margin: 5px 0;
}
h1.firstHeading {
@@ -152,23 +122,23 @@ h1.firstHeading {
.translate-search-more-groups,
.translate-search-more-languages {
- background-color: #F0F0F0;
+ background-color: #f0f0f0;
font-size: 16px;
cursor: pointer;
padding: 0 6px;
border-radius: 2px;
- border: 1px solid #EEE;
+ border: 1px solid #eee;
}
.translate-search-more-groups:hover,
.translate-search-more-languages:hover {
- border: 1px solid #CCC;
+ border: 1px solid #ccc;
text-decoration: none;
}
.translate-search-more-groups-info,
.translate-search-more-languages-info {
- color: #888;
+ color: #72777d;
font-size: 14px;
padding: 0 8px;
}
@@ -191,5 +161,5 @@ h1.firstHeading {
}
.tux-search-highlight {
- background-color: #C9C9C9;
+ background-color: #c9c9c9;
}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.special.supportedlanguages.css b/www/wiki/extensions/Translate/resources/css/ext.translate.special.supportedlanguages.css
index 7cca22dd..0bab7abe 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.special.supportedlanguages.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.special.supportedlanguages.css
@@ -1,4 +1,5 @@
.mw-translate-spsl-translators {
+ text-align: justify;
line-height: 200%;
}
@@ -16,5 +17,5 @@
.tagcloud .tag {
white-space: nowrap;
margin: 0.5ex;
- color: black;
+ color: #000;
}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.special.translate.css b/www/wiki/extensions/Translate/resources/css/ext.translate.special.translate.css
index 2c6e6671..8bb45be8 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.special.translate.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.special.translate.css
@@ -2,48 +2,45 @@
* Breadcrumb for message group selector
*/
.tux-breadcrumb {
+ color: #54595d;
margin-bottom: 10px;
+ font-size: 14pt;
+ line-height: 1.25em;
}
+/* Arrow between breadcrumb items */
.tux-breadcrumb .grouplink + .grouplink:before {
border-left: 4px solid #777;
border-top: 4px solid transparent;
border-bottom: 4px solid transparent;
- content: "";
+ content: '';
display: inline-block;
vertical-align: middle;
position: relative;
left: -5px;
}
-.tux-breadcrumb span {
- border: medium none;
- color: #555555;
- font-size: 14pt;
- font-weight: normal;
- line-height: 1.25em;
- padding-bottom: 3px;
- padding-left: 15px;
- padding-top: 1.25em;
-}
-
-.tux-breadcrumb span.grouptitle {
+/* This applies to all items in the breadcrumb */
+.tux-breadcrumb .grouptitle {
float: left;
padding: 0 6px 0 0;
}
-.tux-breadcrumb span.grouplink {
- color: #0645AD;
- cursor: pointer;
- float: left;
- min-height: 1px;
+/* Not all of these are links, so name is wrong besides being too generic.
+ * This excludes the first item which says "message group". */
+.tux-breadcrumb .grouplink {
padding: 0 6px;
- position: relative;
+}
+
+/* Color clickable groups to look as links */
+.tux-breadcrumb__item--aggregate {
+ cursor: pointer;
+ color: #0645ad;
}
/* Language selector */
.ext-translate-language-selector-label {
- color: #555555;
+ color: #54595d;
}
.ext-translate-language-selector {
@@ -61,25 +58,23 @@
/* The triangle shaped down-pointing callout after the language name
* in the target language selector
*/
-.ext-translate-language-selector:after {
+.ext-translate-language-selector .uls:after {
margin-left: 4px;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
- border-top: 4px solid #0645AD;
- content: "";
+ border-top: 4px solid #0645ad;
+ content: '';
display: inline-block;
vertical-align: middle;
}
.ext-translate-language-selector .uls {
- color: #0645AD;
+ color: #0645ad;
cursor: pointer;
min-height: 1px;
position: relative;
}
-
-/* */
.tux-message-selector {
font-size: 14px;
margin: 0;
@@ -87,7 +82,7 @@
list-style: none;
}
-.tux-message-selector li {
+.tux-message-selector .column {
border: medium none;
font-size: 14pt;
cursor: pointer;
@@ -136,28 +131,28 @@
}
.tux-message-selector li.selected {
- border-bottom: 2px solid #3366BB;
+ border-bottom: 2px solid #36c;
}
.tux-message-selector li.selected a {
- color: #3366BB;
+ color: #36c;
}
.tux-message-selector li a {
- color: #555555;
+ color: #54595d;
text-decoration: none;
white-space: nowrap;
margin-left: 1px;
}
.tux-message-selector label {
+ color: #54595d;
font-size: 12pt;
- color: #555555;
top: 1px;
}
.tux-editor-header {
- color: #252525;
+ color: #222;
font-size: 14px;
padding-bottom: 20px;
}
@@ -167,7 +162,7 @@
}
.group-warning {
- background: #FFF5AA;
+ background: #fff5aa;
padding: 5px;
margin: 5px 0;
}
@@ -180,44 +175,46 @@
padding-top: 5px;
border-bottom: 1px solid #777;
/* @noflip */
- -webkit-box-shadow: 0 3px 3px -3px rgba(0, 0, 0, 0.5);
- /* @noflip */
- box-shadow: 0 3px 3px -3px rgba(0, 0, 0, 0.5);
+ box-shadow: 0 3px 3px -3px rgba( 0, 0, 0, 0.5 );
font-size: 14px;
margin: 0;
list-style: none;
transition: width 250ms;
}
-.tux-messagetable-header.floating {
- background: white;
- position: fixed;
- padding-top: 5px;
- top: 0;
- z-index: 200;
-}
+@media screen and ( min-height: 600px ) {
+ .tux-messagetable-header.floating {
+ background: #fff;
+ position: fixed;
+ padding-top: 5px;
+ top: 0;
+ z-index: 200;
+ }
-.tux-messagetable-header.floating+.tux-messagelist {
- margin-top: 50px;
+ .tux-messagetable-header.floating + .tux-messagelist {
+ margin-top: 50px;
+ }
}
-.tux-messagetable-header .tux-message-filter-box {
+.tux-message-filter-box {
font-size: 14px;
height: 28px;
- border: 1px solid #C9C9C9;
+ border: 1px solid #c9c9c9;
width: 100%;
padding: 0 5px;
}
-.tux-messagetable-header .tux-message-filter-box-icon {
- background: url('../images/search.png') no-repeat scroll right center transparent;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/search.svg);
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/search.svg);
+.tux-message-filter-wrapper {
+ background: no-repeat scroll left center transparent;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/search.svg );
background-size: 25px;
- height: 28px;
+ padding-left: 30px;
}
.client-nojs .tux-messagetable-header {
display: none;
}
+
+.client-js .tux-nojs {
+ display: none;
+}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.special.translationstash.css b/www/wiki/extensions/Translate/resources/css/ext.translate.special.translationstash.css
index 5031c9ef..f451cb53 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.special.translationstash.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.special.translationstash.css
@@ -1,6 +1,6 @@
/**
* @author Santhosh Thottingal
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @since 2013.10
*/
@@ -10,17 +10,17 @@ h1.firstHeading {
h1 {
text-decoration: none;
- border-bottom: none;
+ border-bottom: 0;
}
.translate-welcome-header > p {
- color: #555555;
+ color: #54595d;
font-size: 1.2em;
}
.translate-welcome-header {
- background-color: #F8F8F8;
- background-image: linear-gradient(#fAFAFA, #f8f8f8);
+ background-color: #f8f8f8;
+ background-image: linear-gradient( #fafafa, #f8f8f8 );
border-bottom: 1px solid #eee;
padding: 10px;
}
@@ -37,20 +37,19 @@ h1 {
}
.translate-stash-control {
+ color: #54595d;
font-size: 1.5em;
- color: #555555;
padding: 35px 10px 20px 5px;
}
.ext-translate-language-selector-label {
- color: #555555;
+ color: #54595d;
}
.ext-translate-language-selector {
text-align: right;
}
-
/* The triangle shaped down-pointing callout after the language name
* in the target language selector
*/
@@ -58,8 +57,8 @@ h1 {
margin-left: 4px;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
- border-top: 4px solid #0645AD;
- content: "";
+ border-top: 4px solid #0645ad;
+ content: '';
display: inline-block;
vertical-align: middle;
}
@@ -87,7 +86,7 @@ h1 {
}
.tux-message:first-child .tux-message-item {
- border-top: 1px solid #C9C9C9;
+ border-top: 1px solid #c9c9c9;
}
.tux-message-item.translated {
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.statsbar.css b/www/wiki/extensions/Translate/resources/css/ext.translate.statsbar.css
index 95a96ad2..32df390c 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.statsbar.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.statsbar.css
@@ -2,29 +2,26 @@
max-width: 400px;
padding: 0;
height: 5px;
- background-color: #BBB;
+ background-color: #bbb;
}
.tux-statsbar span {
height: 5px;
float: left;
padding: 0;
- -webkit-transition: width 1s;
- -moz-transition: width 1s;
- -o-transition: width 1s;
transition: width 1s;
}
.tux-statsbar .tux-proofread {
- background-color: #23567F;
+ background-color: #00af89;
}
.tux-statsbar .tux-translated {
- background-color: #3A89C9;
+ background-color: #2a4b8d;
}
.tux-statsbar .tux-fuzzy {
- background-color: #EBCC6E;
+ background-color: #fc3;
}
.tux-statsbar .tux-untranslated {
@@ -32,9 +29,9 @@
}
.tux-statsbar-info {
+ color: #72777d;
font-weight: normal;
line-height: 1.25em;
- color: #777;
font-size: 10pt;
position: absolute;
padding-top: 5px;
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.statstable.less b/www/wiki/extensions/Translate/resources/css/ext.translate.statstable.less
new file mode 100644
index 00000000..a33400f1
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/resources/css/ext.translate.tag.languages.css b/www/wiki/extensions/Translate/resources/css/ext.translate.tag.languages.css
index 1d308d03..3f1c7ebf 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.tag.languages.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.tag.languages.css
@@ -1,7 +1,8 @@
.mw-pt-languages {
+ background-color: #f8f9fa;
display: table;
- border: 1px solid rgb(170, 170, 170);
- background: rgb(246, 249, 237) none repeat scroll 0 0;
+ border: 1px solid #a2a9b1;
+ box-sizing: border-box;
border-collapse: collapse;
line-height: 1.2;
width: 100%;
@@ -10,19 +11,17 @@
}
.mw-pt-languages-label {
+ background-color: #eaecf0;
display: table-cell;
- border-right: 1px solid rgb(170, 170, 170);
padding: 0.5em;
- background: rgb(238, 243, 226) none repeat scroll 0 0;
font-weight: bold;
- width: 15%;
+ white-space: nowrap;
}
.mw-pt-languages-list {
+ display: table-cell;
padding-left: 0.5em;
padding-bottom: 0.7em;
- display: table-cell;
- width: 80%;
}
.mw-pt-languages-list a {
@@ -40,22 +39,33 @@
background-size: 9px 9px;
}
+/* Need very high specificity to override skin styles in the sidebar */
+#mw-panel .portal .body .mw-pt-progress--none a,
+.interwiki-x-pagetranslation.mw-pt-progress--none a {
+ color: #ba0000;
+}
+
+#mw-panel .portal .body .mw-pt-progress--none a:visited,
+.interwiki-x-pagetranslation.mw-pt-progress--none a:visited {
+ color: #a55858;
+}
+
.mw-pt-progress--stub {
- background-image: url('../images/prog-1.png');
+ background-image: url( ../images/prog-1.png );
}
.mw-pt-progress--low {
- background-image: url('../images/prog-2.png');
+ background-image: url( ../images/prog-2.png );
}
.mw-pt-progress--med {
- background-image: url('../images/prog-3.png');
+ background-image: url( ../images/prog-3.png );
}
.mw-pt-progress--high {
- background-image: url('../images/prog-4.png');
+ background-image: url( ../images/prog-4.png );
}
.mw-pt-progress--complete {
- background-image: url('../images/prog-5.png');
+ background-image: url( ../images/prog-5.png );
}
diff --git a/www/wiki/extensions/Translate/resources/css/ext.translate.workflowselector.css b/www/wiki/extensions/Translate/resources/css/ext.translate.workflowselector.css
index 574d9609..0181650d 100644
--- a/www/wiki/extensions/Translate/resources/css/ext.translate.workflowselector.css
+++ b/www/wiki/extensions/Translate/resources/css/ext.translate.workflowselector.css
@@ -1,7 +1,7 @@
.tux-workflow-status {
background: #eee;
+ color: #222;
border: 1px solid #ddd;
- color: #252525;
cursor: pointer;
display: inline-block;
padding: 2px 4px;
@@ -22,7 +22,7 @@
border-left: 3px solid transparent;
border-right: 3px solid transparent;
border-top: 3px solid #555;
- content: "";
+ content: '';
display: inline-block;
vertical-align: middle;
}
@@ -33,22 +33,21 @@ ul.tux-workflow-status-selector {
}
.tux-workflow-status-selector li {
- color: #555555;
+ color: #54595d;
display: block;
font-size: 14px;
padding: 0 2px;
}
.tux-workflow-status-selector li.changeable:hover {
- cursor: pointer;
background-color: #f0f0f0;
- color: #252525;
+ color: #222;
+ cursor: pointer;
}
.tux-workflow-status-selector li.selected {
- background: url(../images/label-tick.png) right no-repeat;
- background-image: -webkit-linear-gradient(transparent, transparent), url(../images/label-tick.svg);
+ background: right no-repeat;
/* @embed */
- background-image: linear-gradient(transparent, transparent), url(../images/label-tick.svg);
- color: #252525;
+ background-image: linear-gradient( transparent, transparent ), url( ../images/label-tick.svg );
+ color: #222;
}
diff --git a/www/wiki/extensions/Translate/resources/images/action-edit.svg b/www/wiki/extensions/Translate/resources/images/action-edit.svg
index 9e4213a4..a4c351c6 100644
--- a/www/wiki/extensions/Translate/resources/images/action-edit.svg
+++ b/www/wiki/extensions/Translate/resources/images/action-edit.svg
@@ -1,36 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="15"
- height="15"
- id="svg17805">
- <defs
- id="defs17807" />
- <metadata
- id="metadata17810">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-159.64355,-100.30805)"
- id="layer1">
- <path
- d="m 169.46861,102.2832 -6.21818,8.8881 -0.0148,0 -0.18891,2.1633 1.97547,-0.9207 6.21818,-8.8881 -1.77168,-1.2443 z"
- id="rect8752-2-8-5-49-6-2-0-2-5-4-0-4-5-8-7-6-4-94-6-2-8-0-2-6-8-9"
- style="fill:#3366bb;fill-opacity:1;stroke:none" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
+ <path d="M9.825 1.975l-6.218 8.888h-.015l-.19 2.164 1.977-.92 6.217-8.89-1.772-1.244z" fill="#36c"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/add.svg b/www/wiki/extensions/Translate/resources/images/add.svg
index 238ebd15..3cb491c0 100644
--- a/www/wiki/extensions/Translate/resources/images/add.svg
+++ b/www/wiki/extensions/Translate/resources/images/add.svg
@@ -1 +1,23 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><linearGradient id="c"><stop offset="0" stop-color="#8ccb81"/><stop offset="1" stop-color="#65ab55"/></linearGradient><linearGradient><stop offset="0" stop-color="#74b75b"/><stop offset="1" stop-color="#86c97a"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#dcf1d8"/><stop offset="1" stop-color="#89be78"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#34812c" stop-opacity=".957"/><stop offset="1" stop-color="#87b870" stop-opacity=".957"/></linearGradient><linearGradient x1="12.758" y1="13.001" x2="2.583" y2="2.521" xlink:href="#a" gradientUnits="userSpaceOnUse"/><linearGradient x1="2.583" y1="2.521" x2="12.758" y2="13.001" xlink:href="#b" gradientUnits="userSpaceOnUse"/><linearGradient x1="4.551" y1="4.433" x2="11.459" y2="11.341" xlink:href="#c" gradientUnits="userSpaceOnUse"/><linearGradient x1="4.551" y1="4.433" x2="11.459" y2="11.341" id="f" xlink:href="#c" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.002 0 0 1.002 -.038 0)"/><linearGradient x1="2.583" y1="2.521" x2="12.758" y2="13.001" id="d" xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(.253 .127)"/><linearGradient x1="12.758" y1="13.001" x2="2.583" y2="2.521" id="e" xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(.253 .127)"/></defs><path d="M14.9 7.95a6.85 6.85 0 1 1-13.7 0 6.85 6.85 0 1 1 13.7 0z" fill="url(#d)" fill-rule="evenodd" stroke="url(#e)"/><path d="M13 8A5 5 0 1 1 3 8a5 5 0 1 1 10 0z" fill="url(#f)"/><path d="M7.032 5v2.042H5v1.995h2.063V11h2V9.005H11V7.01H9.032V5.017z" fill="#fff" fill-opacity=".957"/></svg>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="c">
+ <stop offset="0" stop-color="#8ccb81"/>
+ <stop offset="1" stop-color="#65ab55"/>
+ </linearGradient>
+ <linearGradient id="b">
+ <stop offset="0" stop-color="#dcf1d8"/>
+ <stop offset="1" stop-color="#89be78"/>
+ </linearGradient>
+ <linearGradient id="a">
+ <stop offset="0" stop-color="#34812c" stop-opacity=".957"/>
+ <stop offset="1" stop-color="#87b870" stop-opacity=".957"/>
+ </linearGradient>
+ <linearGradient id="f" x1="4.551" x2="11.459" y1="4.433" y2="11.341" xlink:href="#c" gradientUnits="userSpaceOnUse" gradientTransform="translate(-.038) scale(1.002)"/>
+ <linearGradient id="d" x1="2.583" x2="12.758" y1="2.521" y2="13.001" xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="translate(.253 .127)"/>
+ <linearGradient id="e" x1="12.758" x2="2.583" y1="13.001" y2="2.521" xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="translate(.253 .127)"/>
+ </defs>
+ <path fill="url(#d)" fill-rule="evenodd" stroke="url(#e)" d="M14.9 7.95a6.85 6.85 0 1 1-13.7 0 6.85 6.85 0 1 1 13.7 0z"/>
+ <path fill="url(#f)" d="M13 8A5 5 0 1 1 3 8a5 5 0 1 1 10 0z"/>
+ <path fill="#fff" fill-opacity=".957" d="M7.032 5v2.042H5v1.995h2.063V11h2V9.005H11V7.01H9.032V5.017z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/check-small.svg b/www/wiki/extensions/Translate/resources/images/check-small.svg
index 9d146493..9dd46c85 100644
--- a/www/wiki/extensions/Translate/resources/images/check-small.svg
+++ b/www/wiki/extensions/Translate/resources/images/check-small.svg
@@ -1,26 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="12"
- height="12"
- viewBox="0 0 12 12"
- id="Layer_1"
- xml:space="preserve"><metadata
- id="metadata17"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs15" />
-
-
-
-<path
- d="M 9.1873757,0 4.3406758,8.3503536 2.4427828,6.9489046 0.95379575,8.934306 3.990331,11.182457 5.0997526,12 5.8005534,10.802937 11.318717,1.226278 9.1873757,0 z"
- id="path12436-0-1-2-8-1-9-2-9"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#acacac;fill-opacity:1;stroke:none;stroke-width:2.6545198;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <path fill="#a2a9b1" d="M9.187 0L4.34 8.35l-1.897-1.4-1.49 1.984 3.037 2.248L5.1 12l.7-1.197 5.52-9.577L9.186 0z" overflow="visible"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/check-sprite-ltr.svg b/www/wiki/extensions/Translate/resources/images/check-sprite-ltr.svg
index fead121b..aee115fc 100644
--- a/www/wiki/extensions/Translate/resources/images/check-sprite-ltr.svg
+++ b/www/wiki/extensions/Translate/resources/images/check-sprite-ltr.svg
@@ -1,89 +1,15 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="44"
- height="248"
- id="svg10555">
- <defs
- id="defs10557" />
- <metadata
- id="metadata10560">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(0,-804.36218)"
- id="layer1">
- <path
- d="m 44,866.36218 -34.02216,0 -9.80064,15.00002 9.80064,15 34.02216,0 z"
- id="rect12220"
- style="color:#000000;fill:#e5e5e5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="m 34.7936,869.20616 -10.28928,17.72734 -4.02912,-2.9752 -3.16104,4.2149 6.4464,4.7727 2.35524,1.7356 1.48776,-2.5413 11.71476,-20.33072 -4.52472,-2.60332 z"
- id="path12436-0-1-2-8-1-9-2-9"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#3e3e3e;fill-opacity:1;stroke:none;stroke-width:2.6545198;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <path
- d="m 44,897.3622 -34.02216,0 -9.80064,15 9.80064,15 34.02216,0 z"
- id="rect12220-7"
- style="color:#000000;fill:#c8dbf3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="m 34.7936,900.2062 -10.28928,17.7273 -4.02912,-2.9752 -3.16104,4.2149 6.4464,4.7727 2.35524,1.7356 1.48776,-2.5413 11.71476,-20.3307 -4.52472,-2.6033 z"
- id="path12436-0-1-2-8-1-9-2-9-9"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#3366bb;fill-opacity:1;stroke:#3366bb;stroke-width:0.75;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <path
- d="m 44,804.36218 -34.02216,0 -9.80064,15 9.80064,15 34.02216,0 z"
- id="rect12220-0"
- style="color:#000000;fill:#e5e5e5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="m 34.7936,807.20614 -10.28928,17.72736 -4.02912,-2.97522 -3.16104,4.21491 6.4464,4.77275 2.35524,1.73554 1.48776,-2.54133 11.71476,-20.33068 -4.52472,-2.60333 z"
- id="path12436-0-1-2-8-1-9-2-9-2"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;stroke:#aeaeae;stroke-width:0.75;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <path
- d="m 44,835.36218 -34.02216,0 -9.80064,15 9.80064,15 34.02216,0 z"
- id="rect12220-0-0"
- style="color:#000000;fill:#c8dbf3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="m 34.7936,838.20614 -10.28928,17.72736 -4.02912,-2.97522 -3.16104,4.21491 6.4464,4.77275 2.35524,1.73554 1.48776,-2.54133 11.71476,-20.33068 -4.52472,-2.60333 z"
- id="path12436-0-1-2-8-1-9-2-9-2-4"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;stroke:#9ebfea;stroke-width:0.75;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <polygon
- points="43.396,37.858 32.354,56.604 26.119,51.79 27.582,49.892 31.667,53.045 41.329,36.641 "
- transform="matrix(1.1261478,0,0,1.1592998,-11.17699,889.3127)"
- id="polygon3"
- style="fill:#d1d3d4" />
- <polygon
- points="41.329,76.048 43.396,77.265 32.354,96.011 26.12,91.197 27.583,89.299 31.668,92.453 "
- transform="matrix(1.1261478,0,0,1.1592998,-11.17699,874.6282)"
- id="polygon5"
- style="fill:#9dbfdf" />
- <path
- d="m 8.1875,166.5 0,3.4375 -3.34375,0 0,3.03125 3.34375,0 0,3.40625 2.9375,0 0,-3.40625 3.34375,0 0,-3.03125 -3.34375,0 0,-3.4375 -2.9375,0 z"
- transform="translate(0,804.36218)"
- id="rect9"
- style="fill:#9dbfdf" />
- <polygon
- points="26.119,51.79 27.582,49.892 31.667,53.045 41.329,36.641 43.396,37.858 32.354,56.604 "
- transform="matrix(1.1261478,0,0,1.1592998,-11.17699,951.31273)"
- id="polygon3018"
- style="fill:#5f5f5f;fill-opacity:1" />
- <polygon
- points="27.582,49.892 31.667,53.045 41.329,36.641 43.396,37.858 32.354,56.604 26.119,51.79 "
- transform="matrix(1.1261478,0,0,1.1592998,-11.17699,982.3127)"
- id="polygon3022"
- style="fill:#9dbfdf;fill-opacity:1" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="44" height="248">
+ <path fill="#eaecf0" d="M44 62H9.978l-9.8 15 9.8 15H44z" overflow="visible"/>
+ <path fill="#3e3e3e" d="M34.794 64.844L24.504 82.57l-4.03-2.974-3.16 4.215 6.447 4.775 2.357 1.735 1.488-2.542 11.714-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#c8dbf3" d="M44 93H9.978l-9.8 15 9.8 15H44z" overflow="visible"/>
+ <path fill="#36c" stroke="#36c" stroke-width=".75" d="M34.794 95.844l-10.29 17.727-4.03-2.973-3.16 4.215 6.447 4.774 2.357 1.735 1.488-2.54L39.32 98.45l-4.525-2.605z" overflow="visible"/>
+ <path fill="#eaecf0" d="M44 0H9.978l-9.8 15 9.8 15H44z" overflow="visible"/>
+ <path fill="#fff" stroke="#a2a9b1" stroke-width=".75" d="M34.794 2.844L24.504 20.57l-4.03-2.974-3.16 4.215 6.447 4.775 2.357 1.735 1.488-2.542L39.32 5.448l-4.525-2.604z" overflow="visible"/>
+ <path fill="#c8dbf3" d="M44 31H9.978l-9.8 15 9.8 15H44z" overflow="visible"/>
+ <path fill="#fff" stroke="#9ebfea" stroke-width=".75" d="M34.794 33.844L24.504 51.57l-4.03-2.974-3.16 4.215 6.447 4.775 2.357 1.735 1.488-2.542 11.714-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#d1d3d4" d="M37.693 128.84l-12.435 21.73-7.02-5.58 1.646-2.202 4.6 3.656 10.882-19.018"/>
+ <path fill="#9dbfdf" d="M35.366 158.428l2.327 1.41-12.435 21.734-7.02-5.58 1.648-2.202 4.6 3.657M8.188 166.5v3.438H4.844v3.03h3.343v3.407h2.938v-3.406h3.344v-3.033h-3.346V166.5H8.187z"/>
+ <path fill="#54595d" d="M18.237 206.99l1.647-2.2 4.6 3.656 10.882-19.018 2.327 1.41-12.435 21.734"/>
+ <path fill="#9dbfdf" d="M19.884 235.79l4.6 3.656 10.882-19.018 2.327 1.41-12.435 21.734-7.02-5.58"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/check-sprite-rtl.svg b/www/wiki/extensions/Translate/resources/images/check-sprite-rtl.svg
index 7d55d676..5f15ad22 100644
--- a/www/wiki/extensions/Translate/resources/images/check-sprite-rtl.svg
+++ b/www/wiki/extensions/Translate/resources/images/check-sprite-rtl.svg
@@ -1,84 +1,15 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="44"
- height="248"
- id="svg10555">
- <defs
- id="defs10557" />
- <metadata
- id="metadata10560">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <path
- d="M 0.1772,62 34.19936,62 44,77.00002 l -9.80064,15 -34.02216,0 z"
- id="rect12220"
- style="color:#000000;fill:#e5e5e5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="m 22.33832,64.84398 -10.28928,17.72734 -4.02912,-2.9752 -3.16104,4.2149 6.4464,4.7727 2.35524,1.7356 1.48776,-2.5413 11.71476,-20.33072 -4.52472,-2.60332 z"
- id="path12436-0-1-2-8-1-9-2-9"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#3e3e3e;fill-opacity:1;stroke:none;stroke-width:2.6545198;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <path
- d="m 0.1772,93.00002 34.02216,0 9.80064,15 -9.80064,15 -34.02216,0 z"
- id="rect12220-7"
- style="color:#000000;fill:#c8dbf3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="m 22.33832,95.84402 -10.28928,17.7273 -4.02912,-2.9752 -3.16104,4.2149 6.4464,4.7727 2.35524,1.7356 1.48776,-2.5413 11.71476,-20.3307 -4.52472,-2.6033 z"
- id="path12436-0-1-2-8-1-9-2-9-9"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#3366bb;fill-opacity:1;stroke:#3366bb;stroke-width:0.75;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <path
- d="M 0.1772,0 34.19936,0 44,15 34.19936,30 0.1772,30 z"
- id="rect12220-0"
- style="color:#000000;fill:#e5e5e5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="M 22.33832,2.84396 12.04904,20.57132 8.01992,17.5961 l -3.16104,4.21491 6.4464,4.77275 2.35524,1.73554 1.48776,-2.54133 L 26.86304,5.44729 22.33832,2.84396 z"
- id="path12436-0-1-2-8-1-9-2-9-2"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;stroke:#aeaeae;stroke-width:0.75;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <path
- d="M 0.1772,31 34.19936,31 44,46 34.19936,61 0.1772,61 z"
- id="rect12220-0-0"
- style="color:#000000;fill:#c8dbf3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="M 22.33832,33.84396 12.04904,51.57132 8.01992,48.5961 l -3.16104,4.21491 6.4464,4.77275 2.35524,1.73554 1.48776,-2.54133 11.71476,-20.33068 -4.52472,-2.60333 z"
- id="path12436-0-1-2-8-1-9-2-9-2-4"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;stroke:#9ebfea;stroke-width:0.75;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <polygon
- points="41.329,36.641 43.396,37.858 32.354,56.604 26.119,51.79 27.582,49.892 31.667,53.045 "
- transform="matrix(1.1261478,0,0,1.1592998,-23.63227,84.95052)"
- id="polygon3"
- style="fill:#d1d3d4" />
- <polygon
- points="31.668,92.453 41.329,76.048 43.396,77.265 32.354,96.011 26.12,91.197 27.583,89.299 "
- transform="matrix(1.1261478,0,0,1.1592998,-23.63227,70.26602)"
- id="polygon5"
- style="fill:#9dbfdf" />
- <path
- d="m 35.9897,166.5 0,3.4375 3.34375,0 0,3.03125 -3.34375,0 0,3.40625 -2.9375,0 0,-3.40625 -3.34375,0 0,-3.03125 3.34375,0 0,-3.4375 2.9375,0 z"
- id="rect9"
- style="fill:#9dbfdf" />
- <polygon
- points="32.354,56.604 26.119,51.79 27.582,49.892 31.667,53.045 41.329,36.641 43.396,37.858 "
- transform="matrix(1.1261478,0,0,1.1592998,-23.63227,146.95055)"
- id="polygon3018"
- style="fill:#5f5f5f;fill-opacity:1" />
- <polygon
- points="26.119,51.79 27.582,49.892 31.667,53.045 41.329,36.641 43.396,37.858 32.354,56.604 "
- transform="matrix(1.1261478,0,0,1.1592998,-23.63227,177.95052)"
- id="polygon3022"
- style="fill:#9dbfdf;fill-opacity:1" />
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="44" height="248">
+ <path fill="#eaecf0" d="M.177 62H34.2L44 77l-9.8 15H.176z" overflow="visible"/>
+ <path fill="#3e3e3e" d="M22.338 64.844L12.048 82.57 8.02 79.597 4.86 83.81l6.445 4.774 2.356 1.735 1.488-2.542 11.715-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#c8dbf3" d="M.177 93H34.2l9.8 15-9.8 15H.176z" overflow="visible"/>
+ <path fill="#36c" stroke="#36c" stroke-width=".75" d="M22.338 95.844l-10.29 17.727-4.028-2.974-3.16 4.215 6.445 4.774 2.356 1.735 1.488-2.542 11.715-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#eaecf0" d="M.177 0H34.2L44 15l-9.8 15H.176z" overflow="visible"/>
+ <path fill="#fff" stroke="#aeaeae" stroke-width=".75" d="M22.338 2.844L12.048 20.57 8.02 17.597 4.86 21.81l6.445 4.774 2.356 1.735 1.488-2.542 11.715-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#c8dbf3" d="M.177 31H34.2L44 46l-9.8 15H.176z" overflow="visible"/>
+ <path fill="#fff" stroke="#9ebfea" stroke-width=".75" d="M22.338 33.844L12.048 51.57 8.02 48.597 4.86 52.81l6.445 4.774 2.356 1.735 1.488-2.542 11.715-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#d1d3d4" d="M22.91 127.428l2.328 1.41-12.435 21.734-7.02-5.58 1.646-2.202 4.6 3.656"/>
+ <path fill="#9dbfdf" d="M12.03 177.447l10.88-19.02 2.328 1.412-12.435 21.732-7.02-5.58 1.647-2.202M35.99 166.5v3.438h3.343v3.03H35.99v3.407h-2.938v-3.406h-3.344v-3.032h3.344V166.5h2.938z"/>
+ <path fill="#54595d" d="M12.803 212.572l-7.02-5.58 1.646-2.202 4.6 3.656 10.88-19.018 2.328 1.41"/>
+ <path fill="#9dbfdf" d="M5.782 237.99l1.647-2.2 4.6 3.656 10.88-19.018 2.328 1.41-12.435 21.734"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/close.svg b/www/wiki/extensions/Translate/resources/images/close.svg
index 375b4f5c..22619b95 100644
--- a/www/wiki/extensions/Translate/resources/images/close.svg
+++ b/www/wiki/extensions/Translate/resources/images/close.svg
@@ -1,40 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="12"
- height="12"
- id="svg2">
- <defs
- id="defs4" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-578.6585,-310.8933)"
- id="layer1">
- <path
- d="m 579.70127,311.93609 9.91446,9.91442"
- id="path6064-1-0-9"
- style="fill:none;stroke:#2e3436;stroke-width:2.085536;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- d="m 589.6157,311.93609 -9.91441,9.91442"
- id="path6064-3-2-4-6"
- style="fill:none;stroke:#2e3436;stroke-width:2.085536;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path d="M3.636 2.222l14.142 14.142-1.414 1.414L2.222 3.636z"/>
+ <path d="M17.778 3.636L3.636 17.778l-1.414-1.414L16.364 2.222z"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/contract-ltr.svg b/www/wiki/extensions/Translate/resources/images/contract-ltr.svg
index 0a00db1d..2b7d71b6 100644
--- a/www/wiki/extensions/Translate/resources/images/contract-ltr.svg
+++ b/www/wiki/extensions/Translate/resources/images/contract-ltr.svg
@@ -1,51 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="16"
- height="12"
- id="svg17805">
- <defs
- id="defs17807" />
- <metadata
- id="metadata17810">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-159.64355,-103.30805)"
- id="layer1">
- <rect
- width="4.2944264"
- height="9.2567539"
- x="170.16307"
- y="104.72025"
- id="rect8020-7-3-7-8"
- style="color:#000000;fill:#b9b9b9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <rect
- width="14.63288"
- height="10.276761"
- x="160.32709"
- y="104.16966"
- id="rect6062-5-54-4-3"
- style="color:#000000;fill:none;stroke:#2e3436;stroke-width:1.36711919;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="M 7.03125,2.21875 3.6875,5.53125 3.28125,5.96875 3.6875,6.375 6.9375,9.625 7.78125,8.78125 5.53125,6.5 l 5.78125,0 0,-1.1875 -5.71875,0 2.25,-2.25 -0.8125,-0.84375 z"
- transform="translate(159.64355,103.30805)"
- id="path8014-1-9-7-7"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1.18803263;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" viewBox="0 0 16 12">
+ <path fill="#a2a9b1" d="M10.52 1.412h4.293v9.257H10.52z" overflow="visible"/>
+ <path fill="none" stroke="#222" stroke-width="1.367" d="M.683.862h14.633V11.14H.683z" overflow="visible"/>
+ <path fill="#222" d="M7.03 2.22L3.688 5.53l-.406.44.408.405 3.25 3.25.843-.844L5.53 6.5h5.782V5.312H5.595l2.25-2.25-.813-.843z" overflow="visible"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/contract-rtl.svg b/www/wiki/extensions/Translate/resources/images/contract-rtl.svg
index 43a488dc..8a498500 100644
--- a/www/wiki/extensions/Translate/resources/images/contract-rtl.svg
+++ b/www/wiki/extensions/Translate/resources/images/contract-rtl.svg
@@ -1,53 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="16"
- height="12"
- id="svg17805">
- <defs
- id="defs17807" />
- <metadata
- id="metadata17810">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-159.64355,-103.30805)"
- id="layer1">
- <rect
- width="4.2944264"
- height="9.2567539"
- x="-165.12401"
- y="104.72025"
- transform="scale(-1,1)"
- id="rect8020-7-3-7-8"
- style="color:#000000;fill:#b9b9b9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <rect
- width="14.63288"
- height="10.276761"
- x="-174.96001"
- y="104.16966"
- transform="scale(-1,1)"
- id="rect6062-5-54-4-3"
- style="color:#000000;fill:none;stroke:#2e3436;stroke-width:1.36711919;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="M 8.96875,2.21875 8.125,3.0625 l 2.28125,2.25 -5.71875,0 0,1.1875 5.78125,0 -2.28125,2.28125 0.84375,0.84375 3.25,-3.25 0.40625,-0.40625 -0.40625,-0.4375 -3.3125,-3.3125 z"
- transform="translate(159.64355,103.30805)"
- id="path8014-1-9-7-7"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1.18803263;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" viewBox="0 0 16 12">
+ <path fill="#a2a9b1" d="M5.48 1.412H1.186v9.257H5.48z" overflow="visible"/>
+ <path fill="none" stroke="#222" stroke-width="1.367" d="M15.316.862H.683V11.14h14.633z" overflow="visible"/>
+ <path fill="#222" d="M8.97 2.22l-.845.842 2.28 2.25H4.69V6.5h5.78L8.19 8.78l.843.845 3.25-3.25.408-.406-.407-.44-3.31-3.31z" overflow="visible"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/edit-mark.svg b/www/wiki/extensions/Translate/resources/images/edit-mark.svg
index a1221fb0..80d09ecb 100644
--- a/www/wiki/extensions/Translate/resources/images/edit-mark.svg
+++ b/www/wiki/extensions/Translate/resources/images/edit-mark.svg
@@ -1,30 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="33.389"
- height="22.857"
- viewBox="0 0 33.389 22.857"
- id="svg2"
- xml:space="preserve"><metadata
- id="metadata9"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs7" />
-
-<g
- transform="translate(-2372.5715,-642.2193)"
- id="layer1">
-
- <path
- d="m 2393.896,645.134 -9.343,13.311 -0.022,0.003 -0.284,3.239 2.968,-1.379 9.344,-13.31 -2.663,-1.864 0,0 z"
- id="rect8752-2-8-5-49-6-2-0-2-5-4-0-4-5-8-7-6-4-9-9-0-3-2-1-1-3-7-4-8-3"
- style="fill:#c9c9c9" />
-</g>
-</svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="33.389" height="22.857" viewBox="0 0 33.389 22.857">
+ <path fill="#c8ccd1" d="M21.325 2.915l-9.343 13.31-.022.004-.284 3.238 2.968-1.38 9.344-13.31-2.663-1.863z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/expand-ltr.svg b/www/wiki/extensions/Translate/resources/images/expand-ltr.svg
index 87ea35f0..bffe869c 100644
--- a/www/wiki/extensions/Translate/resources/images/expand-ltr.svg
+++ b/www/wiki/extensions/Translate/resources/images/expand-ltr.svg
@@ -1,51 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="16"
- height="12"
- id="svg17805">
- <defs
- id="defs17807" />
- <metadata
- id="metadata17810">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-159.64355,-103.30805)"
- id="layer1">
- <rect
- width="4.2944264"
- height="9.2567539"
- x="170.16307"
- y="104.72025"
- id="rect8020-7-3-7"
- style="color:#000000;fill:#b9b9b9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <rect
- width="14.63288"
- height="10.276761"
- x="160.32709"
- y="104.16966"
- id="rect6062-5-54-4"
- style="color:#000000;fill:none;stroke:#2e3436;stroke-width:1.36711919;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="M 8.40625,2.21875 7.5625,3.0625 l 2.28125,2.25 -5.71875,0 0,1.1875 5.78125,0 L 7.625,8.78125 8.46875,9.625 l 3.25,-3.25 0.40625,-0.40625 -0.40625,-0.4375 -3.3125,-3.3125 z"
- transform="translate(159.64355,103.30805)"
- id="path8014-1-9-7"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1.18803263;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" viewBox="0 0 16 12">
+ <path fill="#a2a9b1" d="M10.52 1.412h4.293v9.257H10.52z" overflow="visible"/>
+ <path fill="none" stroke="#222" stroke-width="1.367" d="M.683.862h14.633V11.14H.683z" overflow="visible"/>
+ <path fill="#222" d="M8.406 2.22l-.844.842 2.282 2.25h-5.72V6.5h5.782l-2.28 2.28.843.845 3.25-3.25.405-.406-.406-.44-3.314-3.31z" overflow="visible"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/expand-rtl.svg b/www/wiki/extensions/Translate/resources/images/expand-rtl.svg
index 7f1ded58..d65d5660 100644
--- a/www/wiki/extensions/Translate/resources/images/expand-rtl.svg
+++ b/www/wiki/extensions/Translate/resources/images/expand-rtl.svg
@@ -1,53 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="16"
- height="12"
- id="svg17805">
- <defs
- id="defs17807" />
- <metadata
- id="metadata17810">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-159.64355,-103.30805)"
- id="layer1">
- <rect
- width="4.2944264"
- height="9.2567539"
- x="-165.12401"
- y="104.72025"
- transform="scale(-1,1)"
- id="rect8020-7-3-7"
- style="color:#000000;fill:#b9b9b9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <rect
- width="14.63288"
- height="10.276761"
- x="-174.96001"
- y="104.16966"
- transform="scale(-1,1)"
- id="rect6062-5-54-4"
- style="color:#000000;fill:none;stroke:#2e3436;stroke-width:1.36711919;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="M 7.5625,2.21875 4.25,5.53125 3.84375,5.96875 4.25,6.375 7.5,9.625 8.34375,8.78125 6.09375,6.5 l 5.75,0 0,-1.1875 -5.6875,0 2.25,-2.25 L 7.5625,2.21875 z"
- transform="translate(159.64355,103.30805)"
- id="path8014-1-9-7"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1.18803263;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" viewBox="0 0 16 12">
+ <path fill="#a2a9b1" d="M5.48 1.412H1.186v9.257H5.48z" overflow="visible"/>
+ <path fill="none" stroke="#222" stroke-width="1.367" d="M15.316.862H.683V11.14h14.633z" overflow="visible"/>
+ <path fill="#222" d="M7.563 2.22L4.25 5.53l-.406.44.406.405 3.25 3.25.844-.844-2.25-2.28h5.75V5.312H6.156l2.25-2.25-.844-.843z" overflow="visible"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/label-clock.svg b/www/wiki/extensions/Translate/resources/images/label-clock.svg
index b5a2aa42..d1bd36d9 100644
--- a/www/wiki/extensions/Translate/resources/images/label-clock.svg
+++ b/www/wiki/extensions/Translate/resources/images/label-clock.svg
@@ -1,28 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="15"
- height="15"
- viewBox="0 0 15 15"
- id="svg17805"
- xml:space="preserve"><metadata
- id="metadata9"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs7" />
-<path
- d="m 7.5,0.125 c -4.059,0 -7.375,3.316 -7.375,7.375 0,4.059 3.316,7.375 7.375,7.375 4.059,0 7.375,-3.316 7.375,-7.375 0,-4.059 -3.316,-7.375 -7.375,-7.375 z m 0,1.768 c 3.104,0 5.607,2.504 5.607,5.607 0,3.103 -2.504,5.607 -5.607,5.607 -3.103,0 -5.607,-2.503 -5.607,-5.607 0,-3.104 2.503,-5.607 5.607,-5.607 z"
- id="path4660-7-2-3-3"
- style="fill:#565656" />
-<path
- d="m 6.708,2.991 v 4.552 0.764 0.446 h 3.428 V 7.543 H 7.918 V 2.991 h -1.21 z"
- id="rect4662-1-2-3-46"
- style="fill:#565656" />
-</svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
+ <path fill="#54595d" d="M7.5.125C3.44.125.125 3.44.125 7.5c0 4.06 3.316 7.375 7.375 7.375 4.06 0 7.375-3.316 7.375-7.375C14.875 3.44 11.56.125 7.5.125zm0 1.768c3.104 0 5.607 2.504 5.607 5.607s-2.504 5.607-5.607 5.607S1.893 10.604 1.893 7.5 4.396 1.893 7.5 1.893z"/>
+ <path fill="#54595d" d="M6.708 2.99v5.763h3.428v-1.21H7.918V2.99h-1.21z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/label-flag.svg b/www/wiki/extensions/Translate/resources/images/label-flag.svg
index e98ff32e..2ba48b7e 100644
--- a/www/wiki/extensions/Translate/resources/images/label-flag.svg
+++ b/www/wiki/extensions/Translate/resources/images/label-flag.svg
@@ -1,29 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="15"
- height="15"
- viewBox="0 0 15 15"
- id="svg17805"
- xml:space="preserve"><metadata
- id="metadata8"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs6" />
-
-<g
- transform="translate(-159.64355,-100.30805)"
- id="layer1">
- <path
- d="m 162.081,102.058 v 6.469 h 8.844 v 5.031 h 1.281 v -5.031 -6.062 -0.406 h -10.125 z"
- id="rect8962-1"
- style="fill:#565656" />
-</g>
-</svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
+ <path fill="#54595d" d="M2.437 1.75v6.47h8.844v5.03h1.282V1.75H2.437z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/label-pen.svg b/www/wiki/extensions/Translate/resources/images/label-pen.svg
index 8e61dd86..715470d0 100644
--- a/www/wiki/extensions/Translate/resources/images/label-pen.svg
+++ b/www/wiki/extensions/Translate/resources/images/label-pen.svg
@@ -1,29 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="15"
- height="15"
- viewBox="0 0 15 15"
- id="svg17805"
- xml:space="preserve"><metadata
- id="metadata8"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs6" />
-
-<g
- transform="translate(-159.64355,-100.30805)"
- id="layer1">
- <path
- d="m 169.469,102.283 -6.218,8.888 h -0.015 l -0.189,2.163 1.975,-0.921 6.218,-8.888 -1.771,-1.244 v 0.002 z"
- id="rect8752-2-8-5-49-6-2-0-2-5-4-0-4-5-8-7-6-4-94-6-2-8-0-2-6-8-9"
- style="fill:#565656" />
-</g>
-</svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
+ <path fill="#54595d" d="M9.825 1.975l-6.218 8.888h-.015l-.19 2.163 1.976-.92 6.218-8.89-1.77-1.243v.002z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/label-tick.svg b/www/wiki/extensions/Translate/resources/images/label-tick.svg
index 59de0e2a..44326a0c 100644
--- a/www/wiki/extensions/Translate/resources/images/label-tick.svg
+++ b/www/wiki/extensions/Translate/resources/images/label-tick.svg
@@ -1,29 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="15"
- height="15"
- viewBox="0 0 15 15"
- id="svg17805"
- xml:space="preserve"><metadata
- id="metadata8"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs6" />
-
-<g
- transform="translate(-159.64355,-100.30805)"
- id="layer1">
- <path
- d="m 170.409,101.386 -5.188,8.938 -2.031,-1.5 -1.594,2.125 3.25,2.406 1.188,0.875 0.75,-1.281 5.906,-10.25 -2.281,-1.313 z"
- id="path12436-0-1-2-8-1-9-2-0"
- style="fill:#565656" />
-</g>
-</svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
+ <path fill="#54595d" d="M10.765 1.078l-5.188 8.938-2.03-1.5L1.95 10.64l3.25 2.407 1.188.875.75-1.28 5.906-10.25-2.28-1.314z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/loading.svg b/www/wiki/extensions/Translate/resources/images/loading.svg
index 92f84cde..7aa88cb4 100644
--- a/www/wiki/extensions/Translate/resources/images/loading.svg
+++ b/www/wiki/extensions/Translate/resources/images/loading.svg
@@ -1,39 +1,7 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="34"
- height="34.03125"
- id="svg9613">
- <defs
- id="defs9615" />
- <metadata
- id="metadata9618">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="g2987">
- <path
- d="m 16.977523,0.24095147 c -9.2629169,0 -16.73280045,7.51449143 -16.73280045,16.77740253 0,9.262912 7.46988355,16.777403 16.73280045,16.777403 9.262917,0 16.777413,-7.514491 16.777413,-16.777403 0,-9.2629111 -7.514496,-16.77740253 -16.777413,-16.77740253 z m 0,4.14972823 c 6.966927,0 12.627682,5.6607523 12.627682,12.6276743 0,6.966923 -5.660755,12.583053 -12.627682,12.583053 -6.966937,0 -12.5830596,-5.61613 -12.5830596,-12.583053 0,-6.966922 5.6161226,-12.6276743 12.5830596,-12.6276743 z"
- id="path15290-7-0-9-5-1-59-0-3-2"
- style="color:#000000;fill:#000000;fill-opacity:0.08333333;fill-rule:nonzero;stroke:#565656;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.19607843;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="M 31.677259,17.003529 A 14.680208,14.680199 0 0 1 20.796571,31.183505"
- id="path15290-6-0-6-1-0-0-16-1-0-06"
- style="color:#000000;fill:none;stroke:#3366bb;stroke-width:2.2583456;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="34" height="34.031">
+ <g color="#000">
+ <path fill-opacity=".083" stroke="#54595d" stroke-opacity=".196" stroke-width=".5" d="M16.978.24C7.715.24.245 7.756.245 17.02c0 9.263 7.47 16.778 16.733 16.778 9.262 0 16.777-7.515 16.777-16.778C33.755 7.755 26.24.24 16.978.24zm0 4.15c6.966 0 12.627 5.66 12.627 12.628 0 6.967-5.66 12.583-12.627 12.583-6.967 0-12.584-5.615-12.584-12.582 0-6.967 5.617-12.627 12.584-12.627z" overflow="visible"/>
+ <path fill="none" stroke="#36c" stroke-width="2.258" d="M31.677 17.004a14.68 14.68 0 0 1-10.88 14.18" stroke-linecap="round" overflow="visible"/>
+ </g>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/outdated-ltr.svg b/www/wiki/extensions/Translate/resources/images/outdated-ltr.svg
index c082fda4..cf0fe1dc 100644
--- a/www/wiki/extensions/Translate/resources/images/outdated-ltr.svg
+++ b/www/wiki/extensions/Translate/resources/images/outdated-ltr.svg
@@ -1,32 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="33.389"
- height="22.857"
- viewBox="0 0 33.389 22.857"
- id="svg2"
- xml:space="preserve"><metadata
- id="metadata10"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs8" />
-<path
- d="m 0,0 h 25.922 l 7.467,11.429 -7.467,11.429 H 0 V 0 z"
- id="rect12220-2"
- style="fill:#fef4ba" />
-<path
- d="m 17.981,4.357 c -4.06,0 -7.375,3.316 -7.375,7.375 0,4.059 3.315,7.375 7.375,7.375 4.059,0 7.375,-3.316 7.375,-7.375 0,-4.059 -3.316,-7.375 -7.375,-7.375 z m 0,1.768 c 3.104,0 5.607,2.504 5.607,5.607 0,3.103 -2.504,5.607 -5.607,5.607 -3.103,0 -5.607,-2.504 -5.607,-5.607 0,-3.103 2.504,-5.607 5.607,-5.607 z"
- id="path4660-7-2-3-7-0-0"
- style="fill:#565656" />
-<path
- d="m 17.189,7.223 v 4.552 0.764 0.446 h 3.428 v -1.21 H 18.399 V 7.223 h -1.21 z"
- id="rect4662-1-2-3-7-4-3"
- style="fill:#565656" />
-</svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="33.389" height="22.857" viewBox="0 0 33.389 22.857">
+ <path fill="#fef4ba" d="M0 0h25.922l7.467 11.43-7.468 11.428H0V0z"/>
+ <path fill="#54595d" d="M17.98 4.357c-4.06 0-7.374 3.316-7.374 7.375 0 4.06 3.315 7.375 7.375 7.375 4.06 0 7.376-3.316 7.376-7.375 0-4.06-3.316-7.375-7.375-7.375zm0 1.768c3.105 0 5.608 2.504 5.608 5.607s-2.504 5.607-5.607 5.607c-3.102 0-5.606-2.505-5.606-5.608 0-3.103 2.504-5.607 5.607-5.607z"/>
+ <path fill="#54595d" d="M17.19 7.223v5.761h3.427v-1.21H18.4V7.223h-1.21z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/outdated-rtl.svg b/www/wiki/extensions/Translate/resources/images/outdated-rtl.svg
index 1eeeab78..13bcacd8 100644
--- a/www/wiki/extensions/Translate/resources/images/outdated-rtl.svg
+++ b/www/wiki/extensions/Translate/resources/images/outdated-rtl.svg
@@ -1,32 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="33.389"
- height="22.857"
- viewBox="0 0 33.389 22.857"
- id="svg2"
- xml:space="preserve"><metadata
- id="metadata10"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs8" />
-<path
- d="M 33.389,0 H 7.467 L 0,11.429 7.467,22.858 H 33.389 V 0 z"
- id="rect12220-2"
- style="fill:#fef4ba" />
-<path
- d="m 15.408,4.357 c -4.06,0 -7.375,3.316 -7.375,7.375 0,4.059 3.315,7.375 7.375,7.375 4.059,0 7.375,-3.316 7.375,-7.375 0,-4.059 -3.316,-7.375 -7.375,-7.375 z m 0,1.768 c 3.104,0 5.607,2.504 5.607,5.607 0,3.103 -2.504,5.607 -5.607,5.607 -3.103,0 -5.607,-2.504 -5.607,-5.607 0,-3.103 2.504,-5.607 5.607,-5.607 z"
- id="path4660-7-2-3-7-0-0"
- style="fill:#565656" />
-<path
- d="m 14.616,7.223 v 4.552 0.764 0.446 h 3.428 v -1.21 H 15.826 V 7.223 h -1.21 z"
- id="rect4662-1-2-3-7-4-3"
- style="fill:#565656" />
-</svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="33.389" height="22.857" viewBox="0 0 33.389 22.857">
+ <path fill="#fef4ba" d="M33.39 0H7.466L0 11.43l7.467 11.428H33.39V0z"/>
+ <path fill="#54595d" d="M15.408 4.357c-4.06 0-7.375 3.316-7.375 7.375 0 4.06 3.315 7.375 7.375 7.375 4.06 0 7.375-3.316 7.375-7.375 0-4.06-3.316-7.375-7.375-7.375zm0 1.768c3.104 0 5.607 2.504 5.607 5.607s-2.504 5.607-5.607 5.607S9.8 14.834 9.8 11.73c0-3.103 2.505-5.607 5.608-5.607z"/>
+ <path fill="#54595d" d="M14.616 7.223v5.761h3.428v-1.21h-2.218V7.223h-1.21z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/paste.svg b/www/wiki/extensions/Translate/resources/images/paste.svg
index 38373db2..932c4b22 100644
--- a/www/wiki/extensions/Translate/resources/images/paste.svg
+++ b/www/wiki/extensions/Translate/resources/images/paste.svg
@@ -1,17 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
-<g>
- <path fill="#6D6E71" d="M29.077,29.012c0,1.061-0.859,1.92-1.92,1.92H4.844c-1.061,0-1.921-0.859-1.921-1.92V4.043
- c0-1.061,0.86-1.92,1.921-1.92h22.313c1.061,0,1.92,0.859,1.92,1.92V29.012z"/>
-
- <rect x="5.368" y="4.054" fill="#F1F2F2" stroke="#58595B" stroke-width="0.5" stroke-miterlimit="10" width="21" height="24.349"/>
- <rect x="7.743" y="8.896" fill="#A7A9AC" width="15.625" height="2.872"/>
- <rect x="7.743" y="15.09" fill="#A7A9AC" width="15.625" height="2.875"/>
- <rect x="7.743" y="21.287" fill="#A7A9AC" width="6.125" height="2.873"/>
- <polygon fill="#414042" points="18.646,2.814 18.646,1.068 13.354,1.068 13.354,2.814 10.459,2.814 10.459,5.152 21.542,5.152
- 21.542,2.814 "/>
-</g>
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
+ <path fill="#54595d" d="M29.077 29.012c0 1.06-.86 1.92-1.92 1.92H4.844c-1.06 0-1.92-.86-1.92-1.92V4.042c0-1.06.86-1.92 1.92-1.92h22.313c1.06 0 1.92.86 1.92 1.92v24.97z"/>
+ <path fill="#f8f9fa" stroke="#54595d" stroke-width=".5" stroke-miterlimit="10" d="M5.368 4.054h21v24.35h-21z"/>
+ <path fill="#a2a9b1" d="M7.743 8.896h15.625v2.872H7.743zM7.743 15.09h15.625v2.875H7.743zM7.743 21.287h6.125v2.873H7.743z"/>
+ <path fill="#414042" d="M18.646 2.814V1.068h-5.292v1.746H10.46v2.338H21.54V2.814"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/plus_darkgray.svg b/www/wiki/extensions/Translate/resources/images/plus_darkgray.svg
index abedfc22..5cf4e598 100644
--- a/www/wiki/extensions/Translate/resources/images/plus_darkgray.svg
+++ b/www/wiki/extensions/Translate/resources/images/plus_darkgray.svg
@@ -1 +1,4 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 768" enable-background="new 0 0 1024 768"><path fill="#555" d="M870.5 445.2v-122.4h-297.3v-297.3h-122.4v297.3h-297.3v122.4h297.3v297.3h122.4v-297.3z"/></svg>
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 768">
+ <path fill="#54595d" d="M870.5 445.2V322.8H573.2V25.5H450.8v297.3H153.5v122.4h297.3v297.3h122.4V445.2z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/project.svg b/www/wiki/extensions/Translate/resources/images/project.svg
index 64ec16b2..0e7a128b 100644
--- a/www/wiki/extensions/Translate/resources/images/project.svg
+++ b/www/wiki/extensions/Translate/resources/images/project.svg
@@ -1,66 +1,13 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="32"
- height="32"
- viewBox="0 0 32 32"
- id="svg3945"
- xml:space="preserve"><metadata
- id="metadata18"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs16" />
-<g
- transform="translate(-355.875,-530.20145)"
- id="layer1">
- <g
- id="g3815">
-
- <rect
- width="13.336"
- height="6.4949999"
- x="373.173"
- y="532.79199"
- id="rect4026-0-8-9-6-6-2-1-4-7-7-2-4-7-6"
- style="fill:#ffffff;fill-opacity:0.675;stroke:#c9c9c9;stroke-width:0.2572;stroke-linecap:round" />
-
- <linearGradient
- x1="716.99408"
- y1="-394.2966"
- x2="716.99408"
- y2="-422.53201"
- id="rect3213-2-4-3-9-5-6-8-3-5-6_1_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0287,0,0,-1.0287,-365.6989,126.7675)">
- <stop
- id="stop7"
- style="stop-color:#f4f4f4;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9"
- style="stop-color:#dddddd;stop-opacity:1"
- offset="1" />
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" xml:space="preserve">
+ <g transform="translate(-355.875,-530.20145)">
+ <rect width="13.336" height="6.4949999" x="373.173" y="532.79199" style="fill:#fff;fill-opacity:0.675;stroke:#c9c9c9;stroke-width:0.2572;stroke-linecap:round"/>
+ <linearGradient id="a" x1="716.99408" y1="-394.2966" x2="716.99408" y2="-422.53201" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0287,0,0,-1.0287,-365.6989,126.7675)">
+ <stop style="stop-color:#f4f4f4;stop-opacity:1" offset="0"/>
+ <stop style="stop-color:#dddddd;stop-opacity:1" offset="1"/>
</linearGradient>
-
- <path
- d="m 356.261,530.587 h 16.295 l 6.267,6.267 h 8.667 v 24.962 h -31.229 v -31.229 z"
- id="rect3213-2-4-3-9-5-6-8-3-5-6"
- style="fill:url(#rect3213-2-4-3-9-5-6-8-3-5-6_1_);stroke:#9d9d9d;stroke-width:0.77149999;stroke-linecap:square" />
- <path
- d="m 381.718,548.951 c 0.006,5.437 -4.396,9.848 -9.832,9.854 -5.436,0.006 -9.847,-4.396 -9.854,-9.831 0,-0.008 0,-0.016 0,-0.022 -0.006,-5.436 4.396,-9.847 9.832,-9.854 5.436,-0.006 9.847,4.396 9.854,9.832 0,0.006 0,0.014 0,0.021 z"
- id="path5753-1-5-3-9-8-2-7-5-8"
- style="fill:#f0f0f0;stroke:#6d6d6d;stroke-width:0.84439999;stroke-linecap:round" />
- <path
- d="m 372.031,541.108 c -0.825,0.023 -2.344,0.219 -2.344,0.219 0,0 0.25,0.477 0.25,0.688 0,0.211 -0.062,0.778 -0.062,1.031 0,0.253 0.925,0.053 1.094,-0.031 0.169,-0.084 1.281,-1.062 1.281,-1.062 0,0 0.408,-0.612 0.281,-0.781 -0.031,-0.044 -0.225,-0.072 -0.5,-0.064 l 0,0 z m -4.469,0.718 c 0.06,0.656 0.844,1.094 0.844,1.094 l 0.125,-0.438 c 0,10e-4 -0.67,-0.656 -0.969,-0.656 z m -0.781,0.438 c 0,0 -0.406,0.347 -1.062,0.406 -0.247,0.022 -0.745,-0.072 -1.281,-0.156 -1.188,1.37 -1.995,3.062 -2.281,4.938 l 0.219,-0.312 c 0,0 0.77,1.381 1.188,1.5 0.418,0.119 0.892,0.543 1.25,0.781 0.358,0.238 0.591,1.472 0.531,2.188 -0.06,0.716 0.483,0.804 0.781,1.281 0.298,0.477 0.949,3.326 1.188,3.625 0.239,0.299 0.475,-1.253 0.594,-1.969 0.119,-0.716 1.688,-2.034 1.688,-2.75 0,-0.716 -1.798,-1.736 -2.156,-2.094 -0.358,-0.358 -1.477,-0.531 -2.312,-0.531 -0.835,0 -0.847,-1.128 -1.562,-1.188 -0.715,-0.06 0.125,-1 0.125,-1 0,0 1.958,-0.312 2.375,-0.312 0.417,0 0.54,-1.182 0.719,-1.719 0.179,-0.537 1.506,-0.486 1.625,-0.844 0.119,-0.358 -0.542,-0.719 -0.781,-0.719 -0.239,0 -1.259,0.364 -1.438,0.125 -0.179,-0.239 1.031,-0.969 1.031,-0.969 l -0.441,-0.281 z m 9.063,0 c -0.197,0.016 -0.374,0.052 -0.438,0.094 -0.127,0.084 -0.467,0.216 -0.594,0.406 -0.127,0.19 -0.272,0.624 -0.125,0.75 0.147,0.126 0.26,0.157 0.344,0.094 0.084,-0.063 0.729,-0.616 0.812,-0.531 0.083,0.085 0.283,0.594 0.156,0.594 -0.127,0 -1.031,0.281 -1.031,0.281 0,0 -0.003,-0.171 -0.062,-0.156 -0.06,0.015 -0.003,0.235 -0.062,0.25 -0.06,0.015 -0.844,0.375 -0.844,0.375 0,0 -0.1,0.088 -0.219,0.188 l -0.25,0.25 c -0.006,0.007 -0.027,0.025 -0.031,0.031 -0.06,0.104 -0.39,0.599 -0.375,0.719 0.016,0.119 -0.07,0.375 0.094,0.375 0.164,0 1.27,-0.682 1.344,-0.562 0.074,0.119 0.188,0.125 0.188,0.125 0,0 -0.074,-0.156 0,-0.156 0.074,0 0.562,0.188 0.562,0.188 0,0 -0.073,-0.312 0.031,-0.281 0.104,0.03 0.583,0.594 0.688,0.594 0.105,0 0.358,-0.007 0.344,-0.156 -0.015,-0.149 -0.068,-0.335 0.125,-0.469 0.193,-0.134 0.787,-0.231 0.906,-0.156 0.119,0.074 0.304,0.16 0.125,0.25 -0.18,0.089 -0.396,-0.014 -0.5,0.031 -0.104,0.044 -0.392,0.333 -0.406,0.438 -0.015,0.104 0.561,0.565 0.531,0.625 -0.029,0.06 -0.326,0.344 -0.625,0.344 -0.299,0 -2.484,-0.546 -2.812,-0.531 -0.328,0.015 -0.615,0.099 -0.75,0.219 -0.135,0.119 -0.707,0.648 -0.781,0.812 -0.074,0.164 -0.398,0.957 -0.219,1.375 0.179,0.418 0.584,1.176 1.031,1.25 0.447,0.074 0.99,0.107 1.125,0.062 0.135,-0.045 0.859,0.76 0.875,1.312 0.015,0.552 -0.039,1.938 0.125,2.281 0.164,0.343 0.291,0.982 0.812,0.938 0.521,-0.044 0.945,-0.168 1.125,-0.406 0.179,-0.238 0.678,-1.455 0.812,-2.156 0.134,-0.701 0.754,-1.754 0.844,-2.156 0.09,-0.402 0.102,-0.631 -0.062,-0.75 -0.164,-0.119 -0.485,-0.116 -0.5,-0.25 -0.016,-0.135 0.209,-0.016 0.344,0 0.135,0.015 0.631,-0.022 0.75,-0.156 0.119,-0.135 0.324,-0.571 0.25,-0.75 -0.074,-0.18 -0.406,-0.562 -0.406,-0.562 0,0 1.338,0.161 1.875,0.594 0.312,0.251 0.564,0.577 0.75,0.844 -0.047,-2.462 -0.994,-4.705 -2.531,-6.406 -0.014,0.002 -0.054,0.031 -0.062,0.031 -0.232,0 -2.031,0.344 -2.031,0.344 0,0 -0.393,-0.447 -0.688,-0.469 -0.149,-0.016 -0.367,-0.021 -0.564,-0.005 l 0,0 z m -2.282,1.312 c 0,0 -0.212,0.865 0.094,0.844 0.306,-0.021 -0.094,-0.844 -0.094,-0.844 z m -0.406,0.375 c 0,0 -0.365,0.187 -0.281,0.281 0.084,0.094 0.26,0.147 0.312,0.062 0.052,-0.085 -0.031,-0.343 -0.031,-0.343 l 0,0 z m 5.719,8.094 c -0.121,0.026 -0.265,0.124 -0.344,0.219 -0.079,0.095 -0.198,0.43 -0.156,0.625 0.042,0.195 0.218,0.459 0.281,0.438 0.063,-0.021 0.229,-0.084 0.25,-0.438 0.021,-0.354 0.078,-0.671 0.031,-0.75 -0.047,-0.079 -0.062,-0.094 -0.062,-0.094 l 0,0 z"
- id="path6360-91-0-9-0"
- style="fill:#6d6d6d" />
+ <path d="m 356.261,530.587 h 16.295 l 6.267,6.267 h 8.667 v 24.962 h -31.229 v -31.229 z" style="fill:url(#a);stroke:#9d9d9d;stroke-width:0.77149999;stroke-linecap:square"/>
+ <path d="m 381.718,548.951 c 0.006,5.437 -4.396,9.848 -9.832,9.854 -5.436,0.006 -9.847,-4.396 -9.854,-9.831 0,-0.008 0,-0.016 0,-0.022 -0.006,-5.436 4.396,-9.847 9.832,-9.854 5.436,-0.006 9.847,4.396 9.854,9.832 0,0.006 0,0.014 0,0.021 z" style="fill:#f0f0f0;stroke:#6d6d6d;stroke-width:0.84439999;stroke-linecap:round"/>
+ <path d="m 372.031,541.108 c -0.825,0.023 -2.344,0.219 -2.344,0.219 0,0 0.25,0.477 0.25,0.688 0,0.211 -0.062,0.778 -0.062,1.031 0,0.253 0.925,0.053 1.094,-0.031 0.169,-0.084 1.281,-1.062 1.281,-1.062 0,0 0.408,-0.612 0.281,-0.781 -0.031,-0.044 -0.225,-0.072 -0.5,-0.064 l 0,0 z m -4.469,0.718 c 0.06,0.656 0.844,1.094 0.844,1.094 l 0.125,-0.438 c 0,10e-4 -0.67,-0.656 -0.969,-0.656 z m -0.781,0.438 c 0,0 -0.406,0.347 -1.062,0.406 -0.247,0.022 -0.745,-0.072 -1.281,-0.156 -1.188,1.37 -1.995,3.062 -2.281,4.938 l 0.219,-0.312 c 0,0 0.77,1.381 1.188,1.5 0.418,0.119 0.892,0.543 1.25,0.781 0.358,0.238 0.591,1.472 0.531,2.188 -0.06,0.716 0.483,0.804 0.781,1.281 0.298,0.477 0.949,3.326 1.188,3.625 0.239,0.299 0.475,-1.253 0.594,-1.969 0.119,-0.716 1.688,-2.034 1.688,-2.75 0,-0.716 -1.798,-1.736 -2.156,-2.094 -0.358,-0.358 -1.477,-0.531 -2.312,-0.531 -0.835,0 -0.847,-1.128 -1.562,-1.188 -0.715,-0.06 0.125,-1 0.125,-1 0,0 1.958,-0.312 2.375,-0.312 0.417,0 0.54,-1.182 0.719,-1.719 0.179,-0.537 1.506,-0.486 1.625,-0.844 0.119,-0.358 -0.542,-0.719 -0.781,-0.719 -0.239,0 -1.259,0.364 -1.438,0.125 -0.179,-0.239 1.031,-0.969 1.031,-0.969 l -0.441,-0.281 z m 9.063,0 c -0.197,0.016 -0.374,0.052 -0.438,0.094 -0.127,0.084 -0.467,0.216 -0.594,0.406 -0.127,0.19 -0.272,0.624 -0.125,0.75 0.147,0.126 0.26,0.157 0.344,0.094 0.084,-0.063 0.729,-0.616 0.812,-0.531 0.083,0.085 0.283,0.594 0.156,0.594 -0.127,0 -1.031,0.281 -1.031,0.281 0,0 -0.003,-0.171 -0.062,-0.156 -0.06,0.015 -0.003,0.235 -0.062,0.25 -0.06,0.015 -0.844,0.375 -0.844,0.375 0,0 -0.1,0.088 -0.219,0.188 l -0.25,0.25 c -0.006,0.007 -0.027,0.025 -0.031,0.031 -0.06,0.104 -0.39,0.599 -0.375,0.719 0.016,0.119 -0.07,0.375 0.094,0.375 0.164,0 1.27,-0.682 1.344,-0.562 0.074,0.119 0.188,0.125 0.188,0.125 0,0 -0.074,-0.156 0,-0.156 0.074,0 0.562,0.188 0.562,0.188 0,0 -0.073,-0.312 0.031,-0.281 0.104,0.03 0.583,0.594 0.688,0.594 0.105,0 0.358,-0.007 0.344,-0.156 -0.015,-0.149 -0.068,-0.335 0.125,-0.469 0.193,-0.134 0.787,-0.231 0.906,-0.156 0.119,0.074 0.304,0.16 0.125,0.25 -0.18,0.089 -0.396,-0.014 -0.5,0.031 -0.104,0.044 -0.392,0.333 -0.406,0.438 -0.015,0.104 0.561,0.565 0.531,0.625 -0.029,0.06 -0.326,0.344 -0.625,0.344 -0.299,0 -2.484,-0.546 -2.812,-0.531 -0.328,0.015 -0.615,0.099 -0.75,0.219 -0.135,0.119 -0.707,0.648 -0.781,0.812 -0.074,0.164 -0.398,0.957 -0.219,1.375 0.179,0.418 0.584,1.176 1.031,1.25 0.447,0.074 0.99,0.107 1.125,0.062 0.135,-0.045 0.859,0.76 0.875,1.312 0.015,0.552 -0.039,1.938 0.125,2.281 0.164,0.343 0.291,0.982 0.812,0.938 0.521,-0.044 0.945,-0.168 1.125,-0.406 0.179,-0.238 0.678,-1.455 0.812,-2.156 0.134,-0.701 0.754,-1.754 0.844,-2.156 0.09,-0.402 0.102,-0.631 -0.062,-0.75 -0.164,-0.119 -0.485,-0.116 -0.5,-0.25 -0.016,-0.135 0.209,-0.016 0.344,0 0.135,0.015 0.631,-0.022 0.75,-0.156 0.119,-0.135 0.324,-0.571 0.25,-0.75 -0.074,-0.18 -0.406,-0.562 -0.406,-0.562 0,0 1.338,0.161 1.875,0.594 0.312,0.251 0.564,0.577 0.75,0.844 -0.047,-2.462 -0.994,-4.705 -2.531,-6.406 -0.014,0.002 -0.054,0.031 -0.062,0.031 -0.232,0 -2.031,0.344 -2.031,0.344 0,0 -0.393,-0.447 -0.688,-0.469 -0.149,-0.016 -0.367,-0.021 -0.564,-0.005 l 0,0 z m -2.282,1.312 c 0,0 -0.212,0.865 0.094,0.844 0.306,-0.021 -0.094,-0.844 -0.094,-0.844 z m -0.406,0.375 c 0,0 -0.365,0.187 -0.281,0.281 0.084,0.094 0.26,0.147 0.312,0.062 0.052,-0.085 -0.031,-0.343 -0.031,-0.343 l 0,0 z m 5.719,8.094 c -0.121,0.026 -0.265,0.124 -0.344,0.219 -0.079,0.095 -0.198,0.43 -0.156,0.625 0.042,0.195 0.218,0.459 0.281,0.438 0.063,-0.021 0.229,-0.084 0.25,-0.438 0.021,-0.354 0.078,-0.671 0.031,-0.75 -0.047,-0.079 -0.062,-0.094 -0.062,-0.094 l 0,0 z" style="fill:#6d6d6d"/>
</g>
-</g>
-</svg> \ No newline at end of file
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/remove.svg b/www/wiki/extensions/Translate/resources/images/remove.svg
index bd01e96a..3cc0c703 100644
--- a/www/wiki/extensions/Translate/resources/images/remove.svg
+++ b/www/wiki/extensions/Translate/resources/images/remove.svg
@@ -1 +1,23 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><linearGradient id="c"><stop offset="0" stop-color="#fa9a87"/><stop offset="1" stop-color="#e9594d"/></linearGradient><linearGradient><stop offset="0" stop-color="#74b75b"/><stop offset="1" stop-color="#86c97a"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#fddbd4"/><stop offset="1" stop-color="#e47871"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#c14d33"/><stop offset="1" stop-color="#e0696a"/></linearGradient><linearGradient x1="12.758" y1="13.001" x2="2.583" y2="2.521" id="e" xlink:href="#a" gradientUnits="userSpaceOnUse"/><linearGradient x1="2.583" y1="2.521" x2="12.758" y2="13.001" id="d" xlink:href="#b" gradientUnits="userSpaceOnUse"/><linearGradient x1="4.551" y1="4.433" x2="11.459" y2="11.341" id="f" xlink:href="#c" gradientUnits="userSpaceOnUse"/></defs><g><path d="M14.647 7.824a6.85 6.85 0 1 1-13.7 0 6.85 6.85 0 1 1 13.7 0z" transform="translate(.253 .127)" fill="url(#d)" fill-rule="evenodd" stroke="url(#e)"/><path d="M13.006 7.982a4.988 4.988 0 1 1-9.976 0 4.988 4.988 0 1 1 9.976 0z" transform="matrix(1.002 0 0 1.002 -.038 -.001)" fill="url(#f)"/><path d="M5 9h6V7H5.004z" fill="#fff" fill-opacity=".957"/></g></svg>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 16 16">
+ <defs>
+ <linearGradient id="c">
+ <stop offset="0" stop-color="#fa9a87"/>
+ <stop offset="1" stop-color="#e9594d"/>
+ </linearGradient>
+ <linearGradient id="b">
+ <stop offset="0" stop-color="#fddbd4"/>
+ <stop offset="1" stop-color="#e47871"/>
+ </linearGradient>
+ <linearGradient id="a">
+ <stop offset="0" stop-color="#c14d33"/>
+ <stop offset="1" stop-color="#e0696a"/>
+ </linearGradient>
+ <linearGradient id="e" x1="12.758" x2="2.583" y1="13.001" y2="2.521" xlink:href="#a" gradientUnits="userSpaceOnUse"/>
+ <linearGradient id="d" x1="2.583" x2="12.758" y1="2.521" y2="13.001" xlink:href="#b" gradientUnits="userSpaceOnUse"/>
+ <linearGradient id="f" x1="4.551" x2="11.459" y1="4.433" y2="11.341" xlink:href="#c" gradientUnits="userSpaceOnUse"/>
+ </defs>
+ <path fill="url(#d)" fill-rule="evenodd" stroke="url(#e)" d="M14.647 7.824a6.85 6.85 0 1 1-13.7 0 6.85 6.85 0 1 1 13.7 0z" transform="translate(.253 .127)"/>
+ <path fill="url(#f)" d="M13.006 7.982a4.988 4.988 0 1 1-9.976 0 4.988 4.988 0 1 1 9.976 0z" transform="translate(-.038) scale(1.002)"/>
+ <path fill="#fff" fill-opacity=".957" d="M5 9h6V7H5.004z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/search.svg b/www/wiki/extensions/Translate/resources/images/search.svg
index 799cb17e..e9d42573 100644
--- a/www/wiki/extensions/Translate/resources/images/search.svg
+++ b/www/wiki/extensions/Translate/resources/images/search.svg
@@ -1,32 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="32"
- height="32.000031"
- id="svg2">
- <defs
- id="defs4" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <path
- d="m 3.37703,3.37704 c 4.50273,-4.50274 11.80568,-4.50272 16.3085,6e-5 4.07216,4.07223 4.41687,10.42533 1.12323,14.93559 L 32,29.50385 29.50385,32.00003 18.3126,20.80887 C 13.80244,24.1025 7.44932,23.75797 3.37711,19.68548 -1.1257,15.18284 -1.12568,7.8799 3.37703,3.37704 z m 2.12176,2.12187 c -3.34229,3.34214 -3.38386,8.76418 -0.0416,12.10657 3.34232,3.34223 8.80592,3.34224 12.1482,-2e-5 C 20.94762,14.26307 20.90595,8.84117 17.56369,5.49878 14.22149,2.15665 8.84106,2.15665 5.49878,5.49891 z"
- id="path3017-6-34-0"
- style="fill:#555555;fill-opacity:1;stroke:none" />
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
+ <path fill="#54595d" d="M3.377 3.377c4.503-4.503 11.806-4.503 16.31 0 4.07 4.072 4.415 10.425 1.122 14.936L32 29.503 29.504 32l-11.19-11.19C13.8 24.102 7.448 23.757 3.376 19.684c-4.503-4.502-4.503-11.805 0-16.308zM5.5 5.5c-3.344 3.34-3.385 8.763-.043 12.105 3.343 3.343 8.806 3.343 12.148 0 3.343-3.342 3.3-8.764-.04-12.106-3.344-3.343-8.724-3.343-12.066 0z"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/switch.svg b/www/wiki/extensions/Translate/resources/images/switch.svg
index 0bace40c..40967827 100644
--- a/www/wiki/extensions/Translate/resources/images/switch.svg
+++ b/www/wiki/extensions/Translate/resources/images/switch.svg
@@ -1 +1,5 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 768" enable-background="new 0 0 1024 768"><path d="M751.863 131.86l-186.744-1.106H349.325V27.837L128 233.67l221.326 188.127V318.88H565.12v215.793H462.2L650.33 756l204.726-221.327H752.14V318.88l-.278-187.02zm-90.467 90.745v4.427h-4.427v-4.427h4.426z" fill="#555"/><path d="M655.503 228.447c.062-1.788.05-3.578.046-5.367-.024-1.523-.09-3.04.26-4.532 1.39-4.26 2.03-2.45 9.012-5.744.175 1.704.095 3.43.094 5.144.004 1.708-.003 3.417.003 5.125.006 1.19.008 2.377.024 3.566.014.585.016 1.17.022 1.757-.028 4.033.477.91-8.24 5.074.058-1.59.057-3.18.078-4.77.085-3.247.003-6.496.118-9.742.105-2.014.248-4.026.37-6.04.145-3.94 2.308-3.068 8.245-5.887.213-.1.498.788.733 1.42.733 2.91 1.115 5.89 1.545 8.853.457 3.367.885 6.733 1.15 10.12.152 2.527.183 5.053.587 7.555.26 1.834.743 3.62 1.19 5.415.188.823.355 1.65.407 2.492.288 3.13.21 1.59-8.18 3.726-.477.123.093-.98.134-1.47.065-.776.133-1.55.184-2.327.175-2.656.19-3.618.294-6.34.115-4.458.13-8.92.043-13.378.06-1.338 0-2.536-.664-3.706-.49-.782-1.084-1.407-2.002-1.597-1.142-.125-2.296-.1-3.443-.105-.726-.003-1.08-.067-1.787.197-.342.128-1.292.682-.972.506 2.18-1.2 4.274-2.573 6.55-3.575.537-.236-.858.8-1.246 1.24-.412.468-.765.984-1.147 1.476-1.974 2.593-3.098 5.555-3.673 8.73-.33 2.2-.3 4.426-.313 6.644-.014 2.337.006 4.674.04 7.01-.027 1.143.127 2.262.595 3.304.156.294.303.586.43.893l-8.073 4.495c-.105-.298-.243-.578-.38-.863-.523-1.167-.75-2.414-.668-3.7.015-2.338.01-4.675-.036-7.013-.023-2.277.016-4.557.307-6.817.536-3.302 1.61-6.413 3.59-9.152.234-.33 1.82-2.655 2.22-2.923 3.898-2.61 7.296-5.858 11.956-5.82 1.226 0 2.49-.06 3.675.313 1.013.462 1.74 1.232 2.332 2.17.767 1.33.954 2.665.77 4.197-.172 4.53-.317 9.06-.425 13.59-.05 2.836-.087 5.67-.113 8.507-.005.453.346 1.087-.016 1.36-8.295 6.283-8.283 8.008-8.195 4.66-.02-.802-.1-1.598-.26-2.384-.376-1.835-.88-3.642-1.138-5.5-.442-2.542-.443-5.108-.54-7.68-.216-3.374-.638-6.722-1.096-10.07-.422-2.877-.792-5.777-1.63-8.568-1.09-2.503-1.21.16 7.562-5.02.378-.223-.205.062-.3.447-.038.153-.027.314-.04.472-.172 2.04-.458 4.072-.582 6.117-.173 3.214-.062 6.434-.03 9.652.02 1.564.02 3.13.077 4.692-9.543 5.167-8.17 7.38-8.24 3.323.006-.594.008-1.187.022-1.78.017-1.2.02-2.398.03-3.596.012-1.715.017-3.43.036-5.145.008-1.604.02-3.21-.087-4.81 8.643-4.672 9.406-6.928 7.386-2.63-.568 1.375-.443 2.85-.45 4.312-.003 1.773-.016 3.548.046 5.32l-8.203 4.18z" fill="#555"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 768">
+ <path fill="#54595d" d="M751.863 131.86l-186.744-1.106H349.324V27.837L128 233.67l221.326 188.127V318.88H565.12v215.793H462.2L650.33 756l204.726-221.327H752.14V318.88l-.278-187.02zm-90.467 90.745v4.427h-4.427v-4.427h4.425z"/>
+ <path fill="#54595d" d="M655.503 228.447c.062-1.788.05-3.578.046-5.367-.025-1.523-.09-3.04.26-4.532 1.39-4.26 2.03-2.45 9.01-5.744.176 1.704.096 3.43.095 5.144.004 1.708-.003 3.417.003 5.125.006 1.19.008 2.377.024 3.566.014.584.016 1.17.022 1.756-.028 4.033.477.91-8.24 5.074.058-1.59.057-3.18.078-4.77.085-3.247.003-6.496.118-9.742.105-2.014.248-4.026.37-6.04.145-3.94 2.308-3.068 8.245-5.887.213-.1.498.79.733 1.42.733 2.91 1.115 5.89 1.545 8.854.457 3.367.885 6.733 1.15 10.12.152 2.527.183 5.053.587 7.555.26 1.833.743 3.62 1.19 5.414.188.823.355 1.65.407 2.492.288 3.13.21 1.59-8.18 3.726-.477.123.093-.98.134-1.47.066-.776.134-1.55.185-2.327.175-2.656.19-3.618.294-6.34.114-4.458.13-8.92.042-13.378.06-1.338 0-2.536-.664-3.706-.49-.78-1.084-1.406-2.002-1.596-1.142-.125-2.296-.1-3.443-.105-.726-.004-1.08-.068-1.787.196-.342.128-1.292.682-.972.506 2.18-1.2 4.274-2.573 6.55-3.575.537-.236-.858.8-1.246 1.24-.412.468-.765.984-1.147 1.476-1.973 2.593-3.097 5.555-3.672 8.73-.33 2.2-.3 4.426-.313 6.644-.014 2.337.006 4.674.04 7.01-.027 1.143.127 2.262.595 3.304.156.295.303.587.43.894l-8.073 4.495c-.105-.3-.243-.58-.38-.864-.523-1.167-.75-2.414-.668-3.7.014-2.338.01-4.675-.037-7.013-.023-2.277.016-4.557.307-6.817.536-3.302 1.61-6.413 3.59-9.152.234-.33 1.82-2.655 2.22-2.923 3.898-2.61 7.296-5.857 11.956-5.82 1.226 0 2.49-.06 3.675.314 1.014.462 1.74 1.232 2.333 2.17.767 1.33.954 2.665.77 4.197-.172 4.53-.317 9.06-.425 13.59-.05 2.837-.087 5.67-.113 8.508-.005.453.346 1.087-.016 1.36-8.296 6.283-8.284 8.008-8.196 4.66-.02-.802-.1-1.598-.26-2.384-.376-1.835-.88-3.642-1.138-5.5-.442-2.542-.443-5.108-.54-7.68-.216-3.374-.638-6.722-1.096-10.07-.422-2.877-.792-5.777-1.63-8.568-1.09-2.503-1.21.16 7.562-5.02.378-.223-.205.062-.3.447-.038.153-.027.314-.04.472-.172 2.04-.458 4.072-.582 6.117-.173 3.214-.062 6.434-.03 9.652.02 1.564.02 3.13.077 4.692-9.543 5.167-8.17 7.38-8.24 3.323.006-.595.008-1.188.022-1.78.016-1.2.02-2.4.03-3.597.01-1.715.016-3.43.035-5.145.008-1.604.02-3.21-.087-4.81 8.643-4.672 9.406-6.928 7.386-2.63-.568 1.375-.443 2.85-.45 4.312-.003 1.773-.016 3.548.046 5.32l-8.203 4.18z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/translate-ltr.svg b/www/wiki/extensions/Translate/resources/images/translate-ltr.svg
index 24e56a34..7bfc8618 100644
--- a/www/wiki/extensions/Translate/resources/images/translate-ltr.svg
+++ b/www/wiki/extensions/Translate/resources/images/translate-ltr.svg
@@ -1,29 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="33.389"
- height="22.857"
- viewBox="0 0 33.389 22.857"
- id="svg2"
- xml:space="preserve"><metadata
- id="metadata9"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs7" />
-
-<path
- d="m 0,0 h 25.922 l 7.467,11.429 -7.467,11.429 H 0 V 0 z"
- id="rect12220"
- style="fill:#729fcf" />
-<path
- d="m 21.324,2.915 -9.343,13.311 -0.022,0.003 -0.284,3.239 2.968,-1.379 9.344,-13.31 -2.663,-1.864 0,0 z"
- id="rect8752-2-8-5-49-6-2-0-2-5-4-0-4-5-8-7-6-4-9-9-0-3-2-1-1-3-7-4-8-3"
- style="fill:#ffffff" />
-</svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="33.389" height="22.857" viewBox="0 0 33.389 22.857">
+ <path fill="#729fcf" d="M0 0h25.922l7.467 11.43-7.468 11.428H0V0z"/>
+ <path fill="#fff" d="M21.324 2.915l-9.343 13.31-.02.004-.285 3.238 2.968-1.38 9.344-13.31-2.663-1.863z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/translate-rtl.svg b/www/wiki/extensions/Translate/resources/images/translate-rtl.svg
index 5f30aea8..9e9857f8 100644
--- a/www/wiki/extensions/Translate/resources/images/translate-rtl.svg
+++ b/www/wiki/extensions/Translate/resources/images/translate-rtl.svg
@@ -1,29 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="33.389"
- height="22.857"
- viewBox="0 0 33.389 22.857"
- id="svg2"
- xml:space="preserve"><metadata
- id="metadata9"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs7" />
-
-<path
- d="M 33.389,0 H 7.467 L 0,11.429 7.467,22.858 H 33.389 V 0 z"
- id="rect12220"
- style="fill:#729fcf" />
-<path
- d="m 21.051,2.915 -9.343,13.311 -0.022,0.003 -0.284,3.239 2.968,-1.379 9.344,-13.31 -2.663,-1.864 0,0 z"
- id="rect8752-2-8-5-49-6-2-0-2-5-4-0-4-5-8-7-6-4-9-9-0-3-2-1-1-3-7-4-8-3"
- style="fill:#ffffff" />
-</svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="33.389" height="22.857" viewBox="0 0 33.389 22.857">
+ <path fill="#729fcf" d="M33.39 0H7.466L0 11.43l7.467 11.428H33.39V0z"/>
+ <path fill="#fff" d="M21.05 2.915l-9.342 13.31-.022.004-.284 3.238 2.968-1.38 9.344-13.31-2.663-1.863z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/trash_darkgray.svg b/www/wiki/extensions/Translate/resources/images/trash_darkgray.svg
index 5ac2cf0a..3d1bef76 100644
--- a/www/wiki/extensions/Translate/resources/images/trash_darkgray.svg
+++ b/www/wiki/extensions/Translate/resources/images/trash_darkgray.svg
@@ -1 +1,4 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96" enable-background="new 0 0 96 96"><g fill="#555"><path d="M13.5 28.2l8.1 63c.3 2.7 2.4 4.8 5.1 4.8h42.6c2.7 0 4.8-2.1 4.8-4.5l8.1-63h-68.7v-.3zM77.4 6.6c3.6 0 6.6 1.5 6.6 3.3v7.2c0 1.8-3 1.5-6.9 1.5h-58.5c-3.6 0-6.6.3-6.6-1.5v-7.2c0-1.8 3-3.3 6.9-3.3l13.5-1.2 4.8-5.4h21.3l5.1 5.7 13.8.9z"/></g></svg>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 96 96">
+ <path fill="#54595d" d="M13.5 28.2l8.1 63c.3 2.7 2.4 4.8 5.1 4.8h42.6c2.7 0 4.8-2.1 4.8-4.5l8.1-63H13.5v-.3zM77.4 6.6C81 6.6 84 8.1 84 9.9v7.2c0 1.8-3 1.5-6.9 1.5H18.6c-3.6 0-6.6.3-6.6-1.5V9.9c0-1.8 3-3.3 6.9-3.3l13.5-1.2L37.2 0h21.3l5.1 5.7 13.8.9z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/user-small.svg b/www/wiki/extensions/Translate/resources/images/user-small.svg
index 082d0470..af79fbf1 100644
--- a/www/wiki/extensions/Translate/resources/images/user-small.svg
+++ b/www/wiki/extensions/Translate/resources/images/user-small.svg
@@ -1,9 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="15px" height="15px" viewBox="0 0 15 15" enable-background="new 0 0 15 15" xml:space="preserve">
-<g>
- <path fill="#D1D3D4" d="M12.281,4.776c0,2.639-2.142,4.783-4.78,4.783c-2.64,0-4.779-2.144-4.779-4.783 C2.722,2.138,4.861,0,7.501,0C10.14,0,12.281,2.138,12.281,4.776z"/>
- <path fill="#D1D3D4" d="M13.36,8.609h-0.947c-1.031,1.625-2.844,2.707-4.912,2.707c-2.068,0-3.883-1.082-4.914-2.707H1.645 c-0.445,0-0.799,0.358-0.799,0.801v4.795C0.846,14.641,1.199,15,1.645,15H13.36c0.44,0,0.794-0.359,0.794-0.795V9.41 C14.154,8.968,13.801,8.609,13.36,8.609z"/>
-</g>
-</svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
+ <g fill="#c8ccd1">
+ <path d="M12.28 4.776c0 2.64-2.14 4.783-4.78 4.783S2.723 7.414 2.723 4.775C2.722 2.138 4.862 0 7.502 0c2.638 0 4.78 2.138 4.78 4.776z"/>
+ <path d="M13.36 8.61h-.947c-1.03 1.624-2.844 2.706-4.912 2.706-2.067 0-3.882-1.082-4.913-2.707h-.942c-.445 0-.8.357-.8.8v4.795c0 .436.354.795.8.795H13.36c.44 0 .794-.36.794-.795V9.41c0-.442-.353-.8-.794-.8z"/>
+ </g>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/view-list-hi.svg b/www/wiki/extensions/Translate/resources/images/view-list-hi.svg
index a3ea47f2..e9798819 100644
--- a/www/wiki/extensions/Translate/resources/images/view-list-hi.svg
+++ b/www/wiki/extensions/Translate/resources/images/view-list-hi.svg
@@ -1,50 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="25"
- height="15"
- viewBox="0 0 25 15"
- id="svg17805"
- xml:space="preserve"><metadata
- id="metadata11"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs9" />
-
-<g
- transform="translate(-159.64355,-100.30805)"
- id="layer1">
- <g
- transform="matrix(0.65003318,0,0,0.65003318,105.65437,41.0619)"
- id="g3770">
- <rect
- width="20.139999"
- height="4.1040001"
- x="92.216003"
- y="93.653"
- id="rect2996"
- style="fill:#ffffff" />
- <rect
- width="20.139999"
- height="4.1040001"
- x="92.216003"
- y="100.629"
- id="rect3766"
- style="fill:#ffffff" />
- <rect
- width="20.139999"
- height="4.1040001"
- x="92.216003"
- y="107.606"
- id="rect3768"
- style="fill:#ffffff" />
- </g>
-</g>
-</svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <path fill="#fff" d="M5.954 1.63h13.092V4.3H5.954zM5.954 6.166h13.092v2.668H5.954zM5.954 10.7h13.092v2.67H5.954z"/>
+</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/view-list.svg b/www/wiki/extensions/Translate/resources/images/view-list.svg
index c0585828..49f03d57 100644
--- a/www/wiki/extensions/Translate/resources/images/view-list.svg
+++ b/www/wiki/extensions/Translate/resources/images/view-list.svg
@@ -1,53 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="25"
- height="15"
- id="svg17805">
- <defs
- id="defs17807" />
- <metadata
- id="metadata17810">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-159.64355,-100.30805)"
- id="layer1">
- <rect
- width="13.091612"
- height="2.6675708"
- x="165.59773"
- y="101.93939"
- id="rect2996"
- style="fill:#252525;fill-opacity:1;stroke:none" />
- <rect
- width="13.091612"
- height="2.6675708"
- x="165.59775"
- y="106.47427"
- id="rect3766"
- style="fill:#252525;fill-opacity:1;stroke:none" />
- <rect
- width="13.091612"
- height="2.6675708"
- x="165.59775"
- y="111.00913"
- id="rect3768"
- style="fill:#252525;fill-opacity:1;stroke:none" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <path fill="#222" d="M5.954 1.63h13.092V4.3H5.954zM5.954 6.166h13.092v2.668H5.954zM5.954 10.7h13.092v2.67H5.954z"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/view-page-hi.svg b/www/wiki/extensions/Translate/resources/images/view-page-hi.svg
index a4143656..24ad3426 100644
--- a/www/wiki/extensions/Translate/resources/images/view-page-hi.svg
+++ b/www/wiki/extensions/Translate/resources/images/view-page-hi.svg
@@ -1,40 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="25"
- height="15"
- id="svg17805">
- <defs
- id="defs17807" />
- <metadata
- id="metadata17810">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <path
- d="m 5.96875,1.625 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z m 7.40625,0 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z"
- id="rect2996"
- style="fill:#ffffff;fill-opacity:1;stroke:none" />
- <path
- d="m 5.96875,6.15625 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z m 7.40625,0 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z"
- id="rect3766"
- style="fill:#ffffff;fill-opacity:1;stroke:none" />
- <path
- d="m 5.96875,10.6875 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z m 7.40625,0 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z"
- id="rect3768"
- style="fill:#ffffff;fill-opacity:1;stroke:none" />
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <path fill="#fff" d="M5.97 1.625v2.688h5.655V1.624H5.97zm7.405 0v2.688h5.656V1.624h-5.655zM5.97 6.156v2.688h5.655V6.156H5.97zm7.405 0v2.688h5.656V6.156h-5.655zM5.97 10.688v2.687h5.655v-2.688H5.97zm7.405 0v2.687h5.656v-2.688h-5.655z"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/view-page.svg b/www/wiki/extensions/Translate/resources/images/view-page.svg
index 8eb196b2..7e983678 100644
--- a/www/wiki/extensions/Translate/resources/images/view-page.svg
+++ b/www/wiki/extensions/Translate/resources/images/view-page.svg
@@ -1,47 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="25"
- height="15"
- id="svg17805">
- <defs
- id="defs17807" />
- <metadata
- id="metadata17810">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-159.64355,-100.30805)"
- id="layer1">
- <path
- d="m 5.96875,1.625 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z m 7.40625,0 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z"
- transform="translate(159.64355,100.30805)"
- id="rect2996"
- style="fill:#252525;fill-opacity:1;stroke:none" />
- <path
- d="m 5.96875,6.15625 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z m 7.40625,0 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z"
- transform="translate(159.64355,100.30805)"
- id="rect3766"
- style="fill:#252525;fill-opacity:1;stroke:none" />
- <path
- d="m 5.96875,10.6875 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z m 7.40625,0 0,2.6875 5.65625,0 0,-2.6875 -5.65625,0 z"
- transform="translate(159.64355,100.30805)"
- id="rect3768"
- style="fill:#252525;fill-opacity:1;stroke:none" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <g fill="#222">
+ <path d="M5.97 1.625v2.688h5.655V1.624H5.97zm7.405 0v2.688h5.656V1.624h-5.655zM5.97 6.156v2.688h5.655V6.156H5.97zm7.405 0v2.688h5.656V6.156h-5.655zM5.97 10.688v2.687h5.655v-2.688H5.97zm7.405 0v2.687h5.656v-2.688h-5.655z"/>
+ </g>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/view-proofread-hi.svg b/www/wiki/extensions/Translate/resources/images/view-proofread-hi.svg
index 51b8f2a3..4d38ee33 100644
--- a/www/wiki/extensions/Translate/resources/images/view-proofread-hi.svg
+++ b/www/wiki/extensions/Translate/resources/images/view-proofread-hi.svg
@@ -1,36 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="25"
- height="15"
- id="svg17805">
- <defs
- id="defs17807" />
- <metadata
- id="metadata17810">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-159.64355,-100.30805)"
- id="layer1">
- <path
- d="m 175.4092,101.38615 -5.1875,8.93751 -2.0313,-1.5 -1.5937,2.125 3.25,2.4063 1.1875,0.875 0.75,-1.2813 5.9062,-10.25001 -2.2812,-1.3125 z"
- id="path12436-0-1-2-8-1-9-2-0"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.6545198;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <path fill="#fff" d="M15.766 1.078l-5.188 8.938-2.03-1.5-1.595 2.125 3.25 2.407 1.188.875.75-1.28 5.907-10.25-2.28-1.314z" overflow="visible"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/images/view-proofread.svg b/www/wiki/extensions/Translate/resources/images/view-proofread.svg
index 5809b3fe..1b3f287b 100644
--- a/www/wiki/extensions/Translate/resources/images/view-proofread.svg
+++ b/www/wiki/extensions/Translate/resources/images/view-proofread.svg
@@ -1,36 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="25"
- height="15"
- id="svg17805">
- <defs
- id="defs17807" />
- <metadata
- id="metadata17810">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-159.64355,-100.30805)"
- id="layer1">
- <path
- d="m 175.4092,101.38615 -5.1875,8.93751 -2.0313,-1.5 -1.5937,2.125 3.25,2.4063 1.1875,0.875 0.75,-1.2813 5.9062,-10.25001 -2.2812,-1.3125 z"
- id="path12436-0-1-2-8-1-9-2-0"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#252525;fill-opacity:1;stroke:none;stroke-width:2.6545198;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <path fill="#222" d="M15.766 1.078l-5.188 8.938-2.03-1.5-1.595 2.125 3.25 2.407 1.188.875.75-1.28 5.907-10.25-2.28-1.314z" overflow="visible"/>
</svg>
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.base.js b/www/wiki/extensions/Translate/resources/js/ext.translate.base.js
index 7d8fb8bf..36ffeed2 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.base.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.base.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
mw.translate = mw.translate || {};
@@ -13,11 +13,11 @@
* Checks if the input placeholder attribute
* is supported on this element in this browser.
*
- * @param {jQuery} element
+ * @param {jQuery} $element
* @return {boolean}
*/
- isPlaceholderSupported: function ( element ) {
- return ( 'placeholder' in element[ 0 ] );
+ isPlaceholderSupported: function ( $element ) {
+ return ( 'placeholder' in $element[ 0 ] );
},
// Storage for language stats loader functions from API,
@@ -34,7 +34,6 @@
if ( !mw.translate.languageStatsLoader[ language ] ) {
mw.translate.languageStatsLoader[ language ] = new mw.Api().get( {
action: 'query',
- format: 'json',
meta: 'languagestats',
lslanguage: language
} );
@@ -57,7 +56,7 @@
getMessageGroup: function ( id, props ) {
var params, api;
- if ( $.isArray( props ) ) {
+ if ( Array.isArray( props ) ) {
props = props.join( '|' );
} else if ( props === undefined ) {
props = 'id|label|description|icon|priority|prioritylangs|priorityforce|workflowstates';
@@ -67,7 +66,8 @@
meta: 'messagegroups',
mgformat: 'flat',
mgprop: props,
- mgroot: id
+ mgroot: id,
+ formatversion: 2
};
api = new mw.Api();
@@ -138,16 +138,25 @@
return mw.config.get( 'DeleteRight' ) && mw.config.get( 'TranslateRight' );
},
- addDocumentationLanguage: function () {
- var docLanguageCode = mw.config.get( 'wgTranslateDocumentationLanguageCode' );
- if ( $.uls.data.languages[ docLanguageCode ] ) {
- return;
+ /**
+ * Adds missing languages to the language database so that they can be used in ULS.
+ *
+ * @param {Object} languages Language tags mapped to language names
+ * @param {Array} regions Which regions to add the languages.
+ */
+ addExtraLanguagesToLanguageData: function ( languages, regions ) {
+ var code;
+ for ( code in languages ) {
+ if ( code in $.uls.data.languages ) {
+ continue;
+ }
+
+ $.uls.data.addLanguage( code, {
+ script: 'Zyyy',
+ regions: regions,
+ autonym: languages[ code ]
+ } );
}
- $.uls.data.addLanguage( docLanguageCode, {
- script: $.uls.data.getScript( mw.config.get( 'wgContentLanguage' ) ),
- regions: [ 'SP' ],
- autonym: mw.msg( 'translate-documentation-language' )
- } );
},
isDirty: function () {
@@ -177,7 +186,7 @@
$( window ).on( 'pageshow.translate', pageShowHandler );
}
- $( document ).ready( function () {
+ $( function () {
translateOnBeforeUnloadRegister();
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.dropdownmenu.js b/www/wiki/extensions/Translate/resources/js/ext.translate.dropdownmenu.js
index 0b1eb02d..a3333801 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.dropdownmenu.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.dropdownmenu.js
@@ -1,7 +1,7 @@
-( function ( $ ) {
+( function () {
'use strict';
- $( document ).ready( function () {
+ $( function () {
// Hide the dropdown menu when clicking outside of it
$( 'html' ).on( 'click', function ( e ) {
if ( !e.isDefaultPrevented() ) {
@@ -9,4 +9,4 @@
}
} );
} );
-} )( jQuery );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.editor.helpers.js b/www/wiki/extensions/Translate/resources/js/ext.translate.editor.helpers.js
index 28762ac9..38cb9a46 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.editor.helpers.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.editor.helpers.js
@@ -1,7 +1,7 @@
/*!
* Translate editor additional helper functionality
*/
-( function ( $, mw ) {
+( function () {
'use strict';
var translateEditorHelpers = {
@@ -21,10 +21,8 @@
$messageDescViewer.addClass( 'hide' );
- $messageDescEditor
- .removeClass( 'hide' )
- .find( '.tux-textarea-documentation' )
- .focus();
+ $messageDescEditor.removeClass( 'hide' );
+ $messageDescEditor.find( '.tux-textarea-documentation' ).focus();
// So that the link won't be followed
return false;
@@ -49,17 +47,18 @@
/**
* Save the documentation
+ *
+ * @return {jQuery.Promise}
*/
saveDocumentation: function () {
var translateEditor = this,
api = new mw.Api(),
newDocumentation = translateEditor.$editor.find( '.tux-textarea-documentation' ).val();
- // Change to csrf when support for MW 1.25 is dropped
- return api.postWithToken( 'edit', {
+ return api.postWithToken( 'csrf', {
action: 'edit',
title: translateEditor.message.title
- .replace( /\/[a-z\-]+$/, '/' + mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ),
+ .replace( /\/[a-z-]+$/, '/' + mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ),
text: newDocumentation
} ).done( function ( response ) {
var $messageDesc = translateEditor.$editor.find( '.infocolumn-block .message-desc' );
@@ -138,6 +137,8 @@
.addClass( 'mw-content-' + documentationDir )
.html( documentation.html );
+ $messageDoc.find( 'a[href]' ).prop( 'target', '_blank' );
+
this.$editor.find( '.tux-textarea-documentation' )
.attr( langAttr )
.val( documentation.value );
@@ -210,16 +211,13 @@
* @param {Array} translations An inotherlanguages array as returned by the translation helpers API.
*/
showAssistantLanguages: function ( translations ) {
- var translateEditor = this,
- $translationTextarea;
+ var translateEditor = this;
if ( translations.error ) {
// Do not proceed if errored/unsupported
return;
}
- $translationTextarea = this.$editor.find( '.tux-textarea-translation' );
-
$.each( translations, function ( index ) {
var $otherLanguage, langAttr,
translation = translations[ index ];
@@ -318,7 +316,7 @@
$( '<div>' )
.addClass( 'three columns quality text-right' )
.text( mw.msg( 'tux-editor-tm-match',
- Math.floor( translation.quality * 100 ) ) ),
+ mw.language.convertNumber( Math.floor( translation.quality * 100 ) ) ) ),
$( '<div>' )
.addClass( 'row text-right' )
.append(
@@ -392,7 +390,7 @@
/**
* Makes the $source element clickable and clicking it will replace the
- * transltion textarea with the given suggestion.
+ * translation textarea with the given suggestion.
*
* @param {jQuery} $source
* @param {string} suggestion Text to add
@@ -426,11 +424,8 @@
showSupportOptions: function ( support ) {
// Support URL
if ( support.url ) {
- this.$editor.find( '.help' )
- .find( 'a' )
- .attr( 'href', support.url )
- .end()
- .removeClass( 'hide' );
+ this.$editor.find( '.help a' ).attr( 'href', support.url );
+ this.$editor.find( '.help' ).removeClass( 'hide' );
}
},
@@ -487,8 +482,7 @@
api.get( {
action: 'translationaids',
- title: this.message.title,
- format: 'json'
+ title: this.message.title
} ).done( function ( result ) {
translateEditor.$editor.find( '.infocolumn .loading' ).remove();
@@ -516,7 +510,7 @@
translateEditor.validateTranslation();
}
- mw.translateHooks.run( 'showTranslationHelpers', result.helpers, translateEditor.$editor );
+ mw.hook( 'mw.translate.editor.showTranslationHelpers' ).fire( result.helpers, translateEditor.$editor );
} ).fail( function ( errorCode, results ) {
mw.log( 'Error loading translation aids', errorCode, results );
@@ -545,4 +539,4 @@
mw.translate.editor = mw.translate.editor || {};
$.extend( mw.translate.editor, translateEditorHelpers );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.editor.js b/www/wiki/extensions/Translate/resources/js/ext.translate.editor.js
index 47038ec6..b5e3637d 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.editor.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.editor.js
@@ -1,4 +1,6 @@
-( function ( $, mw, autosize ) {
+/* global autosize */
+
+( function () {
'use strict';
/**
@@ -16,9 +18,9 @@
* internally contain the editor's generated UI. So it is going to have the same width
* and inherited properies of the container.
* The container can mark the message item with class 'message'. This is not
- * mandatory, but if found, when editor is opened the message item will be hidden
+ * mandatory, but if found, when the editor is opened, the message item will be hidden
* and the editor will appear as if the message is replaced by the editor.
- * See the UI of Translate messagetable for demo.
+ * See the UI of Translate messagetable for a demo.
*
* @param {HTMLElement} element
* @param {Object} options
@@ -157,8 +159,8 @@
);
this.$messageItem
- .addClass( 'translated' )
- .removeClass( 'untranslated' );
+ .removeClass( 'untranslated translated fuzzy proofread' )
+ .addClass( 'translated' );
this.dirty = false;
@@ -167,6 +169,8 @@
'change',
[ 'translated', this.message.properties.status ]
);
+
+ this.message.properties.status = 'translated';
// TODO: Update any other statsbar for the same group in the page.
}
},
@@ -175,11 +179,13 @@
* Save the translation
*/
save: function () {
- var translation,
+ var translation, editSummary,
translateEditor = this;
- mw.translateHooks.run( 'beforeSubmit', translateEditor.$editor );
+ mw.hook( 'mw.translate.editor.beforeSubmit' ).fire( translateEditor.$editor );
translation = translateEditor.$editor.find( '.editcolumn textarea' ).val();
+ editSummary = translateEditor.$editor.find( '.tux-input-editsummary' ).val() || '';
+
translateEditor.saving = true;
// beforeSave callback
@@ -204,15 +210,33 @@
this.storage.save(
translateEditor.message.title,
- translation
- ).done( function () {
- // Update the translation
- translateEditor.message.translation = translation;
- translateEditor.onSaveSuccess();
+ translation,
+ editSummary
+ ).done( function ( response, xhr ) {
+ var editResp = response.edit;
+ if ( editResp.result === 'Success' ) {
+ translateEditor.message.translation = translation;
+ translateEditor.onSaveSuccess();
+ // Handle errors
+ } else if ( editResp.spamblacklist ) {
+ // @todo Show exactly which blacklisted URL triggered it
+ translateEditor.onSaveFail( mw.msg( 'spamprotectiontext' ) );
+ } else if ( editResp.info &&
+ editResp.info.indexOf( 'Hit AbuseFilter:' ) === 0 &&
+ editResp.warning
+ ) {
+ translateEditor.onSaveFail( editResp.warning );
+ } else {
+ translateEditor.onSaveFail( mw.msg( 'tux-save-unknown-error' ) );
+ mw.log( response, xhr );
+ }
} ).fail( function ( errorCode, response ) {
- translateEditor.onSaveFail( response.error && response.error.info || 'Unknown error' );
+ translateEditor.onSaveFail(
+ response.error && response.error.info || mw.msg( 'tux-save-unknown-error' )
+ );
if ( errorCode === 'assertuserfailed' ) {
- window.alert( mw.msg( 'tux-session-expired' ) );
+ // eslint-disable-next-line no-alert
+ alert( mw.msg( 'tux-session-expired' ) );
}
} );
},
@@ -231,17 +255,26 @@
this.removeWarning( 'fuzzy' );
this.removeWarning( 'validation' );
+ this.$editor.find( '.tux-warning' ).empty();
+ this.$editor.find( '.tux-more-warnings' )
+ .addClass( 'hide' )
+ .empty();
+
$( '.tux-editor-clear-translated' )
.removeClass( 'hide' )
.prop( 'disabled', false );
+ this.$editor.find( '.tux-input-editsummary' )
+ .val( '' )
+ .prop( 'disabled', true );
+
// Save callback
if ( this.options.onSave ) {
this.options.onSave( this.message.translation );
}
mw.translate.dirty = false;
- mw.translateHooks.run( 'afterSubmit', this.$editor );
+ mw.hook( 'mw.translate.editor.afterSubmit' ).fire( this.$editor );
if ( mw.track ) {
mw.track( 'ext.translate.event.translation', this.message );
@@ -279,7 +312,9 @@
// Skip if the message is hidden. For example in a filter result.
if ( $next.length && $next.hasClass( 'hide' ) ) {
this.$editTrigger = $next;
- return this.next();
+ this.next();
+
+ return;
}
// If this is the last message, just hide it
@@ -333,7 +368,20 @@
* @return {jQuery} The new message tools menu element
*/
createMessageTools: function () {
- var $historyItem, $deleteItem, $translationsItem;
+ var $editItem, $historyItem, $deleteItem, $translationsItem, $linkToThisItem;
+
+ $editItem = this.createMessageToolsItem(
+ 'message-tools-edit',
+ {
+ title: this.message.title,
+ action: 'edit'
+ },
+ 'tux-editor-message-tools-show-editor'
+ );
+
+ if ( !mw.translate.canTranslate() ) {
+ $editItem.addClass( 'hide' );
+ }
$historyItem = this.createMessageToolsItem(
'message-tools-history',
@@ -373,9 +421,19 @@
'tux-editor-message-tools-translations'
);
+ $linkToThisItem = this.createMessageToolsItem(
+ 'message-tools-linktothis',
+ {
+ title: 'Special:Translate',
+ showMessage: this.message.key,
+ group: this.message.primaryGroup
+ },
+ 'tux-editor-message-tools-linktothis'
+ );
+
return $( '<ul>' )
.addClass( 'tux-dropdown-menu tux-message-tools-menu hide' )
- .append( $historyItem, $deleteItem, $translationsItem );
+ .append( $editItem, $historyItem, $deleteItem, $translationsItem, $linkToThisItem );
},
prepareEditorColumn: function () {
@@ -392,6 +450,8 @@
$controlButtonBlock,
$editingButtonBlock,
$pasteOriginalButton,
+ $editSummary,
+ $editSummaryBlock,
$discardChangesButton = $( [] ),
$saveButton,
$requestRight,
@@ -402,7 +462,7 @@
$layoutActions,
$infoToggleIcon,
$messageList,
- targetLangAttrib, targetLangDir, targetLangCode,
+ targetLangAttrib, targetLangDir, targetLangCode, prefix,
$messageTools = translateEditor.createMessageTools(),
canTranslate = mw.translate.canTranslate();
@@ -444,7 +504,7 @@
.append( $closeIcon, $infoToggleIcon );
$editorColumn.append( $( '<div>' )
- .addClass( 'row' )
+ .addClass( 'row tux-editor-titletools' )
.append( $messageKeyLabel, $layoutActions )
);
@@ -452,7 +512,7 @@
originalTranslation = this.message.translation;
sourceString = this.message.definition;
$sourceString = $( '<span>' )
- .addClass( 'eleven column sourcemessage' )
+ .addClass( 'twelve columns sourcemessage' )
.attr( {
lang: $messageList.data( 'sourcelangcode' ),
dir: $messageList.data( 'sourcelangdir' )
@@ -483,7 +543,7 @@
$moreWarnings = $warnings.children(),
lastWarningIndex = $moreWarnings.length - 1;
- // If the warning list is not open only one warning is shown
+ // If the warning list is not open, only one warning is shown
if ( $this.hasClass( 'open' ) ) {
$moreWarnings.each( function ( index, element ) {
// The first element must always be shown
@@ -562,7 +622,9 @@
e.stopPropagation();
translateEditor.$editor.find( '.shortcut-activated:visible' ).eq( index ).trigger( 'click' );
// Update numbers and locations after trigger should be completed
- window.setTimeout( function () { translateEditor.showShortcuts(); }, 100 );
+ window.setTimeout( function () {
+ translateEditor.showShortcuts();
+ }, 100 );
}
if ( e.which === 18 && e.type === 'keyup' ) {
@@ -598,7 +660,7 @@
// When there is content in the editor enable the button.
// But do not enable when some saving is not finished yet.
- if ( $.trim( current ) && !translateEditor.saving ) {
+ if ( current.trim() && !translateEditor.saving ) {
$pasteSourceButton.addClass( 'hide' );
$saveButton.prop( 'disabled', false );
} else {
@@ -620,7 +682,7 @@
$editAreaBlock = $( '<div>' )
.addClass( 'row tux-editor-editarea-block' )
.append( $( '<div>' )
- .addClass( 'editarea eleven columns' )
+ .addClass( 'editarea twelve columns' )
.append( $warningsBlock, $textarea )
);
@@ -639,6 +701,36 @@
$pasteOriginalButton.addClass( 'hide' );
} );
+ $editSummary = $( '<input>' )
+ .addClass( 'tux-input-editsummary' )
+ .attr( {
+ maxlength: 255,
+ disabled: true,
+ placeholder: mw.msg( 'tux-editor-editsummary-placeholder' )
+ } )
+ .val( '' );
+
+ // Enable edit summary if there was a change to translation area
+ // or disable if there is no text in translation area
+ $textarea.on( 'textchange', function () {
+ if ( $editSummary.prop( 'disabled' ) ) {
+ $editSummary.prop( 'disabled', false );
+ }
+ if ( $textarea.val().trim() === '' ) {
+ $editSummary.prop( 'disabled', true );
+ }
+ } ).on( 'keydown', function ( e ) {
+ if ( !e.ctrlKey || e.keyCode !== 13 ) {
+ return;
+ }
+
+ if ( !$saveButton.is( ':disabled' ) ) {
+ $saveButton.click();
+ return;
+ }
+ $skipButton.click();
+ } );
+
if ( originalTranslation !== null ) {
$discardChangesButton = $( '<button>' )
.addClass( 'tux-editor-discard-changes-button hide' ) // Initially hidden
@@ -653,6 +745,7 @@
$discardChangesButton.addClass( 'hide' );
// There's nothing new to save...
+ $editSummary.val( '' ).prop( 'disabled', true );
$saveButton.prop( 'disabled', true );
// ...unless there is other action
translateEditor.makeSaveButtonContextSensitive( $saveButton );
@@ -667,17 +760,25 @@
}
$editingButtonBlock = $( '<div>' )
- .addClass( 'ten columns tux-editor-insert-buttons' )
+ .addClass( 'twelve columns tux-editor-insert-buttons' )
.append(
$pasteOriginalButton,
$discardChangesButton
);
+ $editSummaryBlock = $( '<div>' )
+ .addClass( 'row tux-editor-editsummary-block' )
+ .append(
+ $( '<div>' )
+ .addClass( 'twelve columns' )
+ .append( $editSummary )
+ );
+
$requestRight = $( [] );
$saveButton = $( '<button>' )
.prop( 'disabled', true )
- .addClass( 'blue button tux-editor-save-button' )
+ .addClass( 'tux-editor-save-button mw-ui-button mw-ui-progressive' )
.text( mw.msg( 'tux-editor-save-button-label' ) )
.on( 'click', function ( e ) {
translateEditor.save();
@@ -688,21 +789,26 @@
} else {
$editingButtonBlock = $( [] );
+ $editSummaryBlock = $( [] );
+
$requestRight = $( '<span>' )
.addClass( 'tux-editor-request-right' )
- .text( mw.msg( 'translate-edit-nopermission' ) )
- .append( $( '<a>' )
- .text( mw.msg( 'translate-edit-askpermission' ) )
- .addClass( 'tux-editor-ask-permission' )
- .attr( {
- href: mw.util.getUrl(
- mw.config.get( 'wgTranslateUseSandbox' ) ?
- 'Special:TranslationStash' :
- mw.config.get( 'wgTranslatePermissionUrl' )
- )
- } )
- );
-
+ .text( mw.msg( 'translate-edit-nopermission' ) );
+ // Make sure wgTranslatePermissionUrl setting is not 'false'
+ if ( mw.config.get( 'wgTranslatePermissionUrl' ) !== false ) {
+ $requestRight
+ .append( $( '<a>' )
+ .text( mw.msg( 'translate-edit-askpermission' ) )
+ .addClass( 'tux-editor-ask-permission' )
+ .attr( {
+ href: mw.util.getUrl(
+ mw.config.get( 'wgTranslateUseSandbox' ) ?
+ 'Special:TranslationStash' :
+ mw.config.get( 'wgTranslatePermissionUrl' )
+ )
+ } )
+ );
+ }
// Disable the text area if user has no translation rights.
// Use readonly to allow copy-pasting (except for placeholders)
$textarea.prop( 'readonly', true );
@@ -711,7 +817,7 @@
}
$skipButton = $( '<button>' )
- .addClass( 'button tux-editor-skip-button' )
+ .addClass( 'tux-editor-skip-button mw-ui-button mw-ui-quiet' )
.text( mw.msg( 'tux-editor-skip-button-label' ) )
.on( 'click', function ( e ) {
translateEditor.skip();
@@ -726,7 +832,7 @@
// This appears instead of "Skip" on the last message on the page
$cancelButton = $( '<button>' )
- .addClass( 'button tux-editor-cancel-button' )
+ .addClass( 'tux-editor-cancel-button mw-ui-button mw-ui-quiet' )
.text( mw.msg( 'tux-editor-cancel-button-label' ) )
.on( 'click', function ( e ) {
translateEditor.skip();
@@ -741,30 +847,28 @@
$editorColumn.append( $( '<div>' )
.addClass( 'row tux-editor-actions-block' )
- .append( $editingButtonBlock, $controlButtonBlock )
+ .append( $editingButtonBlock )
);
- if ( canTranslate ) {
- // BC for MW <= 1.26
+ $editorColumn.append( $editSummaryBlock );
- ( function () {
- if ( mw.loader.getState( 'jquery.accessKeyLabel' ) ) {
- return mw.loader.using( 'jquery.accessKeyLabel' ).then( function () {
- return $.fn.updateTooltipAccessKeys.getAccessKeyPrefix();
- } );
- }
+ $editorColumn.append( $( '<div>' )
+ .addClass( 'row tux-editor-actions-block' )
+ .append( $controlButtonBlock )
+ );
- return $.Deferred().resolve( mw.util.tooltipAccessKeyPrefix );
- }() ).done( function ( prefix ) {
- $editorColumn.append( $( '<div>' )
- .addClass( 'row shortcutinfo' )
- .text( mw.msg( 'tux-editor-shortcut-info',
- ( prefix + 's' ).toUpperCase(),
- ( prefix + 'd' ).toUpperCase(),
- 'ALT' )
- )
- );
- } );
+ if ( canTranslate ) {
+ prefix = $.fn.updateTooltipAccessKeys.getAccessKeyPrefix();
+ $editorColumn.append( $( '<div>' )
+ .addClass( 'row shortcutinfo' )
+ .text( mw.msg(
+ 'tux-editor-shortcut-info',
+ 'CTRL-ENTER',
+ ( prefix + 'd' ).toUpperCase(),
+ 'ALT',
+ ( prefix + 'b' ).toUpperCase()
+ ) )
+ );
}
return $editorColumn;
@@ -823,21 +927,18 @@
*/
validateTranslation: function () {
var translateEditor = this,
- url,
+ api,
$textarea = translateEditor.$editor.find( '.tux-textarea-translation' );
- // TODO: We need a better API for this
- url = mw.util.getUrl( 'Special:Translate/editpage', {
- suggestions: 'checks',
- page: translateEditor.message.title,
- loadgroup: translateEditor.message.group
- } );
+ api = new mw.Api();
- $.post( url, {
+ api.post( {
+ action: 'translationcheck',
+ title: this.message.title,
translation: $textarea.val()
- }, function ( data ) {
+ } ).done( function ( data ) {
var warningIndex,
- warnings = JSON.parse( data );
+ warnings = data.warnings;
translateEditor.removeWarning( 'validation' );
if ( !warnings || !warnings.length ) {
@@ -876,7 +977,10 @@
},
/**
- * Displays the supplied warning from the bottom up near the translation edit area.
+ * Displays the supplied warning above the translation edit area.
+ * Newer warnings are added to the top while older warnings are
+ * added to the bottom. This also means that older warnings will
+ * not be shown by default unless the user clicks "more warnings" tab.
*
* @param {string} warning used as html for the warning display
* @param {string} type used to group the warnings.eg: validation, diff, error
@@ -887,21 +991,21 @@
$warnings = this.$editor.find( '.tux-warning' ),
$moreWarningsTab = this.$editor.find( '.tux-more-warnings' ),
$newWarning = $( '<div>' )
- .addClass( 'tux-warning-message hide ' + type )
+ .addClass( 'tux-warning-message ' + type )
.html( warning );
+ this.$editor.find( '.tux-warning-message' ).addClass( 'hide' );
+
$warnings
.removeClass( 'hide' )
- .append( $newWarning );
+ .prepend( $newWarning );
warningCount = $warnings.find( '.tux-warning-message' ).length;
- $warnings.find( '.tux-warning-message:first' ).removeClass( 'hide' );
-
if ( warningCount > 1 ) {
$moreWarningsTab
.text( mw.msg( 'tux-warnings-more', warningCount - 1 ) )
- .removeClass( 'hide' );
+ .removeClass( 'hide open' );
} else {
$moreWarningsTab.addClass( 'hide' );
}
@@ -923,7 +1027,7 @@
if ( mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ) {
$messageDescSaveButton = $( '<button>' )
- .addClass( 'blue button tux-editor-savedoc-button' )
+ .addClass( 'tux-editor-savedoc-button mw-ui-button mw-ui-progressive' )
.prop( 'disabled', true )
.text( mw.msg( 'tux-editor-doc-editor-save' ) )
.on( 'click', function () {
@@ -935,7 +1039,7 @@
} );
$messageDescCancelButton = $( '<button>' )
- .addClass( 'button tux-editor-skipdoc-button' )
+ .addClass( 'tux-editor-skipdoc-button mw-ui-button mw-ui-quiet' )
.text( mw.msg( 'tux-editor-doc-editor-cancel' ) )
.on( 'click', function () {
translateEditor.hideDocumentationEditor();
@@ -973,12 +1077,12 @@
.append( $( '<a>' )
.attr( {
href: mw.translate.getDocumentationEditURL(
- this.message.title.replace( /\/[a-z\-]+$/, '' )
+ this.message.title.replace( /\/[a-z-]+$/, '' )
),
target: '_blank'
} )
.addClass( 'message-desc-edit' )
- .on( 'click', $.proxy( this.showDocumentationEditor, this ) )
+ .on( 'click', this.showDocumentationEditor.bind( this ) )
)
);
@@ -1024,7 +1128,7 @@
return $( '<div>' )
.addClass( 'five columns infocolumn-block' )
.append(
- $( '<span>' ).addClass( 'caret' ),
+ $( '<span>' ).addClass( 'tux-message-editor__caret' ),
$infoColumn
);
},
@@ -1046,6 +1150,7 @@
$( '.tux-editor-save-button, .tux-editor-save-button' ).removeAttr( 'accesskey' );
this.$editor.find( '.tux-editor-save-button' ).attr( 'accesskey', 's' );
this.$editor.find( '.tux-editor-skip-button' ).attr( 'accesskey', 'd' );
+ this.$editor.find( '.tux-input-editsummary' ).attr( 'accesskey', 'b' );
// @todo access key for the cancel button
this.$messageItem.addClass( 'hide' );
@@ -1065,7 +1170,7 @@
$next.data( 'translateeditor' ).init();
}
- mw.translateHooks.run( 'afterEditorShown', this.$editor );
+ mw.hook( 'mw.translate.editor.afterEditorShown' ).fire( this.$editor );
return false;
},
@@ -1108,12 +1213,7 @@
.addClass( 'editor-expand' )
.attr( 'title', mw.msg( 'tux-editor-expand-tooltip' ) );
- this.$editor.find( '.infocolumn-block' )
- .removeClass( 'hide' );
- this.$editor.find( '.editcolumn' )
- .removeClass( 'twelve' )
- .addClass( 'seven' );
-
+ this.$editor.removeClass( 'tux-message-editor--expanded' );
this.expanded = false;
},
@@ -1124,12 +1224,7 @@
.addClass( 'editor-contract' )
.attr( 'title', mw.msg( 'tux-editor-collapse-tooltip' ) );
- this.$editor.find( '.infocolumn-block' )
- .addClass( 'hide' );
- this.$editor.find( '.editcolumn' )
- .removeClass( 'seven' )
- .addClass( 'twelve' );
-
+ this.$editor.addClass( 'tux-message-editor--expanded' );
this.expanded = true;
},
@@ -1147,7 +1242,7 @@
}
// Load the diff styles
- mw.loader.load( 'mediawiki.action.history.diff', undefined, true );
+ mw.loader.load( 'mediawiki.diff.styles' );
$trigger = $( '<span>' )
.addClass( 'show-diff-link' )
@@ -1178,14 +1273,16 @@
/**
* Makes the textare large enough for insertables and positions the insertables.
+ *
+ * @param {jQuery} $textarea Text area.
*/
resizeInsertables: function ( $textarea ) {
var $buttonArea, buttonAreaHeight;
$buttonArea = this.$editor.find( '.tux-editor-insert-buttons' );
buttonAreaHeight = $buttonArea.height();
- $textarea.css( 'padding-bottom', buttonAreaHeight + 10 );
- $buttonArea.css( 'top', -buttonAreaHeight - 5 );
+ $textarea.css( 'padding-bottom', buttonAreaHeight + 5 );
+ $buttonArea.css( 'top', -buttonAreaHeight );
autosize.update( $textarea );
}
};
@@ -1224,4 +1321,4 @@
};
}() );
}
-}( jQuery, mediaWiki, autosize ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.editor.shortcuts.js b/www/wiki/extensions/Translate/resources/js/ext.translate.editor.shortcuts.js
index 989e6896..95dc9a47 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.editor.shortcuts.js
+++ b/www/wiki/extensions/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,34 +14,27 @@
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();
// For scrolling up and down
$( '<div>' )
.text( '↑' )
- .offset( { top: middle - 10, left: maxLeft } )
.addClass( 'shortcut-popup' )
- .appendTo( 'body' );
+ .appendTo( 'body' )
+ .offset( { top: middle - 15, left: maxLeft } )
+ .css( 'transform', 'translate( -50%, 0 )' );
$( '<div>' )
.text( '↓' )
- .offset( { top: middle + 10, left: maxLeft } )
.addClass( 'shortcut-popup' )
- .appendTo( 'body' );
+ .appendTo( 'body' )
+ .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 ) {
@@ -51,9 +43,10 @@
$( '<div>' )
.text( index + 1 )
- .offset( offset )
.addClass( 'shortcut-popup' )
- .appendTo( 'body' );
+ .appendTo( 'body' )
+ .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/www/wiki/extensions/Translate/resources/js/ext.translate.groupselector.js b/www/wiki/extensions/Translate/resources/js/ext.translate.groupselector.js
index eb0bb801..eda0a43b 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.groupselector.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.groupselector.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
var groupsLoader, delay;
@@ -6,11 +6,20 @@
/**
* options
* - position: accepts same values as jquery.ui.position
- * - onSelect: callback with message group id when selected
- * - language: language for statistics.
+ * - onSelect:
+ * - language:
* - preventSelector: boolean to load but not show the group selector.
* - recent: list of recent group ids
* groups: list of message group ids
+ *
+ * @param {Element} element
+ * @param {Object} options
+ * @param {Object} [options.position] Accepts same values as jquery.ui.position.
+ * @param {Function} [options.onSelect] Callback with message group id when selected.
+ * @param {string} options.language Language code for statistics.
+ * @param {boolean} [options.preventSelector] Whether not to show the group selector.
+ * @param {string[]} [options.recent] List of recent message group ids.
+ * @param {string[]} [groups] List of message group ids to show.
*/
function TranslateMessageGroupSelector( element, options, groups ) {
this.$trigger = $( element );
@@ -47,8 +56,7 @@
* Prepare the selector menu rendering
*/
prepareSelectorMenu: function () {
- var $groupTitle,
- $listFilters,
+ var $listFilters,
$listFiltersGroup,
$search,
$searchIcon,
@@ -58,15 +66,6 @@
.addClass( 'tux-groupselector' )
.addClass( 'grid' );
- $groupTitle = $( '<div>' )
- .addClass( 'row' )
- .append(
- $( '<h3>' )
- .addClass( 'tux-groupselector__title' )
- .addClass( 'ten columns' )
- .text( mw.msg( 'translate-msggroupselector-projects' ) )
- );
-
$searchIcon = $( '<div>' )
.addClass( 'two columns tux-groupselector__filter__search__icon' );
@@ -116,7 +115,7 @@
this.$loader = $( '<div>' )
.addClass( 'tux-loading-indicator tux-loading-indicator--centered' );
- this.$menu.append( $groupTitle, $listFiltersGroup, this.$loader, this.$list );
+ this.$menu.append( $listFiltersGroup, this.$loader, this.$list );
$( 'body' ).append( this.$menu );
},
@@ -132,13 +131,15 @@
// Start loading the groups, but assess the situation again after
// they are loaded, in case user has made further interactions.
if ( this.firstShow ) {
- this.loadGroups().done( $.proxy( this.showList, this ) );
+ this.loadGroups().done( this.showList.bind( this ) );
this.firstShow = false;
}
},
/**
* Hide the selector
+ *
+ * @param {jQuery.Event} e
*/
hide: function ( e ) {
// Do not hide if the trigger is clicked
@@ -168,7 +169,7 @@
groupSelector = this;
// Hide the selector panel when clicking outside of it
- $( 'html' ).on( 'click', $.proxy( this.hide, this ) );
+ $( 'html' ).on( 'click', this.hide.bind( this ) );
groupSelector.$trigger.on( 'click', function () {
groupSelector.toggle();
@@ -187,29 +188,25 @@
groupSelector.hide();
- groupSelector.$trigger
- .removeClass( 'tail' )
- .nextAll().remove();
-
- groupSelector.$trigger.addClass( 'expanded' );
- // FIXME In future, if we are going to have multiple groupselectors per page
- // this will fail.
- $( '.tux-breadcrumb .tail' ).remove();
+ groupSelector.$trigger.nextAll().remove();
if ( !groupSelector.options.preventSelector ) {
$newLink = $( '<span>' )
- .addClass( 'grouptitle grouplink tail' )
- .text( messageGroup.label );
- $( '.tux-breadcrumb .grouplink:last' ).after( $newLink );
- $newLink.data( 'msggroupid', messageGroup.id );
+ .addClass( 'grouptitle grouplink' )
+ .text( messageGroup.label )
+ .data( 'msggroupid', messageGroup.id );
+
+ groupSelector.$trigger.after( $newLink );
if ( messageGroup.groups && messageGroup.groups.length > 0 ) {
+ // Show the new menu immediately.
// Pass options for callbacks, language etc. but ignore the position
// option unless explicitly given to allow automatic recalculation
// of the position compared to the new trigger.
- $newLink.msggroupselector( groupSelector.customOptions );
- // Show the new menu immediately
- $newLink.data( 'msggroupselector' ).show();
+ $newLink
+ .addClass( 'tux-breadcrumb__item--aggregate' )
+ .msggroupselector( groupSelector.customOptions )
+ .data( 'msggroupselector' ).show();
}
}
@@ -238,12 +235,12 @@
groupSelector.showList();
} );
- this.$search.on( 'click', $.proxy( this.show, this ) )
- .on( 'keypress', $.proxy( this.keyup, this ) )
- .on( 'keyup', $.proxy( this.keyup, this ) );
+ this.$search.on( 'click', this.show.bind( this ) )
+ .on( 'keypress', this.keyup.bind( this ) )
+ .on( 'keyup', this.keyup.bind( this ) );
if ( this.eventSupported( 'keydown' ) ) {
- this.$search.on( 'keydown', $.proxy( this.keyup, this ) );
+ this.$search.on( 'keydown', this.keyup.bind( this ) );
}
},
@@ -251,7 +248,7 @@
* Handle the keypress/keyup events in the message group search box.
*/
keyup: function () {
- delay( $.proxy( this.showList, this ), 300 );
+ delay( this.showList.bind( this ), 300 );
},
/**
@@ -268,7 +265,7 @@
* Shows suitable list for current view, taking possible filter into account
*/
showList: function () {
- var query = $.trim( this.$search.val() ).toLowerCase();
+ var query = this.$search.val().trim().toLowerCase();
if ( query ) {
this.filter( query );
@@ -435,7 +432,6 @@
params = {
action: 'query',
- format: 'json',
meta: 'messagegroups',
mgformat: 'tree',
mgprop: 'id|label|icon|priority|prioritylangs|priorityforce',
@@ -475,7 +471,7 @@
if ( group.priority === 'discouraged' ||
( group.priorityforce &&
group.prioritylangs &&
- $.inArray( targetLanguage, group.prioritylangs ) === -1 )
+ group.prioritylangs.indexOf( targetLanguage ) === -1 )
) {
return;
}
@@ -541,9 +537,7 @@
}
if ( messagegroup.icon && messagegroup.icon.vector ) {
- style +=
- 'background-image: -webkit-linear-gradient(transparent, transparent), url(--);' +
- 'background-image: linear-gradient(transparent, transparent), url(--);';
+ style += 'background-image: linear-gradient(transparent, transparent), url(--);';
style = style.replace( /--/g, messagegroup.icon.vector );
}
@@ -625,7 +619,7 @@
* @return {string} Escaped string that is safe to use for a search.
*/
function escapeRegex( value ) {
- return value.replace( /[\-\[\]{}()*+?.,\\\^$\|#\s]/g, '\\$&' );
+ return value.replace( /[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&' );
}
delay = ( function () {
@@ -636,4 +630,4 @@
timer = setTimeout( callback, milliseconds );
};
}() );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.hooks.js b/www/wiki/extensions/Translate/resources/js/ext.translate.hooks.js
index 7b2628fa..a227b304 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.hooks.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.hooks.js
@@ -3,36 +3,35 @@
* yet have one. See hooks.txt in Translate directory for how to use hooks.
*
* @author Harry Burt
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @since 2012-08-22
*/
-( function ( mw ) {
+( function () {
'use strict';
- var registry = {};
-
mw.translateHooks = {
add: function ( name, func ) {
- if ( !registry[ name ] ) {
- registry[ name ] = [];
- }
- registry[ name ].push( func );
+ showDeprecationWarning();
+
+ mw.hook( name ).add( func );
},
run: function ( /* infinite list of parameters */ ) {
- var args, name, length, i;
+ var args, name;
+
+ showDeprecationWarning();
args = Array.prototype.slice.call( arguments );
name = args.shift();
- if ( registry[ name ] ) {
- length = registry[ name ].length;
-
- for ( i = 0; i < length; i++ ) {
- registry[ name ][ i ].apply( null, args );
- }
- }
+ mw.hook( name ).fire( args );
}
};
-}( mediaWiki ) );
+
+ function showDeprecationWarning() {
+ mw.log.warn( '`mw.translateHooks` has been deprecated and will be removed in the ' +
+ 'future. Use `mw.hook` instead. See - ' +
+ 'https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw.hook' );
+ }
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.messagetable.js b/www/wiki/extensions/Translate/resources/js/ext.translate.messagetable.js
index ff8405d8..adf3d33c 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.messagetable.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.messagetable.js
@@ -1,18 +1,7 @@
-( function ( $, mw ) {
+( function () {
'use strict';
- var delay, itemsClass;
-
- delay = ( function () {
- var timer = 0;
-
- return function ( callback, milliseconds ) {
- clearTimeout( timer );
- timer = setTimeout( callback, milliseconds );
- };
- }() );
-
- itemsClass = {
+ var itemsClass = {
proofread: '.tux-message-proofread',
page: '.tux-message-pagemode',
translate: '.tux-message'
@@ -27,62 +16,22 @@
action: 'query',
list: 'messagecollection',
mcgroup: messageGroup,
- format: 'json',
mclanguage: language,
mcoffset: offset,
mclimit: limit,
mcfilter: filter,
mcprop: 'definition|translation|tags|properties',
- rawcontinue: 1
+ rawcontinue: 1,
+ errorformat: 'html'
} );
- },
-
- loadMessages: function ( changes ) {
- // FIXME: this should be member method
- var $container = $( '.tux-messagelist' ),
- $loader = $( '.tux-messagetable-loader' ),
- $statsbar = $( '.tux-message-list-statsbar' );
-
- changes = changes || {};
-
- // Clear current messages
- $container.trigger( 'clear' );
-
- // Change the properties that are provided
- if ( changes.filter !== undefined ) {
- $loader.data( 'filter', changes.filter );
- }
- if ( changes.group !== undefined ) {
- $loader.data( 'messagegroup', changes.group );
- }
-
- // Reset the number of messages remaining
- $loader.find( '.tux-messagetable-loader-count' ).text( '' );
-
- // Reset the statsbar
- $statsbar
- .empty()
- .removeData()
- .languagestatsbar( {
- language: $container.data( 'targetlangcode' ),
- group: $loader.data( 'messagegroup' )
- } );
-
- // Reset other info and make visible
- $loader
- .removeData( 'offset' )
- .removeAttr( 'data-offset' )
- .removeClass( 'hide' );
-
- // And start loading
- $loader.trigger( 'appear' );
}
} );
- function MessageTable( container, options ) {
+ function MessageTable( container, options, settings ) {
this.$container = $( container );
this.options = options;
this.options = $.extend( {}, $.fn.messagetable.defaults, options );
+ this.settings = settings;
// mode can be proofread, page or translate
this.mode = this.options.mode;
this.firstProofreadTipShown = false;
@@ -90,7 +39,11 @@
this.$header = this.$container.siblings( '.tux-messagetable-header' );
// Container is between these in the dom.
this.$loader = this.$container.siblings( '.tux-messagetable-loader' );
+ this.$loaderIcon = this.$loader.find( '.tux-loading-indicator' );
+ this.$loaderInfo = this.$loader.find( '.tux-messagetable-loader-info' );
this.$actionBar = this.$container.siblings( '.tux-action-bar' );
+ this.$statsBar = this.$actionBar.find( '.tux-message-list-statsbar' );
+ this.$proofreadOwnTranslations = this.$actionBar.find( '.tux-proofread-own-translations-button' );
this.messages = [];
this.loading = false;
this.init();
@@ -99,8 +52,6 @@
MessageTable.prototype = {
init: function () {
- this.switchMode( this.mode );
- this.initialized = true;
this.$actionBar.removeClass( 'hide' );
},
@@ -109,35 +60,24 @@
$filterInput = this.$container.parent().find( '.tux-message-filter-box' );
// Vector has transitions of 250ms which affect layout. Let those finish.
- $( window ).on( 'scroll resize', function () {
- delay( function () {
- messageTable.scroll();
- }, 250 );
- } ).resize( function () {
+ $( window ).on( 'scroll', $.debounce( 250, function () {
+ messageTable.scroll();
+
+ if ( isLoaderVisible( messageTable.$loader ) ) {
+ messageTable.load();
+ }
+ } ) ).on( 'resize', $.throttle( 250, function () {
messageTable.resize();
- } );
+ messageTable.scroll();
+ } ) );
if ( mw.translate.isPlaceholderSupported( $filterInput ) ) {
$filterInput.prop( 'placeholder', mw.msg( 'tux-message-filter-placeholder' ) );
}
- $filterInput.on( 'textchange', function () {
- delay( function () {
- messageTable.search( $filterInput.val() );
- }, 300 );
- } );
-
- this.$container.on( 'clear', $.proxy( messageTable.clear, messageTable ) );
-
- this.$loader.appear( function () {
- // Avoid the overlap calls to load()
- setTimeout( function () {
- messageTable.load();
- }, 250 );
- }, {
- // Appear callback need to be called more than once.
- one: false
- } );
+ $filterInput.on( 'textchange', $.debounce( 250, function () {
+ messageTable.search( $filterInput.val() );
+ } ) );
this.$actionBar.find( 'button.proofread-mode-button' ).on( 'click', function () {
messageTable.switchMode( 'proofread' );
@@ -150,6 +90,20 @@
this.$actionBar.find( 'button.page-mode-button' ).on( 'click', function () {
messageTable.switchMode( 'page' );
} );
+
+ this.$proofreadOwnTranslations.click( function () {
+ var $this = $( this ),
+ hideMessage = mw.msg( 'tux-editor-proofreading-hide-own-translations' ),
+ showMessage = mw.msg( 'tux-editor-proofreading-show-own-translations' );
+
+ if ( $this.hasClass( 'down' ) ) {
+ messageTable.setHideOwnInProofreading( false );
+ $this.removeClass( 'down' ).text( hideMessage );
+ } else {
+ messageTable.setHideOwnInProofreading( true );
+ $this.addClass( 'down' ).text( showMessage );
+ }
+ } );
},
/**
@@ -157,15 +111,20 @@
*/
clear: function () {
this.$container.empty();
- $( '.translate-tipsy' ).remove();
+ $( '.translate-tooltip' ).remove();
this.messages = [];
// Any ongoing loading process will notice this and will reject results.
this.loading = false;
},
+ /**
+ * Adds a new message using current mode.
+ *
+ * @param {Object} message
+ */
add: function ( message ) {
// Prepare the message for display
- mw.translateHooks.run( 'formatMessageBeforeTable', message );
+ mw.hook( 'mw.translate.messagetable.formatMessageBeforeTable' ).fire( message );
if ( this.mode === 'translate' ) {
this.addTranslate( message );
@@ -178,6 +137,8 @@
/**
* Add a message to the message table for translation.
+ *
+ * @param {Object} message
*/
addTranslate: function ( message ) {
var $message,
@@ -190,8 +151,10 @@
$messageWrapper = $( '<div>' ).addClass( 'row tux-message' ),
statusMsg = '';
+ message.proofreadable = false;
+
if ( message.tags.length &&
- $.inArray( 'optional', message.tags ) >= 0 &&
+ message.tags.indexOf( 'optional' ) >= 0 &&
status === 'untranslated'
) {
status = 'optional';
@@ -245,7 +208,7 @@
dir: targetLangDir
} )
.text( message.translation || '' )
- ),
+ ),
$( '<div>' )
.addClass( 'two columns tux-list-status text-center' )
.append(
@@ -276,11 +239,14 @@
/**
* Add a message to the message table for proofreading.
+ *
+ * @param {Object} message
*/
addProofread: function ( message ) {
- var icon, $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( {
@@ -289,30 +255,53 @@
targetlangcode: this.$container.data( 'targetlangcode' )
} );
- // Add autotipsy to first available proofread action icon
- if ( this.firstProofreadTipShown ) {
+ $icon = $message.find( '.tux-proofread-action' );
+ if ( $icon.length === 0 ) {
return;
}
- icon = $message.find( '.tux-proofread-action' );
- if ( icon.length === 0 ) {
+ // Add autotooltip to first available proofread action icon
+ if ( this.firstProofreadTipShown ) {
return;
}
-
this.firstProofreadTipShown = true;
- icon.addClass( 'autotipsy' );
-
- // Selectors are not cached in case the element no longer exists
- setTimeout( function () {
- var icon = $( '.autotipsy' );
- if ( icon.length ) { icon.tipsy( 'show' ); }
- }, 1000 );
- setTimeout( function () {
- var icon = $( '.autotipsy' );
- if ( icon.length ) { icon.tipsy( 'hide' ); }
- }, 4000 );
+ $icon.addClass( 'autotooltip' );
+
+ mw.loader.using( 'oojs-ui-core' ).done( function () {
+ var tooltip = new OO.ui.PopupWidget( {
+ padded: true,
+ align: 'center',
+ width: 250,
+ classes: [ 'translate-tooltip' ],
+ $content: $( '<p>' ).text( $icon.prop( 'title' ) )
+ } );
+
+ setTimeout( function () {
+ var offset, $icon = $( '.autotooltip:visible' );
+ if ( !$icon.length ) {
+ return;
+ }
+
+ offset = $icon.offset();
+ tooltip.$element.appendTo( 'body' );
+ tooltip.toggle( true ).toggleClipping( false ).togglePositioning( false );
+ tooltip.$element.css( {
+ top: offset.top + $icon.outerHeight() + 5,
+ left: offset.left + $icon.outerWidth() - tooltip.$element.width() / 2 - 15
+ } );
+
+ setTimeout( function () {
+ tooltip.$element.remove();
+ }, 4000 );
+ }, 1000 );
+ } );
},
+ /**
+ * Add a message to the message table for wiki page mode.
+ *
+ * @param {Object} message
+ */
addPageModeMessage: function ( message ) {
var $message;
@@ -354,17 +343,14 @@
$result = this.$container.find( '.tux-message-filter-result' );
if ( !$result.length ) {
$note = $( '<div>' )
- .addClass( 'nine columns advanced-search' );
+ .addClass( 'advanced-search' );
- $button = $( '<div>' )
- .addClass( 'three columns' )
- .append( $( '<button>' )
- .addClass( 'button' )
- .text( mw.msg( 'tux-message-filter-advanced-button' ) )
- );
+ $button = $( '<button>' )
+ .addClass( 'mw-ui-button' )
+ .text( mw.msg( 'tux-message-filter-advanced-button' ) );
$result = $( '<div>' )
- .addClass( 'row highlight tux-message-filter-result' )
+ .addClass( 'tux-message-filter-result' )
.append( $note, $button );
this.$container.prepend( $result );
@@ -381,7 +367,6 @@
} );
}
- this.$loader.trigger( 'appear' );
this.updateLastMessage();
// Trigger a scroll event for the window to make sure all floating toolbars
@@ -408,100 +393,160 @@
}
},
- load: function () {
+ /**
+ * Start loading messages again with new settings.
+ *
+ * @param {Object} changes
+ */
+ changeSettings: function ( changes ) {
+ // Clear current messages
+ this.clear();
+ this.settings = $.extend( this.settings, changes );
+
+ if ( this.initialized === false ) {
+ this.switchMode( this.mode );
+ }
+
+ // Reset the number of messages remaining
+ this.$loaderInfo.text(
+ mw.msg( 'tux-messagetable-loading-messages', this.$loader.data( 'pagesize' ) )
+ );
+
+ // Reset the statsbar
+ this.$statsBar
+ .empty()
+ .removeData()
+ .languagestatsbar( {
+ language: this.settings.language,
+ group: this.settings.group
+ } );
+
+ this.initialized = true;
+ // Reset other info and make visible
+ this.$loader
+ .removeData( 'offset' )
+ .removeAttr( 'data-offset' )
+ .removeClass( 'hide' );
+
+ if ( changes.offset ) {
+ this.$loader.data( 'offset', changes.offset );
+ }
+
+ this.$header.removeClass( 'hide' );
+ this.$actionBar.removeClass( 'hide' );
+
+ // Start loading messages
+ this.load( changes.limit );
+ },
+
+ /**
+ * @param {number} [limit] Only load this many messages and then stop even if there is more.
+ */
+ load: function ( limit ) {
var remaining,
query,
- messageTable = this,
- $messageList = $( '.tux-messagelist' ),
+ self = this,
offset = this.$loader.data( 'offset' ),
- filter = messageTable.$loader.data( 'filter' ),
- targetLangCode = $messageList.data( 'targetlangcode' ),
- messagegroup = messageTable.$loader.data( 'messagegroup' ),
- pageSize = messageTable.$loader.data( 'pagesize' );
+ pageSize = limit || this.$loader.data( 'pagesize' );
if ( offset === -1 ) {
return;
}
- if ( messageTable.loading ) {
+ if ( this.loading ) {
// Avoid duplicate loading - the offset will be wrong and it will result
// in duplicate messages shown in the page
return;
}
- messageTable.loading = true;
-
- mw.translate.getMessages( messagegroup, targetLangCode, offset, pageSize, filter )
- .done( function ( result ) {
- var messages = result.query.messagecollection,
- state;
+ this.loading = true;
+ this.$loaderIcon.removeClass( 'tux-loading-indicator--stopped' );
+
+ mw.translate.getMessages(
+ this.settings.group,
+ this.settings.language,
+ offset,
+ pageSize,
+ this.settings.filter
+ ).done( function ( result ) {
+ var messages = result.query.messagecollection,
+ state, i;
+
+ if ( !self.loading ) {
+ // reject. This was cancelled.
+ return;
+ }
- if ( !messageTable.loading ) {
- // reject. This was cancelled.
- return;
+ if ( result.warnings ) {
+ for ( i = 0; i !== result.warnings.length; i++ ) {
+ if ( result.warnings[ i ].code === 'translate-language-disabled-source' ) {
+ self.handleLoadErrors( [ result.warnings[ i ] ] );
+ break;
+ }
}
+ return;
+ }
- messageTable.loading = false;
-
- if ( messages.length === 0 ) {
- // And this is the first load for the filter...
- if ( messageTable.$container.children().length === 0 ) {
- messageTable.displayEmptyListHelp();
- }
+ if ( messages.length === 0 ) {
+ // And this is the first load for the filter...
+ if ( self.$container.children().length === 0 ) {
+ self.displayEmptyListHelp();
}
+ }
- $.each( messages, function ( index, message ) {
- message.group = messagegroup;
- messageTable.add( message );
- messageTable.messages.push( message );
+ $.each( messages, function ( index, message ) {
+ message.group = self.settings.group;
+ self.add( message );
+ self.messages.push( message );
- if ( index === 0 && messageTable.mode === 'translate' ) {
- $( '.tux-message:first' ).data( 'translateeditor' ).init();
- }
- } );
+ if ( index === 0 && self.mode === 'translate' ) {
+ $( '.tux-message:first' ).data( 'translateeditor' ).init();
+ }
+ } );
- state = result.query.metadata && result.query.metadata.state;
- $( '.tux-workflow' ).workflowselector( messagegroup, targetLangCode, state );
+ state = result.query.metadata && result.query.metadata.state;
+ $( '.tux-workflow' ).workflowselector(
+ self.settings.group,
+ self.settings.language,
+ state
+ ).removeClass( 'hide' );
- // Dynamically loaded messages should pass the search filter if present.
- query = $( '.tux-message-filter-box' ).val();
+ // Dynamically loaded messages should pass the search filter if present.
+ query = $( '.tux-message-filter-box' ).val();
- if ( query ) {
- messageTable.search( query );
- }
+ if ( query ) {
+ self.search( query );
+ }
- if ( result[ 'query-continue' ] === undefined ) {
- // End of messages
- messageTable.$loader.data( 'offset', -1 )
- .addClass( 'hide' );
- } else {
- messageTable.$loader.data( 'offset', result[ 'query-continue' ].messagecollection.mcoffset );
+ if ( result[ 'query-continue' ] === undefined || limit ) {
+ // End of messages
+ self.$loader.data( 'offset', -1 )
+ .addClass( 'hide' );
- remaining = result.query.metadata.remaining;
+ // Helpfully open the first message in show mode
+ // TODO: Refactor to avoid direct DOM access
+ $( '.tux-message-item' ).first().click();
+ } else {
+ self.$loader.data( 'offset', result[ 'query-continue' ].messagecollection.mcoffset );
- $( '.tux-messagetable-loader-count' ).text(
- mw.msg( 'tux-messagetable-more-messages', remaining )
- );
+ remaining = result.query.metadata.remaining;
- $( '.tux-messagetable-loader-more' ).text(
- mw.msg( 'tux-messagetable-loading-messages', Math.min( remaining, pageSize ) )
- );
+ self.$loaderInfo.text(
+ mw.msg( 'tux-messagetable-more-messages', remaining )
+ );
- // Make sure the floating toolbars are visible without the need for scroll
- $( window ).trigger( 'scroll' );
- }
+ // Make sure the floating toolbars are visible without the need for scroll
+ $( window ).trigger( 'scroll' );
+ }
- messageTable.updateLastMessage();
- } )
- .fail( function ( errorCode, response ) {
- if ( response.error && response.error.code === 'mctranslate-language-disabled' ) {
- $( '.tux-editor-header .group-warning' )
- .text( mw.msg( 'translate-language-disabled' ) )
- .show();
- }
- messageTable.$loader.data( 'offset', -1 ).addClass( 'hide' );
- messageTable.loading = false;
- } );
+ self.updateHideOwnInProofreadingToggleVisibility();
+ self.updateLastMessage();
+ } ).fail( function ( errorCode, response ) {
+ self.handleLoadErrors( response.errors, errorCode );
+ } ).always( function () {
+ self.$loaderIcon.addClass( 'tux-loading-indicator--stopped' );
+ self.loading = false;
+ } );
},
updateLastMessage: function () {
@@ -527,12 +572,33 @@
*/
otherActionButton: function ( labelMsg, callback ) {
return $( '<button>' )
- .addClass( 'green button' )
+ .addClass( 'mw-ui-button mw-ui-progressive mw-ui-big' )
.text( mw.msg( labelMsg ) )
.on( 'click', callback );
},
/**
+ * Enables own message hiding in proofread mode.
+ *
+ * @param {boolean} enabled
+ */
+ setHideOwnInProofreading: function ( enabled ) {
+ if ( enabled ) {
+ this.$container.addClass( 'tux-hide-own' );
+ } else {
+ this.$container.removeClass( 'tux-hide-own' );
+ }
+ },
+
+ updateHideOwnInProofreadingToggleVisibility: function () {
+ if ( this.$container.find( '.tux-message-proofread.own-translation' ).length ) {
+ this.$proofreadOwnTranslations.removeClass( 'hide' );
+ } else {
+ this.$proofreadOwnTranslations.addClass( 'hide' );
+ }
+ },
+
+ /**
* If the user selection doesn't show anything,
* give some pointers to other things to do.
*/
@@ -635,14 +701,13 @@
*/
switchMode: function ( mode ) {
var messageTable = this,
- filter = messageTable.$loader.data( 'filter' ),
+ filter = this.settings.filter,
userId = mw.config.get( 'wgUserId' ),
$tuxTabUntranslated,
$tuxTabUnproofread,
- $controlOwnButton,
$hideTranslatedButton;
- messageTable.$actionBar.find( '.down' ).removeClass( 'down' );
+ messageTable.$actionBar.find( '.tux-view-switcher .down' ).removeClass( 'down' );
if ( mode === 'translate' ) {
messageTable.$actionBar.find( '.translate-mode-button' ).addClass( 'down' );
}
@@ -660,11 +725,10 @@
// Emulate clear without clearing loaded messages
messageTable.$container.empty();
- $( '.translate-tipsy' ).remove();
+ $( '.translate-tooltip' ).remove();
$tuxTabUntranslated = $( '.tux-message-selector > .tux-tab-untranslated' );
$tuxTabUnproofread = $( '.tux-message-selector > .tux-tab-unproofread' );
- $controlOwnButton = messageTable.$actionBar.find( '.tux-proofread-own-translations-button' );
$hideTranslatedButton = messageTable.$actionBar.find( '.tux-editor-clear-translated' );
if ( messageTable.mode === 'proofread' ) {
@@ -679,16 +743,15 @@
mw.translate.changeFilter( 'translated|!reviewer:' + userId +
'|!last-translator:' + userId );
$tuxTabUnproofread.addClass( 'selected' );
+ // Own translations are not present in proofread + unreviewed mode
}
- $controlOwnButton.removeClass( 'hide' );
$hideTranslatedButton.addClass( 'hide' );
} else {
$tuxTabUntranslated.removeClass( 'hide' );
$tuxTabUnproofread.addClass( 'hide' );
- $controlOwnButton.addClass( 'hide' );
- if ( messageTable.$loader.data( 'filter' ).indexOf( '!translated' ) > -1 ) {
+ if ( filter.indexOf( '!translated' ) > -1 ) {
$hideTranslatedButton.removeClass( 'hide' );
}
@@ -708,6 +771,11 @@
messageTable.displayEmptyListHelp();
}
+ this.$loaderInfo.text(
+ mw.msg( 'tux-messagetable-loading-messages', this.$loader.data( 'pagesize' ) )
+ );
+
+ messageTable.updateHideOwnInProofreadingToggleVisibility();
messageTable.updateLastMessage();
},
@@ -759,6 +827,30 @@
} else if ( isActionBarFloating && needsActionBarFloat ) {
this.$actionBar.width( messageListWidth );
}
+ },
+
+ /**
+ * Handles errors encountered during the loading state.
+ * Displays the errors and updates the state of the table.
+ *
+ * @param {Array} errors
+ * @param {string} errorCode
+ */
+ handleLoadErrors: function ( errors, errorCode ) {
+ var $warningContainer = $( '.tux-editor-header .group-warning' );
+
+ if ( errors ) {
+ $.map( errors, function ( error ) {
+ $warningContainer.append( error[ '*' ] );
+ } );
+ } else {
+ $warningContainer.text( mw.msg( 'api-error-unknownerror', errorCode ) );
+ }
+
+ $( '.tux-workflow' ).addClass( 'hide' );
+ this.$loader.data( 'offset', -1 ).addClass( 'hide' );
+ this.$actionBar.addClass( 'hide' );
+ this.$header.addClass( 'hide' );
}
};
@@ -787,44 +879,6 @@
mode: new mw.Uri().query.action || 'translate'
};
- $( 'document' ).ready( function () {
- var api = new mw.Api();
-
- // Currently used only in the pre-TUX editor
- $( '.mw-translate-messagereviewbutton' ).click( function () {
- var $b, successFunction, failFunction, params;
- $b = $( this );
-
- successFunction = function ( data ) {
- var reason;
-
- if ( data.error ) {
- // Give grep a chance to find the usages:
- // api-error-invalidrevision, api-error-unknownmessage,
- // api-error-fuzzymessage, api-error-owntranslation
- reason = mw.msg( 'api-error-' + data.error.code );
- $b.val( mw.msg( 'translate-messagereview-failure', reason ) );
- } else {
- $b.val( mw.msg( 'translate-messagereview-done' ) );
- }
- };
-
- failFunction = function ( jqXHR ) {
- $b.val( mw.msg( 'translate-messagereview-failure', jqXHR.statusText ) );
- };
-
- params = {
- action: 'translationreview',
- revision: $b.data( 'revision' )
- };
- $b.val( mw.msg( 'translate-messagereview-progress' ) );
- $b.prop( 'disabled', true );
-
- // Change to csrf when support for MW 1.25 is dropped
- api.postWithToken( 'edit', params ).done( successFunction ).fail( failFunction );
- } );
- } );
-
/**
* Escape the search query for regex match.
*
@@ -832,6 +886,20 @@
* @return {string} Escaped string that is safe to use for a search.
*/
function escapeRegex( value ) {
- return value.replace( /[\-\[\]{}()*+?.,\\\^$\|#\s]/g, '\\$&' );
+ return value.replace( /[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&' );
}
-}( jQuery, mediaWiki ) );
+
+ function isLoaderVisible( $loader ) {
+ var viewportBottom, elementTop,
+ $window = $( window );
+
+ viewportBottom = ( window.innerHeight ? window.innerHeight : $window.height() ) +
+ $window.scrollTop();
+
+ elementTop = $loader.offset().top;
+
+ // Start already if user is reaching close to the bottom
+ return elementTop - viewportBottom < 200;
+ }
+
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.multiselectautocomplete.js b/www/wiki/extensions/Translate/resources/js/ext.translate.multiselectautocomplete.js
index beb715b0..6d6a8201 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.multiselectautocomplete.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.multiselectautocomplete.js
@@ -4,12 +4,12 @@
* Autocompleted values will be available in input filed as comma separated values.
* The values for autocompletion is from the language selector in this case.
* The input field is created in PHP code.
- * Credits: http://jqueryui.com/demos/autocomplete/#multiple
+ * Credits: https://jqueryui.com/autocomplete/#multiple
*/
-jQuery( function ( $ ) {
+$( function () {
'use strict';
- // jscs:disable disallowDanglingUnderscores
+ /* eslint-disable no-underscore-dangle */
$.widget( 'ui.multiselectautocomplete', {
options: {
@@ -37,18 +37,22 @@ jQuery( function ( $ ) {
matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), 'i' );
response( select.children( 'option' ).map( function () {
- var text = $( this ).text(),
+ var text = $( this ).html(),
value = $( this ).val(),
term = split( request.term ).pop();
if ( this.value && ( !request.term || matcher.test( text ) ) ) {
- return {
- label: text.replace(
+ if ( term.trim() !== '' ) {
+ text = text.replace(
new RegExp(
'(?![^&;]+;)(?!<[^<>]*)(' +
$.ui.autocomplete.escapeRegex( term ) +
')(?![^<>]*>)(?![^&;]+;)', 'gi'
- ), '<strong>$1</strong>' ),
+ ), '<strong>$1</strong>' );
+ }
+
+ return {
+ label: text,
value: value,
option: this
};
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.navitoggle.js b/www/wiki/extensions/Translate/resources/js/ext.translate.navitoggle.js
index 177b8e8b..dadaee7c 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.navitoggle.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.navitoggle.js
@@ -1,23 +1,19 @@
/*!
* Introduces a toggle icon than can be used to hide navigation menu in vector
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-( function ( mw, $ ) {
+( function () {
'use strict';
- var delay = ( function () {
- var timer = 0;
+ var $body = $( 'body' );
- return function ( callback, milliseconds ) {
- clearTimeout( timer );
- timer = setTimeout( callback, milliseconds );
- };
- }() );
+ if ( $body.width() < 1000 || mw.storage.get( 'translate-navitoggle' ) === '1' ) {
+ $body.addClass( 'tux-navi-collapsed' );
+ }
- $( document ).ready( function () {
- var $miniLogo, $toggle, rtl, delim,
- $body = $( 'body' );
+ $( function () {
+ var $miniLogo, $toggle, rtl, delim;
rtl = $body.hasClass( 'rtl' );
delim = rtl ?
@@ -34,14 +30,12 @@
.css( rtl ? 'right' : 'left', delim )
.click( function () {
$body.toggleClass( 'tux-navi-collapsed' );
- // Allow for animations etc to go
- delay( function () {
- $( window ).trigger( 'resize' );
- $( window ).trigger( 'scroll' );
- }, 250 );
+ mw.storage.set(
+ 'translate-navitoggle',
+ String( Number( $body.hasClass( 'tux-navi-collapsed' ) ) )
+ );
} );
- $( 'body' ).append( $miniLogo, $toggle );
-
+ $body.append( $miniLogo, $toggle );
} );
-}( mediaWiki, jQuery ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.pagemode.js b/www/wiki/extensions/Translate/resources/js/ext.translate.pagemode.js
index 7d564d0e..14d7a710 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.pagemode.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.pagemode.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
/**
* Page mode plugin
@@ -10,10 +10,16 @@
* Example usage:
*
* $( 'div.pagemode' ).pagemode( {
- * message: messageObject, // Mandatory message object
- * sourcelangcode: 'en', // Mandatory source language code
- * targetlangcode: 'hi' // Mandatory target language code
+ * message: messageObject, // Mandatory message object
+ * sourcelangcode: 'en', // Mandatory source language code
+ * targetlangcode: 'hi' // Mandatory target language code
* } );
+ *
+ * @param {Element} element
+ * @param {Object} options
+ * @param {Object} options.message
+ * @param {string} options.sourcelangcode Language code.
+ * @param {string} options.targetlangcode Language code.
*/
function PageMode( element, options ) {
this.$message = $( element );
@@ -31,6 +37,8 @@
init: function () {
var pagemode = this;
+ this.message.proofreadable = false;
+
this.render();
pagemode.$message.translateeditor( {
@@ -44,6 +52,10 @@
pagemode.$message.find( '.tux-pagemode-translation' )
.removeClass( 'highlight' );
pagemode.message.translation = translation;
+
+ pagemode.$message.find( '.tux-pagemode-status' )
+ .removeClass( 'translated fuzzy proofread untranslated' )
+ .addClass( pagemode.message.properties.status );
}
} );
@@ -87,9 +99,7 @@
.attr( 'title', mw.msg( 'translate-edit-title', this.message.key ) )
.addClass( 'tux-pagemode-edit' )
)
- )
-
- .addClass( this.message.properties.status );
+ ).addClass( this.message.properties.status );
},
/**
@@ -123,4 +133,4 @@
};
$.fn.pagemode.Constructor = PageMode;
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.pagetranslation.uls.js b/www/wiki/extensions/Translate/resources/js/ext.translate.pagetranslation.uls.js
index f34c2a12..00c67e9e 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.pagetranslation.uls.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.pagetranslation.uls.js
@@ -1,4 +1,4 @@
-( function ( mw ) {
+( function () {
'use strict';
mw.uls.changeLanguage = function ( language ) {
@@ -7,9 +7,9 @@
page = 'Special:MyLanguage/' + mw.config.get( 'wgPageName' );
if ( mw.config.get( 'wgTranslatePageTranslation' ) === 'translation' ) {
- page = page.replace( /\/[^\/]+$/, '' );
+ page = page.replace( /\/[^/]+$/, '' );
}
location.href = mw.util.getUrl( page, { setlang: language } );
};
-}( mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.parsers.js b/www/wiki/extensions/Translate/resources/js/ext.translate.parsers.js
index 788abe4f..afcf0c8e 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.parsers.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.parsers.js
@@ -3,10 +3,10 @@
* messages.
*
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
mw.translate = mw.translate || {};
@@ -78,4 +78,4 @@
}
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.proofread.js b/www/wiki/extensions/Translate/resources/js/ext.translate.proofread.js
index c615bf3c..8ab3bbe5 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.proofread.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.proofread.js
@@ -1,5 +1,4 @@
-/*global alert: false*/
-( function ( $, mw ) {
+( function () {
'use strict';
/**
@@ -11,10 +10,16 @@
* Example usage:
*
* $( 'div.proofread' ).proofread( {
- * message: messageObject, // Mandatory message object
- * sourcelangcode: 'en', // Mandatory source language code
- * targetlangcode: 'hi' // Mandatory target language code
+ * message: messageObject, // Mandatory message object
+ * sourcelangcode: 'en', // Mandatory source language code
+ * targetlangcode: 'hi' // Mandatory target language code
* } );
+ *
+ * @param {Element} element
+ * @param {Object} options
+ * @param {Object} options.message
+ * @param {string} options.sourcelangcode Language code.
+ * @param {string} options.targetlangcode Language code.
*/
function Proofread( element, options ) {
this.$message = $( element );
@@ -55,12 +60,10 @@
.text( translation );
proofread.message.translation = translation;
proofread.markSelfTranslation();
- // Update stats - to translated state from current state.
- $( '.tux-action-bar .tux-statsbar' )
- .trigger(
- 'change',
- [ 'translated', proofread.message.properties.status ]
- );
+
+ proofread.$message.find( '.tux-proofread-status' )
+ .removeClass( 'translated fuzzy proofread untranslated' )
+ .addClass( proofread.message.properties.status );
}
} );
@@ -73,15 +76,17 @@
translatedBySelf, proofreadBySelf;
// List of all reviewers
- reviewers = $( this.message.properties.reviewers );
+ reviewers = this.message.properties.reviewers || [];
// The id of the current user, converted to string as the are in reviewers
userId = String( mw.config.get( 'wgUserId' ) );
// List of all reviewers excluding the current user.
- otherReviewers = reviewers.not( [ userId ] );
+ otherReviewers = reviewers.filter( function ( element ) {
+ return element !== userId;
+ } );
/* Whether the current user if the last translator of this message.
* Accepting own translations is prohibited. */
translatedBySelf = ( this.message.properties[ 'last-translator-text' ] === mw.user.getName() );
- proofreadBySelf = $.inArray( userId, reviewers ) > -1;
+ proofreadBySelf = reviewers.indexOf( userId ) > -1;
sourceLangCode = this.options.sourcelangcode;
sourceLangDir = $.uls.data.getDir( sourceLangCode );
@@ -92,8 +97,7 @@
.attr( 'title', mw.msg( 'tux-proofread-action-tooltip' ) )
.addClass(
'tux-proofread-action ' + this.message.properties.status + ' ' + ( proofreadBySelf ? 'accepted' : '' )
- )
- .tipsy( { gravity: 's', delayIn: 1000, className: 'translate-tipsy' } );
+ );
$proofreadEdit = $( '<div>' )
.addClass( 'tux-proofread-edit' )
@@ -148,8 +152,7 @@
$proofreadEdit
)
)
- )
- .addClass( this.message.properties.status );
+ ).addClass( this.message.properties.status );
if ( !translatedBySelf && !proofreadBySelf ) {
// This will get removed later if any of various other reasons prevent it
@@ -186,7 +189,6 @@
.append( $( '<div>' )
.addClass( 'translated-by-self' )
.attr( 'title', mw.msg( 'tux-proofread-translated-by-self' ) )
- .tipsy( { gravity: 'e', className: 'translate-tipsy' } )
);
}
},
@@ -208,9 +210,10 @@
params.assert = 'user';
}
- // Change to csrf when support for MW 1.25 is dropped
- api.postWithToken( 'edit', params ).done( function () {
- $message.find( '.tux-proofread-action' ).addClass( 'accepted' );
+ api.postWithToken( 'csrf', params ).done( function () {
+ $message.find( '.tux-proofread-action' )
+ .removeClass( 'tux-warning' ) // in case, it failed previously
+ .addClass( 'accepted' );
counter = $message.find( '.tux-proofread-count' );
reviews = counter.data( 'reviewCount' );
@@ -222,13 +225,15 @@
[ 'proofread', message.properties.status ]
);
+ message.properties.status = 'proofread';
+
if ( mw.track ) {
mw.track( 'ext.translate.event.proofread', message );
}
} ).fail( function ( errorCode ) {
$message.find( '.tux-proofread-action' ).addClass( 'tux-warning' );
- // In MW 1.24 postWithToken returns token-missing instead of assertuserfailed
- if ( errorCode === 'assertuserfailed' || errorCode === 'token-missing' ) {
+ if ( errorCode === 'assertuserfailed' ) {
+ // eslint-disable-next-line no-alert
alert( mw.msg( 'tux-session-expired' ) );
}
} );
@@ -246,8 +251,8 @@
} );
this.$message.find( '.tux-proofread-edit' ).on( 'click', function () {
- // Make sure that the tipsy is hidden when going to the editor
- $( '.translate-tipsy' ).remove();
+ // Make sure that the tooltip is hidden when going to the editor
+ $( '.translate-tooltip' ).remove();
proofread.$message.data( 'translateeditor' ).show();
return false;
@@ -274,4 +279,4 @@
$.fn.proofread.Constructor = Proofread;
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.recentgroups.js b/www/wiki/extensions/Translate/resources/js/ext.translate.recentgroups.js
index 86fe0359..360739d1 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.recentgroups.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.recentgroups.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
mw.translate = mw.translate || {};
@@ -12,16 +12,12 @@
*/
mw.translate.recentGroups = {
- // TODO: Use mw.storage when MW >= 1.26
get: function () {
- try {
- return JSON.parse( localStorage.getItem( 'translate-recentgroups' ) ) || [];
- } catch ( e ) {}
- return [];
+ return JSON.parse( mw.storage.get( 'translate-recentgroups' ) ) || [];
},
append: function ( value ) {
- var items = this.get() || [];
+ var items = this.get();
items.unshift( value );
items = items.filter( function ( item, index, array ) {
@@ -29,11 +25,7 @@
} );
items = items.slice( 0, 5 );
- try {
- localStorage.setItem( 'translate-recentgroups', JSON.stringify( items ) );
- return true;
- } catch ( e ) {}
- return false;
+ mw.storage.set( 'translate-recentgroups', JSON.stringify( items ) );
}
};
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.selecttoinput.js b/www/wiki/extensions/Translate/resources/js/ext.translate.selecttoinput.js
index 52ded495..cb4a51bd 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.selecttoinput.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.selecttoinput.js
@@ -1,10 +1,9 @@
window.appendFromSelect = function ( selectid, targetid ) {
'use strict';
- var select, target, atxt;
-
- select = document.getElementById( selectid );
- target = document.getElementById( targetid );
+ var select = document.getElementById( selectid ),
+ target = document.getElementById( targetid ),
+ atxt;
if ( !target || !select ) {
return;
@@ -16,12 +15,13 @@ window.appendFromSelect = function ( selectid, targetid ) {
return;
}
- /* Ugly hack */
-
- target.value = target.value.replace( /default/, '' );
-
- if ( target.value.replace( /[\s\t\n]/ig, '' ) !== '' ) {
+ if ( target.value.replace( /\s+/g, '' ) !== '' ) {
atxt = ', ' + atxt;
}
- target.value += atxt;
+
+ atxt = target.value + atxt;
+
+ atxt = atxt.replace( /\bdefault\b[,\s]*/i, '' );
+
+ target.value = atxt;
};
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.aggregategroups.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.aggregategroups.js
index 77514538..ba9ba5f3 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.aggregategroups.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.aggregategroups.js
@@ -1,6 +1,4 @@
-/*global alert:false */
-
-( function ( $, mw ) {
+( function () {
'use strict';
function getApiParams( $target ) {
@@ -20,15 +18,15 @@
}
params = $.extend( getApiParams( $target ), {
- 'do': 'dissociate',
+ do: 'dissociate',
group: $target.data( 'groupid' )
} );
- // Change to csrf when support for MW 1.25 is dropped
- api.postWithToken( 'edit', params )
+ api.postWithToken( 'csrf', params )
.done( successFunction )
.fail( function ( code, data ) {
- window.alert( data.error && data.error.info );
+ // eslint-disable-next-line no-alert
+ alert( data.error && data.error.info );
} );
}
@@ -51,7 +49,7 @@
$a = $( '<a>', aAttr ).text( subgroupName );
spanAttr = {
- 'class': 'tp-aggregate-remove-button',
+ class: 'tp-aggregate-remove-button',
'data-groupid': subgroupId
};
@@ -73,17 +71,18 @@
if ( subgroupId ) {
params = $.extend( getApiParams( $target ), {
- 'do': 'associate',
+ do: 'associate',
group: subgroupId
} );
- // Change to csrf when support for MW 1.25 is dropped
- api.postWithToken( 'edit', params )
+ api.postWithToken( 'csrf', params )
.done( successFunction )
.fail( function ( code, data ) {
- window.alert( data.error && data.error.info );
+ // eslint-disable-next-line no-alert
+ alert( data.error && data.error.info );
} );
} else {
+ // eslint-disable-next-line no-alert
alert( mw.msg( 'tpt-invalid-group' ) );
}
}
@@ -99,16 +98,17 @@
// XXX: 'confirm' is nonstandard.
if ( $.isFunction( window.confirm ) &&
+ // eslint-disable-next-line no-alert
window.confirm( mw.msg( 'tpt-aggregategroup-remove-confirm' ) ) ) {
params = $.extend( getApiParams( $target ), {
- 'do': 'remove'
+ do: 'remove'
} );
- // Change to csrf when support for MW 1.25 is dropped
- api.postWithToken( 'edit', params )
+ api.postWithToken( 'csrf', params )
.done( successFunction )
.fail( function ( code, data ) {
- window.alert( data.error && data.error.info );
+ // eslint-disable-next-line no-alert
+ alert( data.error && data.error.info );
} );
}
}
@@ -116,7 +116,7 @@
function editGroup( event ) {
var $target = $( event.target ),
$parent = $target.closest( '.mw-tpa-group' ),
- aggregateGroupId = $parent.data( 'groupid' ),
+ aggregateGroupId = $parent.data( 'groupid' ),
$displayGroup = $parent.children( '.tp-display-group' ),
$editGroup = $parent.children( '.tp-edit-group' ),
successFunction,
@@ -139,18 +139,17 @@
params = {
action: 'aggregategroups',
- 'do': 'update',
+ do: 'update',
groupname: aggregateGroupName,
groupdescription: aggregateGroupDesc,
- aggregategroup: aggregateGroupId,
- format: 'json'
+ aggregategroup: aggregateGroupId
};
- // Change to csrf when support for MW 1.25 is dropped
- api.postWithToken( 'edit', params )
+ api.postWithToken( 'csrf', params )
.done( successFunction )
.fail( function ( code, data ) {
- window.alert( data.error.info );
+ // eslint-disable-next-line no-alert
+ alert( data.error.info );
} );
}
@@ -161,7 +160,7 @@
$parent.children( '.tp-edit-group' ).addClass( 'hidden' );
}
- $( document ).ready( function () {
+ $( function () {
var excludeFunction, autocompleteFunction, resp,
api = new mw.Api(),
exclude = [],
@@ -175,7 +174,6 @@
// Get list of subgroups using API
api.get( {
action: 'query',
- format: 'json',
meta: 'messagegroups',
mgformat: 'tree',
mgroot: 'all',
@@ -191,7 +189,7 @@
// Need to trim to remove the trailing whitespace
// Can't use innerText not supported by Firefox
var groupName = $( data ).text();
- groupName = $.trim( groupName );
+ groupName = groupName.trim();
exclude.push( groupName );
}
);
@@ -271,27 +269,25 @@
.append( $displayHeader )
.append( $( '<p>' ).addClass( 'tp-desc' ).text( aggregateGroupDesc ) );
- $saveButton = ( $( '<input>' )
+ $saveButton = $( '<input>' )
.attr( {
type: 'button',
- 'class': 'tp-aggregategroup-update'
+ class: 'tp-aggregategroup-update'
} )
- .val( mw.msg( 'tpt-aggregategroup-update' ) )
- );
- $cancelButton = ( $( '<input>' )
+ .val( mw.msg( 'tpt-aggregategroup-update' ) );
+ $cancelButton = $( '<input>' )
.attr( {
type: 'button',
- 'class': 'tp-aggregategroup-update-cancel'
+ class: 'tp-aggregategroup-update-cancel'
} )
- .val( mw.msg( 'tpt-aggregategroup-update-cancel' ) )
- );
+ .val( mw.msg( 'tpt-aggregategroup-update-cancel' ) );
$divEdit = $( '<div>' )
.addClass( 'tp-edit-group hidden' )
.append( $( '<label>' )
.text( mw.msg( 'tpt-aggregategroup-edit-name' ) ) )
.append( $( '<input>' )
.attr( {
- 'class': 'tp-aggregategroup-edit-name',
+ class: 'tp-aggregategroup-edit-name',
id: 'tp-agg-name'
} )
.val( aggregateGroupName )
@@ -300,7 +296,7 @@
.text( mw.msg( 'tpt-aggregategroup-edit-description' ) ) )
.append( $( '<input>' )
.attr( {
- 'class': 'tp-aggregategroup-edit-description',
+ class: 'tp-aggregategroup-edit-description',
id: 'tp-agg-desc'
} )
.val( aggregateGroupDesc )
@@ -316,7 +312,7 @@
$groupSelector = $( '<input>' ).attr( {
type: 'text',
- 'class': 'tp-group-input'
+ class: 'tp-group-input'
} );
$groupSelector.focus( excludeFunction );
$groupSelector.autocomplete( {
@@ -329,7 +325,7 @@
$addButton = $( '<input>' )
.attr( {
type: 'button',
- 'class': 'tp-aggregate-add-button',
+ class: 'tp-aggregate-add-button',
id: aggregateGroupId
} )
.val( mw.msg( 'tpt-aggregategroup-add' ) );
@@ -352,18 +348,17 @@
params = {
action: 'aggregategroups',
- 'do': 'add',
+ do: 'add',
groupname: aggregateGroupName,
- groupdescription: aggregateGroupDesc,
- format: 'json'
+ groupdescription: aggregateGroupDesc
};
- // Change to csrf when support for MW 1.25 is dropped
- api.postWithToken( 'edit', params )
+ api.postWithToken( 'csrf', params )
.done( successFunction )
.fail( function ( code, data ) {
- window.alert( data.error && data.error.info );
+ // eslint-disable-next-line no-alert
+ alert( data.error && data.error.info );
} );
} );
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.importtranslations.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.importtranslations.js
index d916fcc4..1ba24709 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.importtranslations.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.importtranslations.js
@@ -1,4 +1,4 @@
-( function ( $ ) {
+( function () {
'use strict';
function buttoner( $input ) {
@@ -9,7 +9,7 @@
}
}
- $( document ).ready( function ( ) {
+ $( function () {
var $input = $( '#mw-translate-up-local-input' );
$input.on( 'change', function () {
buttoner( $input );
@@ -17,4 +17,4 @@
buttoner( $input );
} );
-}( jQuery ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.languagestats.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.languagestats.js
index 690e0fff..979242d8 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.languagestats.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.languagestats.js
@@ -2,19 +2,28 @@
* Collapsing script for Special:LanguageStats in MediaWiki Extension:Translate
* @author Krinkle <krinklemail (at) gmail (dot) com>
* @author Niklas Laxström
- * @license GPL-2.0+, CC-BY-SA-3.0
+ * @license GPL-2.0-or-later, CC-BY-SA-3.0
*/
-( function ( mw, $ ) {
+( function () {
'use strict';
- $( document ).ready( function () {
+ /**
+ * 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 = $( '.mw-sp-translate-table' ),
+ $translateTable = $( '.statstable' ),
$metaRows = $( 'tr.AggregateMessageGroup', $translateTable );
// Quick return
- if ( !$metaRows.size() ) {
+ if ( !$metaRows.length ) {
return;
}
@@ -25,7 +34,7 @@
$children = $( 'tr[data-parentgroup="' + thisGroupId + '"]', $translateTable );
// Only do the collapse stuff if this Meta-group actually has children on this page
- if ( !$children.size() ) {
+ if ( !$children.length ) {
return;
}
@@ -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' ) );
}
@@ -72,7 +81,7 @@
.append( ']' )
.click( function ( e ) {
var $el = $( this ),
- $allToggles = !!$allTogglesCache ? $allTogglesCache : $( '.groupexpander', $translateTable );
+ $allToggles = $allTogglesCache || $( '.groupexpander', $translateTable );
// Switch the state and toggle the rows
// and update the local toggles too
@@ -88,47 +97,19 @@
$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 () {
- $( document ).ready( 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 seenHoverIn = false;
-
- $( '.mw-sp-translate-table.wikitable tr' ).hover( function () {
- seenHoverIn = true;
- $( '> td.hover-color', this )
- // 30% more brightness
- .css( 'background-color', function ( i, val ) {
- // @codingStandardsIgnoreStart Bug in CodeSniffer?
- return $.colorUtil.getColorBrightness( val, +0.3 );
- // codingStandardsIgnoreEnd
- } );
- }, function () {
- if ( !seenHoverIn ) {
- return;
- }
- $( '> td.hover-color', this )
- // 30% less brightness
- .css( 'background-color', function ( i, val ) {
- return $.colorUtil.getColorBrightness( val, -0.3 );
- } );
- } );
- } );
- } );
-
- $( document ).ready( function () {
+ $( function () {
var index,
sort = {},
re = /#sortable:(\d+)=(asc|desc)/,
@@ -145,9 +126,11 @@
var $table = $( this );
$table.find( '.headerSortDown, .headerSortUp' ).each( function () {
var index = $table.find( 'th' ).index( $( this ) ),
- dir = $( this ).hasClass( 'headerSortUp' ) ? 'desc' : 'asc';
+ dir = $( this ).hasClass( 'headerSortUp' ) ? 'asc' : 'desc';
window.location.hash = 'sortable:' + index + '=' + dir;
+
+ doZebra();
} );
} );
} );
-}( mediaWiki, jQuery ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js
index bf3f57f2..e574e9f2 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js
@@ -4,10 +4,10 @@
* @author Sucheta Ghoshal
* @author Amir E. Aharoni
* @author Pau Giner
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
var delay;
@@ -31,9 +31,7 @@
options = $.extend( {}, { action: 'translatesandbox' }, options );
- // Change to csrf when support for MW 1.25 is dropped
- return api.postWithToken( 'edit', options )
- .promise();
+ return api.postWithToken( 'csrf', options ).promise();
}
function removeSelectedRequests() {
@@ -70,12 +68,10 @@
* @param {Object} request The request data set from backend on request items
*/
function displayRequestDetails( request ) {
- var storage, reminders,
+ var storage,
$reminderStatus = $( '<span>' ).addClass( 'reminder-status' ),
$detailsPane = $( '.details.pane' );
- reminders = request.reminders ? request.reminders.split( '|' ) : [];
-
if ( request.reminderscount ) {
$reminderStatus.text( mw.msg(
'tsb-reminder-sent',
@@ -103,7 +99,7 @@
.text( mw.msg( 'tsb-reminder-sending' ) );
doApiAction( {
- 'do': 'remind',
+ do: 'remind',
userid: request.userid
} ).done( function () {
$reminderStatus.text( mw.msg( 'tsb-reminder-sent-new' ) );
@@ -121,14 +117,16 @@
.addClass( 'actions row' )
.append(
$( '<button>' )
- .addClass( 'accept primary green button' )
+ .addClass( 'accept mw-ui-button mw-ui-progressive' )
.text( mw.msg( 'tsb-accept-button-label' ) )
.on( 'click', function () {
+ mw.notify( mw.msg( 'tsb-accept-confirmation', 1 ) );
+
window.tsbUpdatingUsers = true;
doApiAction( {
userid: request.userid,
- 'do': 'promote'
+ do: 'promote'
} ).done( function () {
removeSelectedRequests();
@@ -136,14 +134,16 @@
} );
} ),
$( '<button>' )
- .addClass( 'reject destructive button' )
+ .addClass( 'reject mw-ui-button mw-ui-destructive' )
.text( mw.msg( 'tsb-reject-button-label' ) )
.on( 'click', function () {
+ mw.notify( mw.msg( 'tsb-reject-confirmation', 1 ) );
+
window.tsbUpdatingUsers = true;
doApiAction( {
userid: request.userid,
- 'do': 'delete'
+ do: 'delete'
} ).done( function () {
removeSelectedRequests();
@@ -218,7 +218,7 @@
.text( mw.msg( 'tsb-translations-current' ) )
.addClass( 'four columns' )
)
- );
+ );
translations.translationstash.translations.sort( sortTranslationsByLanguage );
$.each( translations.translationstash.translations, function ( index, translation ) {
@@ -270,7 +270,7 @@
return $( checkedBox ).parents( 'div.request' ).data( 'data' ).userid;
} );
- selectedUserIDs = selectedUserIDs.toArray().join( '|' );
+ selectedUserIDs = selectedUserIDs.toArray();
$( '.details.pane' ).empty().append(
$( '<div>' )
@@ -279,14 +279,16 @@
.addClass( 'actions row' )
.append(
$( '<button>' )
- .addClass( 'accept-all primary green button' )
+ .addClass( 'accept-all mw-ui-button mw-ui-progressive' )
.text( mw.msg( 'tsb-accept-all-button-label' ) )
.on( 'click', function () {
+ mw.notify( mw.msg( 'tsb-accept-confirmation', selectedUserIDs.length ) );
+
window.tsbUpdatingUsers = true;
doApiAction( {
userid: selectedUserIDs,
- 'do': 'promote'
+ do: 'promote'
} ).done( function () {
removeSelectedRequests();
@@ -294,14 +296,16 @@
} );
} ),
$( '<button>' )
- .addClass( 'reject-all destructive button' )
+ .addClass( 'reject-all mw-ui-button mw-ui-destructive' )
.text( mw.msg( 'tsb-reject-all-button-label' ) )
.on( 'click', function () {
+ mw.notify( mw.msg( 'tsb-reject-confirmation', selectedUserIDs.length ) );
+
window.tsbUpdatingUsers = true;
doApiAction( {
userid: selectedUserIDs,
- 'do': 'delete'
+ do: 'delete'
} ).done( function () {
removeSelectedRequests();
@@ -582,6 +586,7 @@
$clearButton.removeClass( 'hide' );
indicateOlderRequests();
},
+ ulsPurpose: 'translate-special-managetranslatorsandbox',
quickList: mw.uls.getFrequentLanguageList
} );
@@ -631,7 +636,7 @@
$.fn.languageFilter = function () {
return this.each( function () {
- if ( !$.data( this, 'LanguageFilter' ) ) {
+ if ( !$.data( this, 'LanguageFilter' ) ) {
$.data( this, 'LanguageFilter', new LanguageFilter( this ) );
}
} );
@@ -646,7 +651,7 @@
}
TranslatorSearch.prototype.init = function () {
- this.$search.on( 'search keyup', $.proxy( this.keyup, this ) );
+ this.$search.on( 'search keyup', this.keyup.bind( this ) );
};
TranslatorSearch.prototype.keyup = function () {
@@ -655,7 +660,7 @@
// Respond to the keypress events after a small timeout to avoid freeze when typed fast
delay( function () {
- query = $.trim( translatorSearch.$search.val() ).toLowerCase().trim();
+ query = translatorSearch.$search.val().trim().toLowerCase();
translatorSearch.filter( query );
}, 300 );
};
@@ -703,7 +708,7 @@
$.fn.translatorSearch = function () {
return this.each( function () {
- if ( !$.data( this, 'TranslatorSearch' ) ) {
+ if ( !$.data( this, 'TranslatorSearch' ) ) {
$.data( this, 'TranslatorSearch', new TranslatorSearch( this ) );
}
} );
@@ -718,7 +723,7 @@
};
}() );
- $( document ).ready( function () {
+ $( function () {
var $requestCheckboxes = $( '.request-selector' ),
$selectAll = $( '.request-selector-all' ),
$requestRows = $( '.requests .request' );
@@ -737,9 +742,9 @@
$requestCheckboxes.on( 'click change', requestSelectHandler );
// Handle clicks on request rows.
- $requestRows.on( 'click', onSelectRequest );
+ $requestRows.on( 'click', onSelectRequest );
- $( '.older-requests-indicator' ).on( 'click', oldRequestSelector );
+ $( '.older-requests-indicator' ).on( 'click', oldRequestSelector );
if ( $requestRows.length ) {
$requestRows.first().click();
@@ -747,4 +752,4 @@
updateRequestCount();
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.operatorsuggest.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.operatorsuggest.js
index 362a259e..1115824f 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.operatorsuggest.js
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagemigration.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagemigration.js
index b319180f..3713ac56 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagemigration.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagemigration.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
var noOfSourceUnits, noOfTranslationUnits,
pageName = '',
@@ -10,6 +10,8 @@
* and identifiers from left hand side blocks. Create pages only if
* content is not empty.
*
+ * @param {number} i Array index to sourceUnits.
+ * @param {string} content
* @return {Function} Returns a function which returns a jQuery.Promise
*/
function createTranslationPage( i, content ) {
@@ -22,10 +24,8 @@
title = 'Translations:' + pageName + '/' + identifier + '/' + langCode;
summary = $( '#pm-summary' ).val();
- // Change to csrf when support for MW 1.25 is dropped
- return api.postWithToken( 'edit', {
+ return api.postWithToken( 'csrf', {
action: 'edit',
- format: 'json',
watchlist: 'nochange',
title: title,
text: content,
@@ -49,7 +49,6 @@
return api.get( {
action: 'query',
prop: 'revisions',
- format: 'json',
rvprop: 'content',
rvstart: fuzzyTimestamp,
titles: pageTitle
@@ -90,7 +89,6 @@
return api.get( {
action: 'query',
prop: 'revisions',
- format: 'json',
rvprop: 'timestamp',
rvuser: 'FuzzyBot',
rvdir: 'newer',
@@ -137,7 +135,6 @@
return api.get( {
action: 'query',
list: 'messagecollection',
- format: 'json',
mcgroup: 'page-' + pageName,
mclanguage: 'en',
mcprop: 'definition'
@@ -214,14 +211,16 @@
sourceUnit = $( '<textarea>' ).addClass( 'mw-tpm-sp-unit__source five columns' )
.prop( 'readonly', true ).attr( 'tabindex', '-1' ).val( sourceText );
targetUnit = $( '<textarea>' ).addClass( 'mw-tpm-sp-unit__target five columns' )
- .val( targetText );
+ .val( targetText ).prop( 'dir', $.uls.data.getDir( langCode ) );
actionUnit = $( '<div>' ).addClass( 'mw-tpm-sp-unit__actions two columns' );
- actionUnit.append( $( '<span>' ).addClass( 'mw-tpm-sp-action mw-tpm-sp-action--add' )
+ actionUnit.append(
+ $( '<span>' ).addClass( 'mw-tpm-sp-action mw-tpm-sp-action--add' )
.attr( 'title', mw.msg( 'pm-add-icon-hover-text' ) ),
$( '<span>' ).addClass( 'mw-tpm-sp-action mw-tpm-sp-action--swap' )
.attr( 'title', mw.msg( 'pm-swap-icon-hover-text' ) ),
$( '<span>' ).addClass( 'mw-tpm-sp-action mw-tpm-sp-action--delete' )
- .attr( 'title', mw.msg( 'pm-delete-icon-hover-text' ) ) );
+ .attr( 'title', mw.msg( 'pm-delete-icon-hover-text' ) )
+ );
newUnit.append( sourceUnit, targetUnit, actionUnit );
return newUnit;
}
@@ -258,11 +257,11 @@
* Split headers from remaining text in each translation unit if present.
*
* @param {Array} translations Array of initial units obtained on splitting
- * @return {string[]} translationUnits Array having the headers split into new unit
+ * @return {string[]} Array having the headers split into new unit
*/
function splitHeaders( translations ) {
return $.map( translations, function ( elem ) {
- // Check http://regex101.com/r/oT7fZ2 for details
+ // Check https://regex101.com/r/oT7fZ2 for details
return elem.match( /(^==.+$|(?:(?!^==).+\n?)+)/gm );
} );
}
@@ -271,7 +270,8 @@
* Get the index of next translation unit containing h2 header.
*
* @param {number} startIndex Index to start the scan from
- * @return {number} i Index of the next unit found, -1 if not
+ * @param {string[]} translationUnits Segmented units.
+ * @return {number} Index of the next unit found, -1 if not.
*/
function getHeaderUnit( startIndex, translationUnits ) {
var i, regex;
@@ -288,6 +288,10 @@
* Align h2 headers in the order they appear.
* Assumption: The source headers and translation headers appear in
* the same order.
+ *
+ * @param {Object[]} sourceUnits
+ * @param {string[]} translationUnits
+ * @return {string[]}
*/
function alignHeaders( sourceUnits, translationUnits ) {
var i, regex, tIndex = 0,
@@ -345,9 +349,10 @@
return;
} else {
$( 'input' ).prop( 'disabled', true );
+ $( '.mw-tpm-sp-instructions' ).hide( 'fast' );
for ( i = 0; i < noOfSourceUnits; i++ ) {
content = $( '.mw-tpm-sp-unit__target' ).eq( i ).val();
- content = $.trim( content );
+ content = content.trim();
if ( content !== '' ) {
list.push( createTranslationPage( i, content ) );
}
@@ -356,6 +361,10 @@
$.ajaxDispatcher( list, 1 ).done( function () {
$( '#action-import' ).removeClass( 'hide' );
$( 'input' ).prop( 'disabled', false );
+ $( '.mw-tpm-sp-instructions' ).text( mw.msg( 'pm-on-save-message-text' ) ).show( 'fast' );
+ } ).fail( function ( errmsg ) {
+ $( 'input' ).prop( 'disabled', false );
+ $( '.mw-tpm-sp-error__message' ).text( mw.msg( errmsg ) ).show( 'fast' );
} );
}
}
@@ -365,6 +374,7 @@
*/
function cancelHandler() {
$( '.mw-tpm-sp-error__message' ).hide( 'fast' );
+ $( '.mw-tpm-sp-instructions' ).hide( 'fast' );
$( '#action-save, #action-cancel' ).addClass( 'hide' );
$( '#action-import' ).removeClass( 'hide' );
$( '.mw-tpm-sp-unit-listing' ).html( '' );
@@ -373,6 +383,8 @@
/**
* Handler for add new unit icon ('+') click event. Adds a translation unit
* below the current unit.
+ *
+ * @param {jQuery.Event} event
*/
function addHandler( event ) {
var nextRow, text, newUnit, targetUnit;
@@ -393,6 +405,8 @@
/**
* Handler for delete icon ('-') click event. Deletes the unit and shifts
* the units up by one.
+ *
+ * @param {jQuery.Event} event
*/
function deleteHandler( event ) {
var sourceText, rowUnit;
@@ -410,6 +424,8 @@
/**
* Handler for swap icon click event. Swaps the text in the current unit
* with the text in the unit below.
+ *
+ * @param {jQuery.Event} event
*/
function swapHandler( event ) {
var rowUnit, tempText, nextVal;
@@ -424,21 +440,23 @@
* Handler for 'Import' button click event. Imports source and translation
* units and displays them.
*
- * @param {jQuery.event} e
+ * @param {jQuery.Event} e
*/
function importHandler( e ) {
var pageTitle, slashPos, titleObj,
- errorBox = $( '.mw-tpm-sp-error__message' );
+ errorBox = $( '.mw-tpm-sp-error__message' ),
+ messageBox = $( '.mw-tpm-sp-instructions' );
e.preventDefault();
- pageTitle = $.trim( $( '#title' ).val() );
+ pageTitle = $( '#title' ).val().trim();
if ( pageTitle === '' ) {
errorBox.text( mw.msg( 'pm-pagetitle-missing' ) ).show( 'fast' );
return;
}
titleObj = mw.Title.newFromText( pageTitle );
+ messageBox.hide( 'fast' );
if ( titleObj === null ) {
errorBox.text( mw.msg( 'pm-pagetitle-invalid' ) ).show( 'fast' );
return;
@@ -464,16 +482,17 @@
$.when( getSourceUnits( pageName ), getFuzzyTimestamp( pageTitle ) )
.then( function ( sourceUnits, fuzzyTimestamp ) {
- noOfSourceUnits = sourceUnits.length;
- splitTranslationPage( fuzzyTimestamp, pageTitle ).done( function ( translations ) {
- var translationUnits = splitHeaders( translations );
- translationUnits = alignHeaders( sourceUnits, translationUnits );
- noOfTranslationUnits = translationUnits.length;
- displayUnits( sourceUnits, translationUnits );
- $( '#action-save, #action-cancel' ).removeClass( 'hide' );
- $( '#action-import' ).addClass( 'hide' );
+ noOfSourceUnits = sourceUnits.length;
+ splitTranslationPage( fuzzyTimestamp, pageTitle ).done( function ( translations ) {
+ var translationUnits = splitHeaders( translations );
+ translationUnits = alignHeaders( sourceUnits, translationUnits );
+ noOfTranslationUnits = translationUnits.length;
+ displayUnits( sourceUnits, translationUnits );
+ $( '#action-save, #action-cancel' ).removeClass( 'hide' );
+ $( '#action-import' ).addClass( 'hide' );
+ messageBox.text( mw.msg( 'pm-on-import-message-text' ) ).show( 'fast' );
+ } );
} );
- } );
}
/**
@@ -491,7 +510,7 @@
$listing.on( 'click', '.mw-tpm-sp-action--add', addHandler );
}
- $( document ).ready( listen );
+ $( listen );
mw.translate = mw.translate || {};
mw.translate = $.extend( mw.translate, {
@@ -501,4 +520,4 @@
alignHeaders: alignHeaders
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagepreparation.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagepreparation.js
index c0305fa8..03c4385d 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagepreparation.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagepreparation.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
/**
@@ -11,10 +11,8 @@
function savePage( pageName, pageContent ) {
var api = new mw.Api();
- // Change to csrf when support for MW 1.25 is dropped
- return api.postWithToken( 'edit', {
+ return api.postWithToken( 'csrf', {
action: 'edit',
- format: 'json',
title: pageName,
text: pageContent,
summary: $( '#pp-summary' ).val()
@@ -36,7 +34,6 @@
return api.post( {
action: 'query',
prop: 'revisions',
- format: 'json',
rvprop: 'content',
rvlimit: '1',
titles: pageName,
@@ -94,11 +91,11 @@
aliases.push( 'category' );
for ( i = 0; i < aliases.length; i++ ) {
- aliases[ i ] = $.escapeRE( aliases[ i ] );
+ aliases[ i ] = mw.RegExp.escape( aliases[ i ] );
}
aliasList = aliases.join( '|' );
- // Regex: http://regex101.com/r/sJ3gZ4/2
+ // Regex: https://regex101.com/r/sJ3gZ4/2
categoryRegex = new RegExp( '\\[\\[((' + aliasList + ')' +
':[^\\|]+)(\\|[^\\|]*?)?\\]\\]', 'gi' );
pageContent = pageContent.replace( categoryRegex, '\n</translate>\n' +
@@ -134,6 +131,45 @@
}
/**
+ * Add an anchor to a section header with the given headerText
+ *
+ * @param {string} headerText
+ * @param {string} pageContent
+ * @return {string}
+ */
+ function addAnchor( headerText, pageContent ) {
+ var headerSearchRegex, anchorID, replaceAnchorRegex,
+ spanSearchRegex;
+
+ anchorID = headerText.replace( ' ', '-' ).toLowerCase();
+
+ headerText = mw.RegExp.escape( headerText );
+ // Search for the header having text as headerText
+ // Regex: https://regex101.com/r/fD6iL1
+ headerSearchRegex = new RegExp( '(==+[ ]*' + headerText + '[ ]*==+)', 'gi' );
+ // This is to ensure the tags and the anchor are added only once
+
+ if ( pageContent.indexOf( '<span id="' + mw.html.escape( anchorID ) + '"' ) === -1 ) {
+ pageContent = pageContent.replace( headerSearchRegex, '</translate>\n' +
+ '<span id="' + mw.html.escape( anchorID ) + '"></span>\n<translate>\n$1' );
+ }
+
+ // This is to add back the tags which were removed in cleanupTags()
+ if ( pageContent.indexOf( '</translate>\n<span id="' + anchorID + '"' ) === -1 ) {
+ spanSearchRegex = new RegExp( '(<span id="' + mw.RegExp.escape( anchorID ) + '"></span>)', 'gi' );
+ pageContent = pageContent.replace( spanSearchRegex, '\n</translate>\n$1\n</translate>\n' );
+ }
+
+ // Replace the link text with the anchorID defined above
+ // Regex: https://regex101.com/r/kB5bK3
+ replaceAnchorRegex = new RegExp( '(\\[\\[#)' + headerText + '(.*\\]\\])', 'gi' );
+ pageContent = pageContent.replace( replaceAnchorRegex, '$1' +
+ anchorID.replace( '$', '$$$' ) + '$2' );
+
+ return pageContent;
+ }
+
+ /**
* Convert all the links into two-party form and add the 'Special:MyLanguage/' prefix
* to links in valid namespaces for the wiki. For example, [[Example]] would be converted
* to [[Special:MyLanguage/Example|Example]].
@@ -142,22 +178,33 @@
* @return {string}
*/
function fixInternalLinks( pageContent ) {
- var normalizeRegex, linkPrefixRegex,
- namespaces, nsString;
+
+ var normalizeRegex, linkPrefixRegex, sectionLinksRegex,
+ match, searchText, namespaces, nsString;
+ searchText = pageContent;
normalizeRegex = new RegExp( /\[\[(?!Category)([^|]*?)\]\]/gi );
// First convert all links into two-party form. If a link is not having a pipe,
// add a pipe and duplicate the link text
- // Regex : http://regex101.com/r/pO9nN2
+ // Regex: https://regex101.com/r/pO9nN2
pageContent = pageContent.replace( normalizeRegex, '[[$1|$1]]' );
namespaces = getNamespaces();
nsString = namespaces.join( '|' );
+ // Finds all the links to sections on the same page.
+ // Regex: https://regex101.com/r/cX6jT3
+ sectionLinksRegex = new RegExp( /\[\[#(.*?)(\|(.*?))?\]\]/gi );
+ match = sectionLinksRegex.exec( searchText );
+ while ( match !== null ) {
+ pageContent = addAnchor( match[ 1 ], pageContent );
+ match = sectionLinksRegex.exec( searchText );
+ }
+
linkPrefixRegex = new RegExp( '\\[\\[((?:(?:special(?!:MyLanguage\\b)|' + nsString +
'):)?[^:]*?)\\]\\]', 'gi' );
// Add the 'Special:MyLanguage/' prefix for all internal links of valid namespaces and
// mainspace.
- // Regex : http://regex101.com/r/zZ9jH9
+ // Regex: https://regex101.com/r/zZ9jH9
pageContent = pageContent.replace( linkPrefixRegex, '[[Special:MyLanguage/$1]]' );
return pageContent;
}
@@ -204,7 +251,7 @@
aliases.push( 'file' );
for ( i = 0; i < aliases.length; i++ ) {
- aliases[ i ] = $.escapeRE( aliases[ i ] );
+ aliases[ i ] = mw.RegExp.escape( aliases[ i ] );
}
aliasList = aliases.join( '|' );
@@ -231,7 +278,7 @@
*/
function doTemplates( pageContent ) {
var templateRegex;
- // Regex: http://regex101.com/r/wA3iX0
+ // Regex: https://regex101.com/r/wA3iX0
templateRegex = new RegExp( /^({{[\s\S]*?}})/gm );
pageContent = pageContent.replace( templateRegex, '</translate>\n$1\n<translate>' );
@@ -249,6 +296,8 @@
pageContent = pageContent.replace( /\n\n+/gi, '\n\n' );
// Removes redundant <translate> tags
pageContent = pageContent.replace( /\n<translate>(\n*?)<\/translate>/gi, '' );
+ // Removes the Special:MyLanguage/ prefix for section links
+ pageContent = pageContent.replace( /Special:MyLanguage\/#/gi, '#' );
return pageContent;
}
@@ -267,7 +316,6 @@
return api.get( {
action: 'query',
prop: 'revisions',
- format: 'json',
rvprop: 'content',
rvlimit: '1',
titles: pageName
@@ -298,20 +346,17 @@
}
// Remove all what has been already handled somewhere else
- namespaces.splice( $.inArray( '', namespaces ), 1 );
- namespaces.splice( $.inArray( 'category', namespaces ), 1 );
- namespaces.splice( $.inArray( 'category_talk', namespaces ), 1 );
- namespaces.splice( $.inArray( 'special', namespaces ), 1 );
- namespaces.splice( $.inArray( 'file', namespaces ), 1 );
- namespaces.splice( $.inArray( 'file_talk', namespaces ), 1 );
+ [ '', 'category', 'category_talk', 'special', 'file', 'file_talk' ].forEach( function ( ns ) {
+ namespaces.splice( namespaces.indexOf( ns ), 1 );
+ } );
for ( i = 0; i < namespaces.length; i++ ) {
- namespaces[ i ] = $.escapeRE( namespaces[ i ] );
+ namespaces[ i ] = mw.RegExp.escape( namespaces[ i ] );
}
return namespaces;
}
- $( document ).ready( function () {
+ $( function () {
var pageContent,
$input = $( '#page' );
@@ -320,14 +365,16 @@
} );
$( '#action-save' ).click( function () {
- var serverName, pageName,
+ var pageName,
pageUrl = '';
- pageName = $.trim( $input.val() );
- serverName = mw.config.get( 'wgServerName' );
+ pageName = $input.val().trim();
savePage( pageName, pageContent ).done( function () {
pageUrl = mw.Title.newFromText( pageName ).getUrl( { action: 'edit' } );
- $( '.messageDiv' ).html( mw.message( 'pp-save-message', pageUrl ).parse() ).show();
+ $( '.messageDiv' )
+ .empty()
+ .append( mw.message( 'pp-save-message', pageUrl ).parseDom() )
+ .show();
$( '.divDiff' ).hide( 'fast' );
$( '#action-prepare' ).show();
$input.val( '' );
@@ -339,37 +386,36 @@
$( '#action-prepare' ).click( function () {
var pageName, messageDiv = $( '.messageDiv' );
- pageName = $.trim( $input.val() );
+ pageName = $input.val().trim();
messageDiv.hide();
if ( pageName === '' ) {
- window.alert( mw.msg( 'pp-pagename-missing' ) );
+ // eslint-disable-next-line no-alert
+ alert( mw.msg( 'pp-pagename-missing' ) );
return;
}
$.when( getPageContent( pageName ) ).done( function ( content ) {
pageContent = content;
- pageContent = $.trim( pageContent );
+ pageContent = pageContent.trim();
pageContent = cleanupTags( pageContent );
pageContent = addLanguageBar( pageContent );
pageContent = addTranslateTags( pageContent );
pageContent = addNewLines( pageContent );
pageContent = fixInternalLinks( pageContent );
pageContent = doTemplates( pageContent );
- doFiles( pageContent )
- .then( doCategories )
- .done( function ( pageContent ) {
+ doFiles( pageContent ).then( doCategories ).done( function ( pageContent ) {
pageContent = postPreparationCleanup( pageContent );
- pageContent = $.trim( pageContent );
+ pageContent = pageContent.trim();
getDiff( pageName, pageContent ).done( function ( diff ) {
$( '.diff tbody' ).append( diff );
$( '.divDiff' ).show( 'fast' );
if ( diff !== '' ) {
- messageDiv.html( mw.msg( 'pp-prepare-message' ) ).show();
+ messageDiv.text( mw.msg( 'pp-prepare-message' ) ).show();
$( '#action-prepare' ).hide();
$( '#action-save' ).show();
$( '#action-cancel' ).show();
} else {
- messageDiv.html( mw.msg( 'pp-already-prepared-message' ) ).show();
+ messageDiv.text( mw.msg( 'pp-already-prepared-message' ) ).show();
}
} );
} );
@@ -377,4 +423,4 @@
} );
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagetranslation.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagetranslation.js
index 007d2da1..67610f52 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagetranslation.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.pagetranslation.js
@@ -1,13 +1,13 @@
/*!
* @author Santhosh Thottingal
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
- $( document ).ready( function () {
+ $( function () {
$( '#wpUserLanguage' ).multiselectautocomplete( { inputbox: '#tpt-prioritylangs' } );
$( '#mw-content-text' ).on( 'click', '.mw-translate-jspost', function ( e ) {
@@ -23,4 +23,4 @@
e.preventDefault();
} );
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.searchtranslations.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.searchtranslations.js
index 560e2499..266d37c4 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.searchtranslations.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.searchtranslations.js
@@ -1,36 +1,18 @@
-( function ( $, mw ) {
+( function () {
'use strict';
var resultGroups;
- $( document ).ready( function () {
- var $messages = $( '.tux-message' );
-
+ $( function () {
resultGroups = $( '.facet.groups' ).data( 'facets' );
- $messages.each( function () {
- var $this = $( this );
-
- $this.translateeditor( {
- message: {
- title: $this.data( 'title' ),
- definition: $this.data( 'definition' ),
- translation: $this.data( 'translation' ),
- group: $this.data( 'group' )
- }
- } );
- } );
-
- $messages.last().addClass( 'last-message' );
-
$( '.tux-searchpage .button' ).click( function () {
var query = $( '.tux-searchpage .searchinputbox' ).val(),
result = lexOperators( query ),
$form = $( '.tux-searchpage form[name=searchform]' );
$.each( result, function ( index, value ) {
- var $input = $( '<input>' )
- .prop( 'type', 'hidden' ),
+ var $input = $( '<input>' ).prop( 'type', 'hidden' ),
$elem = $form.find( 'input[name=' + index + ']' );
if ( $elem.length ) {
@@ -82,11 +64,9 @@
result,
i,
selectedClasss = '',
- docLanguageCode,
languageCode,
quickLanguageList = [],
unique = [],
- regions,
$ulsTrigger,
uri;
@@ -104,30 +84,20 @@
}
resultCount = Object.keys( languages ).length;
-
- // If a documentation pseudo-language is defined,
- // add it to the language selector
- docLanguageCode = mw.config.get( 'wgTranslateDocumentationLanguageCode' );
- if ( languages[ docLanguageCode ] ) {
- mw.translate.addDocumentationLanguage();
- mw.config.get( 'wgULSLanguages' )[ docLanguageCode ] = mw.msg( 'translate-documentation-language' );
- regions = [ 'WW', 'SP', 'AM', 'EU', 'ME', 'AF', 'AS', 'PA' ];
- }
-
quickLanguageList = quickLanguageList.concat( mw.uls.getFrequentLanguageList() )
.concat( Object.keys( languages ) );
// Remove duplicates from the language list
- $.each( quickLanguageList, function ( i, v ) {
- result = languages[ v ];
- if ( result && $.inArray( v, unique ) === -1 ) {
- unique.push( v );
+ quickLanguageList.forEach( function ( lang ) {
+ result = languages[ lang ];
+ if ( result && unique.indexOf( lang ) === -1 ) {
+ unique.push( lang );
}
} );
- if ( currentLanguage && $.inArray( currentLanguage, quickLanguageList ) >= 0 ) {
+ if ( currentLanguage && quickLanguageList.indexOf( currentLanguage ) >= 0 ) {
quickLanguageList = unique.splice( 0, 5 );
- if ( $.inArray( currentLanguage, quickLanguageList ) === -1 ) {
+ if ( quickLanguageList.indexOf( currentLanguage ) === -1 ) {
quickLanguageList = quickLanguageList.concat( currentLanguage );
}
} else {
@@ -151,12 +121,13 @@
$languages.append( $( '<div>' )
.addClass( 'row facet-item' )
- .append( $( '<span>' )
- .addClass( 'facet-name ' + selectedClasss )
- .append( $( '<a>' )
- .attr( 'href', result.url )
- .text( getLanguageLabel( languageCode ) )
- ),
+ .append(
+ $( '<span>' )
+ .addClass( 'facet-name ' + selectedClasss )
+ .append( $( '<a>' )
+ .attr( 'href', result.url )
+ .text( getLanguageLabel( languageCode ) )
+ ),
$( '<span>' )
.addClass( 'facet-count' )
.text( result.count )
@@ -165,9 +136,11 @@
}
$.each( Object.keys( languages ), function ( index, languageCode ) {
- ulslanguages[ languageCode ] = mw.config.get( 'wgULSLanguages' )[ languageCode ];
+ ulslanguages[ languageCode ] = mw.config.get( 'wgTranslateLanguages' )[ languageCode ];
} );
+ mw.translate.addExtraLanguagesToLanguageData( ulslanguages, [ 'SP' ] );
+
if ( resultCount > 6 ) {
$ulsTrigger = $( '<a>' )
.text( '...' )
@@ -183,8 +156,9 @@
},
compact: true,
languages: ulslanguages,
+ ulsPurpose: 'translate-special-searchtranslations',
top: $languages.offset().top,
- showRegions: regions
+ showRegions: [ 'SP' ].concat( $.fn.lcd.defaults.showRegions )
} );
}
}
@@ -228,7 +202,7 @@
}
grouppath = getParameterByName( 'grouppath' ).split( '|' )[ 0 ];
if ( currentGroup && resultGroups[ grouppath ] &&
- $.inArray( grouppath, groupList ) < 0 &&
+ groupList.indexOf( grouppath ) < 0 &&
level === 0
) {
// Make sure current selected group is displayed always.
@@ -246,7 +220,7 @@
if ( parentGrouppath !== undefined ) {
grouppath = parentGrouppath + '|' + groupId;
} else {
- grouppath = groupId;
+ grouppath = groupId;
}
uri.extend( { group: groupId, grouppath: grouppath } );
@@ -260,13 +234,14 @@
}
$groupRow = $( '<div>' )
- .addClass( 'row facet-item ' + ' facet-level-' + level )
- .append( $( '<span>' )
- .addClass( 'facet-name ' + selectedClass )
- .append( $( '<a>' )
- .attr( 'href', uri.toString() )
- .text( group.label )
- ),
+ .addClass( 'row facet-item facet-level-' + level )
+ .append(
+ $( '<span>' )
+ .addClass( 'facet-name ' + selectedClass )
+ .append( $( '<a>' )
+ .attr( 'href', uri.toString() )
+ .text( group.label )
+ ),
$( '<span>' )
.addClass( 'facet-count' )
.text( mw.language.convertNumber( group.count ) )
@@ -280,9 +255,10 @@
if ( resultCount > maxListSize && resultCount - groupList.length > 0 && level === 0 ) {
$grouSelectorTrigger = $( '<div>' )
.addClass( 'rowfacet-item ' )
- .append( $( '<a>' )
- .text( '...' )
- .addClass( 'translate-search-more-groups' ),
+ .append(
+ $( '<a>' )
+ .text( '...' )
+ .addClass( 'translate-search-more-groups' ),
$( '<span>' )
.addClass( 'translate-search-more-groups-info' )
.text( mw.msg( 'translate-search-more-groups-info',
@@ -405,16 +381,17 @@
function addToSelectedBox( label, url ) {
$( '.tux-searchpage .tux-selectedbox' ).append( $( '<div>' )
.addClass( 'row facet-item' )
- .append( $( '<span>' )
- .addClass( 'facet-name selected' )
- .append( $( '<a>' )
- .attr( 'href', url )
- .text( label )
- ),
+ .append(
+ $( '<span>' )
+ .addClass( 'facet-name selected' )
+ .append( $( '<a>' )
+ .attr( 'href', url )
+ .text( label )
+ ),
$( '<span>' )
.addClass( 'facet-count' )
.text( 'X' )
)
);
}
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.translate.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.translate.js
index 58438261..103cfb8c 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.translate.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.translate.js
@@ -1,9 +1,10 @@
-( function ( $, mw ) {
+( function () {
'use strict';
var state = {
group: null,
- language: null
+ language: null,
+ messageList: null
};
mw.translate = mw.translate || {};
@@ -26,88 +27,62 @@
state.group = group.id;
changes = {
- group: group.id
+ group: group.id,
+ showMessage: null
+
};
mw.translate.changeUrl( changes );
mw.translate.updateTabLinks( changes );
- mw.translate.loadMessages( changes );
+ $( '.tux-editor-header .group-warning' ).empty();
+ state.messageList.changeSettings( changes );
updateGroupInformation( state );
},
changeLanguage: function ( language ) {
- var changes, targetDir, targetLangAttrib,
- userLanguageCode = mw.config.get( 'wgUserLanguage' );
-
- if ( !checkDirty() ) {
- return;
- }
-
- state.language = language;
-
- changes = {
- language: language
+ var changes = {
+ language: language,
+ showMessage: null
};
- if ( language === mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ) {
- targetLangAttrib = userLanguageCode;
- targetDir = $.uls.data.getDir( userLanguageCode );
- } else {
- targetLangAttrib = language;
- targetDir = $.uls.data.getDir( language );
- }
-
- // Changes to attributes must also be reflected
- // when the element is created on the server side
- $( '.ext-translate-language-selector > .uls' )
- .text( $.uls.data.getAutonym( language ) )
- .attr( {
- lang: targetLangAttrib,
- dir: targetDir
- } );
- $( '.tux-messagelist' ).data( {
- targetlangcode: language,
- targetlangdir: targetDir
- } );
+ state.language = language;
mw.translate.changeUrl( changes );
mw.translate.updateTabLinks( changes );
- mw.translate.loadMessages();
+ $( '.tux-editor-header .group-warning' ).empty();
+ state.messageList.changeSettings( changes );
updateGroupInformation( state );
+
},
changeFilter: function ( filter ) {
- var realFilters, uri;
-
if ( !checkDirty() ) {
return;
}
- realFilters = [ '!ignored' ];
- uri = new mw.Uri( window.location.href );
- if ( uri.query.optional !== '1' ) {
- realFilters.push( '!optional' );
- }
- if ( filter ) {
- realFilters.push( filter );
- }
-
- mw.translate.changeUrl( { filter: filter } );
- mw.translate.loadMessages( { filter: realFilters.join( '|' ) } );
+ mw.translate.changeUrl( { filter: filter, showMessage: null } );
+ state.messageList.changeSettings( { filter: getActualFilter( filter ) } );
},
- changeUrl: function ( params ) {
+ changeUrl: function ( params, forceChange ) {
var uri = new mw.Uri( window.location.href );
uri.extend( params );
+ // Support removing keys from the query
+ $.each( params, function ( key, val ) {
+ if ( val === null ) {
+ delete uri.query[ key ];
+ }
+ } );
+
if ( uri.toString() === window.location.href ) {
return;
}
- // Change the URL with this URI, but don't leave the page.
- if ( history.pushState && $( '.tux-messagelist' ).length ) {
- // IE<10 does not support pushState. Never mind.
+ // If supported by the browser and requested, change the URL with
+ // this URI but try not to leave the page.
+ if ( !forceChange && history.pushState && $( '.tux-messagelist' ).length ) {
history.pushState( uri, null, uri.toString() );
} else {
// For old browsers, just reload
@@ -133,9 +108,25 @@
}
} );
+ function getActualFilter( filter ) {
+ var realFilters, uri;
+
+ realFilters = [ '!ignored' ];
+ uri = new mw.Uri( window.location.href );
+ if ( uri.query.optional !== '1' ) {
+ realFilters.push( '!optional' );
+ }
+ if ( filter ) {
+ realFilters.push( filter );
+ }
+
+ return realFilters.join( '|' );
+ }
+
function checkDirty() {
if ( mw.translate.isDirty() ) {
- return window.confirm( mw.msg( 'translate-js-support-unsaved-warning' ) );
+ // eslint-disable-next-line no-alert
+ return confirm( mw.msg( 'translate-js-support-unsaved-warning' ) );
}
return true;
}
@@ -151,6 +142,10 @@
/**
* Updates all group specific stuff on the page.
+ *
+ * @param {Object} state Information about current group and language.
+ * @param {string} state.group Message group id.
+ * @param {string} state.language Language.
*/
function updateGroupInformation( state ) {
var props = 'id|priority|prioritylangs|priorityforce|description';
@@ -168,10 +163,15 @@
api = new mw.Api(),
$description = $( '.tux-editor-header .description' );
+ if ( group.description === null ) {
+ $description.empty();
+ return;
+ }
+
api.parse( group.description ).done( function ( parsedDescription ) {
// The parsed text is returned in a <p> tag,
// so it's removed here.
- $description.html( $( parsedDescription ).html() );
+ $description.html( parsedDescription );
} ).fail( function () {
$description.empty();
mw.log( 'Error parsing description for group ' + group.id );
@@ -182,15 +182,7 @@
var preferredLanguages, headerMessage, languagesMessage,
$groupWarning = $( '.tux-editor-header .group-warning' );
- $groupWarning.empty();
-
- // Check whether the group has priority languages
- if ( !group.prioritylangs ) {
- return;
- }
-
- // And if the current language is among them, we can return early
- if ( $.inArray( language, group.prioritylangs ) !== -1 ) {
+ if ( isPriorityLanguage( language, group.prioritylangs ) ) {
return;
}
@@ -200,15 +192,17 @@
return '<bdi>' + $.uls.data.getAutonym( lang ) + '</bdi>';
} ).join( ', ' );
- headerMessage = mw.message( group.priorityforce ?
- 'tpt-discouraged-language-force-header' :
- 'tpt-discouraged-language-header',
+ headerMessage = mw.message(
+ group.priorityforce ?
+ 'tpt-discouraged-language-force-header' :
+ 'tpt-discouraged-language-header',
$.uls.data.getAutonym( language )
).parse();
- languagesMessage = mw.message( group.priorityforce ?
- 'tpt-discouraged-language-force-content' :
- 'tpt-discouraged-language-content',
+ languagesMessage = mw.message(
+ group.priorityforce ?
+ 'tpt-discouraged-language-force-content' :
+ 'tpt-discouraged-language-content',
preferredLanguages
).parse();
@@ -219,20 +213,67 @@
);
}
- $( document ).ready( function () {
- var $translateContainer, $hideTranslatedButton, $controlOwnButton, $messageList,
- docLanguageAutonym, docLanguageCode, ulsOptions, filter, uri, position;
+ function isPriorityLanguage( language, priorityLanguages ) {
+ // Don't show priority notice if the language is message documentation.
+ if ( language === mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ) {
+ return true;
+ }
+
+ // If no priority language is set, return early.
+ if ( !priorityLanguages ) {
+ return true;
+ }
+
+ if ( priorityLanguages.indexOf( language ) !== -1 ) {
+ return true;
+ }
+
+ return false;
+ }
+
+ function setupLanguageSelector( $element ) {
+ var ulsOptions = {
+ languages: mw.config.get( 'wgTranslateLanguages' ),
+ showRegions: [ 'SP' ].concat( $.fn.lcd.defaults.showRegions ),
+ onSelect: function ( language ) {
+ mw.translate.changeLanguage( language );
+ $element.text( $.uls.data.getAutonym( language ) );
+ },
+ ulsPurpose: 'translate-special-translate',
+ quickList: function () {
+ return mw.uls.getFrequentLanguageList();
+ }
+ };
+
+ mw.translate.addExtraLanguagesToLanguageData( ulsOptions.languages, [ 'SP' ] );
+ $element.uls( ulsOptions );
+ }
+
+ $( function () {
+ var $translateContainer, $hideTranslatedButton, $messageList,
+ filter, uri, position, offset, limit;
$messageList = $( '.tux-messagelist' );
+ state.group = $( '.tux-messagetable-loader' ).data( 'messagegroup' );
+ state.language = $messageList.data( 'targetlangcode' );
+
if ( $messageList.length ) {
+ $messageList.messagetable();
+ state.messageList = $messageList.data( 'messagetable' );
+
uri = new mw.Uri( window.location.href );
filter = uri.query.filter;
+ offset = uri.query.showMessage;
+ if ( offset ) {
+ limit = uri.query.limit || 1;
+ // Default to no filters
+ filter = filter || '';
+ }
if ( filter === undefined ) {
filter = '!translated';
}
- mw.translate.changeFilter( filter );
$( '.tux-message-selector li' ).each( function () {
var $this = $( this );
@@ -240,11 +281,24 @@
$this.addClass( 'selected' );
}
} );
- }
- state.group = $( '.tux-messagetable-loader' ).data( 'messagegroup' );
- state.language = $messageList.data( 'targetlangcode' ) || // for tux=1
- mw.config.get( 'wgUserLanguage' ); // for tux=0
+ mw.translate.changeUrl( {
+ group: state.group,
+ language: state.language,
+ filter: filter,
+ showMessage: offset,
+ optional: offset ? 1 : undefined
+ } );
+
+ // Start loading messages
+ state.messageList.changeSettings( {
+ group: state.group,
+ language: state.language,
+ offset: offset,
+ limit: limit,
+ filter: getActualFilter( filter )
+ } );
+ }
if ( $( 'body' ).hasClass( 'rtl' ) ) {
position = {
@@ -252,7 +306,7 @@
at: 'right+80 bottom+5'
};
}
- $( '.tux-breadcrumb .grouplink' ).msggroupselector( {
+ $( '.tux-breadcrumb__item--aggregate' ).msggroupselector( {
onSelect: mw.translate.changeGroup,
language: state.language,
position: position,
@@ -261,30 +315,13 @@
updateGroupInformation( state );
- $messageList.messagetable();
- // Use ULS for language selection if it's available
- ulsOptions = {
- onSelect: function ( language ) {
- mw.translate.changeLanguage( language );
- },
- languages: mw.config.get( 'wgULSLanguages' ),
- searchAPI: mw.util.wikiScript( 'api' ) + '?action=languagesearch&format=json',
- quickList: function () {
- return mw.uls.getFrequentLanguageList();
- }
- };
-
- // If a documentation pseudo-language is defined,
- // add it to the language selector
- docLanguageCode = mw.config.get( 'wgTranslateDocumentationLanguageCode' );
- if ( docLanguageCode ) {
- docLanguageAutonym = mw.msg( 'translate-documentation-language' );
- ulsOptions.languages[ docLanguageCode ] = docLanguageAutonym;
- mw.translate.addDocumentationLanguage();
- ulsOptions.showRegions = [ 'WW', 'SP', 'AM', 'EU', 'ME', 'AF', 'AS', 'PA' ];
- }
-
- $( '.ext-translate-language-selector .uls' ).uls( ulsOptions );
+ $( '.ext-translate-language-selector .uls' ).one( 'click', function () {
+ var $target = $( this );
+ mw.loader.using( 'ext.uls.mediawiki' ).done( function () {
+ setupLanguageSelector( $target );
+ $target.click();
+ } );
+ } );
if ( $.fn.translateeditor ) {
// New translation editor
@@ -305,22 +342,6 @@
$( this ).prop( 'disabled', true );
} );
- $controlOwnButton = $translateContainer.find( '.tux-proofread-own-translations-button' );
- $controlOwnButton.click( function () {
- var $this = $( this ),
- ownTranslatedMessages = $translateContainer.find( '.own-translation' ),
- hideMessage = mw.msg( 'tux-editor-proofreading-hide-own-translations' ),
- showMessage = mw.msg( 'tux-editor-proofreading-show-own-translations' );
-
- if ( $this.hasClass( 'down' ) ) {
- ownTranslatedMessages.removeClass( 'hide' );
- $this.removeClass( 'down' ).text( hideMessage );
- } else {
- ownTranslatedMessages.addClass( 'hide' );
- $this.addClass( 'down' ).text( showMessage );
- }
- } );
-
// Message filter click handler
$translateContainer.find( '.row.tux-message-selector > li' ).on( 'click', function () {
var newFilter,
@@ -375,4 +396,4 @@
} );
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.translationstash.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.translationstash.js
index f25b8258..8ceca653 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.translationstash.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.translationstash.js
@@ -2,11 +2,11 @@
* TranslationStash front-end logic.
*
* @author Santhosh Thottingal
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @since 2013.10
*/
-( function ( $, mw ) {
+( function () {
'use strict';
var userTranslations = {},
@@ -22,7 +22,6 @@
action: 'query',
list: 'messagecollection',
mcgroup: messageGroup,
- format: 'json',
mclanguage: language,
mcoffset: offset,
mclimit: limit,
@@ -77,7 +76,7 @@
dir: targetLanguageDir
} )
.text( message.translation || '' )
- ),
+ ),
$( '<div>' )
.addClass( 'two columns tux-list-status text-center' )
.append(
@@ -201,18 +200,19 @@
} );
}
- $( 'document' ).ready( function () {
+ $( function () {
var $messageTable = $( '.tux-messagelist' ),
$ulsTrigger = $( '.ext-translate-language-selector > .uls' );
// Some links in helpers will navigate away by default. But since the messages
// will change on this page on every load, we want to avoid that. Force the
// links to open on new window/tab.
- mw.translateHooks.add( 'showTranslationHelpers', function ( helpers, $editor ) {
+ mw.hook( 'mw.translate.editor.showTranslationHelpers' ).add( function ( helpers, $editor ) {
$editor.find( 'a' ).prop( 'target', '_blank' );
} );
$ulsTrigger.uls( {
+ ulsPurpose: 'translate-special-translationstash',
onSelect: function ( language ) {
var direction = $.uls.data.getDir( language ),
autonym = $.uls.data.getAutonym( language );
@@ -247,4 +247,4 @@
loadMessages();
} );
} );
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.translationstats.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.translationstats.js
index 9440e5f1..701b5fba 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.special.translationstats.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.translationstats.js
@@ -4,33 +4,58 @@
*
* @author Amir E. Aharoni
* @author Siebrand Mazeland
+ * @author Niklas Laxström
* @copyright Copyright © 2012-2013 Amir E. Aharoni, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-jQuery( document ).ready( function ( $ ) {
+( function () {
'use strict';
- // Based on UploadWizard, TranslationNotifications
- $( '#start' )
- .datepicker( {
- dateFormat: 'yymmdd',
- constrainInput: false,
- showOn: 'focus',
- changeMonth: true,
- changeYear: true,
- showAnim: false,
- showButtonPanel: true,
- maxDate: new Date(),
- onClose: function ( dateText, inst ) {
- // TranslationStats works with the yyyymmddhhmmss format,
- // so zeros that represents generic hh:mm:ss must be added.
- // The zeros are added only if a date was actually selected
- // and is not currently displayed.
- if ( dateText !== '' && inst.input.val().length < 14 ) {
- inst.input.val( dateText + '000000' );
+ $( function () {
+ var $input = $( '#start' ),
+ datepicker = mw.loader.getState( 'mediawiki.widgets.datetime' ) === null;
+
+ // Remove when MediaWiki 1.27 is no longer supported
+ if ( datepicker ) {
+ mw.loader.using( 'jquery.ui.datepicker' ).done( function () {
+ $input.datepicker( {
+ dateFormat: 'yy-mm-ddT00:00:00',
+ constrainInput: false,
+ showOn: 'focus',
+ changeMonth: true,
+ changeYear: true,
+ showAnim: false,
+ showButtonPanel: true,
+ maxDate: new Date()
+ } ).attr( 'autocomplete', 'off' );
+ } );
+ } else {
+ mw.loader.using( 'mediawiki.widgets.datetime' ).done( function () {
+ var widget, defaultValue, defaultDate;
+
+ defaultDate = new Date();
+ defaultDate.setDate( 1 );
+
+ if ( $input.val() ) {
+ defaultValue = new Date( $input.val() );
}
- }
- } )
- .attr( 'autocomplete', 'off' );
-} );
+
+ widget = new mw.widgets.datetime.DateTimeInputWidget( {
+ formatter: {
+ format: '${year|0}-${month|0}-${day|0}',
+ defaultDate: defaultDate
+ },
+ type: 'date',
+ value: defaultValue,
+ max: new Date()
+ } );
+
+ $input.after( widget.$element ).hide();
+ widget.on( 'change', function ( data ) {
+ $input.val( data + 'T00:00:00' );
+ } );
+ } );
+ }
+ } );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.statsbar.js b/www/wiki/extensions/Translate/resources/js/ext.translate.statsbar.js
index f3e24ece..aeec9314 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.statsbar.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.statsbar.js
@@ -3,19 +3,19 @@
*
* @author Niklas Laxström
* @author Santhosh Thottingal
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @since 2012-11-30
*/
/*
* Usage:
- * $( '<div>' ).languagestatsbar( {
- * language: 'fi',
- * group: 'core'
- * } );
+ * $( '<div>' ).languagestatsbar( {
+ * language: 'fi',
+ * group: 'core'
+ * } );
* 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 ) {
@@ -33,7 +33,7 @@
this.render();
} else {
mw.translate.loadLanguageStats( this.language )
- .done( $.proxy( this.render, this ) );
+ .done( this.render.bind( this ) );
}
},
@@ -48,7 +48,8 @@
statsbar.$statsBar.on( 'change', function ( event, to, from ) {
for ( i = 0; i < languageStats.length; i++ ) {
if ( languageStats[ i ].group === statsbar.group ) {
- if ( to === 'translated' && from === 'untranslated' ) {
+ // Changing a proofread message does not create a new translation
+ if ( to === 'translated' && from !== 'proofread' ) {
languageStats[ i ].translated++;
}
if ( to === 'proofread' ) {
@@ -64,7 +65,8 @@
if ( from === 'proofread' ) {
languageStats[ i ].proofread--;
}
- if ( from === 'translated' ) {
+ // Proofreading a message does not remove translation
+ if ( from === 'translated' && to !== 'proofread' ) {
languageStats[ i ].translated--;
}
break;
@@ -75,10 +77,13 @@
statsbar.update();
} );
- statsbar.$container.hover( function () {
- statsbar.elements.$info.removeClass( 'hide' );
- }, function () {
- statsbar.elements.$info.addClass( 'hide' );
+ statsbar.$container.on( {
+ mouseenter: function () {
+ statsbar.elements.$info.removeClass( 'hide' );
+ },
+ mouseleave: function () {
+ statsbar.elements.$info.addClass( 'hide' );
+ }
} );
},
@@ -179,4 +184,4 @@
mw.translate = mw.translate || {};
-}( mediaWiki, jQuery ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.storage.js b/www/wiki/extensions/Translate/resources/js/ext.translate.storage.js
index d2fd5fe9..85e9cb9e 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.storage.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.storage.js
@@ -1,4 +1,4 @@
-( function ( mw ) {
+( function () {
'use strict';
/**
@@ -18,16 +18,17 @@
* @param {string} title The title of the page including language code
* to store the translation.
* @param {string} translation The translation of the message
+ * @param {string} editSummary The edit summary
* @return {jQuery.Promise}
*/
- save: function ( title, translation ) {
+ save: function ( title, translation, editSummary ) {
var api = new mw.Api();
- // Change to csrf when support for MW 1.25 is dropped
- return api.postWithToken( 'edit', {
+ return api.postWithToken( 'csrf', {
action: 'edit',
title: title,
text: translation,
+ summary: editSummary,
// If the session expires, fail the saving instead of saving it
// as an anonymous user (if anonymous can save).
// When undefined, the parameter is not included in the request
@@ -38,4 +39,4 @@
mw.translate = mw.translate || {};
mw.translate.TranslationApiStorage = TranslationApiStorage;
-}( mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.translationstashstorage.js b/www/wiki/extensions/Translate/resources/js/ext.translate.translationstashstorage.js
index 14e54c7a..17350cf2 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.translationstashstorage.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.translationstashstorage.js
@@ -1,4 +1,4 @@
-( function ( $, mw ) {
+( function () {
'use strict';
/**
@@ -22,25 +22,27 @@
save: function ( title, translation ) {
var api = new mw.Api();
- // Change to csrf when support for MW 1.25 is dropped
- return api.postWithToken( 'edit', {
+ return api.postWithToken( 'csrf', {
action: 'translationstash',
subaction: 'add',
title: title,
translation: translation
- } ).promise();
+ } ).then( function () {
+ // Fake normal save API
+ return { edit: { result: 'Success' } };
+ } );
},
/**
* Get the current users translations.
*
+ * @param {string} user User name
* @return {jQuery.Promise}
*/
getUserTranslations: function ( user ) {
var api = new mw.Api();
- // Change to csrf when support for MW 1.25 is dropped
- return api.postWithToken( 'edit', {
+ return api.postWithToken( 'csrf', {
action: 'translationstash',
subaction: 'query',
username: user
@@ -52,4 +54,4 @@
mw.translate = mw.translate || {};
mw.translate.TranslationStashStorage = TranslationStashStorage;
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.workflowselector.js b/www/wiki/extensions/Translate/resources/js/ext.translate.workflowselector.js
index a23b9753..b413e0dd 100644
--- a/www/wiki/extensions/Translate/resources/js/ext.translate.workflowselector.js
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.workflowselector.js
@@ -1,12 +1,12 @@
/*!
* A jQuery plugin which handles the display and change of message group
- * workflow sates.
+ * workflow states.
*
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
function WorkflowSelector( container ) {
@@ -65,12 +65,10 @@
action: 'groupreview',
group: this.groupId,
language: this.language,
- state: state,
- format: 'json'
+ state: state
};
- // Change to csrf when support for MW 1.25 is dropped
- return api.postWithToken( 'edit', params );
+ return api.postWithToken( 'csrf', params );
},
/**
@@ -144,7 +142,8 @@
instance.receiveState( instance.groupId, instance.language, state );
} )
.fail( function () {
- window.alert( 'Change of state failed' );
+ // eslint-disable-next-line no-alert
+ alert( 'Change of state failed' );
} );
} );
instance.$container.append( $display, $list );
@@ -165,4 +164,4 @@
};
$.fn.workflowselector.Constructor = WorkflowSelector;
-}( jQuery, mediaWiki ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/jquery.ajaxdispatcher.js b/www/wiki/extensions/Translate/resources/js/jquery.ajaxdispatcher.js
index fcdeb41f..68d48e74 100644
--- a/www/wiki/extensions/Translate/resources/js/jquery.ajaxdispatcher.js
+++ b/www/wiki/extensions/Translate/resources/js/jquery.ajaxdispatcher.js
@@ -1,4 +1,4 @@
-( function ( $ ) {
+( function () {
'use strict';
/**
@@ -7,6 +7,7 @@
* @author Niklas Laxström
*
* @param {callable[]} list List of callbacks returning promises.
+ * @param {number} maxRetries Maximum number of times a failed promise is retried.
* @return {jQuery.Promise}
*/
function ajaxDispatcher( list, maxRetries ) {
@@ -17,6 +18,8 @@
return $.when( helper( list, maxRetries ) )
.then( function ( promises ) {
return deferred.resolve( promises );
+ } ).fail( function ( errmsg ) {
+ return deferred.reject( errmsg );
} );
}
@@ -33,8 +36,10 @@
rest = list.slice( 1 );
retries = 0;
- retrier = function () {
- var promise = this;
+ retrier = function ( result, promise ) {
+ if ( !promise.state ) {
+ return;
+ }
if ( promise.state() === 'rejected' ) {
if ( retries < maxRetries ) {
@@ -50,11 +55,13 @@
}
};
- first.call().always( retrier );
+ first.call().always( retrier ).catch( function ( errmsg ) {
+ return deferred.reject( errmsg );
+ } );
return deferred;
}
$.extend( $, { ajaxDispatcher: ajaxDispatcher } );
-}( jQuery ) );
+}() );
diff --git a/www/wiki/extensions/Translate/resources/js/jquery.autosize.js b/www/wiki/extensions/Translate/resources/js/jquery.autosize.js
index 62873057..2de01911 100644
--- a/www/wiki/extensions/Translate/resources/js/jquery.autosize.js
+++ b/www/wiki/extensions/Translate/resources/js/jquery.autosize.js
@@ -3,89 +3,89 @@
license: MIT
http://www.jacklmoore.com/autosize
*/
-(function (global, factory) {
- if (typeof define === 'function' && define.amd) {
- define(['exports', 'module'], factory);
- } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
- factory(exports, module);
+( function ( global, factory ) {
+ if ( typeof define === 'function' && define.amd ) {
+ define( [ 'exports', 'module' ], factory );
+ } else if ( typeof exports !== 'undefined' && typeof module !== 'undefined' ) {
+ factory( exports, module );
} else {
var mod = {
exports: {}
};
- factory(mod.exports, mod);
+ factory( mod.exports, mod );
global.autosize = mod.exports;
}
-})(this, function (exports, module) {
+}( this, function ( exports, module ) {
'use strict';
- var set = typeof Set === 'function' ? new Set() : (function () {
- var list = [];
-
- return {
- has: function has(key) {
- return Boolean(list.indexOf(key) > -1);
- },
- add: function add(key) {
- list.push(key);
- },
- 'delete': function _delete(key) {
- list.splice(list.indexOf(key), 1);
- } };
- })();
-
- var createEvent = function createEvent(name) {
- return new Event(name);
- };
+ var set = typeof Set === 'function' ? new Set() : ( function () {
+ var list = [];
+
+ return {
+ has: function has( key ) {
+ return Boolean( list.indexOf( key ) > -1 );
+ },
+ add: function add( key ) {
+ list.push( key );
+ },
+ delete: function _delete( key ) {
+ list.splice( list.indexOf( key ), 1 );
+ } };
+ }() ),
+
+ createEvent = function createEvent( name ) {
+ return new Event( name );
+ };
try {
- new Event('test');
- } catch (e) {
+ new Event( 'test' );
+ } catch ( e ) {
// IE does not support `new Event()`
- createEvent = function (name) {
- var evt = document.createEvent('Event');
- evt.initEvent(name, true, false);
+ createEvent = function ( name ) {
+ var evt = document.createEvent( 'Event' );
+ evt.initEvent( name, true, false );
return evt;
};
}
- function assign(ta) {
- var _ref = arguments[1] === undefined ? {} : arguments[1];
+ function assign( ta ) {
+ var _ref = arguments[ 1 ] === undefined ? {} : arguments[ 1 ],
- var _ref$setOverflowX = _ref.setOverflowX;
- var setOverflowX = _ref$setOverflowX === undefined ? true : _ref$setOverflowX;
- var _ref$setOverflowY = _ref.setOverflowY;
- var setOverflowY = _ref$setOverflowY === undefined ? true : _ref$setOverflowY;
+ _ref$setOverflowX = _ref.setOverflowX,
+ setOverflowX = _ref$setOverflowX === undefined ? true : _ref$setOverflowX,
+ _ref$setOverflowY = _ref.setOverflowY,
+ setOverflowY = _ref$setOverflowY === undefined ? true : _ref$setOverflowY;
- if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || set.has(ta)) return;
+ if ( !ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || set.has( ta ) ) { return; }
- var heightOffset = null;
- var overflowY = null;
- var clientWidth = ta.clientWidth;
+ var heightOffset = null,
+ overflowY = null,
+ clientWidth = ta.clientWidth;
function init() {
- var style = window.getComputedStyle(ta, null);
+ var style = window.getComputedStyle( ta, null );
overflowY = style.overflowY;
- if (style.resize === 'vertical') {
+ if ( style.resize === 'vertical' ) {
ta.style.resize = 'none';
- } else if (style.resize === 'both') {
+ } else if ( style.resize === 'both' ) {
ta.style.resize = 'horizontal';
}
- if (style.boxSizing === 'content-box') {
- heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
+ if ( style.boxSizing === 'content-box' ) {
+ heightOffset = -( parseFloat( style.paddingTop ) + parseFloat( style.paddingBottom ) );
} else {
- heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
+ heightOffset = parseFloat( style.borderTopWidth ) + parseFloat( style.borderBottomWidth );
}
// Fix when a textarea is not on document body and heightOffset is Not a Number
- if (isNaN(heightOffset)) {
+ if ( isNaN( heightOffset ) ) {
heightOffset = 0;
}
update();
}
- function changeOverflow(value) {
+ function changeOverflow( value ) {
{
// Chrome/Safari-specific fix:
// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
@@ -101,7 +101,7 @@
overflowY = value;
- if (setOverflowY) {
+ if ( setOverflowY ) {
ta.style.overflowY = value;
}
@@ -109,15 +109,15 @@
}
function resize() {
- var htmlTop = window.pageYOffset;
- var bodyTop = document.body.scrollTop;
- var originalHeight = ta.style.height;
+ var htmlTop = window.pageYOffset,
+ bodyTop = document.body.scrollTop,
+ originalHeight = ta.style.height;
ta.style.height = 'auto';
var endHeight = ta.scrollHeight + heightOffset;
- if (ta.scrollHeight === 0) {
+ if ( ta.scrollHeight === 0 ) {
// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
ta.style.height = originalHeight;
return;
@@ -138,63 +138,63 @@
resize();
- var style = window.getComputedStyle(ta, null);
+ var style = window.getComputedStyle( ta, null );
- if (style.height !== ta.style.height) {
- if (overflowY !== 'visible') {
- changeOverflow('visible');
+ if ( style.height !== ta.style.height ) {
+ if ( overflowY !== 'visible' ) {
+ changeOverflow( 'visible' );
}
} else {
- if (overflowY !== 'hidden') {
- changeOverflow('hidden');
+ if ( overflowY !== 'hidden' ) {
+ changeOverflow( 'hidden' );
}
}
- if (startHeight !== ta.style.height) {
- var evt = createEvent('autosize:resized');
- ta.dispatchEvent(evt);
+ if ( startHeight !== ta.style.height ) {
+ var evt = createEvent( 'autosize:resized' );
+ ta.dispatchEvent( evt );
}
}
var pageResize = function pageResize() {
- if (ta.clientWidth !== clientWidth) {
- update();
- }
- };
+ if ( ta.clientWidth !== clientWidth ) {
+ update();
+ }
+ },
- var destroy = (function (style) {
- window.removeEventListener('resize', pageResize, false);
- ta.removeEventListener('input', update, false);
- ta.removeEventListener('keyup', update, false);
- ta.removeEventListener('autosize:destroy', destroy, false);
- ta.removeEventListener('autosize:update', update, false);
- set['delete'](ta);
-
- Object.keys(style).forEach(function (key) {
- ta.style[key] = style[key];
- });
- }).bind(ta, {
+ destroy = ( function ( style ) {
+ window.removeEventListener( 'resize', pageResize, false );
+ ta.removeEventListener( 'input', update, false );
+ ta.removeEventListener( 'keyup', update, false );
+ ta.removeEventListener( 'autosize:destroy', destroy, false );
+ ta.removeEventListener( 'autosize:update', update, false );
+ set.delete( ta );
+
+ Object.keys( style ).forEach( function ( key ) {
+ ta.style[ key ] = style[ key ];
+ } );
+ } ).bind( ta, {
height: ta.style.height,
resize: ta.style.resize,
overflowY: ta.style.overflowY,
overflowX: ta.style.overflowX,
- wordWrap: ta.style.wordWrap });
+ wordWrap: ta.style.wordWrap } );
- ta.addEventListener('autosize:destroy', destroy, false);
+ ta.addEventListener( 'autosize:destroy', destroy, false );
// IE9 does not fire onpropertychange or oninput for deletions,
// so binding to onkeyup to catch most of those events.
// There is no way that I know of to detect something like 'cut' in IE9.
- if ('onpropertychange' in ta && 'oninput' in ta) {
- ta.addEventListener('keyup', update, false);
+ if ( 'onpropertychange' in ta && 'oninput' in ta ) {
+ ta.addEventListener( 'keyup', update, false );
}
- window.addEventListener('resize', pageResize, false);
- ta.addEventListener('input', update, false);
- ta.addEventListener('autosize:update', update, false);
- set.add(ta);
+ window.addEventListener( 'resize', pageResize, false );
+ ta.addEventListener( 'input', update, false );
+ ta.addEventListener( 'autosize:update', update, false );
+ set.add( ta );
- if (setOverflowX) {
+ if ( setOverflowX ) {
ta.style.overflowX = 'hidden';
ta.style.wordWrap = 'break-word';
}
@@ -202,53 +202,53 @@
init();
}
- function destroy(ta) {
- if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return;
- var evt = createEvent('autosize:destroy');
- ta.dispatchEvent(evt);
+ function destroy( ta ) {
+ if ( !( ta && ta.nodeName && ta.nodeName === 'TEXTAREA' ) ) { return; }
+ var evt = createEvent( 'autosize:destroy' );
+ ta.dispatchEvent( evt );
}
- function update(ta) {
- if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return;
- var evt = createEvent('autosize:update');
- ta.dispatchEvent(evt);
+ function update( ta ) {
+ if ( !( ta && ta.nodeName && ta.nodeName === 'TEXTAREA' ) ) { return; }
+ var evt = createEvent( 'autosize:update' );
+ ta.dispatchEvent( evt );
}
var autosize = null;
// Do nothing in Node.js environment and IE8 (or lower)
- if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
- autosize = function (el) {
+ if ( typeof window === 'undefined' || typeof window.getComputedStyle !== 'function' ) {
+ autosize = function ( el ) {
return el;
};
- autosize.destroy = function (el) {
+ autosize.destroy = function ( el ) {
return el;
};
- autosize.update = function (el) {
+ autosize.update = function ( el ) {
return el;
};
} else {
- autosize = function (el, options) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], function (x) {
- return assign(x, options);
- });
+ autosize = function ( el, options ) {
+ if ( el ) {
+ Array.prototype.forEach.call( el.length ? el : [ el ], function ( x ) {
+ return assign( x, options );
+ } );
}
return el;
};
- autosize.destroy = function (el) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], destroy);
+ autosize.destroy = function ( el ) {
+ if ( el ) {
+ Array.prototype.forEach.call( el.length ? el : [ el ], destroy );
}
return el;
};
- autosize.update = function (el) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], update);
+ autosize.update = function ( el ) {
+ if ( el ) {
+ Array.prototype.forEach.call( el.length ? el : [ el ], update );
}
return el;
};
}
module.exports = autosize;
-});
+} ) );
diff --git a/www/wiki/extensions/Translate/resources/js/jquery.textchange.js b/www/wiki/extensions/Translate/resources/js/jquery.textchange.js
index dcf7ef02..65886c43 100644
--- a/www/wiki/extensions/Translate/resources/js/jquery.textchange.js
+++ b/www/wiki/extensions/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 = {
@@ -18,7 +18,7 @@
},
teardown: function () {
- $( this ).unbind( '.textchange' );
+ $( this ).off( '.textchange' );
},
handler: function () {
@@ -41,4 +41,4 @@
}
};
-} )( jQuery );
+}() );
diff --git a/www/wiki/extensions/Translate/scripts/TranslateCliLogger.php b/www/wiki/extensions/Translate/scripts/TranslateCliLogger.php
new file mode 100644
index 00000000..6fb8e85f
--- /dev/null
+++ b/www/wiki/extensions/Translate/scripts/TranslateCliLogger.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Simple helper to log things to the console.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+use Psr\Log\AbstractLogger;
+
+class TranslateCliLogger extends AbstractLogger {
+ public function __construct( callable $logger ) {
+ $this->logger = $logger;
+ }
+
+ public function log( $level, $msg, array $context = [] ) {
+ ( $this->logger )( "LOG $level: $msg" );
+ }
+}
diff --git a/www/wiki/extensions/Translate/scripts/TranslateStatsOutput.php b/www/wiki/extensions/Translate/scripts/TranslateStatsOutput.php
index 24398b1b..cbeea176 100644
--- a/www/wiki/extensions/Translate/scripts/TranslateStatsOutput.php
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/scripts/characterEditStats.php b/www/wiki/extensions/Translate/scripts/characterEditStats.php
index 418fe4d6..45b6372e 100644
--- a/www/wiki/extensions/Translate/scripts/characterEditStats.php
+++ b/www/wiki/extensions/Translate/scripts/characterEditStats.php
@@ -3,8 +3,8 @@
* Show number of characters translated over a given period of time.
*
* @author Santhosh Thottingal
- * @copyright Copyright 2013 Santhosh Thottingal
- * @license GPL-2.0+
+ * @copyright Copyright © 2013 Santhosh Thottingal
+ * @license GPL-2.0-or-later
* @file
* @ingroup Script Stats
*/
@@ -30,20 +30,11 @@ class CharacterEditStats extends Maintenance {
);
$this->addOption(
'days',
- '(optional) Calculate for given number of days (default: 30) ' .
- '(capped by the max age of recent changes on the wiki)',
+ '(optional) Calculate for given number of days (default: 30)',
false, /*required*/
true /*has arg*/
);
$this->addOption(
- 'bots',
- '(optional) Include bot edits'
- );
- $this->addOption(
- 'diff',
- '(optional) Count the edit diffs alone'
- );
- $this->addOption(
'ns',
'(optional) Comma separated list of namespace IDs',
false, /*required*/
@@ -52,16 +43,12 @@ class CharacterEditStats extends Maintenance {
}
public function execute() {
- global $wgTranslateFuzzyBotName, $wgSitename;
+ global $wgTranslateFuzzyBotName, $wgSitename, $wgTranslateMessageNamespaces;
$days = (int)$this->getOption( 'days', 30 );
- $hours = $days * 24;
-
$top = (int)$this->getOption( 'top', -1 );
- $bots = $this->hasOption( 'bots' );
-
- $namespaces = array();
+ $namespaces = [];
if ( $this->hasOption( 'ns' ) ) {
$input = explode( ',', $this->getOption( 'ns' ) );
@@ -70,35 +57,30 @@ class CharacterEditStats extends Maintenance {
$namespaces[] = $namespace;
}
}
+ } else {
+ $namespaces = $wgTranslateMessageNamespaces;
}
// Select set of edits to report on
+ $rows = self::getRevisionsFromHistory( $days, $namespaces );
- // Fetch some extrac fields that normally TranslateUtils::translationChanges wont
- $extraFields = array( 'rc_old_len', 'rc_new_len' );
- $rows = TranslateUtils::translationChanges( $hours, $bots, $namespaces, $extraFields );
// Get counts for edits per language code after filtering out edits by FuzzyBot
- $codes = array();
+ $codes = [];
foreach ( $rows as $_ ) {
// Filter out edits by $wgTranslateFuzzyBotName
- if ( $_->rc_user_text === $wgTranslateFuzzyBotName ) {
+ if ( $_->user_text === $wgTranslateFuzzyBotName ) {
continue;
}
- $handle = new MessageHandle( Title::newFromText( $_->rc_title ) );
+ $handle = new MessageHandle( Title::newFromText( $_->title ) );
$code = $handle->getCode();
if ( !isset( $codes[$code] ) ) {
$codes[$code] = 0;
}
- if ( $this->hasOption( 'diff' ) ) {
- $diff = abs( $_->rc_new_len - $_->rc_old_len );
- } else {
- $diff = $_->rc_new_len;
- }
- $codes[$code] += $diff;
+ $codes[$code] += $_->length;
}
// Sort counts and report descending up to $top rows.
@@ -125,7 +107,44 @@ class CharacterEditStats extends Maintenance {
$this->output( "-----------------------\n" );
$this->output( "Total\t\t$total\n" );
}
+
+ private function getRevisionsFromHistory( $days, array $namespaces ) {
+ $dbr = wfGetDB( DB_REPLICA );
+ $cutoff = $dbr->addQuotes( $dbr->timestamp( time() - $days * 24 * 3600 ) );
+
+ // The field renames are to be compatible with recentchanges table query
+ if ( is_callable( Revision::class, 'getQueryInfo' ) ) {
+ $revQuery = Revision::getQueryInfo( [ 'page' ] );
+ $revUserText = $revQuery['fields']['rev_user_text'] ?? 'rev_user_text';
+ } else {
+ $revQuery = [
+ 'tables' => [ 'revision', 'page' ],
+ 'joins' => [
+ 'page' => [ 'JOIN', 'rev_page = page_id' ],
+ ]
+ ];
+ $revUserText = 'rev_user_text';
+ }
+ $conds = [
+ "rev_timestamp > $cutoff",
+ 'page_namespace' => $namespaces,
+ ];
+
+ $res = $dbr->select(
+ $revQuery['tables'],
+ [
+ 'title' => 'page_title',
+ 'user_text' => $revUserText,
+ 'length' => 'rev_len',
+ ],
+ $conds,
+ __METHOD__,
+ [],
+ $revQuery['joins']
+ );
+ return iterator_to_array( $res );
+ }
}
-$maintClass = 'CharacterEditStats';
+$maintClass = CharacterEditStats::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/create-language-models.php b/www/wiki/extensions/Translate/scripts/create-language-models.php
index 667aa7a7..71a1ce72 100644
--- a/www/wiki/extensions/Translate/scripts/create-language-models.php
+++ b/www/wiki/extensions/Translate/scripts/create-language-models.php
@@ -6,7 +6,7 @@
* @author Niklas Laxström
*
* @copyright Copyright © 2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -20,7 +20,7 @@ if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
require_once "$IP/maintenance/Maintenance.php";
class LanguageModelCreator extends Maintenance {
- protected $changes = array();
+ protected $changes = [];
public function __construct() {
parent::__construct();
@@ -47,15 +47,15 @@ TXT;
$pages = $cache->get( $key );
if ( !is_array( $pages ) ) {
- $dbr = wfGetDB( DB_SLAVE );
- $conds = array();
+ $dbr = wfGetDB( DB_REPLICA );
+ $conds = [];
$conds[] = 'page_title' . $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() );
$conds['page_namespace'] = $wgTranslateMessageNamespaces;
echo "Before query\n";
$res = $dbr->select(
- array( 'page' ),
- array( 'page_title, page_id' ),
+ [ 'page' ],
+ [ 'page_title, page_id' ],
$conds,
__METHOD__
);
@@ -93,7 +93,7 @@ TXT;
echo "After sort map\n";
- $cache->set( $key, $pages, 3600*24 );
+ $cache->set( $key, $pages, 3600 * 24 );
echo "After set map\n";
}
@@ -102,14 +102,14 @@ TXT;
unset( $pages['nl-informal'] );
unset( $pages['en-gb'] );
- $pids = array();
+ $pids = [];
$threads = 2;
foreach ( $pages as $code => $pageids ) {
$pid = ( $threads > 1 ) ? pcntl_fork() : -1;
if ( $pid === 0 ) {
// Child, reseed because there is no bug in PHP:
- // http://bugs.php.net/bug.php?id=42465
+ // https://bugs.php.net/bug.php?id=42465
mt_srand( getmypid() );
$this->analyzeLanguage( $code, $pageids );
exit();
@@ -136,7 +136,7 @@ TXT;
$this->output( "Combining languages\n" );
- $huge = array();
+ $huge = [];
foreach ( glob( 'temp-*.json' ) as $file ) {
$contents = file_get_contents( $file );
$json = FormatJson::decode( $contents, true );
@@ -164,7 +164,7 @@ TXT;
$config->useMb( true );
$c = new LanguageDetector\Learn( $config );
$c->addSample( $code, $text );
- $c->addStepCallback( function( $lang, $status ) {
+ $c->addStepCallback( function ( $lang, $status ) {
echo "Learning {$lang}: $status\n";
} );
@@ -177,8 +177,7 @@ TXT;
$key = wfMemcKey( __CLASS__, 'cc', $code );
$text = $cache->get( $key );
if ( !is_string( $text ) ) {
-
- $snippets = array();
+ $snippets = [];
$ids = explode( '|', $ids );
@@ -194,19 +193,19 @@ TXT;
$time = microtime( true );
foreach ( $ids as $id ) {
- $params = new FauxRequest( array(
+ $params = new FauxRequest( [
'pageid' => $id,
'action' => 'parse',
'prop' => 'text',
'disablepp' => 'true',
- ) );
+ ] );
$api = new ApiMain( $params );
$api->execute();
$result = $api->getResult()->getResultData(
null,
- array( 'BC' => array() )
+ [ 'BC' => [] ]
);
$text = $result['parse']['text']['*'];
@@ -219,7 +218,7 @@ TXT;
}
$text = implode( ' ', $snippets );
- $cache->set( $key, $text, 3600*24 );
+ $cache->set( $key, $text, 3600 * 24 );
$delta = microtime( true ) - $time;
$this->output( "$code TOOK $delta\n" );
@@ -231,5 +230,5 @@ TXT;
}
}
-$maintClass = 'LanguageModelCreator';
+$maintClass = LanguageModelCreator::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/createCheckIndex.php b/www/wiki/extensions/Translate/scripts/createCheckIndex.php
index 618d7148..6b6f4296 100644
--- a/www/wiki/extensions/Translate/scripts/createCheckIndex.php
+++ b/www/wiki/extensions/Translate/scripts/createCheckIndex.php
@@ -5,7 +5,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -87,7 +87,7 @@ class CreateCheckIndex extends Maintenance {
foreach ( $langCodes as $code ) {
$this->output( "$code ", $id );
- $problematic = array();
+ $problematic = [];
$collection->resetForNewLanguage( $code );
$collection->loadTranslations();
@@ -97,7 +97,6 @@ class CreateCheckIndex extends Maintenance {
foreach ( $collection as $key => $message ) {
$prob = $checker->checkMessageFast( $message, $code );
if ( $prob ) {
-
if ( $verbose ) {
// Print it
$nsText = $wgContLang->getNsText( $g->namespaces[0] );
@@ -105,7 +104,7 @@ class CreateCheckIndex extends Maintenance {
}
// Add it to the array
- $problematic[] = array( $g->namespaces[0], "$key/$code" );
+ $problematic[] = [ $g->namespaces[0], "$key/$code" ];
}
}
@@ -123,21 +122,21 @@ class CreateCheckIndex extends Maintenance {
foreach ( $problematic as $p ) {
$title = Title::makeTitleSafe( $p[0], $p[1] );
$titleText = $title->getDBkey();
- $res = $dbw->select( 'page', array( 'page_id', 'page_latest' ),
- array( 'page_namespace' => $p[0], 'page_title' => $titleText ), __METHOD__ );
+ $res = $dbw->select( 'page', [ 'page_id', 'page_latest' ],
+ [ 'page_namespace' => $p[0], 'page_title' => $titleText ], __METHOD__ );
- $inserts = array();
+ $inserts = [];
foreach ( $res as $r ) {
- $inserts = array(
+ $inserts = [
'rt_page' => $r->page_id,
'rt_revision' => $r->page_latest,
'rt_type' => RevTag::getType( 'fuzzy' )
- );
+ ];
}
$dbw->replace( 'revtag', 'rt_type_page_revision', $inserts, __METHOD__ );
}
}
}
-$maintClass = 'CreateCheckIndex';
+$maintClass = CreateCheckIndex::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/createMessageIndex.php b/www/wiki/extensions/Translate/scripts/createMessageIndex.php
index a6091d35..9005fef4 100644
--- a/www/wiki/extensions/Translate/scripts/createMessageIndex.php
+++ b/www/wiki/extensions/Translate/scripts/createMessageIndex.php
@@ -5,7 +5,7 @@
* is no other way to know which message group a message belongs to.
*
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -30,5 +30,5 @@ class CreateMessageIndex extends Maintenance {
}
}
-$maintClass = 'CreateMessageIndex';
-require_once DO_MAINTENANCE;
+$maintClass = CreateMessageIndex::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/expand-groupspec.php b/www/wiki/extensions/Translate/scripts/expand-groupspec.php
new file mode 100644
index 00000000..a8627cbb
--- /dev/null
+++ b/www/wiki/extensions/Translate/scripts/expand-groupspec.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Script that expands a message group specification (such as page-News*,page-Help*).
+ *
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class TranslateExpandGroupSpec extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->mDescription = 'Expands a message group specification.';
+ $this->addOption(
+ 'exportable',
+ 'List only groups that can be exported',
+ false, /*required*/
+ false /*has arg*/
+ );
+
+ $this->addArg(
+ 'specification',
+ 'For example page-*,main',
+ true, /*required*/
+ false /*has arg*/
+ );
+ }
+
+ public function execute() {
+ $spec = $this->getArg( 0 );
+ $patterns = explode( ',', trim( $spec ) );
+ $ids = MessageGroups::expandWildcards( $patterns );
+
+ if ( $this->getOption( 'exportable' ) ) {
+ foreach ( $ids as $index => $id ) {
+ if ( !MessageGroups::getGroup( $id ) instanceof FileBasedMessageGroup ) {
+ unset( $ids[ $index ] );
+ }
+ }
+ }
+
+ if ( $ids !== [] ) {
+ // This should not be affected by --quiet
+ echo implode( "\n", $ids ) . "\n";
+ }
+ }
+}
+
+$maintClass = TranslateExpandGroupSpec::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/export.php b/www/wiki/extensions/Translate/scripts/export.php
index 415b9b83..469bd2ac 100644
--- a/www/wiki/extensions/Translate/scripts/export.php
+++ b/www/wiki/extensions/Translate/scripts/export.php
@@ -5,7 +5,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -107,7 +107,7 @@ class CommandlineExport extends Maintenance {
$noLocation = '--no-location ';
};
- $skip = array();
+ $skip = [];
if ( $this->hasOption( 'skip' ) ) {
$skip = array_map( 'trim', explode( ',', $this->getOption( 'skip' ) ) );
}
@@ -147,7 +147,7 @@ class CommandlineExport extends Maintenance {
$changeFilter = false;
$hours = $this->getOption( 'hours' );
if ( $hours ) {
- $namespaces = array();
+ $namespaces = [];
/** @var FileBasedMessageGroup $group */
foreach ( $groups as $group ) {
@@ -157,7 +157,7 @@ class CommandlineExport extends Maintenance {
$namespaces = array_keys( $namespaces );
$bots = true;
- $changeFilter = array();
+ $changeFilter = [];
$rows = TranslateUtils::translationChanges( $hours, $bots, $namespaces );
foreach ( $rows as $row ) {
$title = Title::makeTitle( $row->rc_namespace, $row->rc_title );
@@ -173,7 +173,7 @@ class CommandlineExport extends Maintenance {
}
}
- $skipGroups = array();
+ $skipGroups = [];
if ( $this->hasOption( 'skipgroup' ) ) {
$skipGroups = array_map( 'trim', explode( ',', $this->getOption( 'skipgroup' ) ) );
}
@@ -251,7 +251,7 @@ class CommandlineExport extends Maintenance {
$whitelist = $group->getTranslatableLanguages();
foreach ( $langs as $lang ) {
- // Do not export languges that are blacklisted (or not whitelisted).
+ // Do not export languages that are blacklisted (or not whitelisted).
// Also check that whitelist is not null, which means that all
// languages are allowed for translation and export.
if ( is_array( $whitelist ) && !isset( $whitelist[$lang] ) ) {
@@ -297,5 +297,5 @@ class CommandlineExport extends Maintenance {
}
}
-$maintClass = 'CommandlineExport';
+$maintClass = CommandlineExport::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/fallbacks-graph.php b/www/wiki/extensions/Translate/scripts/fallbacks-graph.php
index 25a617ff..e625467b 100644
--- a/www/wiki/extensions/Translate/scripts/fallbacks-graph.php
+++ b/www/wiki/extensions/Translate/scripts/fallbacks-graph.php
@@ -4,8 +4,7 @@
*
* @author Niklas Laxström
*
- * @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -44,11 +43,10 @@ $1
XML;
$langs = Language::fetchLanguageNames( null, 'mw' );
- $nodes = $edges = array();
+ $nodes = $edges = [];
foreach ( $langs as $code => $name ) {
-
$fallbacks = Language::getFallbacksFor( $code );
- if ( $fallbacks === array( 'en' ) ) {
+ if ( $fallbacks === [ 'en' ] ) {
continue;
}
@@ -57,7 +55,7 @@ XML;
$prev = $code;
foreach ( $fallbacks as $fb ) {
$nodes[$fb] = $this->createNode( $fb );
- $edges[$fb . $prev] = Xml::element( 'edge', array( 'source' => $prev, 'target' => $fb ) );
+ $edges[$fb . $prev] = Xml::element( 'edge', [ 'source' => $prev, 'target' => $fb ] );
$prev = $fb;
}
}
@@ -68,16 +66,22 @@ XML;
}
protected function createNode( $code ) {
- return
- Xml::openElement( 'node', array( 'id' => $code ) )
- . Xml::openElement( 'data', array( 'key' => 'code' ) )
- . Xml::openElement( 'y:Shpapenode' )
- . Xml::element( 'y:NodeLabel', array(), $code )
- . Xml::closeElement( 'y:Shpapenode' )
+ return Xml::openElement( 'node', [ 'id' => $code ] )
+ . Xml::openElement( 'data', [ 'key' => 'code' ] )
+ . Xml::openElement( 'y:Shapenode' )
+ . Xml::element(
+ 'y:Geometry',
+ [ 'height' => 30, 'width' => max( 30, 10 * strlen( $code ) ) ],
+ ''
+ )
+ . Xml::element( 'y:NodeLabel', [], $code )
+ . Xml::element( 'y:BorderStyle', [ 'hasColor' => 'false' ], '' )
+ . Xml::element( 'y:Fill', [ 'hasColor' => 'false' ], '' )
+ . Xml::closeElement( 'y:Shapenode' )
. Xml::closeElement( 'data' )
. Xml::closeElement( 'node' );
}
}
-$maintClass = 'FallbacksCompare';
-require_once DO_MAINTENANCE;
+$maintClass = FallbacksCompare::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/fuzzy.php b/www/wiki/extensions/Translate/scripts/fuzzy.php
index 54b2110f..30aff9c9 100644
--- a/www/wiki/extensions/Translate/scripts/fuzzy.php
+++ b/www/wiki/extensions/Translate/scripts/fuzzy.php
@@ -6,7 +6,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2007-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
// Standard boilerplate to define $IP
@@ -26,8 +26,8 @@ class Fuzzy extends Maintenance {
parent::__construct();
$this->mDescription = 'Fuzzy bot command line script.';
$this->addArg(
- 'messages',
- 'Message to fuzzy'
+ 'arg',
+ 'Title pattern or username if user option is provided.'
);
$this->addOption(
'really',
@@ -45,21 +45,34 @@ class Fuzzy extends Maintenance {
false, /*required*/
true /*has arg*/
);
+ $this->addOption(
+ 'user',
+ '(optional) Fuzzy the translations made by user given as an argument.',
+ false, /*required*/
+ false /*has arg*/
+ );
}
public function execute() {
- $bot = new FuzzyScript( $this->getArg( 0 ) );
-
+ $skipLanguages = [];
if ( $this->hasOption( 'skiplanguages' ) ) {
- $bot->skipLanguages = array_map(
+ $skipLanguages = array_map(
'trim',
explode( ',', $this->getOption( 'skiplanguages' ) )
);
}
+ if ( $this->hasOption( 'user' ) ) {
+ $user = User::newFromName( $this->getArg( 0 ) );
+ $pages = FuzzyScript::getPagesForUser( $user, $skipLanguages );
+ } else {
+ $pages = FuzzyScript::getPagesForPattern( $this->getArg( 0 ), $skipLanguages );
+ }
+
+ $bot = new FuzzyScript( $pages );
$bot->comment = $this->getOption( 'comment' );
$bot->dryrun = !$this->hasOption( 'really' );
- $bot->setProgressCallback( array( $this, 'myOutput' ) );
+ $bot->setProgressCallback( [ $this, 'myOutput' ] );
$bot->execute();
}
@@ -67,7 +80,7 @@ class Fuzzy extends Maintenance {
* Public alternative for protected Maintenance::output() as we need to get
* messages from the ChangeSyncer class to the commandline.
* @param string $text The text to show to the user
- * @param string $channel Unique identifier for the channel.
+ * @param string|null $channel Unique identifier for the channel.
* @param bool $error Whether this is an error message
*/
public function myOutput( $text, $channel = null, $error = false ) {
@@ -84,11 +97,6 @@ class Fuzzy extends Maintenance {
*/
class FuzzyScript {
/**
- /* @var string[] List of patterns to mark.
- */
- private $titles = array();
-
- /**
* @var bool Check for configuration problems.
*/
private $allclear = false;
@@ -107,15 +115,10 @@ class FuzzyScript {
public $comment;
/**
- * string[] List of language codes to skip.
+ * @param array $pages
*/
- public $skipLanguages = array();
-
- /**
- * @param string[] $titles
- */
- public function __construct( $titles ) {
- $this->titles = (array)$titles;
+ public function __construct( $pages ) {
+ $this->pages = $pages;
$this->allclear = true;
}
@@ -136,7 +139,7 @@ class FuzzyScript {
return;
}
- $msgs = $this->getPages();
+ $msgs = $this->pages;
$count = count( $msgs );
$this->reportProgress( "Found $count pages to update.", 'pagecount' );
@@ -148,51 +151,99 @@ class FuzzyScript {
}
/// Searches pages that match given patterns
- private function getPages() {
+ public static function getPagesForPattern( $pattern, $skipLanguages = [] ) {
global $wgTranslateMessageNamespaces;
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
- $search = array();
- foreach ( $this->titles as $title ) {
+ $search = [];
+ foreach ( (array)$pattern as $title ) {
$title = Title::newFromText( $title );
$ns = $title->getNamespace();
if ( !isset( $search[$ns] ) ) {
- $search[$ns] = array();
+ $search[$ns] = [];
}
$search[$ns][] = 'page_title' . $dbr->buildLike( $title->getDBkey(), $dbr->anyString() );
}
- $title_conds = array();
+ $title_conds = [];
foreach ( $search as $ns => $names ) {
if ( $ns === NS_MAIN ) {
$ns = $wgTranslateMessageNamespaces;
}
$titles = $dbr->makeList( $names, LIST_OR );
- $title_conds[] = $dbr->makeList( array( 'page_namespace' => $ns, $titles ), LIST_AND );
+ $title_conds[] = $dbr->makeList( [ 'page_namespace' => $ns, $titles ], LIST_AND );
}
- $conds = array(
+ $conds = [
'page_latest=rev_id',
'rev_text_id=old_id',
$dbr->makeList( $title_conds, LIST_OR ),
- );
+ ];
- if ( count( $this->skipLanguages ) ) {
- $skiplist = $dbr->makeList( $this->skipLanguages );
+ if ( count( $skipLanguages ) ) {
+ $skiplist = $dbr->makeList( $skipLanguages );
$conds[] = "substring_index(page_title, '/', -1) NOT IN ($skiplist)";
}
$rows = $dbr->select(
- array( 'page', 'revision', 'text' ),
- array( 'page_title', 'page_namespace', 'old_text', 'old_flags' ),
+ [ 'page', 'revision', 'text' ],
+ [ 'page_title', 'page_namespace', 'old_text', 'old_flags' ],
$conds,
__METHOD__
);
- $messagesContents = array();
+ $messagesContents = [];
+ foreach ( $rows as $row ) {
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ $messagesContents[] = [ $title, Revision::getRevisionText( $row ) ];
+ }
+
+ $rows->free();
+
+ return $messagesContents;
+ }
+
+ public static function getPagesForUser( User $user, $skipLanguages = [] ) {
+ global $wgTranslateMessageNamespaces;
+ $dbr = wfGetDB( DB_REPLICA );
+
+ if ( class_exists( ActorMigration::class ) ) {
+ $revWhere = ActorMigration::newMigration()->getWhere( $dbr, 'rev_user', $user );
+ } else {
+ $revWhere = [
+ 'tables' => [],
+ 'conds' => 'rev_user = ' . (int)$user->getId(),
+ 'joins' => [],
+ ];
+ }
+
+ $conds = [
+ $revWhere['conds'],
+ 'page_namespace' => $wgTranslateMessageNamespaces,
+ 'page_title' . $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() ),
+ ];
+
+ if ( count( $skipLanguages ) ) {
+ $skiplist = $dbr->makeList( $skipLanguages );
+ $conds[] = "substring_index(page_title, '/', -1) NOT IN ($skiplist)";
+ }
+
+ $rows = $dbr->select(
+ [ 'page', 'revision', 'text' ] + $revWhere['tables'],
+ [ 'page_title', 'page_namespace', 'old_text', 'old_flags' ],
+ $conds,
+ __METHOD__,
+ [],
+ [
+ 'revision' => [ 'JOIN', 'page_latest=rev_id' ],
+ 'text' => [ 'JOIN', 'rev_text_id=old_id' ],
+ ] + $revWhere['joins']
+ );
+
+ $messagesContents = [];
foreach ( $rows as $row ) {
$title = Title::makeTitle( $row->page_namespace, $row->page_title );
- $messagesContents[] = array( $title, Revision::getRevisionText( $row ) );
+ $messagesContents[] = [ $title, Revision::getRevisionText( $row ) ];
}
$rows->free();
@@ -234,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()
@@ -245,5 +296,5 @@ class FuzzyScript {
}
}
-$maintClass = 'Fuzzy';
+$maintClass = Fuzzy::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/groupStatistics.php b/www/wiki/extensions/Translate/scripts/groupStatistics.php
index e8140ddd..cc685e0f 100644
--- a/www/wiki/extensions/Translate/scripts/groupStatistics.php
+++ b/www/wiki/extensions/Translate/scripts/groupStatistics.php
@@ -8,7 +8,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2007-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
// Standard boilerplate to define $IP
@@ -23,7 +23,7 @@ require_once "$IP/maintenance/Maintenance.php";
class GroupStatistics extends Maintenance {
/**
* Array of the most spoken languages in the world.
- * Source: http://stats.wikimedia.org/EN/Sitemap.htm.
+ * Source: https://stats.wikimedia.org/EN/Sitemap.htm.
*
* Key value pairs of:
* [MediaWiki localisation code] => array(
@@ -32,62 +32,62 @@ class GroupStatistics extends Maintenance {
* [continent where localisation is spoken]
* )
*/
- public $mostSpokenLanguages = array(
- 'en' => array( 1, 1500, 'multiple' ),
- 'zh-hans' => array( 2, 1300, 'asia' ),
- 'zh-hant' => array( 2, 1300, 'asia' ),
- 'hi' => array( 3, 550, 'asia' ),
- 'ar' => array( 4, 530, 'multiple' ),
- 'es' => array( 5, 500, 'multiple' ),
- 'ms' => array( 6, 300, 'asia' ),
- 'pt' => array( 7, 290, 'multiple' ),
- 'pt-br' => array( 7, 290, 'america' ),
- 'ru' => array( 8, 278, 'multiple' ),
- 'id' => array( 9, 250, 'asia' ),
- 'bn' => array( 10, 230, 'asia' ),
- 'fr' => array( 11, 200, 'multiple' ),
- 'de' => array( 12, 185, 'europe' ),
- 'ja' => array( 13, 132, 'asia' ),
- 'fa' => array( 14, 107, 'asia' ),
- 'pnb' => array( 15, 104, 'asia' ), // Most spoken variant
- 'tl' => array( 16, 90, 'asia' ),
- 'mr' => array( 17, 90, 'asia' ),
- 'vi' => array( 18, 80, 'asia' ),
- 'jv' => array( 19, 80, 'asia' ),
- 'te' => array( 20, 80, 'asia' ),
- 'ko' => array( 21, 78, 'asia' ),
- 'wuu' => array( 22, 77, 'asia' ),
- 'arz' => array( 23, 76, 'africa' ),
- 'th' => array( 24, 73, 'asia' ),
- 'yue' => array( 25, 71, 'asia' ),
- 'tr' => array( 26, 70, 'multiple' ),
- 'it' => array( 27, 70, 'europe' ),
- 'ta' => array( 28, 66, 'asia' ),
- 'ur' => array( 29, 60, 'asia' ),
- 'my' => array( 30, 52, 'asia' ),
- 'sw' => array( 31, 50, 'africa' ),
- 'nan' => array( 32, 49, 'asia' ),
- 'kn' => array( 33, 47, 'asia' ),
- 'gu' => array( 34, 46, 'asia' ),
- 'uk' => array( 35, 45, 'europe' ),
- 'pl' => array( 36, 43, 'europe' ),
- 'sd' => array( 37, 41, 'asia' ),
- 'ha' => array( 38, 39, 'africa' ),
- 'ml' => array( 39, 37, 'asia' ),
- 'gan-hans' => array( 40, 35, 'asia' ),
- 'gan-hant' => array( 40, 35, 'asia' ),
- 'hak' => array( 41, 34, 'asia' ),
- 'or' => array( 42, 31, 'asia' ),
- 'ne' => array( 43, 30, 'asia' ),
- 'ro' => array( 44, 28, 'europe' ),
- 'su' => array( 45, 27, 'asia' ),
- 'az' => array( 46, 27, 'asia' ),
- 'nl' => array( 47, 27, 'europe' ),
- 'zu' => array( 48, 26, 'africa' ),
- 'ps' => array( 49, 26, 'asia' ),
- 'ckb' => array( 50, 26, 'asia' ),
- 'ku-latn' => array( 50, 26, 'asia' ),
- );
+ public $mostSpokenLanguages = [
+ 'en' => [ 1, 1500, 'multiple' ],
+ 'zh-hans' => [ 2, 1300, 'asia' ],
+ 'zh-hant' => [ 2, 1300, 'asia' ],
+ 'hi' => [ 3, 550, 'asia' ],
+ 'ar' => [ 4, 530, 'multiple' ],
+ 'es' => [ 5, 500, 'multiple' ],
+ 'ms' => [ 6, 300, 'asia' ],
+ 'pt' => [ 7, 290, 'multiple' ],
+ 'pt-br' => [ 7, 290, 'america' ],
+ 'ru' => [ 8, 278, 'multiple' ],
+ 'id' => [ 9, 250, 'asia' ],
+ 'bn' => [ 10, 230, 'asia' ],
+ 'fr' => [ 11, 200, 'multiple' ],
+ 'de' => [ 12, 185, 'europe' ],
+ 'ja' => [ 13, 132, 'asia' ],
+ 'fa' => [ 14, 107, 'asia' ],
+ 'pnb' => [ 15, 104, 'asia' ], // Most spoken variant
+ 'tl' => [ 16, 90, 'asia' ],
+ 'mr' => [ 17, 90, 'asia' ],
+ 'vi' => [ 18, 80, 'asia' ],
+ 'jv' => [ 19, 80, 'asia' ],
+ 'te' => [ 20, 80, 'asia' ],
+ 'ko' => [ 21, 78, 'asia' ],
+ 'wuu' => [ 22, 77, 'asia' ],
+ 'arz' => [ 23, 76, 'africa' ],
+ 'th' => [ 24, 73, 'asia' ],
+ 'yue' => [ 25, 71, 'asia' ],
+ 'tr' => [ 26, 70, 'multiple' ],
+ 'it' => [ 27, 70, 'europe' ],
+ 'ta' => [ 28, 66, 'asia' ],
+ 'ur' => [ 29, 60, 'asia' ],
+ 'my' => [ 30, 52, 'asia' ],
+ 'sw' => [ 31, 50, 'africa' ],
+ 'nan' => [ 32, 49, 'asia' ],
+ 'kn' => [ 33, 47, 'asia' ],
+ 'gu' => [ 34, 46, 'asia' ],
+ 'uk' => [ 35, 45, 'europe' ],
+ 'pl' => [ 36, 43, 'europe' ],
+ 'sd' => [ 37, 41, 'asia' ],
+ 'ha' => [ 38, 39, 'africa' ],
+ 'ml' => [ 39, 37, 'asia' ],
+ 'gan-hans' => [ 40, 35, 'asia' ],
+ 'gan-hant' => [ 40, 35, 'asia' ],
+ 'hak' => [ 41, 34, 'asia' ],
+ 'or' => [ 42, 31, 'asia' ],
+ 'ne' => [ 43, 30, 'asia' ],
+ 'ro' => [ 44, 28, 'europe' ],
+ 'su' => [ 45, 27, 'asia' ],
+ 'az' => [ 46, 27, 'asia' ],
+ 'nl' => [ 47, 27, 'europe' ],
+ 'zu' => [ 48, 26, 'africa' ],
+ 'ps' => [ 49, 26, 'asia' ],
+ 'ckb' => [ 50, 26, 'asia' ],
+ 'ku-latn' => [ 50, 26, 'asia' ],
+ ];
/**
* Variable with key-value pairs with a named index and an array of key-value
@@ -97,32 +97,32 @@ class GroupStatistics extends Maintenance {
* Definitions in this variable can be used to report weighted meta localisation
* scores for the 50 most spoken languages.
*
- * @todo Allow weighted reporting for all available languges.
+ * @todo Allow weighted reporting for all available languages.
*/
- public $localisedWeights = array(
- 'wikimedia' => array(
+ public $localisedWeights = [
+ 'wikimedia' => [
// 'core-0-mostused' => 40,
'core' => 50,
'ext-0-wikimedia' => 50
- ),
- 'fundraiser' => array(
+ ],
+ 'fundraiser' => [
'ext-di-di' => 16,
'ext-di-pfpg' => 84,
- ),
- 'mediawiki' => array(
+ ],
+ 'mediawiki' => [
// 'core-0-mostused' => 30,
'core' => 50,
'ext-0-wikimedia' => 25,
'ext-0-all' => 25
- )
- );
+ ]
+ ];
/**
* Code map to map localisation codes to Wikimedia project codes. Only
* exclusion and remapping is defined here. It is assumed that the first part
* of the localisation code is the WMF project name otherwise (zh-hans -> zh).
*/
- public $wikimediaCodeMap = array(
+ public $wikimediaCodeMap = [
// Codes containing a dash
'bat-smg' => 'bat-smg',
'cbk-zam' => 'cbk-zam',
@@ -186,7 +186,7 @@ class GroupStatistics extends Maintenance {
'zh-my' => '', // zh
'zh-tw' => '', // zh
'zh-yue' => '', // yue
- );
+ ];
public function __construct() {
parent::__construct();
@@ -288,7 +288,7 @@ class GroupStatistics extends Maintenance {
$out = new TranslateStatsOutput();
}
- $skipLanguages = array();
+ $skipLanguages = [];
if ( $this->hasOption( 'skiplanguages' ) ) {
$skipLanguages = array_map(
'trim',
@@ -299,7 +299,7 @@ class GroupStatistics extends Maintenance {
$reportScore = false;
// Check if score should be reported and prepare weights
$most = $this->getOption( 'most' );
- $weights = array();
+ $weights = [];
if ( $most && isset( $this->localisedWeights[$most] ) ) {
$reportScore = true;
@@ -319,7 +319,7 @@ class GroupStatistics extends Maintenance {
$wmfscore = $this->hasOption( 'wmfscore' );
// Get groups from input
- $groups = array();
+ $groups = [];
if ( $reportScore ) {
$reqGroups = array_keys( $this->localisedWeights[$most] );
} elseif ( $wmfscore ) {
@@ -347,11 +347,11 @@ class GroupStatistics extends Maintenance {
$out = new CsvStatsOutput();
$reportScore = true;
- $weights = array();
+ $weights = [];
foreach ( $this->localisedWeights['wikimedia'] as $weight ) {
$weights[] = $weight;
}
- $wmfscores = array();
+ $wmfscores = [];
}
if ( !count( $groups ) ) {
@@ -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 );
@@ -428,13 +428,13 @@ class GroupStatistics extends Maintenance {
$out->blockend();
}
- $rows = array();
+ $rows = [];
foreach ( $languages as $code => $name ) {
// Skip list
if ( in_array( $code, $skipLanguages ) ) {
continue;
}
- $rows[$code] = array();
+ $rows[$code] = [];
}
foreach ( $groups as $groupName => $g ) {
@@ -463,10 +463,10 @@ class GroupStatistics extends Maintenance {
$translated = $stats[$code][MessageGroupStats::TRANSLATED];
$fuzzy = $stats[$code][MessageGroupStats::FUZZY];
- $rows[$code][] = array( false, $translated, $total );
+ $rows[$code][] = [ false, $translated, $total ];
if ( $this->hasOption( 'fuzzy' ) ) {
- $rows[$code][] = array( true, $fuzzy, $total );
+ $rows[$code][] = [ true, $fuzzy, $total ];
}
}
@@ -477,7 +477,7 @@ class GroupStatistics extends Maintenance {
$summarise = false;
if ( $this->hasOption( 'summary' ) ) {
$summarise = true;
- $summary = array();
+ $summary = [];
}
foreach ( $languages as $code => $name ) {
@@ -512,7 +512,7 @@ class GroupStatistics extends Maintenance {
continue;
}
- // Output the the row
+ // Output the row
if ( !$wmfscore ) {
$out->blockstart();
}
@@ -579,7 +579,7 @@ class GroupStatistics extends Maintenance {
$newscore = $score;
}
- $summary[$continent] = array( $newcount, $newscore );
+ $summary[$continent] = [ $newcount, $newscore ];
}
if ( $wmfscore ) {
@@ -598,9 +598,9 @@ class GroupStatistics extends Maintenance {
$tmpWmfScore = (int)$wmfscores[$wmfcode]['score'];
$tmpWmfCount = (int)$wmfscores[$wmfcode]['count'];
$score = ( ( $tmpWmfCount * $tmpWmfScore ) + (int)$score ) / $count;
- $wmfscores[$wmfcode] = array( 'score' => $score, 'count' => $count );
+ $wmfscores[$wmfcode] = [ 'score' => $score, 'count' => $count ];
} else {
- $wmfscores[$wmfcode] = array( 'score' => $score, 'count' => 1 );
+ $wmfscores[$wmfcode] = [ 'score' => $score, 'count' => 1 ];
}
} else {
$out->element( $score );
@@ -638,7 +638,7 @@ class GroupStatistics extends Maintenance {
ksort( $summary );
- $totals = array( 0, 0 );
+ $totals = [ 0, 0 ];
foreach ( $summary as $key => $values ) {
$out->blockstart();
@@ -677,5 +677,5 @@ class GroupStatistics extends Maintenance {
}
}
-$maintClass = 'GroupStatistics';
+$maintClass = GroupStatistics::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/languageeditstats.php b/www/wiki/extensions/Translate/scripts/languageeditstats.php
index 053627ad..7f67a1c4 100644
--- a/www/wiki/extensions/Translate/scripts/languageeditstats.php
+++ b/www/wiki/extensions/Translate/scripts/languageeditstats.php
@@ -5,7 +5,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2008-2010 Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
* @ingroup Script Stats
*/
@@ -19,7 +19,7 @@ if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
}
require_once "$IP/maintenance/Maintenance.php";
-class LanguageEditStats extends Maintenance {
+class Languageeditstats extends Maintenance {
public function __construct() {
parent::__construct();
$this->mDescription = 'Script to show number of edits per language for all message groups.';
@@ -48,15 +48,11 @@ 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 = array();
+ $namespaces = [];
if ( $this->hasOption( 'ns' ) ) {
$input = explode( ',', $this->getOption( 'ns' ) );
@@ -75,7 +71,7 @@ class LanguageEditStats extends Maintenance {
/**
* Get counts for edits per language code after filtering out edits by FuzzyBot
*/
- $codes = array();
+ $codes = [];
global $wgTranslateFuzzyBotName;
foreach ( $rows as $_ ) {
// Filter out edits by $wgTranslateFuzzyBotName
@@ -107,5 +103,5 @@ class LanguageEditStats extends Maintenance {
}
}
-$maintClass = 'LanguageEditStats';
+$maintClass = Languageeditstats::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/magic-export.php b/www/wiki/extensions/Translate/scripts/magic-export.php
index 54505712..6284553d 100644
--- a/www/wiki/extensions/Translate/scripts/magic-export.php
+++ b/www/wiki/extensions/Translate/scripts/magic-export.php
@@ -5,7 +5,7 @@
* @author Robert Leverington <robert@rhl.me.uk>
*
* @copyright Copyright © 2010 Robert Leverington
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -24,8 +24,9 @@ class MagicExport extends Maintenance {
protected $type;
protected $target;
- protected $handles = array();
- protected $messagesOld = array();
+ protected $handles = [];
+ protected $messagesOld = [];
+ protected $extraInformation = [];
public function __construct() {
parent::__construct();
@@ -99,7 +100,13 @@ class MagicExport extends Maintenance {
}
$inFile = $group->replaceVariables( $inFile, 'en' );
- $outFile = $this->target . '/' . $outFile;
+ $outFile = $this->target . '/' . $outFile;
+ $varName = null;
+
+ if ( !is_readable( $inFile ) ) {
+ $this->error( "File '$inFile' not readable." );
+ continue;
+ }
include $inFile;
switch ( $this->type ) {
@@ -107,66 +114,100 @@ class MagicExport extends Maintenance {
if ( isset( $aliases ) ) {
$this->messagesOld[$group->getId()] = $aliases;
unset( $aliases );
+ $varName = '$aliases';
} elseif ( isset( $specialPageAliases ) ) {
$this->messagesOld[$group->getId()] = $specialPageAliases;
unset( $specialPageAliases );
+ $varName = '$specialPageAliases';
} else {
$this->error( "File '$inFile' does not contain an aliases array." );
- continue;
+ continue 2;
}
break;
case 'magic':
if ( !isset( $magicWords ) ) {
$this->error( "File '$inFile' does not contain a magic words array." );
- continue;
+ continue 2;
}
$this->messagesOld[$group->getId()] = $magicWords;
unset( $magicWords );
+ $varName = '$magicWords';
break;
}
wfMkdirParents( dirname( $outFile ), null, __METHOD__ );
$this->handles[$group->getId()] = fopen( $outFile, 'w' );
- fwrite( $this->handles[$group->getId()], $this->readHeader( $inFile ) );
+ $headerInformation = $this->readHeader( $inFile, $varName );
+ fwrite( $this->handles[$group->getId()], $headerInformation['fileBegin'] );
+ $this->extraInformation[$group->getId()] = $headerInformation;
$this->output( "\t{$group->getId()}\n" );
}
}
- protected function readHeader( $file ) {
+ protected function readHeader( $file, $varName ) {
$data = file_get_contents( $file );
// Seek first '*/'.
- $end = strpos( $data, '*/' ) + 2;
+ $end = strpos( $data, '*/' );
+
+ // But not when it is the english comment
+ $varPos = strpos( $data, $varName );
+ if ( $varPos && $end && $varPos <= $end ) {
+ $end = false;
+ }
if ( $end === false ) {
- return "<?php\n";
+ $fileBegin = "<?php\n";
+ } else {
+ // Grab header.
+ $fileBegin = substr( $data, 0, $end + 2 );
}
- // Grab header.
- return substr( $data, 0, $end );
+ // preserve the phpcs codingStandardsIgnoreFile, if exists
+ $preserveIgnoreTag = strpos( $data, '@codingStandardsIgnoreFile' ) !== false;
+
+ // preserve the long array syntax, if varName is written with it
+ $preserveLongArraySyntax = preg_match(
+ '/' . preg_quote( $varName, '/' ) . '\s*=\s*array\s*\(\s*\)\s*;/',
+ $data
+ );
+
+ // avoid difference by the last character
+ $preserveNewlineAtEnd = substr( $data, -1 ) === "\n";
+
+ return [
+ 'fileBegin' => $fileBegin,
+ 'preserveIgnoreTag' => $preserveIgnoreTag,
+ 'preserveLongArraySyntax' => $preserveLongArraySyntax,
+ 'preserveNewlineAtEnd' => $preserveNewlineAtEnd,
+ ];
}
/**
* Write the opening of the files for each output file handle.
*/
protected function writeHeaders() {
- foreach ( $this->handles as $handle ) {
+ foreach ( $this->handles as $group => $handle ) {
+ $arraySyntax = $this->extraInformation[$group]['preserveLongArraySyntax']
+ ? 'array()'
+ : '[]';
switch ( $this->type ) {
case 'special':
+ $ignoreTag = $this->extraInformation[$group]['preserveIgnoreTag']
+ ? "\n// @codingStandardsIgnoreFile"
+ : '';
fwrite( $handle, <<<PHP
+$ignoreTag
-// @codingStandardsIgnoreFile
-
-\$specialPageAliases = array();
+\$specialPageAliases = $arraySyntax;
PHP
);
break;
case 'magic':
fwrite( $handle, <<<PHP
-
-\$magicWords = array();
+\$magicWords = $arraySyntax;
PHP
);
break;
@@ -182,7 +223,7 @@ PHP
protected function writeFiles() {
$langs = TranslateUtils::parseLanguageCodes( '*' );
unset( $langs[array_search( 'en', $langs )] );
- $langs = array_merge( array( 'en' ), $langs );
+ $langs = array_merge( [ 'en' ], $langs );
foreach ( $langs as $l ) {
// Load message page.
switch ( $this->type ) {
@@ -200,7 +241,7 @@ PHP
if ( !$title || !$title->exists() ) {
$this->output( "Skiping $l...\n" );
- $messagesNew = array();
+ $messagesNew = [];
} else {
$this->output( "Processing $l...\n" );
@@ -214,7 +255,7 @@ PHP
array_shift( $segments );
unset( $segments[count( $segments ) - 1] );
unset( $segments[count( $segments ) - 1] );
- $messagesNew = array();
+ $messagesNew = [];
foreach ( $segments as $segment ) {
$parts = explode( ' = ', $segment );
$key = array_shift( $parts );
@@ -229,7 +270,7 @@ PHP
foreach ( $this->handles as $group => $handle ) {
// Find messages to write to this handle.
- $messagesOut = array();
+ $messagesOut = [];
if ( !isset( $this->messagesOld[$group] ) ) {
continue;
}
@@ -241,42 +282,53 @@ PHP
$messagesOut[$key] = $this->messagesOld[$group][$l][$key];
}
}
+ if ( $this->extraInformation[$group]['preserveLongArraySyntax'] ) {
+ $arrayStart = 'array(';
+ $arrayEnd = ')';
+ } else {
+ $arrayStart = '[';
+ $arrayEnd = ']';
+ }
// If there are messages to write, write them.
- if ( count( $messagesOut ) > 0 ) {
+ if ( $messagesOut !== [] ) {
$out = '';
switch ( $this->type ) {
case 'special':
$out .= "\n\n/** {$namesEn[$l]} ({$namesNative[$l]}) " .
- "*/\n\$specialPageAliases['{$l}'] = array(\n";
+ "*/\n\$specialPageAliases['{$l}'] = {$arrayStart}\n";
break;
case 'magic':
$out .= "\n\n/** {$namesEn[$l]} ({$namesNative[$l]}) *" .
- "/\n\$magicWords['{$l}'] = array(\n";
+ "/\n\$magicWords['{$l}'] = {$arrayStart}\n";
break;
}
foreach ( $messagesOut as $key => $translations ) {
+ if ( !is_array( $translations ) ) {
+ $this->error( "$l in $group has not an array..." );
+ continue;
+ }
foreach ( $translations as $id => $translation ) {
$translations[$id] = addslashes( $translation );
- if ( $this->type === 'magic' && $translation == 0 ) {
+ if ( $this->type === 'magic' && $translation === 0 ) {
unset( $translations[$id] );
}
}
$translations = implode( "', '", $translations );
switch ( $this->type ) {
case 'special':
- $out .= "\t'$key' => array( '$translations' ),\n";
+ $out .= "\t'$key' => $arrayStart '$translations' $arrayEnd,\n";
break;
case 'magic':
if ( $this->messagesOld[$group]['en'][$key][0] === 0 ) {
- $out .= "\t'$key' => array( 0, '$translations' ),\n";
+ $out .= "\t'$key' => $arrayStart 0, '$translations' $arrayEnd,\n";
} else {
- $out .= "\t'$key' => array( '$translations' ),\n";
+ $out .= "\t'$key' => $arrayStart '$translations' $arrayEnd,\n";
}
break;
}
}
- $out .= ');';
+ $out .= "$arrayEnd;";
fwrite( $handle, $out );
}
}
@@ -288,6 +340,12 @@ PHP
*/
protected function writeFooters() {
$this->output( "Writing file footers...\n" );
+ foreach ( $this->handles as $group => $handle ) {
+ if ( $this->extraInformation[$group]['preserveNewlineAtEnd'] ) {
+ // php files should end with a newline
+ fwrite( $handle, "\n" );
+ }
+ }
}
/**
@@ -301,5 +359,5 @@ PHP
}
}
-$maintClass = 'MagicExport';
-require_once DO_MAINTENANCE;
+$maintClass = MagicExport::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/migrate-schema2.php b/www/wiki/extensions/Translate/scripts/migrate-schema2.php
index f07b20b0..8cf7d6ee 100644
--- a/www/wiki/extensions/Translate/scripts/migrate-schema2.php
+++ b/www/wiki/extensions/Translate/scripts/migrate-schema2.php
@@ -4,7 +4,7 @@
*
* @author Niklas Laxström
* @copyright Copyright © 2011, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -49,16 +49,16 @@ class TSchema2 extends Maintenance {
$res = $dbw->select(
'revtag_type',
- array( 'rtt_id', 'rtt_name' ),
- array(),
+ [ 'rtt_id', 'rtt_name' ],
+ [],
__METHOD__
);
foreach ( $res as $row ) {
$dbw->update(
'revtag',
- array( 'rt_type' => $row->rtt_name ),
- array( 'rt_type' => (string)$row->rtt_id ),
+ [ 'rt_type' => $row->rtt_name ],
+ [ 'rt_type' => (string)$row->rtt_id ],
__METHOD__
);
}
@@ -67,5 +67,5 @@ class TSchema2 extends Maintenance {
}
}
-$maintClass = 'TSchema2';
-require_once DO_MAINTENANCE;
+$maintClass = TSchema2::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/mwcore-export.php b/www/wiki/extensions/Translate/scripts/mwcore-export.php
index c8792131..8e352339 100644
--- a/www/wiki/extensions/Translate/scripts/mwcore-export.php
+++ b/www/wiki/extensions/Translate/scripts/mwcore-export.php
@@ -5,7 +5,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2009-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -73,7 +73,7 @@ class MwCoreExport extends Maintenance {
continue;
}
- $matches = array();
+ $matches = [];
preg_match( '~^(\$[a-zA-Z]+)\s*=~m', $export, $matches );
if ( !isset( $matches[1] ) ) {
@@ -129,5 +129,5 @@ class MwCoreExport extends Maintenance {
}
}
-$maintClass = 'MwCoreExport';
+$maintClass = MwCoreExport::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/plural-comparison.php b/www/wiki/extensions/Translate/scripts/plural-comparison.php
index b9507ae7..fe264565 100644
--- a/www/wiki/extensions/Translate/scripts/plural-comparison.php
+++ b/www/wiki/extensions/Translate/scripts/plural-comparison.php
@@ -5,7 +5,7 @@
* @author Niklas Laxström
*
* @copyright Copyright © 2010, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -111,10 +111,10 @@ class PluralCompare extends Maintenance {
$doc = new DOMDocument;
$doc->load( $fileName );
$rulesets = $doc->getElementsByTagName( 'pluralRules' );
- $plurals = array();
+ $plurals = [];
foreach ( $rulesets as $ruleset ) {
$codes = $ruleset->getAttribute( 'locales' );
- $rules = array();
+ $rules = [];
$ruleElements = $ruleset->getElementsByTagName( 'pluralRule' );
foreach ( $ruleElements as $elt ) {
$rules[] = $elt->nodeValue;
@@ -128,17 +128,13 @@ class PluralCompare extends Maintenance {
}
public function loadCLDR() {
- // @codingStandardsIgnoreStart Ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
global $IP;
- // @codingStandardsIgnoreEnd
return $this->loadPluralFile( "$IP/languages/data/plurals.xml" );
}
public function loadMediaWiki() {
- // @codingStandardsIgnoreStart Ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
global $IP;
- // @codingStandardsIgnoreEnd
$rules = $this->loadPluralFile( "$IP/languages/data/plurals.xml" );
$rulesMW = $this->loadPluralFile( "$IP/languages/data/plurals-mediawiki.xml" );
@@ -148,7 +144,7 @@ class PluralCompare extends Maintenance {
public function loadGettext() {
$gtData = file_get_contents( __DIR__ . '/../data/plural-gettext.txt' );
- $gtLanguages = array();
+ $gtLanguages = [];
foreach ( preg_split( '/\n|\r/', $gtData, -1, PREG_SPLIT_NO_EMPTY ) as $line ) {
list( $code, $rule ) = explode( "\t", $line );
$rule = preg_replace( '/^.*?plural=/', '', $rule );
@@ -159,5 +155,5 @@ class PluralCompare extends Maintenance {
}
}
-$maintClass = 'PluralCompare';
-require_once DO_MAINTENANCE;
+$maintClass = PluralCompare::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/poimport.php b/www/wiki/extensions/Translate/scripts/poimport.php
index df32a2fb..a07481d5 100644
--- a/www/wiki/extensions/Translate/scripts/poimport.php
+++ b/www/wiki/extensions/Translate/scripts/poimport.php
@@ -5,7 +5,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2007-2013 Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -18,7 +18,7 @@ if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
}
require_once "$IP/maintenance/Maintenance.php";
-class PoImport extends Maintenance {
+class Poimport extends Maintenance {
public function __construct() {
parent::__construct();
$this->mDescription = 'Po file importer (does not make changes unless specified).';
@@ -45,7 +45,7 @@ class PoImport extends Maintenance {
public function execute() {
// Parse the po file.
$p = new PoImporter( $this->getOption( 'file' ) );
- $p->setProgressCallback( array( $this, 'myOutput' ) );
+ $p->setProgressCallback( [ $this, 'myOutput' ] );
list( $changes, $group ) = $p->parse();
if ( !count( $changes ) ) {
@@ -61,7 +61,7 @@ class PoImport extends Maintenance {
!$this->hasOption( 'really' )
);
- $w->setProgressCallback( array( $this, 'myOutput' ) );
+ $w->setProgressCallback( [ $this, 'myOutput' ] );
$w->execute();
}
@@ -69,7 +69,7 @@ class PoImport extends Maintenance {
* Public alternative for protected Maintenance::output() as we need to get
* messages from the ChangeSyncer class to the commandline.
* @param string $text The text to show to the user
- * @param string $channel Unique identifier for the channel.
+ * @param string|null $channel Unique identifier for the channel.
* @param bool $error Whether this is an error message
*/
public function myOutput( $text, $channel = null, $error = false ) {
@@ -138,7 +138,7 @@ class PoImporter {
$data = file_get_contents( $this->file );
$data = str_replace( "\r\n", "\n", $data );
- $matches = array();
+ $matches = [];
if ( preg_match( '/X-Language-Code:\s+(.*)\\\n/', $data, $matches ) ) {
$code = $matches[1];
$this->reportProgress( "Detected language as $code", 'code' );
@@ -165,9 +165,9 @@ class PoImporter {
$quotePattern = '/(^"|"$\n?)/m';
$sections = preg_split( '/\n{2,}/', $data );
- $changes = array();
+ $changes = [];
foreach ( $sections as $section ) {
- $matches = array();
+ $matches = [];
if ( preg_match( "/^msgctxt\s($poformat)/mx", $section, $matches ) ) {
// Remove quoting
$key = preg_replace( $quotePattern, '', $matches[1] );
@@ -179,7 +179,7 @@ class PoImporter {
} else {
continue;
}
- $matches = array();
+ $matches = [];
if ( preg_match( "/^msgstr\s($poformat)/mx", $section, $matches ) ) {
// Remove quoting
$translation = preg_replace( $quotePattern, '', $matches[1] );
@@ -210,7 +210,7 @@ class PoImporter {
}
}
- return array( $changes, $groupId );
+ return [ $changes, $groupId ];
}
}
@@ -223,7 +223,7 @@ class WikiWriter {
protected $user;
- private $changes = array();
+ private $changes = [];
private $dryrun = true;
private $group = null;
@@ -318,5 +318,5 @@ class WikiWriter {
}
}
-$maintClass = 'PoImport';
+$maintClass = Poimport::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/populateFuzzy.php b/www/wiki/extensions/Translate/scripts/populateFuzzy.php
index 5bac0ca7..32ff07ce 100644
--- a/www/wiki/extensions/Translate/scripts/populateFuzzy.php
+++ b/www/wiki/extensions/Translate/scripts/populateFuzzy.php
@@ -4,7 +4,7 @@
*
* @author Niklas Laxström
* @copyright Copyright © 2009-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -45,20 +45,20 @@ class PopulateFuzzy extends Maintenance {
}
$dbw = wfGetDB( DB_MASTER );
- $tables = array( 'page', 'text', 'revision' );
- $fields = array( 'page_id', 'page_title', 'page_namespace', 'rev_id', 'old_text', 'old_flags' );
- $conds = array(
+ $tables = [ 'page', 'text', 'revision' ];
+ $fields = [ 'page_id', 'page_title', 'page_namespace', 'rev_id', 'old_text', 'old_flags' ];
+ $conds = [
'page_latest = rev_id',
'old_id = rev_text_id',
'page_namespace' => $namespace,
- );
+ ];
$limit = 100;
$offset = 0;
while ( true ) {
- $inserts = array();
+ $inserts = [];
$this->output( '.', 0 );
- $options = array( 'LIMIT' => $limit, 'OFFSET' => $offset );
+ $options = [ 'LIMIT' => $limit, 'OFFSET' => $offset ];
$res = $dbw->select( $tables, $fields, $conds, __METHOD__, $options );
if ( !$res->numRows() ) {
@@ -68,11 +68,11 @@ class PopulateFuzzy extends Maintenance {
foreach ( $res as $r ) {
$text = Revision::getRevisionText( $r );
if ( strpos( $text, TRANSLATE_FUZZY ) !== false ) {
- $inserts[] = array(
+ $inserts[] = [
'rt_page' => $r->page_id,
'rt_revision' => $r->rev_id,
'rt_type' => RevTag::getType( 'fuzzy' ),
- );
+ ];
}
}
@@ -83,5 +83,5 @@ class PopulateFuzzy extends Maintenance {
}
}
-$maintClass = 'PopulateFuzzy';
+$maintClass = PopulateFuzzy::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/processMessageChanges.php b/www/wiki/extensions/Translate/scripts/processMessageChanges.php
index e0915ced..cca7e8cd 100644
--- a/www/wiki/extensions/Translate/scripts/processMessageChanges.php
+++ b/www/wiki/extensions/Translate/scripts/processMessageChanges.php
@@ -5,7 +5,7 @@
* @author Niklas Laxström
*
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -28,7 +28,7 @@ require_once "$IP/maintenance/Maintenance.php";
* @since 2012-04-23
*/
class ProcessMessageChanges extends Maintenance {
- protected $changes = array();
+ protected $changes = [];
/**
* @var int
@@ -68,7 +68,7 @@ class ProcessMessageChanges extends Maintenance {
public function execute() {
$groups = $this->getGroups();
- $changes = array();
+ $changes = [];
$comparator = new ExternalMessageSourceStateComparator();
$scripted = $this->hasOption( 'safe-import' );
@@ -84,7 +84,7 @@ class ProcessMessageChanges extends Maintenance {
// Remove all groups without changes
$changes = array_filter( $changes );
- if ( $changes === array() ) {
+ if ( $changes === [] ) {
if ( !$scripted ) {
$this->output( "No changes found\n" );
}
@@ -151,7 +151,7 @@ class ProcessMessageChanges extends Maintenance {
$this->output( "Imported $count new messages or translations for $group.\n" );
}
- if ( $info['skipped'] !== array() ) {
+ if ( $info['skipped'] !== [] ) {
$skipped = implode( ', ', array_keys( $info['skipped'] ) );
$this->output( "There are changes to check for groups $skipped.\n" );
$url = SpecialPage::getTitleFor( 'ManageMessageGroups', $info['name'] )->getFullURL();
@@ -160,5 +160,5 @@ class ProcessMessageChanges extends Maintenance {
}
}
-$maintClass = 'ProcessMessageChanges';
+$maintClass = ProcessMessageChanges::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/refresh-translatable-pages.php b/www/wiki/extensions/Translate/scripts/refresh-translatable-pages.php
index c92d853b..c5e0b106 100644
--- a/www/wiki/extensions/Translate/scripts/refresh-translatable-pages.php
+++ b/www/wiki/extensions/Translate/scripts/refresh-translatable-pages.php
@@ -3,7 +3,7 @@
* Script to ensure all translation pages are up to date.
*
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -25,11 +25,13 @@ class RefreshTranslatablePages extends Maintenance {
parent::__construct();
$this->mDescription = 'Ensure all translation pages are up to date.';
$this->setBatchSize( 300 );
+ $this->addOption( 'jobqueue', 'Use JobQueue (asynchronous)' );
}
public function execute() {
$groups = MessageGroups::singleton()->getGroups();
$counter = 0;
+ $useJobQueue = $this->hasOption( 'jobqueue' );
/** @var MessageGroup $group */
foreach ( $groups as $group ) {
@@ -42,19 +44,24 @@ class RefreshTranslatablePages extends Maintenance {
wfWaitForSlaves();
}
- // Get all translation subpages and refresh each one of them
$page = TranslatablePage::newFromTitle( $group->getTitle() );
- $translationPages = $page->getTranslationPages();
-
- foreach ( $translationPages as $subpage ) {
- $job = TranslateRenderJob::newJob( $subpage );
- $job->run();
+ $jobs = TranslationsUpdateJob::getRenderJobs( $page );
+ if ( $useJobQueue ) {
+ JobQueueGroup::singleton()->push( $jobs );
+ } else {
+ foreach ( $jobs as $job ) {
+ $job->run();
+ }
}
}
- $this->output( "Refreshed $counter translatable pages.\n" );
+ if ( $useJobQueue ) {
+ $this->output( "Queued refresh for $counter translatable pages.\n" );
+ } else {
+ $this->output( "Refreshed $counter translatable pages.\n" );
+ }
}
}
-$maintClass = 'RefreshTranslatablePages';
+$maintClass = RefreshTranslatablePages::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/sync-group.php b/www/wiki/extensions/Translate/scripts/sync-group.php
index 448ee0be..af2febad 100644
--- a/www/wiki/extensions/Translate/scripts/sync-group.php
+++ b/www/wiki/extensions/Translate/scripts/sync-group.php
@@ -7,7 +7,7 @@
* @author Siebrand Mazeland
* @copyright Copyright © 2007-2013, Niklas Laxström
* @copyright Copyright © 2009-2013, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -130,7 +130,7 @@ class SyncGroup extends Maintenance {
}
$cs = new ChangeSyncer( $group, $this );
- $cs->setProgressCallback( array( $this, 'myOutput' ) );
+ $cs->setProgressCallback( [ $this, 'myOutput' ] );
$cs->interactive = !$this->hasOption( 'noask' );
$cs->nocolor = $this->hasOption( 'nocolor' );
$cs->norc = $this->hasOption( 'norc' );
@@ -161,7 +161,7 @@ class SyncGroup extends Maintenance {
* Public alternative for protected Maintenance::output() as we need to get
* messages from the ChangeSyncer class to the commandline.
* @param string $text The text to show to the user
- * @param string $channel Unique identifier for the channel.
+ * @param string|null $channel Unique identifier for the channel.
* @param bool $error Whether this is an error message
*/
public function myOutput( $text, $channel = null, $error = false ) {
@@ -227,7 +227,7 @@ class ChangeSyncer {
return false;
}
- $matches = array();
+ $matches = [];
// PHP doesn't allow foo || return false;
// Thank
// you
@@ -481,5 +481,5 @@ class ChangeSyncer {
}
}
-$maintClass = 'SyncGroup';
+$maintClass = SyncGroup::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/test-mt.php b/www/wiki/extensions/Translate/scripts/test-mt.php
new file mode 100644
index 00000000..c335e734
--- /dev/null
+++ b/www/wiki/extensions/Translate/scripts/test-mt.php
@@ -0,0 +1,92 @@
+<?php
+/**
+ * Script to test web services from the command line
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class TestMT extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->mDescription = 'Test webservices.';
+
+ $this->addOption(
+ 'service',
+ 'Which service to use',
+ true, /*required*/
+ true /*has arg*/
+ );
+
+ $this->addOption(
+ 'from',
+ 'Source language tag',
+ true, /*required*/
+ true /*has arg*/
+ );
+
+ $this->addOption(
+ 'to',
+ 'Target language tag',
+ true, /*required*/
+ true /*has arg*/
+ );
+
+ $this->addArg(
+ 'text',
+ 'Text to translate',
+ true /*required*/
+ );
+ }
+
+ public function execute() {
+ global $wgTranslateTranslationServices;
+
+ $name = $this->getOption( 'service' );
+
+ if ( !isset( $wgTranslateTranslationServices[ $name ] ) ) {
+ $this->fatalError( "Unknown service.\n" );
+ }
+
+ $service = TranslationWebService::factory( $name, $wgTranslateTranslationServices[ $name ] );
+ $service->setLogger( new TranslateCliLogger( function ( $msg ) {
+ $this->output( "$msg\n" );
+ } ) );
+
+ $from = $this->getOption( 'from' );
+ $to = $this->getOption( 'to' );
+ $text = $this->getArg( 0 );
+
+ if ( !$service->isSupportedLanguagePair( $from, $to ) ) {
+ $this->fatalError( "Unsupported language pair.\n" );
+ }
+
+ $query = $service->getQueries( $text, $from, $to );
+ if ( $query === [] ) {
+ $this->fatalError( "Service query error.\n" );
+ }
+
+ $agg = new QueryAggregator();
+ $id = $agg->addQuery( $query[ 0 ] );
+ $agg->run();
+ $res = $agg->getResponse( $id );
+ if ( $res === null ) {
+ $this->fatalError( "Service response error.\n" );
+ }
+
+ $this->output( $service->getResultData( $res ), 1 );
+ }
+}
+
+$maintClass = TestMT::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/translator-stats-process.php b/www/wiki/extensions/Translate/scripts/translator-stats-process.php
index c45e2a90..72cbbef2 100644
--- a/www/wiki/extensions/Translate/scripts/translator-stats-process.php
+++ b/www/wiki/extensions/Translate/scripts/translator-stats-process.php
@@ -3,7 +3,7 @@
* Script to gather translator stats.
*
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -32,12 +32,12 @@ class TSP extends Maintenance {
$len = count( $a );
if ( $len === 0 ) {
return 0;
- } elseif( $len === 1 ) {
+ } elseif ( $len === 1 ) {
return $a[0];
} elseif ( $len % 2 === 0 ) {
- return $a[$len/2];
+ return $a[$len / 2];
} else {
- return ( $a[floor( $len/2 )] + $a[ceil( $len/2 )] ) / 2;
+ return ( $a[floor( $len / 2 )] + $a[ceil( $len / 2 )] ) / 2;
}
}
@@ -46,7 +46,7 @@ class TSP extends Maintenance {
// remove heading
fgets( $handle );
- $data = array();
+ $data = [];
while ( true ) {
$l = fgets( $handle );
if ( $l === false ) {
@@ -70,9 +70,9 @@ class TSP extends Maintenance {
$total = 0;
$promoted = 0;
$good = 0;
- $delay = array();
+ $delay = [];
$avg = 'N/A';
- $sbar = array();
+ $sbar = [];
foreach ( $period as $p ) {
list( $name, $reg, $edits, $translator, $promtime, $method ) = $p;
@@ -104,7 +104,7 @@ class TSP extends Maintenance {
$avg = round( array_sum( $delay ) / count( $delay ) / 3600 );
}
- if ( $sbar === array() ) {
+ if ( $sbar === [] ) {
$sbar = 'N/A';
} else {
$sbar = count( array_filter( $sbar ) ) / count( $sbar );
@@ -115,5 +115,5 @@ class TSP extends Maintenance {
}
}
-$maintClass = 'TSP';
+$maintClass = TSP::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/translator-stats.php b/www/wiki/extensions/Translate/scripts/translator-stats.php
index 8c5f8634..1847f46d 100644
--- a/www/wiki/extensions/Translate/scripts/translator-stats.php
+++ b/www/wiki/extensions/Translate/scripts/translator-stats.php
@@ -3,7 +3,7 @@
* Script to gather translator stats.
*
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -24,42 +24,50 @@ class TS extends Maintenance {
}
public function execute() {
- $dbr = wfGetDB( DB_SLAVE );
+ global $wgDisableUserGroupExpiry;
+
+ $dbr = wfGetDB( DB_REPLICA );
$users = $dbr->select(
- array( 'user', 'user_groups' ),
- array(
+ [ 'user', 'user_groups' ],
+ [
'user_name',
'user_registration',
'user_editcount',
'ug_group',
- ),
- array(
+ ],
+ [
'user_registration is not null'
- ),
+ ],
__METHOD__,
- array(
+ [
'ORDER BY' => 'user_id ASC',
- ),
- array(
- 'user_groups' => array(
+ ],
+ [
+ 'user_groups' => [
'LEFT JOIN',
- array( 'user_id=ug_user', 'ug_group' => 'translator' )
- )
- )
+ [
+ 'user_id=ug_user',
+ 'ug_group' => 'translator',
+ ( isset( $wgDisableUserGroupExpiry ) && !$wgDisableUserGroupExpiry ) ?
+ 'ug_expiry IS NULL OR ug_expiry >= ' . $dbr->addQuotes( $dbr->timestamp() ) :
+ ''
+ ]
+ ]
+ ]
);
echo "username\tregistration ts\tedit count\tis translator?\tpromoted ts\tmethod\n";
$rejected = $dbr->select(
- array( 'logging' ),
- array(
+ [ 'logging' ],
+ [
'log_title',
'log_timestamp',
- ),
- array(
+ ],
+ [
'log_type' => 'translatorsandbox',
'log_action' => 'rejected',
- ),
+ ],
__METHOD__
);
@@ -70,20 +78,20 @@ class TS extends Maintenance {
foreach ( $users as $u ) {
$logs = $dbr->select(
'logging',
- array(
+ [
'log_type',
'log_action',
'log_timestamp',
'log_params',
- ),
- array(
+ ],
+ [
'log_title' => $u->user_name,
- 'log_type' => array( 'rights', 'translatorsandbox' ),
- ),
+ 'log_type' => [ 'rights', 'translatorsandbox' ],
+ ],
__METHOD__,
- array(
+ [
'ORDER BY' => 'log_id ASC',
- )
+ ]
);
$promoted = null;
@@ -94,9 +102,9 @@ class TS extends Maintenance {
$method = 'sandbox';
break;
} elseif ( $log->log_action === 'rights' ) {
- wfSuppressWarnings();
+ Wikimedia\suppressWarnings();
$data = unserialize( $log->log_params );
- wfRestoreWarnings();
+ Wikimedia\restoreWarnings();
if ( $data === false ) {
$lines = explode( "\n", $log->log_params );
if ( strpos( $lines[1], 'translator' ) !== false ) {
@@ -119,5 +127,5 @@ class TS extends Maintenance {
}
}
-$maintClass = 'TS';
+$maintClass = TS::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/ttmserver-export.php b/www/wiki/extensions/Translate/scripts/ttmserver-export.php
index 151ab37d..64970ec2 100644
--- a/www/wiki/extensions/Translate/scripts/ttmserver-export.php
+++ b/www/wiki/extensions/Translate/scripts/ttmserver-export.php
@@ -3,7 +3,7 @@
* Script to bootstrap TTMServer translation memory
*
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -58,10 +58,10 @@ class TTMServerBootstrap extends Maintenance {
}
public function execute() {
- global $wgTranslateTranslationServices;
+ global $wgTranslateTranslationServices,
+ $wgTranslateTranslationDefaultService;
- // TTMServer is the id of the enabled-by-default instance
- $configKey = $this->getOption( 'ttmserver', 'TTMServer' );
+ $configKey = $this->getOption( 'ttmserver', $wgTranslateTranslationDefaultService );
if ( !isset( $wgTranslateTranslationServices[$configKey] ) ) {
$this->error( 'Translation memory is not configured properly', 1 );
}
@@ -84,10 +84,14 @@ class TTMServerBootstrap extends Maintenance {
$this->statusLine( "Forked thread $pid to handle bootstrapping\n" );
$status = 0;
pcntl_waitpid( $pid, $status );
+ // beginBootStrap probably failed, give up.
+ if ( $status !== 0 ) {
+ $this->error( 'Boostrap failed.', 1 );
+ }
}
$threads = $this->getOption( 'threads', 1 );
- $pids = array();
+ $pids = [];
$groups = MessageGroups::singleton()->getGroups();
foreach ( $groups as $id => $group ) {
@@ -131,9 +135,12 @@ class TTMServerBootstrap extends Maintenance {
}
protected function beginBootStrap( $config ) {
- $this->statusLine( "Cleaning up old entries...\n" );
$server = TTMServer::factory( $config );
$server->setLogger( $this );
+ if ( $server->isFrozen() ) {
+ $this->error( "The service is frozen, giving up.", 1 );
+ }
+ $this->statusLine( "Cleaning up old entries...\n" );
if ( $this->reindex ) {
$server->doMappingUpdate();
}
@@ -162,18 +169,18 @@ class TTMServerBootstrap extends Maintenance {
$server->beginBatch();
- $inserts = array();
+ $inserts = [];
foreach ( $collection->keys() as $mkey => $title ) {
$handle = new MessageHandle( $title );
- $inserts[] = array( $handle, $sourceLanguage, $collection[$mkey]->definition() );
+ $inserts[] = [ $handle, $sourceLanguage, $collection[$mkey]->definition() ];
}
- while ( $inserts !== array() ) {
+ while ( $inserts !== [] ) {
$batch = array_splice( $inserts, 0, $this->mBatchSize );
$server->batchInsertDefinitions( $batch );
}
- $inserts = array();
+ $inserts = [];
foreach ( $stats as $targetLanguage => $numbers ) {
if ( $targetLanguage === $sourceLanguage ) {
continue;
@@ -189,7 +196,7 @@ class TTMServerBootstrap extends Maintenance {
foreach ( $collection->keys() as $mkey => $title ) {
$handle = new MessageHandle( $title );
- $inserts[] = array( $handle, $sourceLanguage, $collection[$mkey]->translation() );
+ $inserts[] = [ $handle, $sourceLanguage, $collection[$mkey]->translation() ];
}
while ( count( $inserts ) >= $this->mBatchSize ) {
@@ -198,7 +205,7 @@ class TTMServerBootstrap extends Maintenance {
}
}
- while ( $inserts !== array() ) {
+ while ( $inserts !== [] ) {
$batch = array_splice( $inserts, 0, $this->mBatchSize );
$server->batchInsertTranslations( $batch );
}
@@ -207,15 +214,11 @@ class TTMServerBootstrap extends Maintenance {
}
protected function resetStateForFork() {
- // Child, reseed because there is no bug in PHP:
- // http://bugs.php.net/bug.php?id=42465
- mt_srand( getmypid() );
-
// Make sure all existing connections are dead,
// we can't use them in forked children.
- LBFactory::destroyInstance();
+ MediaWiki\MediaWikiServices::resetChildProcessServices();
}
}
-$maintClass = 'TTMServerBootstrap';
+$maintClass = TTMServerBootstrap::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/scripts/yaml-tests.php b/www/wiki/extensions/Translate/scripts/yaml-tests.php
index 07f8b39e..a1f9d961 100644
--- a/www/wiki/extensions/Translate/scripts/yaml-tests.php
+++ b/www/wiki/extensions/Translate/scripts/yaml-tests.php
@@ -5,7 +5,7 @@
* @author Niklas Laxström
*
* @copyright Copyright © 2010, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -26,17 +26,17 @@ class YamlTests extends Maintenance {
public function execute() {
global $wgTranslateGroupFiles, $wgTranslateYamlLibrary;
- $documents = array();
- $times = array();
- $mems = array();
- $mempeaks = array();
+ $documents = [];
+ $times = [];
+ $mems = [];
+ $mempeaks = [];
- foreach ( array( 'syck', 'spyc', 'phpyaml' ) as $driver ) {
+ foreach ( [ 'syck', 'spyc', 'phpyaml' ] as $driver ) {
$mempeaks[$driver] = -memory_get_peak_usage( true );
$mems[$driver] = -memory_get_usage( true );
$times[$driver] = -microtime( true );
$wgTranslateYamlLibrary = $driver;
- $documents[$driver] = array();
+ $documents[$driver] = [];
foreach ( $wgTranslateGroupFiles as $file ) {
foreach ( self::parseGroupFile( $file ) as $id => $docu ) {
$documents[$driver]["$file-$id"] = $docu;
@@ -59,7 +59,7 @@ class YamlTests extends Maintenance {
public static function parseGroupFile( $filename ) {
$data = file_get_contents( $filename );
$documents = preg_split( "/^---$/m", $data, -1, PREG_SPLIT_NO_EMPTY );
- $groups = array();
+ $groups = [];
$template = false;
foreach ( $documents as $document ) {
$document = TranslateYaml::loadString( $document );
@@ -92,5 +92,5 @@ class YamlTests extends Maintenance {
}
}
-$maintClass = 'YamlTests';
+$maintClass = YamlTests::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/specials/SpecialAggregateGroups.php b/www/wiki/extensions/Translate/specials/SpecialAggregateGroups.php
index e60277b0..582a71a8 100644
--- a/www/wiki/extensions/Translate/specials/SpecialAggregateGroups.php
+++ b/www/wiki/extensions/Translate/specials/SpecialAggregateGroups.php
@@ -7,7 +7,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @author Kunal Grover
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
class SpecialAggregateGroups extends SpecialPage {
@@ -25,16 +25,23 @@ class SpecialAggregateGroups extends SpecialPage {
$this->setHeaders();
$out = $this->getOutput();
+ $out->addModuleStyles( 'ext.translate.special.aggregategroups.styles' );
// Check permissions
if ( $this->getUser()->isAllowed( 'translate-manage' ) ) {
$this->hasPermission = true;
}
+ $groupsPreload = array_merge(
+ MessageGroups::getGroupsByType( WikiPageMessageGroup::class ),
+ MessageGroups::getGroupsByType( AggregateMessageGroup::class )
+ );
+ TranslateMetadata::preloadGroups( array_keys( $groupsPreload ) );
+
$groups = MessageGroups::getAllGroups();
- uasort( $groups, array( 'MessageGroups', 'groupLabelSort' ) );
- $aggregates = array();
- $pages = array();
+ uasort( $groups, [ 'MessageGroups', 'groupLabelSort' ] );
+ $aggregates = [];
+ $pages = [];
foreach ( $groups as $group ) {
if ( $group instanceof WikiPageMessageGroup ) {
$pages[] = $group;
@@ -53,25 +60,24 @@ class SpecialAggregateGroups extends SpecialPage {
return;
}
- $this->showAggregateGroups( $aggregates, $pages );
+ $this->showAggregateGroups( $aggregates );
}
/**
* @param AggregateMessageGroup $group
- * @param array $pages
* @return string
*/
- protected function showAggregateGroup( $group, array $pages ) {
+ protected function showAggregateGroup( $group ) {
$out = '';
$id = $group->getId();
$label = $group->getLabel();
$desc = $group->getDescription( $this->getContext() );
- $div = Html::openElement( 'div', array(
+ $div = Html::openElement( 'div', [
'class' => 'mw-tpa-group',
'data-groupid' => $id,
'data-id' => $this->htmlIdForGroup( $group ),
- ) );
+ ] );
$out .= $div;
@@ -84,8 +90,8 @@ class SpecialAggregateGroups extends SpecialPage {
// Add divs for editing Aggregate Groups
if ( $this->hasPermission ) {
// Group edit and remove buttons
- $edit = Html::element( 'span', array( 'class' => 'tp-aggregate-edit-ag-button' ) );
- $remove = Html::element( 'span', array( 'class' => 'tp-aggregate-remove-ag-button' ) );
+ $edit = Html::element( 'span', [ 'class' => 'tp-aggregate-edit-ag-button' ] );
+ $remove = Html::element( 'span', [ 'class' => 'tp-aggregate-remove-ag-button' ] );
// Edit group div
$editGroupNameLabel = $this->msg( 'tpt-aggregategroup-edit-name' )->escaped();
@@ -93,28 +99,28 @@ class SpecialAggregateGroups extends SpecialPage {
'tp-agg-name',
$label,
'text',
- array( 'class' => 'tp-aggregategroup-edit-name', 'maxlength' => '200' )
+ [ 'class' => 'tp-aggregategroup-edit-name', 'maxlength' => '200' ]
);
$editGroupDescriptionLabel = $this->msg( 'tpt-aggregategroup-edit-description' )->escaped();
$editGroupDescription = Html::input(
'tp-agg-desc',
$desc,
'text',
- array( 'class' => 'tp-aggregategroup-edit-description' )
+ [ 'class' => 'tp-aggregategroup-edit-description' ]
);
$saveButton = Xml::submitButton(
$this->msg( 'tpt-aggregategroup-update' )->text(),
- array( 'class' => 'tp-aggregategroup-update' )
+ [ 'class' => 'tp-aggregategroup-update' ]
);
$cancelButton = Xml::submitButton(
$this->msg( 'tpt-aggregategroup-update-cancel' )->text(),
- array( 'class' => 'tp-aggregategroup-update-cancel' )
+ [ 'class' => 'tp-aggregategroup-update-cancel' ]
);
$editGroup = Html::rawElement(
'div',
- array(
+ [
'class' => 'tp-edit-group hidden'
- ),
+ ],
$editGroupNameLabel .
$editGroupName . '<br />' .
$editGroupDescriptionLabel .
@@ -128,26 +134,26 @@ class SpecialAggregateGroups extends SpecialPage {
'tp-subgroups-input',
'',
'text',
- array( 'class' => 'tp-group-input' )
+ [ 'class' => 'tp-group-input' ]
);
$addButton = Html::element( 'input',
- array( 'type' => 'button',
+ [ 'type' => 'button',
'value' => $this->msg( 'tpt-aggregategroup-add' )->text(),
- 'class' => 'tp-aggregate-add-button' )
+ 'class' => 'tp-aggregate-add-button' ]
);
}
// Aggregate Group info div
$groupName = Html::rawElement( 'h2',
- array( 'class' => 'tp-name' ),
+ [ 'class' => 'tp-name' ],
htmlspecialchars( $label ) . $edit . $remove
);
$groupDesc = Html::element( 'p',
- array( 'class' => 'tp-desc' ),
+ [ 'class' => 'tp-desc' ],
$desc
);
$groupInfo = Html::rawElement( 'div',
- array( 'class' => 'tp-display-group' ),
+ [ 'class' => 'tp-display-group' ],
$groupName .
$groupDesc
);
@@ -163,17 +169,24 @@ class SpecialAggregateGroups extends SpecialPage {
/**
* @param array $aggregates
- * @param array $pages
*/
- protected function showAggregateGroups( array $aggregates, array $pages ) {
+ protected function showAggregateGroups( array $aggregates ) {
$out = $this->getOutput();
$out->addModules( 'ext.translate.special.aggregategroups' );
+ $nojs = Html::element(
+ 'div',
+ [ 'class' => 'tux-nojs errorbox' ],
+ $this->msg( 'tux-nojs' )->plain()
+ );
+
+ $out->addHTML( $nojs );
+
/**
- * @var $group AggregateMessageGroup
+ * @var AggregateMessageGroup $group
*/
foreach ( $aggregates as $group ) {
- $out->addHTML( $this->showAggregateGroup( $group, $pages ) );
+ $out->addHTML( $this->showAggregateGroup( $group ) );
}
// Add new group if user has permissions
@@ -184,21 +197,21 @@ class SpecialAggregateGroups extends SpecialPage {
$newGroupNameLabel = $this->msg( 'tpt-aggregategroup-new-name' )->escaped();
$newGroupName = Html::element(
'input',
- array( 'class' => 'tp-aggregategroup-add-name', 'maxlength' => '200' )
+ [ 'class' => 'tp-aggregategroup-add-name', 'maxlength' => '200' ]
);
$newGroupDescriptionLabel = $this->msg( 'tpt-aggregategroup-new-description' )->escaped();
$newGroupDescription = Html::element( 'input',
- array( 'class' => 'tp-aggregategroup-add-description' )
+ [ 'class' => 'tp-aggregategroup-add-description' ]
);
- $saveButton = Html::element( 'input', array(
+ $saveButton = Html::element( 'input', [
'type' => 'button',
'value' => $this->msg( 'tpt-aggregategroup-save' )->text(),
'id' => 'tpt-aggregategroups-save',
'class' => 'tp-aggregate-save-button'
- ) );
+ ] );
$newGroupDiv = Html::rawElement(
'div',
- array( 'class' => 'tpt-add-new-group hidden' ),
+ [ 'class' => 'tpt-add-new-group hidden' ],
"$newGroupNameLabel $newGroupName<br />" .
"$newGroupDescriptionLabel $newGroupDescription<br />$saveButton"
);
@@ -212,14 +225,22 @@ class SpecialAggregateGroups extends SpecialPage {
*/
protected function listSubgroups( AggregateMessageGroup $parent ) {
$id = $this->htmlIdForGroup( $parent, 'mw-tpa-grouplist-' );
- $out = Html::openElement( 'ol', array( 'id' => $id ) );
+ $out = Html::openElement( 'ol', [ 'id' => $id ] );
// Not calling $parent->getGroups() because it has done filtering already
$subgroupIds = TranslateMetadata::getSubgroups( $parent->getId() );
// Get the respective groups and sort them
$subgroups = MessageGroups::getGroupsById( $subgroupIds );
- uasort( $subgroups, array( 'MessageGroups', 'groupLabelSort' ) );
+ uasort( $subgroups, [ 'MessageGroups', 'groupLabelSort' ] );
+
+ // Avoid potentially thousands of separate database queries
+ $lb = new LinkBatch();
+ foreach ( $subgroups as $group ) {
+ $lb->addObj( $group->getTitle() );
+ }
+ $lb->setCaller( __METHOD__ );
+ $lb->execute();
// Add missing invalid group ids back, not returned by getGroupsById
foreach ( $subgroupIds as $id ) {
@@ -232,22 +253,22 @@ class SpecialAggregateGroups extends SpecialPage {
$remove = '';
if ( $this->hasPermission ) {
$remove = Html::element( 'span',
- array(
+ [
'class' => 'tp-aggregate-remove-button',
'data-groupid' => $id,
- )
+ ]
);
}
if ( $group ) {
- $text = Linker::linkKnown( $group->getTitle() );
+ $text = $this->getLinkRenderer()->makeKnownLink( $group->getTitle() );
$note = MessageGroups::getPriority( $id );
} else {
$text = htmlspecialchars( $id );
$note = $this->msg( 'tpt-aggregategroup-invalid-group' )->escaped();
}
- $out .= Html::rawElement( 'li', array(), "$text$remove $note" );
+ $out .= Html::rawElement( 'li', [], "$text$remove $note" );
}
$out .= Html::closeElement( 'ol' );
diff --git a/www/wiki/extensions/Translate/specials/SpecialExportTranslations.php b/www/wiki/extensions/Translate/specials/SpecialExportTranslations.php
new file mode 100644
index 00000000..8c7b3d2e
--- /dev/null
+++ b/www/wiki/extensions/Translate/specials/SpecialExportTranslations.php
@@ -0,0 +1,265 @@
+<?php
+/**
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage TranslateSpecialPage
+ */
+class SpecialExportTranslations extends SpecialPage {
+ /** @var string */
+ protected $language;
+
+ /** @var string */
+ protected $format;
+
+ /** @var string */
+ protected $groupId;
+
+ /** @var string[] */
+ public static $validFormats = [ 'export-as-po', 'export-to-file' ];
+
+ public function __construct() {
+ parent::__construct( 'ExportTranslations' );
+ }
+
+ /**
+ * @param null|string $par
+ */
+ public function execute( $par ) {
+ $out = $this->getOutput();
+ $request = $this->getRequest();
+ $lang = $this->getLanguage();
+
+ $this->setHeaders();
+
+ $this->groupId = $request->getText( 'group', $par );
+ $this->language = $request->getVal( 'language', $lang->getCode() );
+ $this->format = $request->getText( 'format' );
+
+ $this->outputForm();
+
+ if ( $this->groupId ) {
+ $status = $this->checkInput();
+ if ( !$status->isGood() ) {
+ TranslateUtils::wrapWikiTextAsInterface(
+ $out, 'error',
+ $status->getWikiText( false, false, $lang )
+ );
+ return;
+ }
+
+ $this->doExport();
+ }
+ }
+
+ protected function outputForm() {
+ $fields = [
+ 'group' => [
+ 'type' => 'select',
+ 'name' => 'group',
+ 'id' => 'group',
+ 'label-message' => 'translate-page-group',
+ 'options' => $this->getGroupOptions(),
+ 'default' => $this->groupId,
+ ],
+ 'language' => [
+ // @todo Apply ULS to this field
+ 'type' => 'select',
+ 'name' => 'language',
+ 'id' => 'language',
+ 'label-message' => 'translate-page-language',
+ 'options' => $this->getLanguageOptions(),
+ 'default' => $this->language,
+ ],
+ 'format' => [
+ 'type' => 'radio',
+ 'name' => 'format',
+ 'id' => 'format',
+ 'label-message' => 'translate-export-form-format',
+ 'flatlist' => true,
+ 'options' => $this->getFormatOptions(),
+ 'default' => $this->format,
+ ],
+ ];
+ $form = HTMLForm::factory( 'ooui', $fields, $this->getContext() );
+ $form
+ ->setMethod( 'get' )
+ ->setWrapperLegendMsg( 'translate-page-settings-legend' )
+ ->setSubmitTextMsg( 'translate-submit' )
+ ->prepareForm()
+ ->displayForm( false );
+ }
+
+ /**
+ * @return array
+ */
+ protected function getGroupOptions() {
+ $selected = $this->groupId;
+ $groups = MessageGroups::getAllGroups();
+ uasort( $groups, [ 'MessageGroups', 'groupLabelSort' ] );
+
+ $options = [];
+ foreach ( $groups as $id => $group ) {
+ if ( !$group->exists()
+ || ( MessageGroups::getPriority( $group ) === 'discouraged' && $id !== $selected )
+ ) {
+ continue;
+ }
+
+ $options[$group->getLabel()] = $id;
+ }
+
+ return $options;
+ }
+
+ /**
+ * @return array
+ */
+ protected function getLanguageOptions() {
+ $languages = TranslateUtils::getLanguageNames( 'en' );
+ $options = [];
+ foreach ( $languages as $code => $name ) {
+ $options["$code - $name"] = $code;
+ }
+
+ return $options;
+ }
+
+ /**
+ * @return array
+ */
+ protected function getFormatOptions() {
+ $options = [];
+ foreach ( self::$validFormats as $format ) {
+ // translate-taskui-export-to-file, translate-taskui-export-as-po
+ $options[ $this->msg( "translate-taskui-$format" )->escaped() ] = $format;
+ }
+ return $options;
+ }
+
+ /**
+ * @return Status
+ */
+ protected function checkInput() {
+ $status = Status::newGood();
+
+ $msgGroup = MessageGroups::getGroup( $this->groupId );
+ if ( $msgGroup === null ) {
+ $status->fatal( 'translate-page-no-such-group' );
+ } elseif ( MessageGroups::isDynamic( $msgGroup ) ) {
+ $status->fatal( 'translate-export-not-supported' );
+ }
+
+ $langNames = TranslateUtils::getLanguageNames( 'en' );
+ if ( !isset( $langNames[$this->language] ) ) {
+ $status->fatal( 'translate-page-no-such-language' );
+ }
+
+ // Do not show this error if no/invalid format is specified for translatable
+ // page groups as we can show a textarea box containing the translation page text
+ // (however it's not currently supported for other groups).
+ if ( !$msgGroup instanceof WikiPageMessageGroup
+ && !in_array( $this->format, self::$validFormats )
+ ) {
+ $status->fatal( 'translate-export-invalid-format' );
+ }
+
+ if ( $this->format === 'export-to-file'
+ && !$msgGroup instanceof FileBasedMessageGroup
+ ) {
+ $status->fatal( 'translate-export-format-notsupported' );
+ }
+
+ return $status;
+ }
+
+ protected function doExport() {
+ $out = $this->getOutput();
+ $group = MessageGroups::getGroup( $this->groupId );
+ $collection = $this->setupCollection( $group );
+
+ switch ( $this->format ) {
+ case 'export-as-po':
+ $out->disable();
+
+ $ffs = null;
+ if ( $group instanceof FileBasedMessageGroup ) {
+ $ffs = $group->getFFS();
+ }
+
+ if ( !$ffs instanceof GettextFFS ) {
+ $group = FileBasedMessageGroup::newFromMessageGroup( $group );
+ $ffs = new GettextFFS( $group );
+ }
+
+ $ffs->setOfflineMode( true );
+
+ $filename = "{$group->getId()}_{$this->language}.po";
+ $this->sendExportHeaders( $filename );
+
+ echo $ffs->writeIntoVariable( $collection );
+ break;
+
+ case 'export-to-file':
+ $out->disable();
+
+ $filename = basename( $group->getSourceFilePath( $collection->getLanguage() ) );
+ $this->sendExportHeaders( $filename );
+
+ echo $group->getFFS()->writeIntoVariable( $collection );
+ break;
+
+ default:
+ // @todo Add web viewing for groups other than WikiPageMessageGroup
+ $pageTranslation = $this->getConfig()->get( 'EnablePageTranslation' );
+ if ( $pageTranslation && $group instanceof WikiPageMessageGroup ) {
+ $collection->loadTranslations();
+ $page = TranslatablePage::newFromTitle( $group->getTitle() );
+ $text = $page->getParse()->getTranslationPageText( $collection );
+ $displayTitle = $page->getPageDisplayTitle( $this->language );
+ if ( $displayTitle ) {
+ $text = "{{DISPLAYTITLE:$displayTitle}}$text";
+ }
+ $box = Html::element(
+ 'textarea',
+ [ 'id' => 'wpTextbox', 'rows' => 40, ],
+ $text
+ );
+ $out->addHTML( $box );
+ return;
+ }
+
+ // This should have been prevented at validation. See checkInput().
+ throw new Exception( 'Unexpected export format.' );
+ }
+ }
+
+ private function setupCollection( MessageGroup $group ) {
+ $collection = $group->initCollection( $this->language );
+
+ // Don't export ignored, unless it is the source language or message documentation
+ $translateDocCode = $this->getConfig()->get( 'TranslateDocumentationLanguageCode' );
+ if ( $this->language !== $translateDocCode
+ && $this->language !== $group->getSourceLanguage()
+ ) {
+ $collection->filter( 'ignored' );
+ }
+
+ $collection->loadTranslations();
+
+ return $collection;
+ }
+
+ /**
+ * Send the appropriate response headers for the export
+ *
+ * @param string $fileName
+ */
+ protected function sendExportHeaders( $fileName ) {
+ $response = $this->getRequest()->response();
+ $response->header( 'Content-Type: text/plain; charset=UTF-8' );
+ $response->header( "Content-Disposition: attachment; filename=\"$fileName\"" );
+ }
+
+ protected function getGroupName() {
+ return 'wiki';
+ }
+}
diff --git a/www/wiki/extensions/Translate/specials/SpecialImportTranslations.php b/www/wiki/extensions/Translate/specials/SpecialImportTranslations.php
index f86dca08..fcdd1ace 100644
--- a/www/wiki/extensions/Translate/specials/SpecialImportTranslations.php
+++ b/www/wiki/extensions/Translate/specials/SpecialImportTranslations.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -109,7 +109,7 @@ class SpecialImportTranslations extends SpecialPage {
* Checks for error state from the return value of loadFile and parseFile
* functions. Prints the error and the form and returns true if there is an
* error. Returns false and does nothing if there is no error.
- * @param $msg array
+ * @param array $msg
* @return bool
*/
protected function checkError( $msg ) {
@@ -140,12 +140,12 @@ class SpecialImportTranslations extends SpecialPage {
* Ugly but necessary form building ahead, ohoy
*/
$this->getOutput()->addHTML(
- Xml::openElement( 'form', array(
+ Xml::openElement( 'form', [
'action' => $this->getPageTitle()->getLocalURL(),
'method' => 'post',
'enctype' => 'multipart/form-data',
'id' => 'mw-translate-import',
- ) ) .
+ ] ) .
Html::hidden( 'token', $this->getUser()->getEditToken() ) .
Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
Xml::inputLabel(
@@ -154,7 +154,7 @@ class SpecialImportTranslations extends SpecialPage {
'mw-translate-up-local-input', // id
50, // size
$this->getRequest()->getText( 'upload-local' ),
- array( 'type' => 'file' )
+ [ 'type' => 'file' ]
) .
Xml::submitButton( $this->msg( 'translate-import-load' )->text() ) .
Xml::closeElement( 'form' )
@@ -163,24 +163,24 @@ class SpecialImportTranslations extends SpecialPage {
/**
* Try to get the file data from any of the supported methods.
- * @param $filedata
+ * @param string &$filedata
* @return array
*/
protected function loadFile( &$filedata ) {
$filename = $this->getRequest()->getFileTempname( 'upload-local' );
if ( !is_uploaded_file( $filename ) ) {
- return array( 'ul-failed' );
+ return [ 'ul-failed' ];
}
$filedata = file_get_contents( $filename );
- return array( 'ok' );
+ return [ 'ok' ];
}
/**
* Try parsing file.
- * @param $data
+ * @param string $data
* @return array
*/
protected function parseFile( $data ) {
@@ -188,16 +188,16 @@ class SpecialImportTranslations extends SpecialPage {
* @todo Time to rethink the interface again?
* @var FileBasedMessageGroup $group
*/
- $group = MessageGroupBase::factory( array(
- 'FILES' => array(
+ $group = MessageGroupBase::factory( [
+ 'FILES' => [
'class' => 'GettextFFS',
'CtxtAsKey' => true,
- ),
- 'BASIC' => array(
+ ],
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'namespace' => -1,
- )
- ) );
+ ]
+ ] );
$ffs = new GettextFFS( $group );
$data = $ffs->readFromVariable( $data );
@@ -211,7 +211,7 @@ class SpecialImportTranslations extends SpecialPage {
* This should catch everything that is not a gettext file exported from us
*/
if ( !isset( $metadata['code'] ) || !isset( $metadata['group'] ) ) {
- return array( 'no-headers' );
+ return [ 'no-headers' ];
}
/**
@@ -219,10 +219,10 @@ class SpecialImportTranslations extends SpecialPage {
* unfortunately breaks submission.
*/
if ( isset( $metadata['warnings'] ) ) {
- return array( 'warnings', $this->getLanguage()->commaList( $metadata['warnings'] ) );
+ return [ 'warnings', $this->getLanguage()->commaList( $metadata['warnings'] ) ];
}
- return array( 'ok', $data );
+ return [ 'ok', $data ];
}
protected function setCachedData( $data ) {
diff --git a/www/wiki/extensions/Translate/specials/SpecialLanguageStats.php b/www/wiki/extensions/Translate/specials/SpecialLanguageStats.php
index 01437dfe..94238370 100644
--- a/www/wiki/extensions/Translate/specials/SpecialLanguageStats.php
+++ b/www/wiki/extensions/Translate/specials/SpecialLanguageStats.php
@@ -5,7 +5,7 @@
* @file
* @author Siebrand Mazeland
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -28,7 +28,7 @@ class SpecialLanguageStats extends SpecialPage {
/**
* @var Array
*/
- protected $targetValueName = array( 'code', 'language' );
+ protected $targetValueName = [ 'code', 'language' ];
/**
* Most of the displayed numbers added together at the bottom of the table.
@@ -36,13 +36,6 @@ class SpecialLanguageStats extends SpecialPage {
protected $totals;
/**
- * How long spend time calculating missing numbers, before
- * bailing out.
- * @var int
- */
- protected $timelimit = 2;
-
- /**
* Flag to set if nothing to show.
* @var bool
*/
@@ -84,7 +77,7 @@ class SpecialLanguageStats extends SpecialPage {
*
* @var array
*/
- protected $statsCounted = array();
+ protected $statsCounted = [];
/**
* @var array
@@ -110,6 +103,11 @@ class SpecialLanguageStats extends SpecialPage {
$request = $this->getRequest();
$this->purge = $request->getVal( 'action' ) === 'purge';
+ if ( $this->purge && !$request->wasPosted() ) {
+ $this->showPurgeForm();
+ return;
+ }
+
$this->table = new StatsTable();
$this->setHeaders();
@@ -118,7 +116,7 @@ class SpecialLanguageStats extends SpecialPage {
$out = $this->getOutput();
$out->addModules( 'ext.translate.special.languagestats' );
- $out->addModuleStyles( 'ext.translate.messagetable' );
+ $out->addModuleStyles( 'ext.translate.statstable' );
$params = explode( '/', $par );
@@ -149,18 +147,44 @@ class SpecialLanguageStats extends SpecialPage {
if ( !$this->including() ) {
$out->addHelpLink( 'Help:Extension:Translate/Statistics_and_reporting' );
- $out->addHTML( $this->getForm() );
+ $this->addForm();
}
if ( $this->isValidValue( $this->target ) ) {
$this->outputIntroduction();
- $output = $this->getTable();
+
+ $stats = $this->loadStatistics( $this->target, MessageGroupStats::FLAG_CACHE_ONLY );
+ $output = $this->getTable( $stats );
if ( $this->incomplete ) {
$out->wrapWikiMsg(
"<div class='error'>$1</div>",
'translate-langstats-incomplete'
);
}
+
+ if ( $this->incomplete || $this->purge ) {
+ DeferredUpdates::addCallableUpdate( function () {
+ // 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 ) {
$out->wrapWikiMsg( "<div class='error'>$1</div>", 'translate-mgs-nothing' );
}
@@ -171,9 +195,23 @@ class SpecialLanguageStats extends SpecialPage {
}
/**
- * Return the list of allowed values for target here.
- * @param $value
- * @return array
+ * 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 = 0 ) {
+ return MessageGroupStats::forLanguage( $target, $flags );
+ }
+
+ protected function getCacheRebuildJobParameters( $target ) {
+ return [ 'languagecode' => $target ];
+ }
+
+ /**
+ * Return true if language exist in the list of allowed languages or false otherwise.
+ * @param string $value
+ * @return bool
*/
protected function isValidValue( $value ) {
$langs = Language::fetchLanguageNames();
@@ -181,7 +219,9 @@ class SpecialLanguageStats extends SpecialPage {
return isset( $langs[$value] );
}
- /// Called when the target is unknown.
+ /**
+ * Called when the target is unknown.
+ */
protected function invalidTarget() {
$this->getOutput()->wrapWikiMsg(
"<div class='error'>$1</div>",
@@ -189,79 +229,71 @@ class SpecialLanguageStats extends SpecialPage {
);
}
+ protected function showPurgeForm() {
+ $formDescriptor[ 'intro' ] = [
+ 'type' => 'info',
+ 'vertical-label' => true,
+ 'raw' => true,
+ 'default' => $this->msg( 'confirm-purge-top' )->parse()
+ ];
+
+ $context = new DerivativeContext( $this->getContext() );
+ $requestValues = $this->getRequest()->getQueryValues();
+
+ HTMLForm::factory( 'ooui', $formDescriptor, $context )
+ ->setWrapperLegendMsg( 'confirm-purge-title' )
+ ->setSubmitTextMsg( 'confirm_purge_button' )
+ ->addHiddenFields( $requestValues )
+ ->show();
+ }
+
/**
- * HTML for the top form.
- * @return \string HTML
- * @todo duplicated code
+ * HTMLForm for the top form rendering.
*/
- protected function getForm() {
- global $wgScript;
-
- $out = Html::openElement( 'div' );
- $out .= Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
- $out .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
- $out .= Html::hidden( 'x', 'D' ); // To detect submission
- $out .= Html::openElement( 'fieldset' );
- $out .= Html::element(
- 'legend',
- array(),
- $this->msg( 'translate-language-code' )->text()
- );
- $out .= Html::openElement( 'table' );
-
- $out .= Html::openElement( 'tr' );
- $out .= Html::openElement( 'td', array( 'class' => 'mw-label' ) );
- $out .= Xml::label(
- $this->msg( 'translate-language-code-field-name' )->text(),
- 'language'
- );
- $out .= Html::closeElement( 'td' );
- $out .= Html::openElement( 'td', array( 'class' => 'mw-input' ) );
- $out .= Xml::input( 'language', 10, $this->target, array( 'id' => 'language' ) );
- $out .= Html::closeElement( 'td' );
- $out .= Html::closeElement( 'tr' );
-
- $out .= Html::openElement( 'tr' );
- $out .= Html::openElement( 'td', array( 'colspan' => 2 ) );
- $out .= Xml::checkLabel(
- $this->msg( 'translate-suppress-complete' )->text(),
- 'suppresscomplete',
- 'suppresscomplete',
- $this->noComplete
- );
- $out .= Html::closeElement( 'td' );
- $out .= Html::closeElement( 'tr' );
-
- $out .= Html::openElement( 'tr' );
- $out .= Html::openElement( 'td', array( 'colspan' => 2 ) );
- $out .= Xml::checkLabel(
- $this->msg( 'translate-ls-noempty' )->text(),
- 'suppressempty',
- 'suppressempty',
- $this->noEmpty
- );
- $out .= Html::closeElement( 'td' );
- $out .= Html::closeElement( 'tr' );
-
- $out .= Html::openElement( 'tr' );
- $out .= Html::openElement( 'td', array( 'class' => 'mw-input', 'colspan' => 2 ) );
- $out .= Xml::submitButton( $this->msg( 'translate-ls-submit' )->text() );
- $out .= Html::closeElement( 'td' );
- $out .= Html::closeElement( 'tr' );
+ protected function addForm() {
+ $formDescriptor[ 'language' ] = [
+ 'type' => 'text',
+ 'name' => 'language',
+ 'id' => 'language',
+ 'label' => $this->msg( 'translate-language-code-field-name' )->text(),
+ 'size' => 10,
+ 'default' => $this->target,
+ ];
+ $formDescriptor[ 'suppresscomplete' ] = [
+ 'type' => 'check',
+ 'label' => $this->msg( 'translate-suppress-complete' )->text(),
+ 'name' => 'suppresscomplete',
+ 'id' => 'suppresscomplete',
+ 'default' => $this->noComplete,
+ ];
+ $formDescriptor[ 'suppressempty' ] = [
+ 'type' => 'check',
+ 'label' => $this->msg( 'translate-ls-noempty' )->text(),
+ 'name' => 'suppressempty',
+ 'id' => 'suppressempty',
+ 'default' => $this->noEmpty,
+ ];
+
+ $context = new DerivativeContext( $this->getContext() );
+ $context->setTitle( $this->getPageTitle() ); // Remove subpage
+
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $context );
- $out .= Html::closeElement( 'table' );
- $out .= Html::closeElement( 'fieldset' );
/* Since these pages are in the tabgroup with Special:Translate,
- * it makes sense to retain the selected group/language parameter
- * on post requests even when not relevant to the current page. */
+ * it makes sense to retain the selected group/language parameter
+ * on post requests even when not relevant to the current page. */
$val = $this->getRequest()->getVal( 'group' );
if ( $val !== null ) {
- $out .= Html::hidden( 'group', $val );
+ $htmlForm->addHiddenField( 'group', $val );
}
- $out .= Html::closeElement( 'form' );
- $out .= Html::closeElement( 'div' );
- return $out;
+ $htmlForm
+ ->addHiddenField( 'x', 'D' ) // To detect submission
+ ->setMethod( 'get' )
+ ->setSubmitTextMsg( 'translate-ls-submit' )
+ ->setWrapperLegendMsg( 'translate-mgs-fieldset' )
+ ->prepareForm()
+ ->displayForm( false );
}
/**
@@ -273,14 +305,14 @@ class SpecialLanguageStats extends SpecialPage {
$this->getLanguage()->getCode()
);
- $rcInLangLink = Linker::link(
+ $rcInLangLink = $this->getLinkRenderer()->makeKnownLink(
SpecialPage::getTitleFor( 'Translate', '!recent' ),
- $this->msg( 'languagestats-recenttranslations' )->escaped(),
- array(),
- array(
+ $this->msg( 'languagestats-recenttranslations' )->text(),
+ [],
+ [
'action' => 'proofread',
'language' => $this->target
- )
+ ]
);
$out = $this->msg( 'languagestats-stats-for', $languageName )->rawParams( $rcInLangLink )
@@ -302,14 +334,19 @@ class SpecialLanguageStats extends SpecialPage {
}
}
+ /**
+ * Returns the value of the workflow state for the given target.
+ * @param string $target Whose workflow state we want, either the language code or group id
+ * @return string Workflow state value
+ */
protected function getWorkflowStateValue( $target ) {
- return isset( $this->states[$target] ) ? $this->states[$target] : '';
+ return $this->states[$target] ?? '';
}
/**
* If workflow states are configured, adds a cell with the workflow state to the row,
- * @param String $target Whose workflow state do we want, such as language code or group id.
- * @param String $state The workflow state id
+ * @param string $target Whose workflow state do we want, such as language code or group id.
+ * @param string $state The workflow state id
* @return string Html
*/
protected function getWorkflowStateCell( $target, $state ) {
@@ -326,10 +363,16 @@ class SpecialLanguageStats extends SpecialPage {
// Same for every language
$group = MessageGroups::getGroup( $this->target );
$stateConfig = $group->getMessageGroupStates()->getStates();
+ $languageCode = $target;
} else {
// The message group for this row
$group = MessageGroups::getGroup( $target );
$stateConfig = $group->getMessageGroupStates()->getStates();
+ $languageCode = $this->target;
+ }
+
+ if ( $group->getSourceLanguage() === $languageCode ) {
+ return "\n\t\t" . $this->table->element( '', '', -1 );
}
$sortValue = -1;
@@ -358,24 +401,19 @@ class SpecialLanguageStats extends SpecialPage {
/**
* Returns the table itself.
- * @return \string HTML
+ * @param array $stats
+ * @return string HTML
*/
- protected function getTable() {
+ protected function getTable( $stats ) {
$table = $this->table;
$this->addWorkflowStatesColumn();
$out = '';
- MessageGroupStats::setTimeLimit( $this->timelimit );
- $cache = MessageGroupStats::forLanguage( $this->target );
-
- if ( $this->purge ) {
- MessageGroupStats::clearLanguage( $this->target );
- }
-
+ TranslateMetadata::preloadGroups( array_keys( MessageGroups::getAllGroups() ) );
$structure = MessageGroups::getGroupStructure();
foreach ( $structure as $item ) {
- $out .= $this->makeGroupGroup( $item, $cache );
+ $out .= $this->makeGroupGroup( $item, $stats );
}
if ( $out ) {
@@ -398,12 +436,6 @@ class SpecialLanguageStats extends SpecialPage {
return '';
}
-
- /// @todo Allow extra message here, once total translated volume goes
- /// over a certain percentage? (former live hack at translatewiki)
- /// if ( $this->totals['2'] && ( $this->totals['1'] / $this->totals['2'] ) > 0.95 ) {
- /// $out .= $this->msg( 'translate-somekey' );
- /// }
}
/**
@@ -411,9 +443,9 @@ class SpecialLanguageStats extends SpecialPage {
* If $item is an array, meaning that the first group is an
* AggregateMessageGroup and the latter are its children, it will recurse
* and create rows for them too.
- * @param $item Array|MessageGroup
- * @param $cache Array Cache as returned by MessageGroupStats::forLanguage
- * @param $parent MessageGroup (do not use, used internally only)
+ * @param MessageGroup|MessageGroup[] $item
+ * @param array $cache Cache as returned by MessageGroupStats::forLanguage
+ * @param MessageGroup|null $parent MessageGroup (do not use, used internally only)
* @return string
*/
protected function makeGroupGroup( $item, array $cache, MessageGroup $parent = null ) {
@@ -439,7 +471,7 @@ class SpecialLanguageStats extends SpecialPage {
* is blacklisted or hidden by filters.
* @param MessageGroup $group
* @param array $cache
- * @param MessageGroup $parent
+ * @param MessageGroup|null $parent
* @return string
*/
protected function makeGroupRow( MessageGroup $group, array $cache,
@@ -464,6 +496,10 @@ class SpecialLanguageStats extends SpecialPage {
return '';
}
+ if ( $total === null ) {
+ $this->incomplete = true;
+ }
+
// Calculation of summary row values
if ( !$group instanceof AggregateMessageGroup &&
!isset( $this->statsCounted[$groupId] )
@@ -474,25 +510,24 @@ class SpecialLanguageStats extends SpecialPage {
$state = $this->getWorkflowStateValue( $groupId );
+ // Place any state checks like $this->incomplete above this
$params = $stats;
$params[] = $state;
- $params[] = $groupId;
+ $params[] = md5( $groupId );
$params[] = $this->getLanguage()->getCode();
- $params[] = $this->target;
- $cachekey = wfMemcKey( __METHOD__, implode( '-', $params ) );
+ $params[] = md5( $this->target );
+ $cachekey = wfMemcKey( __METHOD__ . '-v3', implode( '-', $params ) );
$cacheval = wfGetCache( CACHE_ANYTHING )->get( $cachekey );
- if ( !$this->purge && is_string( $cacheval ) ) {
+ if ( is_string( $cacheval ) ) {
return $cacheval;
}
- $extra = array();
- if ( $total === null ) {
- $this->incomplete = true;
- } elseif ( $translated === $total ) {
- $extra = array( 'action' => 'proofread' );
+ $extra = [];
+ if ( $translated === $total ) {
+ $extra = [ 'action' => 'proofread' ];
}
- $rowParams = array();
+ $rowParams = [];
$rowParams['data-groupid'] = $groupId;
$rowParams['class'] = get_class( $group );
if ( $parent ) {
@@ -500,7 +535,7 @@ class SpecialLanguageStats extends SpecialPage {
}
$out = "\t" . Html::openElement( 'tr', $rowParams );
- $out .= "\n\t\t" . Html::rawElement( 'td', array(),
+ $out .= "\n\t\t" . Html::rawElement( 'td', [],
$this->table->makeGroupLink( $group, $this->target, $extra ) );
$out .= $this->table->makeNumberColumns( $stats );
$out .= $this->getWorkflowStateCell( $groupId, $state );
@@ -512,15 +547,15 @@ class SpecialLanguageStats extends SpecialPage {
}
protected function getWorkflowStates( $field = 'tgr_group', $filter = 'tgr_lang' ) {
- $db = wfGetDB( DB_SLAVE );
+ $db = wfGetDB( DB_REPLICA );
$res = $db->select(
'translate_groupreviews',
- array( 'tgr_state', $field ),
- array( $filter => $this->target ),
+ [ 'tgr_state', $field ],
+ [ $filter => $this->target ],
__METHOD__
);
- $states = array();
+ $states = [];
foreach ( $res as $row ) {
$states[$row->$field] = $row->tgr_state;
}
diff --git a/www/wiki/extensions/Translate/specials/SpecialMagic.php b/www/wiki/extensions/Translate/specials/SpecialMagic.php
index 5734d9af..f8200a7e 100644
--- a/www/wiki/extensions/Translate/specials/SpecialMagic.php
+++ b/www/wiki/extensions/Translate/specials/SpecialMagic.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -22,18 +22,18 @@ class SpecialMagic extends SpecialPage {
/**
* List of supported modules
*/
- private $aModules = array(
+ private $aModules = [
self::MODULE_SPECIAL,
self::MODULE_NAMESPACE,
self::MODULE_MAGIC
- );
+ ];
/**
* Page options
*/
- private $options = array();
- private $defaults = array();
- private $nondefaults = array();
+ private $options = [];
+ private $defaults = [];
+ private $nondefaults = [];
public function __construct() {
parent::__construct( 'Magic' );
@@ -52,7 +52,7 @@ class SpecialMagic extends SpecialPage {
*
* @return string
*/
- function getDescription() {
+ public function getDescription() {
return $this->msg( 'translate-magic-pagename' )->text();
}
@@ -65,10 +65,10 @@ class SpecialMagic extends SpecialPage {
global $wgScript;
$form = Xml::tags( 'form',
- array(
+ [
'action' => $wgScript,
'method' => 'get'
- ),
+ ],
'<table><tr><td>' .
$this->msg( 'translate-page-language' )->escaped() .
@@ -85,7 +85,7 @@ class SpecialMagic extends SpecialPage {
Xml::submitButton( $this->msg( 'translate-magic-submit' )->text() ) . ' ' .
Xml::submitButton(
$this->msg( 'translate-magic-cm-export' )->text(),
- array( 'name' => 'export' )
+ [ 'name' => 'export' ]
) .
'</td></tr></table>' .
Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() )
@@ -112,17 +112,17 @@ class SpecialMagic extends SpecialPage {
}
protected function setup( $parameters ) {
- $defaults = array(
+ $defaults = [
/* str */'module' => '',
/* str */'language' => $this->getUser()->getOption( 'language' ),
/* bool */'export' => false,
- /* bool */'savetodb' => false,
- );
+ /* bool */'savetodb' => false
+ ];
/**
* Place where all non default variables will end.
*/
- $nondefaults = array();
+ $nondefaults = [];
/**
* Temporary store possible values parsed from parameters.
@@ -189,7 +189,7 @@ class SpecialMagic extends SpecialPage {
throw new PermissionsError( 'translate' );
}
- $errors = array();
+ $errors = [];
$o->loadFromRequest( $request );
$o->validate( $errors );
if ( $errors ) {
@@ -215,14 +215,14 @@ class SpecialMagic extends SpecialPage {
return;
}
- $result = Xml::element( 'textarea', array( 'rows' => '30' ), $output );
+ $result = Xml::element( 'textarea', [ 'rows' => '30' ], $output );
$out->addHTML( $result );
return;
}
$out->addWikiMsg( 'translate-magic-help' );
- $errors = array();
+ $errors = [];
$o->validate( $errors );
if ( $errors ) {
$this->outputErrors( $errors );
diff --git a/www/wiki/extensions/Translate/specials/SpecialManageGroups.php b/www/wiki/extensions/Translate/specials/SpecialManageGroups.php
index 2ea55125..6a0bc9d3 100644
--- a/www/wiki/extensions/Translate/specials/SpecialManageGroups.php
+++ b/www/wiki/extensions/Translate/specials/SpecialManageGroups.php
@@ -6,7 +6,7 @@
* @file
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -44,14 +44,14 @@ class SpecialManageGroups extends SpecialPage {
return 'wiki';
}
- function getDescription() {
+ public function getDescription() {
return $this->msg( 'managemessagegroups' )->text();
}
public function execute( $par ) {
$this->setHeaders();
$out = $this->getOutput();
- $out->addModules( 'ext.translate.special.managegroups' );
+ $out->addModuleStyles( 'ext.translate.special.managegroups' );
$out->addHelpLink( 'Help:Extension:Translate/Group_management' );
$name = $par ?: MessageChangeStorage::DEFAULT_NAME;
@@ -88,12 +88,12 @@ class SpecialManageGroups extends SpecialPage {
* @return int
*/
protected function getLimit() {
- $limits = array(
+ $limits = [
1000, // Default max
ini_get( 'max_input_vars' ),
ini_get( 'suhosin.post.max_vars' ),
ini_get( 'suhosin.request.max_vars' )
- );
+ ];
// Ignore things not set
$limits = array_filter( $limits );
return min( $limits );
@@ -106,7 +106,7 @@ class SpecialManageGroups extends SpecialPage {
$this->msg( 'translate-smg-right' )->escaped()
);
- return Html::rawElement( 'div', array( 'class' => 'mw-translate-smg-header' ), $text );
+ return Html::rawElement( 'div', [ 'class' => 'mw-translate-smg-header' ], $text );
}
protected function showChanges( $allowed, $limit ) {
@@ -120,7 +120,7 @@ class SpecialManageGroups extends SpecialPage {
$out = $this->getOutput();
$out->addHTML(
'' .
- Html::openElement( 'form', array( 'method' => 'post' ) ) .
+ Html::openElement( 'form', [ 'method' => 'post' ] ) .
Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
Html::hidden( 'token', $this->getUser()->getEditToken() ) .
$this->getLegend()
@@ -138,7 +138,7 @@ class SpecialManageGroups extends SpecialPage {
}
$changes = unserialize( $reader->get( $id ) );
- $out->addHTML( Html::element( 'h2', array(), $group->getLabel() ) );
+ $out->addHTML( Html::element( 'h2', [], $group->getLabel() ) );
// Reduce page existance queries to one per group
$lb = new LinkBatch();
@@ -175,7 +175,7 @@ class SpecialManageGroups extends SpecialPage {
}
}
- $attribs = array( 'type' => 'submit', 'class' => 'mw-translate-smg-submit' );
+ $attribs = [ 'type' => 'submit', 'class' => 'mw-translate-smg-submit' ];
if ( !$allowed ) {
$attribs['disabled'] = 'disabled';
$attribs['title'] = $this->msg( 'translate-smg-notallowed' )->text();
@@ -190,7 +190,7 @@ class SpecialManageGroups extends SpecialPage {
* @param string $code
* @param string $type
* @param array $params
- * @param int $limit
+ * @param int &$limit
* @return string HTML
*/
protected function formatChange( MessageGroup $group, $code, $type, $params, &$limit ) {
@@ -212,6 +212,8 @@ class SpecialManageGroups extends SpecialPage {
}
$text = '';
+ $titleLink = $this->getLinkRenderer()->makeLink( $title );
+
if ( $type === 'deletion' ) {
$wiki = ContentHandler::getContentText( Revision::newFromTitle( $title )->getContent() );
$oldContent = ContentHandler::makeContent( $wiki, $title );
@@ -219,14 +221,14 @@ class SpecialManageGroups extends SpecialPage {
$this->diff->setContent( $oldContent, $newContent );
- $text = $this->diff->getDiff( Linker::link( $title ), '' );
+ $text = $this->diff->getDiff( $titleLink, '' );
} elseif ( $type === 'addition' ) {
$oldContent = ContentHandler::makeContent( '', $title );
$newContent = ContentHandler::makeContent( $params['content'], $title );
$this->diff->setContent( $oldContent, $newContent );
- $text = $this->diff->getDiff( '', Linker::link( $title ) );
+ $text = $this->diff->getDiff( '', $titleLink );
} elseif ( $type === 'change' ) {
$wiki = ContentHandler::getContentText( Revision::newFromTitle( $title )->getContent() );
@@ -249,7 +251,7 @@ class SpecialManageGroups extends SpecialPage {
$newContent = ContentHandler::makeContent( $params['content'], $title );
$this->diff->setContent( $oldContent, $newContent );
- $text .= $this->diff->getDiff( Linker::link( $title ), $actions );
+ $text .= $this->diff->getDiff( $titleLink, $actions );
}
$hidden = Html::hidden( $id, 1 );
@@ -262,20 +264,20 @@ class SpecialManageGroups extends SpecialPage {
return '';
}
- return Html::rawElement( 'div', array( 'class' => $classes ), $text );
+ return Html::rawElement( 'div', [ 'class' => $classes ], $text );
}
protected function processSubmit() {
$req = $this->getRequest();
$out = $this->getOutput();
- $jobs = array();
+ $jobs = [];
$jobs[] = MessageIndexRebuildJob::newJob();
$reader = \Cdb\Reader::open( $this->cdb );
$groups = unserialize( $reader->get( '#keys' ) );
- $postponed = array();
+ $postponed = [];
foreach ( $groups as $groupId ) {
$group = MessageGroups::getGroup( $groupId );
@@ -330,36 +332,41 @@ class SpecialManageGroups extends SpecialPage {
* Adds the task-based tabs on Special:Translate and few other special pages.
* Hook: SkinTemplateNavigation::SpecialPage
* @since 2012-05-14
+ * @param Skin $skin
+ * @param array &$tabs
+ * @return true
*/
public static function tabify( Skin $skin, array &$tabs ) {
$title = $skin->getTitle();
- list( $alias, ) = SpecialPageFactory::resolveAlias( $title->getText() );
+ list( $alias, ) = TranslateUtils::resolveSpecialPageAlias( $title->getText() );
- $pagesInGroup = array(
+ $pagesInGroup = [
'ManageMessageGroups' => 'namespaces',
'AggregateGroups' => 'namespaces',
'SupportedLanguages' => 'views',
'TranslationStats' => 'views',
- );
+ ];
if ( !isset( $pagesInGroup[$alias] ) ) {
return true;
}
$skin->getOutput()->addModuleStyles( 'ext.translate.tabgroup' );
- $tabs['namespaces'] = array();
+ $tabs['namespaces'] = [];
foreach ( $pagesInGroup as $spName => $section ) {
- $spClass = SpecialPageFactory::getPage( $spName );
- if ( $spClass === null ) {
+ $spClass = TranslateUtils::getSpecialPage( $spName );
+
+ // DisabledSpecialPage was added in MW 1.33
+ if ( $spClass === null || $spClass instanceof DisabledSpecialPage ) {
continue; // Page explicitly disabled
}
$spTitle = $spClass->getPageTitle();
- $tabs[$section][strtolower( $spName )] = array(
+ $tabs[$section][strtolower( $spName )] = [
'text' => $spClass->getDescription(),
'href' => $spTitle->getLocalURL(),
'class' => $alias === $spName ? 'selected' : '',
- );
+ ];
}
return true;
diff --git a/www/wiki/extensions/Translate/specials/SpecialManageTranslatorSandbox.php b/www/wiki/extensions/Translate/specials/SpecialManageTranslatorSandbox.php
index c729c121..28311452 100644
--- a/www/wiki/extensions/Translate/specials/SpecialManageTranslatorSandbox.php
+++ b/www/wiki/extensions/Translate/specials/SpecialManageTranslatorSandbox.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @author Amir E. Aharoni
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -38,6 +38,11 @@ class SpecialManageTranslatorSandbox extends SpecialPage {
$this->setHeaders();
$this->checkPermissions();
$out = $this->getOutput();
+ $out->addModuleStyles( [
+ 'ext.translate.special.managetranslatorsandbox.styles',
+ 'mediawiki.ui.button',
+ 'jquery.uls.grid'
+ ] );
$out->addModules( 'ext.translate.special.managetranslatorsandbox' );
$this->stash = new TranslationStashStorage( wfGetDB( DB_MASTER ) );
@@ -85,8 +90,8 @@ class SpecialManageTranslatorSandbox extends SpecialPage {
// to ensure the number of users is what the tests expect
$this->emptySandbox();
- $textUsernamePrefixes = array( 'Pupu', 'Orava' );
- $testLanguages = array( 'fi', 'uk', 'nl', 'he', 'bn' );
+ $textUsernamePrefixes = [ 'Pupu', 'Orava' ];
+ $testLanguages = [ 'fi', 'uk', 'nl', 'he', 'bn' ];
$testLanguagesCount = count( $testLanguages );
foreach ( $textUsernamePrefixes as $prefix ) {
@@ -101,13 +106,13 @@ class SpecialManageTranslatorSandbox extends SpecialPage {
$user = TranslateSandbox::addUser( $name, "$name@blackhole.io", 'porkkana' );
$user->setOption(
'translate-sandbox',
- FormatJson::encode( array(
- 'languages' => array( $testLanguages[$i] ),
+ FormatJson::encode( [
+ 'languages' => [ $testLanguages[$i] ],
'comment' => '',
- ) )
+ ] )
);
- $reminders = array();
+ $reminders = [];
for ( $reminderIndex = 0; $reminderIndex < $i; $reminderIndex++ ) {
$reminders[] = wfTimestamp() - $reminderIndex * $i * 10000;
}
@@ -138,10 +143,10 @@ class SpecialManageTranslatorSandbox extends SpecialPage {
$polyglotUser = TranslateSandbox::addUser( 'Kissa', 'kissa@blackhole.io', 'porkkana' );
$polyglotUser->setOption(
'translate-sandbox',
- FormatJson::encode( array(
+ FormatJson::encode( [
'languages' => $testLanguages,
'comment' => "I know some languages, and I'm a developer.",
- ) )
+ ] )
);
$polyglotUser->saveSettings();
for ( $polyglotLang = 0; $polyglotLang < $testLanguagesCount; $polyglotLang++ ) {
@@ -175,6 +180,14 @@ class SpecialManageTranslatorSandbox extends SpecialPage {
*/
protected function showPage() {
$out = $this->getOutput();
+
+ $nojs = Html::element(
+ 'div',
+ [ 'class' => 'tux-nojs errorbox' ],
+ $this->msg( 'tux-nojs' )->plain()
+ );
+ $out->addHTML( $nojs );
+
$out->addHTML( <<<HTML
<div class="grid">
<div class="row">
@@ -212,14 +225,14 @@ HTML;
}
protected function makeList() {
- $items = array();
- $requests = array();
+ $items = [];
+ $requests = [];
$users = TranslateSandbox::getUsers();
/** @var User $user */
foreach ( $users as $user ) {
$reminders = $user->getOption( 'translate-sandbox-reminders' );
- $reminders = $reminders ? explode( '|', $reminders ) : array();
+ $reminders = $reminders ? explode( '|', $reminders ) : [];
$remindersCount = count( $reminders );
if ( $remindersCount ) {
$lastReminderTimestamp = new MWTimestamp( end( $reminders ) );
@@ -230,7 +243,7 @@ HTML;
$lastReminderAgo = '';
}
- $requests[] = array(
+ $requests[] = [
'username' => $user->getName(),
'email' => $user->getEmail(),
'gender' => $user->getOption( 'gender' ),
@@ -240,11 +253,11 @@ HTML;
'userid' => $user->getId(),
'reminderscount' => $remindersCount,
'lastreminder' => $lastReminderAgo,
- );
+ ];
}
// Sort the requests based on translations and registration date
- usort( $requests, array( __CLASS__, 'translatorRequestSort' ) );
+ usort( $requests, [ __CLASS__, 'translatorRequestSort' ] );
foreach ( $requests as $request ) {
$items[] = $this->makeRequestItem( $request );
diff --git a/www/wiki/extensions/Translate/specials/SpecialMessageGroupStats.php b/www/wiki/extensions/Translate/specials/SpecialMessageGroupStats.php
index 518e0716..8698a7f9 100644
--- a/www/wiki/extensions/Translate/specials/SpecialMessageGroupStats.php
+++ b/www/wiki/extensions/Translate/specials/SpecialMessageGroupStats.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,7 +16,7 @@
*/
class SpecialMessageGroupStats extends SpecialLanguageStats {
/// Overwritten from SpecialLanguageStats
- protected $targetValueName = array( 'group' );
+ protected $targetValueName = [ 'group' ];
/// Overwritten from SpecialLanguageStats
protected $noComplete = false;
/// Overwritten from SpecialLanguageStats
@@ -36,8 +36,14 @@ class SpecialMessageGroupStats extends SpecialLanguageStats {
return $this->msg( 'translate-mgs-pagename' )->text();
}
- protected function getGroupName() {
- return 'wiki';
+ /// Overwritten from SpecialLanguageStats
+ protected function loadStatistics( $target, $flags = 0 ) {
+ return MessageGroupStats::forGroup( $target, $flags );
+ }
+
+ /// Overwritten from SpecialLanguageStats
+ protected function getCacheRebuildJobParameters( $target ) {
+ return [ 'groupid' => $target ];
}
/// Overwritten from SpecialLanguageStats
@@ -63,111 +69,82 @@ class SpecialMessageGroupStats extends SpecialLanguageStats {
protected function invalidTarget() {
$this->getOutput()->wrapWikiMsg(
"<div class='error'>$1</div>",
- array( 'translate-mgs-invalid-group', $this->target )
+ [ 'translate-mgs-invalid-group', $this->target ]
);
}
/// Overwritten from SpecialLanguageStats
protected function outputIntroduction() {
- $group = $this->getRequest()->getVal( 'group' );
- $priorityLangs = TranslateMetadata::get( $group, 'prioritylangs' );
+ $priorityLangs = TranslateMetadata::get( $this->target, 'prioritylangs' );
if ( $priorityLangs ) {
$this->getOutput()->addWikiMsg( 'tpt-priority-languages', $priorityLangs );
}
}
/// Overwriten from SpecialLanguageStats
- protected function getform() {
- global $wgScript;
-
- $out = Html::openElement( 'div' );
- $out .= Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
- $out .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
- $out .= Html::hidden( 'x', 'D' ); // To detect submission
- $out .= Html::openElement( 'fieldset' );
- $out .= Html::element( 'legend', array(), $this->msg( 'translate-mgs-fieldset' )->text() );
- $out .= Html::openElement( 'table' );
-
- $out .= Html::openElement( 'tr' );
- $out .= Html::openElement( 'td', array( 'class' => 'mw-label' ) );
- $out .= Xml::label( $this->msg( 'translate-mgs-group' )->text(), 'group' );
- $out .= Html::closeElement( 'td' );
- $out .= Html::openElement( 'td', array( 'class' => 'mw-input' ) );
- $out .= $this->getGroupSelector( $this->target )->getHTML();
- $out .= Html::closeElement( 'td' );
- $out .= Html::closeElement( 'tr' );
-
- $out .= Html::openElement( 'tr' );
- $out .= Html::openElement( 'td', array( 'colspan' => 2 ) );
- $out .= Xml::checkLabel(
- $this->msg( 'translate-mgs-nocomplete' )->text(),
- 'suppresscomplete',
- 'suppresscomplete',
- $this->noComplete
- );
- $out .= Html::closeElement( 'td' );
- $out .= Html::closeElement( 'tr' );
-
- $out .= Html::openElement( 'tr' );
- $out .= Html::openElement( 'td', array( 'colspan' => 2 ) );
- $out .= Xml::checkLabel(
- $this->msg( 'translate-mgs-noempty' )->text(),
- 'suppressempty',
- 'suppressempty',
- $this->noEmpty
- );
- $out .= Html::closeElement( 'td' );
- $out .= Html::closeElement( 'tr' );
-
- $out .= Html::openElement( 'tr' );
- $out .= Html::openElement( 'td', array( 'class' => 'mw-input', 'colspan' => 2 ) );
- $out .= Xml::submitButton( $this->msg( 'translate-mgs-submit' )->text() );
- $out .= Html::closeElement( 'td' );
- $out .= Html::closeElement( 'tr' );
+ protected function addForm() {
+ $formDescriptor = [
+ 'select' => [
+ 'type' => 'select',
+ 'name' => 'group',
+ 'id' => 'group',
+ 'label' => $this->msg( 'translate-mgs-group' )->text(),
+ 'options' => $this->getGroupOptions(),
+ 'default' => $this->target
+ ],
+ 'nocomplete-check' => [
+ 'type' => 'check',
+ 'name' => 'suppresscomplete',
+ 'id' => 'suppresscomplete',
+ 'label' => $this->msg( 'translate-mgs-nocomplete' )->text(),
+ 'default' => $this->noComplete,
+ ],
+ 'noempty-check' => [
+ 'type' => 'check',
+ 'name' => 'suppressempty',
+ 'id' => 'suppressempty',
+ 'label' => $this->msg( 'translate-mgs-noempty' )->text(),
+ 'default' => $this->noEmpty,
+ ]
+ ];
+
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
- $out .= Html::closeElement( 'table' );
- $out .= Html::closeElement( 'fieldset' );
/* Since these pages are in the tabgroup with Special:Translate,
* it makes sense to retain the selected group/language parameter
* on post requests even when not relevant to the current page. */
$val = $this->getRequest()->getVal( 'language' );
if ( $val !== null ) {
- $out .= Html::hidden( 'language', $val );
+ $htmlForm->addHiddenField( 'language', $val );
}
- $out .= Html::closeElement( 'form' );
- $out .= Html::closeElement( 'div' );
- return $out;
+ $htmlForm
+ ->addHiddenField( 'x', 'D' ) // To detect submission
+ ->setMethod( 'get' )
+ ->setSubmitTextMsg( 'translate-mgs-submit' )
+ ->setWrapperLegendMsg( 'translate-mgs-fieldset' )
+ ->prepareForm()
+ ->displayForm( false );
}
- /**
- * Overwriten from SpecialLanguageStats
- *
- * @return string
- */
- protected function getTable() {
+ /// Overwritten from SpecialLanguageStats
+ protected function getTable( $stats ) {
$table = $this->table;
$this->addWorkflowStatesColumn();
$out = '';
- if ( $this->purge ) {
- MessageGroupStats::clearGroup( $this->target );
- }
-
- MessageGroupStats::setTimeLimit( $this->timelimit );
- $cache = MessageGroupStats::forGroup( $this->target );
-
+ $this->numberOfShownLanguages = 0;
$languages = array_keys(
TranslateUtils::getLanguageNames( $this->getLanguage()->getCode() )
);
sort( $languages );
- $this->filterPriorityLangs( $languages, $this->target, $cache );
+ $this->filterPriorityLangs( $languages, $this->target, $stats );
foreach ( $languages as $code ) {
if ( $table->isBlacklisted( $this->target, $code ) !== null ) {
continue;
}
- $out .= $this->makeRow( $code, $cache );
+ $out .= $this->makeRow( $code, $stats );
}
if ( $out ) {
@@ -176,7 +153,11 @@ class SpecialMessageGroupStats extends SpecialLanguageStats {
$out .= Html::closeElement( 'tbody' );
$out .= Html::openElement( 'tfoot' );
- $out .= $table->makeTotalRow( $this->msg( 'translate-mgs-totals' ), $this->totals );
+ $out .= $table->makeTotalRow(
+ $this->msg( 'translate-mgs-totals' )
+ ->numParams( $this->numberOfShownLanguages ),
+ $this->totals
+ );
$out .= Html::closeElement( 'tfoot' );
$out .= Html::closeElement( 'table' );
@@ -193,9 +174,9 @@ class SpecialMessageGroupStats extends SpecialLanguageStats {
* Filter an array of languages based on whether a priority set of
* languages present for the passed group. If priority languages are
* present, to that list add languages with more than 0% translation.
- * @param $languages Array of Languages to be filtered
- * @param $group
- * @param $cache
+ * @param array &$languages Array of Languages to be filtered
+ * @param string $group
+ * @param array $cache
*/
protected function filterPriorityLangs( &$languages, $group, $cache ) {
$filterLangs = TranslateMetadata::get( $group, 'prioritylangs' );
@@ -216,8 +197,8 @@ class SpecialMessageGroupStats extends SpecialLanguageStats {
}
/**
- * @param $code
- * @param $cache
+ * @param string $code
+ * @param array $cache
* @return string
*/
protected function makeRow( $code, $cache ) {
@@ -228,7 +209,7 @@ class SpecialMessageGroupStats extends SpecialLanguageStats {
if ( $total === null ) {
$this->incomplete = true;
- $extra = array();
+ $extra = [];
} else {
if ( $this->noComplete && $fuzzy === 0 && $translated === $total ) {
return '';
@@ -244,12 +225,12 @@ class SpecialMessageGroupStats extends SpecialLanguageStats {
}
if ( $translated === $total ) {
- $extra = array( 'action' => 'proofread' );
+ $extra = [ 'action' => 'proofread' ];
} else {
- $extra = array();
+ $extra = [];
}
}
-
+ $this->numberOfShownLanguages += 1;
$this->totals = MessageGroupStats::multiAdd( $this->totals, $stats );
$out = "\t" . Html::openElement( 'tr' );
@@ -264,8 +245,8 @@ class SpecialMessageGroupStats extends SpecialLanguageStats {
}
/**
- * @param $code
- * @param $params
+ * @param string $code
+ * @param array $params
* @return string
*/
protected function getMainColumnCell( $code, $params ) {
@@ -274,23 +255,26 @@ class SpecialMessageGroupStats extends SpecialLanguageStats {
$this->translate = SpecialPage::getTitleFor( 'Translate' );
}
- $queryParameters = $params + array(
+ $queryParameters = $params + [
'group' => $this->target,
'language' => $code
- );
+ ];
if ( isset( $this->names[$code] ) ) {
- $text = htmlspecialchars( "$code: {$this->names[$code]}" );
+ $text = "$code: {$this->names[$code]}";
} else {
- $text = htmlspecialchars( $code );
+ $text = $code;
}
- $link = Linker::link( $this->translate, $text, array(), $queryParameters );
+ $link = $this->getLinkRenderer()->makeKnownLink(
+ $this->translate,
+ $text,
+ [],
+ $queryParameters
+ );
- return Html::rawElement( 'td', array(), $link );
+ return Html::rawElement( 'td', [], $link );
}
- // @codingStandardsIgnoreStart PHP CodeSniffer warns "Useless method overriding
- // detected", but that's not the case.
/**
* @param string $field
* @param string $filter
@@ -298,24 +282,23 @@ class SpecialMessageGroupStats extends SpecialLanguageStats {
*/
protected function getWorkflowStates( $field = 'tgr_lang', $filter = 'tgr_group' ) {
return parent::getWorkflowStates( $field, $filter );
- } // @codingStandardsIgnoreEnd
+ }
/**
- * Creates a simple message group selector.
+ * Creates a simple message group options.
*
- * @param string|bool $default Group id of the group chosen by default. Optional.
- * @return XmlSelect
+ * @return array $options
*/
- protected function getGroupSelector( $default = false ) {
+ protected function getGroupOptions() {
+ $options = [];
$groups = MessageGroups::getAllGroups();
- $selector = new XmlSelect( 'group', 'group', $default );
foreach ( $groups as $id => $class ) {
if ( MessageGroups::getGroup( $id )->exists() ) {
- $selector->addOption( $class->getLabel(), $id );
+ $options[$class->getLabel()] = $id;
}
}
- return $selector;
+ return $options;
}
}
diff --git a/www/wiki/extensions/Translate/specials/SpecialSearchTranslations.php b/www/wiki/extensions/Translate/specials/SpecialSearchTranslations.php
index 133d4b80..68ac1b2e 100644
--- a/www/wiki/extensions/Translate/specials/SpecialSearchTranslations.php
+++ b/www/wiki/extensions/Translate/specials/SpecialSearchTranslations.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -23,7 +23,7 @@ class SpecialSearchTranslations extends SpecialPage {
* don't contain any chars that are escaped in html.
* @var array
*/
- protected $hl = array();
+ protected $hl = [];
/**
* How many search results to display per page
@@ -33,10 +33,10 @@ class SpecialSearchTranslations extends SpecialPage {
public function __construct() {
parent::__construct( 'SearchTranslations' );
- $this->hl = array(
+ $this->hl = [
TranslateUtils::getPlaceholder(),
TranslateUtils::getPlaceholder(),
- );
+ ];
}
public function setHeaders() {
@@ -64,9 +64,11 @@ class SpecialSearchTranslations extends SpecialPage {
$out->addModuleStyles( 'jquery.uls.grid' );
$out->addModuleStyles( 'ext.translate.special.searchtranslations.styles' );
$out->addModuleStyles( 'ext.translate.special.translate.styles' );
+ $out->addModuleStyles( [ 'mediawiki.ui.button', 'mediawiki.ui.input', 'mediawiki.ui.checkbox' ] );
$out->addModules( 'ext.translate.special.searchtranslations' );
$out->addModules( 'ext.translate.special.searchtranslations.operatorsuggest' );
$out->addHelpLink( 'Help:Extension:Translate#searching' );
+ $out->addJsConfigVars( 'wgTranslateLanguages', TranslateUtils::getLanguageNames( null ) );
$this->opts = $opts = new FormOptions();
$opts->add( 'query', '' );
@@ -86,10 +88,11 @@ class SpecialSearchTranslations extends SpecialPage {
if ( $queryString === '' ) {
$this->showEmptySearch();
-
return;
}
+ $search = $this->getSearchInput( $queryString );
+
$options = $params = $opts->getAllValues();
$filter = $opts->getValue( 'filter' );
try {
@@ -98,6 +101,11 @@ class SpecialSearchTranslations extends SpecialPage {
}
$translationSearch = new CrossLanguageTranslationSearchQuery( $options, $server );
if ( in_array( $filter, $translationSearch->getAvailableFilters() ) ) {
+ if ( $options['language'] === $options['sourcelanguage'] ) {
+ $this->showSearchError( $search, $this->msg( 'tux-sst-error-language' ) );
+ return;
+ }
+
$opts->setValue( 'language', $options['language'] );
$documents = $translationSearch->getDocuments();
$total = $translationSearch->getTotalHits();
@@ -108,7 +116,15 @@ class SpecialSearchTranslations extends SpecialPage {
$total = $server->getTotalHits( $resultset );
}
} catch ( TTMServerException $e ) {
- error_log( 'Translation search server unavailable:' . $e->getMessage() );
+ $message = $e->getMessage();
+ // Known exceptions
+ if ( preg_match( '/^Result window is too large/', $message ) ) {
+ $this->showSearchError( $search, $this->msg( 'tux-sst-error-offset' ) );
+ return;
+ }
+
+ // Other exceptions
+ error_log( 'Translation search server unavailable: ' . $e->getMessage() );
throw new ErrorPageError( 'tux-sst-solr-offline-title', 'tux-sst-solr-offline-body' );
}
@@ -116,28 +132,28 @@ class SpecialSearchTranslations extends SpecialPage {
$facets = $server->getFacets( $resultset );
$facetHtml = '';
- if ( count( $facets['language'] ) > 0 ) {
+ if ( $facets['language'] !== [] ) {
if ( $filter !== '' ) {
$facets['language'] = array_merge(
$facets['language'],
- array( $opts->getValue( 'language' ) => $total )
+ [ $opts->getValue( 'language' ) => $total ]
);
}
$facetHtml = Html::element( 'div',
- array( 'class' => 'row facet languages',
+ [ 'class' => 'row facet languages',
'data-facets' => FormatJson::encode( $this->getLanguages( $facets['language'] ) ),
'data-language' => $opts->getValue( 'language' ),
- ),
- $this->msg( 'tux-sst-facet-language' )
+ ],
+ $this->msg( 'tux-sst-facet-language' )->text()
);
}
- if ( count( $facets['group'] ) > 0 ) {
+ if ( $facets['group'] !== [] ) {
$facetHtml .= Html::element( 'div',
- array( 'class' => 'row facet groups',
+ [ 'class' => 'row facet groups',
'data-facets' => FormatJson::encode( $this->getGroups( $facets['group'] ) ),
- 'data-group' => $opts->getValue( 'group' ) ),
- $this->msg( 'tux-sst-facet-group' )
+ 'data-group' => $opts->getValue( 'group' ) ],
+ $this->msg( 'tux-sst-facet-group' )->text()
);
}
@@ -150,11 +166,16 @@ class SpecialSearchTranslations extends SpecialPage {
$code = $handle->getCode();
$language = $opts->getValue( 'language' );
if ( $code !== '' && $code !== $language && $handle->isValid() ) {
- $groupId = $handle->getGroup()->getId();
- $helpers = new TranslationHelpers( $title, $groupId );
+ $dataProvider = new TranslationAidDataProvider( $handle );
+ $aid = new CurrentTranslationAid(
+ $handle->getGroup(),
+ $handle,
+ $this->getContext(),
+ $dataProvider
+ );
$document['wiki'] = wfWikiID();
$document['localid'] = $handle->getTitleForBase()->getPrefixedText();
- $document['content'] = $helpers->getTranslation();
+ $document['content'] = $aid->getData()['value'];
$document['language'] = $handle->getCode();
array_unshift( $documents, $document );
$total++;
@@ -175,25 +196,19 @@ class SpecialSearchTranslations extends SpecialPage {
continue;
}
- $resultAttribs = array(
+ $resultAttribs = [
'class' => 'row tux-message',
'data-title' => $title->getPrefixedText(),
'data-language' => $document['language'],
- );
+ ];
$handle = new MessageHandle( $title );
if ( $handle->isValid() ) {
- $groupId = $handle->getGroup()->getId();
- $helpers = new TranslationHelpers( $title, $groupId );
- $resultAttribs['data-definition'] = $helpers->getDefinition();
- $resultAttribs['data-translation'] = $helpers->getTranslation();
- $resultAttribs['data-group'] = $groupId;
-
- $uri = $title->getLocalURL( array( 'action' => 'edit' ) );
+ $uri = TranslateUtils::getEditorUrl( $handle );
$link = Html::element(
'a',
- array( 'href' => $uri ),
+ [ 'href' => $uri ],
$this->msg( 'tux-sst-edit' )->text()
);
} else {
@@ -201,29 +216,29 @@ class SpecialSearchTranslations extends SpecialPage {
$domain = $url['host'];
$link = Html::element(
'a',
- array( 'href' => $document['uri'] ),
+ [ 'href' => $document['uri'] ],
$this->msg( 'tux-sst-view-foreign', $domain )->text()
);
}
$access = Html::rawElement(
'div',
- array( 'class' => 'row tux-edit tux-message-item' ),
+ [ 'class' => 'row tux-edit tux-message-item' ],
$link
);
$titleText = $title->getPrefixedText();
- $titleAttribs = array(
+ $titleAttribs = [
'class' => 'row tux-title',
'dir' => 'ltr',
- );
+ ];
$language = Language::factory( $document['language'] );
- $textAttribs = array(
+ $textAttribs = [
'class' => 'row tux-text',
'lang' => $language->getHtmlCode(),
'dir' => $language->getDir(),
- );
+ ];
$resultsHtml = $resultsHtml
. Html::openElement( 'div', $resultAttribs )
@@ -233,41 +248,40 @@ class SpecialSearchTranslations extends SpecialPage {
. Html::closeElement( 'div' );
}
- $resultsHtml .= Html::rawElement( 'hr', array( 'class' => 'tux-pagination-line' ) );
+ $resultsHtml .= Html::rawElement( 'hr', [ 'class' => 'tux-pagination-line' ] );
$prev = $next = '';
$offset = $this->opts->getValue( 'offset' );
$params = $this->opts->getChangedValues();
if ( $total - $offset > $this->limit ) {
- $newParams = array( 'offset' => $offset + $this->limit ) + $params;
- $attribs = array(
+ $newParams = [ 'offset' => $offset + $this->limit ] + $params;
+ $attribs = [
'class' => 'mw-ui-button pager-next',
'href' => $this->getPageTitle()->getLocalURL( $newParams ),
- );
+ ];
$next = Html::element( 'a', $attribs, $this->msg( 'tux-sst-next' )->text() );
}
if ( $offset ) {
- $newParams = array( 'offset' => max( 0, $offset - $this->limit ) ) + $params;
- $attribs = array(
+ $newParams = [ 'offset' => max( 0, $offset - $this->limit ) ] + $params;
+ $attribs = [
'class' => 'mw-ui-button pager-prev',
'href' => $this->getPageTitle()->getLocalURL( $newParams ),
- );
+ ];
$prev = Html::element( 'a', $attribs, $this->msg( 'tux-sst-prev' )->text() );
}
- $resultsHtml .= Html::rawElement( 'div', array( 'class' => 'tux-pagination-links' ),
+ $resultsHtml .= Html::rawElement( 'div', [ 'class' => 'tux-pagination-links' ],
"$prev $next"
);
- $search = $this->getSearchInput( $queryString );
$count = $this->msg( 'tux-sst-count' )->numParams( $total );
$this->showSearch( $search, $count, $facetHtml, $resultsHtml, $total );
}
protected function getLanguages( array $facet ) {
- $output = array();
+ $output = [];
$nondefaults = $this->opts->getChangedValues();
$selected = $this->opts->getValue( 'language' );
@@ -289,10 +303,10 @@ class SpecialSearchTranslations extends SpecialPage {
$url = $this->getPageTitle()->getLocalURL( $nondefaults );
$value = $this->getLanguage()->formatNum( $value );
- $output[$key] = array(
+ $output[$key] = [
'count' => $value,
'url' => $url
- );
+ ];
}
return $output;
@@ -304,7 +318,7 @@ class SpecialSearchTranslations extends SpecialPage {
}
protected function makeGroupFacetRows( array $groups, $counts, $level = 0, $pathString = '' ) {
- $output = array();
+ $output = [];
$nondefaults = $this->opts->getChangedValues();
$selected = $this->opts->getValue( 'group' );
@@ -316,7 +330,7 @@ class SpecialSearchTranslations extends SpecialPage {
if ( is_array( $mixed ) ) {
$group = array_shift( $subgroups );
} else {
- $subgroups = array();
+ $subgroups = [];
}
$id = $group->getId();
@@ -333,13 +347,13 @@ class SpecialSearchTranslations extends SpecialPage {
$nondefaults['grouppath'] = $pathString . $id;
}
- $value = isset( $counts[$id] ) ? $counts[$id] : 0;
+ $value = $counts[$id] ?? 0;
- $output[$id] = array(
+ $output[$id] = [
'id' => $id,
'count' => $value,
'label' => $group->getLabel(),
- );
+ ];
if ( isset( $path[$level] ) && $path[$level] === $id ) {
$output[$id]['groups'] = $this->makeGroupFacetRows(
@@ -376,14 +390,14 @@ HTML
$size = 100;
if ( $total > $size && $match !== 'all' && $hasSpace ) {
$params = $this->opts->getChangedValues();
- $params = array( 'match' => 'all' ) + $params;
+ $params = [ 'match' => 'all' ] + $params;
$linkText = $this->msg( 'tux-sst-link-all-match' )->text();
$link = $this->getPageTitle()->getFullURL( $params );
$link = "<span class='plainlinks'>[$link $linkText]</span>";
$this->getOutput()->wrapWikiMsg(
'<div class="successbox">$1</div>',
- array( 'tux-sst-match-message', $link )
+ [ 'tux-sst-match-message', $link ]
);
}
@@ -409,61 +423,85 @@ HTML
);
}
- // Build ellipsis to select options
+ protected function showSearchError( $search, Message $message ) {
+ $messageSelector = $this->messageSelector();
+ $this->getOutput()->addHTML( <<<HTML
+<div class="grid tux-searchpage">
+ <div class="row tux-searchboxform">
+ <div class="tux-search-tabs offset-by-three">$messageSelector</div>
+ <div class="row tux-search-options">
+ <div class="offset-by-three nine columns tux-search-inputs">
+ <div class="row searchinput">$search</div>
+ <div class="row errorbox">{$message->escaped()}</div>
+ </div>
+ </div>
+ </div>
+</div>
+HTML
+ );
+ }
+
+ /**
+ * Build ellipsis to select options
+ * @param string $key
+ * @param string $value
+ * @return string
+ */
protected function ellipsisSelector( $key, $value ) {
$nondefaults = $this->opts->getChangedValues();
- $taskParams = array( 'filter' => $value ) + $nondefaults;
+ $taskParams = [ 'filter' => $value ] + $nondefaults;
ksort( $taskParams );
$href = $this->getPageTitle()->getLocalURL( $taskParams );
$link = Html::element( 'a',
- array( 'href' => $href ),
+ [ 'href' => $href ],
// Messages for grepping:
// tux-sst-ellipsis-untranslated
// tux-sst-ellipsis-outdated
$this->msg( 'tux-sst-ellipsis-' . $key )->text()
);
- $container = Html::rawElement( 'li', array(
+ $container = Html::rawElement( 'li', [
'class' => 'column',
'data-filter' => $value,
'data-title' => $key,
- ), $link );
+ ], $link );
return $container;
}
- /*
+ /**
* Design the tabs
+ * @return string
*/
protected function messageSelector() {
$nondefaults = $this->opts->getChangedValues();
- $output = Html::openElement( 'div', array( 'class' => 'row tux-messagetable-header' ) );
- $output .= Html::openElement( 'div', array( 'class' => 'nine columns' ) );
- $output .= Html::openElement( 'ul', array( 'class' => 'row tux-message-selector' ) );
- $tabs = array(
+ $output = Html::openElement( 'div', [ 'class' => 'row tux-messagetable-header' ] );
+ $output .= Html::openElement( 'div', [ 'class' => 'nine columns' ] );
+ $output .= Html::openElement( 'ul', [ 'class' => 'row tux-message-selector' ] );
+ $tabs = [
'default' => '',
'translated' => 'translated',
'untranslated' => 'untranslated'
- );
+ ];
- $ellipsisOptions = array(
+ $ellipsisOptions = [
'outdated' => 'fuzzy'
- );
+ ];
$selected = $this->opts->getValue( 'filter' );
$keys = array_keys( $tabs );
if ( in_array( $selected, array_values( $ellipsisOptions ) ) ) {
$key = $keys[count( $keys ) - 1];
- $ellipsisOptions = array( $key => $tabs[$key] );
+ $ellipsisOptions = [ $key => $tabs[$key] ];
// Remove the last tab
unset( $tabs[$key] );
- $tabs = array_merge( $tabs, array( 'outdated' => $selected ) );
+ $tabs = array_merge( $tabs, [ 'outdated' => $selected ] );
} elseif ( !in_array( $selected, array_values( $tabs ) ) ) {
$selected = '';
}
- $container = Html::openElement( 'ul', array( 'class' => 'column tux-message-selector' ) );
+ $container = Html::openElement( 'ul', [ 'class' => 'column tux-message-selector' ] );
foreach ( $ellipsisOptions as $optKey => $optValue ) {
$container .= $this->ellipsisSelector( $optKey, $optValue );
}
@@ -477,19 +515,19 @@ HTML
// tux-sst-untranslated
// tux-sst-outdated
$tabClass = "tux-sst-$tab";
- $taskParams = array( 'filter' => $filter ) + $nondefaults;
+ $taskParams = [ 'filter' => $filter ] + $nondefaults;
ksort( $taskParams );
$href = $this->getPageTitle()->getLocalURL( $taskParams );
if ( $tab === 'default' ) {
$link = Html::element(
'a',
- array( 'href' => $href ),
+ [ 'href' => $href ],
$this->msg( $tabClass )->text()
);
} else {
$link = Html::element(
'a',
- array( 'href' => $href ),
+ [ 'href' => $href ],
$this->msg( $tabClass, $sourcelanguage )->text()
);
}
@@ -497,15 +535,15 @@ HTML
if ( $selected === $filter ) {
$tabClass = $tabClass . ' selected';
}
- $output .= Html::rawElement( 'li', array(
- 'class' => array( 'column', $tabClass ),
+ $output .= Html::rawElement( 'li', [
+ 'class' => [ 'column', $tabClass ],
'data-filter' => $filter,
'data-title' => $tab,
- ), $link );
+ ], $link );
}
// More column
- $output .= Html::openElement( 'li', array( 'class' => 'column more' ) ) .
+ $output .= Html::openElement( 'li', [ 'class' => 'column more' ] ) .
'...' .
$container .
Html::closeElement( 'li' );
@@ -518,15 +556,18 @@ HTML
}
protected function getSearchInput( $query ) {
- $attribs = array(
+ $attribs = [
'placeholder' => $this->msg( 'tux-sst-search-ph' ),
- 'class' => 'searchinputbox',
+ 'class' => 'searchinputbox mw-ui-input',
'dir' => $this->getLanguage()->getDir(),
- );
+ ];
$title = Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
$input = Xml::input( 'query', false, $query, $attribs );
- $submit = Xml::submitButton( $this->msg( 'tux-sst-search' ), array( 'class' => 'button' ) );
+ $submit = Xml::submitButton(
+ $this->msg( 'tux-sst-search' ),
+ [ 'class' => 'mw-ui-button' ]
+ );
$nondefaults = $this->opts->getChangedValues();
$checkLabel = Xml::checkLabel(
@@ -535,14 +576,17 @@ HTML
'tux-case-sensitive',
isset( $nondefaults['case'] )
);
- $checkLabel = Html::openElement( 'div', array( 'class' => 'tux-search-operators' ) ) .
+ $checkLabel = Html::openElement(
+ 'div',
+ [ 'class' => 'tux-search-operators mw-ui-checkbox' ]
+ ) .
$checkLabel .
Html::closeElement( 'div' );
$lang = $this->getRequest()->getVal( 'language' );
$language = is_null( $lang ) ? '' : Html::hidden( 'language', $lang );
- $form = Html::rawElement( 'form', array( 'action' => wfScript(), 'name' => 'searchform' ),
+ $form = Html::rawElement( 'form', [ 'action' => wfScript(), 'name' => 'searchform' ],
$title . $input . $submit . $checkLabel . $language
);
diff --git a/www/wiki/extensions/Translate/specials/SpecialSupportedLanguages.php b/www/wiki/extensions/Translate/specials/SpecialSupportedLanguages.php
index 6cb5c82c..63f78109 100644
--- a/www/wiki/extensions/Translate/specials/SpecialSupportedLanguages.php
+++ b/www/wiki/extensions/Translate/specials/SpecialSupportedLanguages.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -33,7 +33,7 @@ class SpecialSupportedLanguages extends SpecialPage {
return 'wiki';
}
- function getDescription() {
+ public function getDescription() {
return $this->msg( 'supportedlanguages' )->text();
}
@@ -46,16 +46,19 @@ class SpecialSupportedLanguages extends SpecialPage {
$this->setHeaders();
$out->addModules( 'ext.translate.special.supportedlanguages' );
+ $out->addModuleStyles( 'ext.translate.special.supportedlanguages' );
$out->addHelpLink(
'Help:Extension:Translate/Statistics_and_reporting#List_of_languages_and_translators'
);
$this->outputHeader( 'supportedlanguages-summary' );
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
if ( $dbr->getType() === 'sqlite' ) {
- $out->addWikiText( '<div class=errorbox>SQLite is not supported.</div>' );
-
+ $out->wrapWikiMsg(
+ '<div class="errorbox">$1</div>',
+ 'supportedlanguages-sqlite-error'
+ );
return;
}
@@ -96,11 +99,11 @@ class SpecialSupportedLanguages extends SpecialPage {
$userStats = $this->getUserStats( $usernames );
// Information to be used inside the foreach loop.
- $linkInfo = array();
+ $linkInfo = [];
$linkInfo['rc']['title'] = SpecialPage::getTitleFor( 'Recentchanges' );
- $linkInfo['rc']['msg'] = $this->msg( 'supportedlanguages-recenttranslations' )->escaped();
+ $linkInfo['rc']['msg'] = $this->msg( 'supportedlanguages-recenttranslations' )->text();
$linkInfo['stats']['title'] = SpecialPage::getTitleFor( 'LanguageStats' );
- $linkInfo['stats']['msg'] = $this->msg( 'languagestats' )->escaped();
+ $linkInfo['stats']['msg'] = $this->msg( 'languagestats' )->text();
$local = Language::fetchLanguageName( $code, $lang->getCode(), 'all' );
$native = Language::fetchLanguageName( $code, null, 'all' );
@@ -114,29 +117,27 @@ class SpecialSupportedLanguages extends SpecialPage {
->params( $code, $native )->escaped();
}
- $out->addHTML( Html::rawElement( 'h2', array( 'id' => $code ), $headerText ) );
+ $out->addHTML( Html::rawElement( 'h2', [ 'id' => $code ], $headerText ) );
// Add useful links for language stats and recent changes for the language.
- $links = array();
- $links[] = Linker::link(
+ $links = [];
+ $links[] = $this->getLinkRenderer()->makeKnownLink(
$linkInfo['stats']['title'],
$linkInfo['stats']['msg'],
- array(),
- array(
+ [],
+ [
'code' => $code,
'suppresscomplete' => '1'
- ),
- array( 'known', 'noclasses' )
+ ]
);
- $links[] = Linker::link(
+ $links[] = $this->getLinkRenderer()->makeKnownLink(
$linkInfo['rc']['title'],
$linkInfo['rc']['msg'],
- array(),
- array(
+ [],
+ [
'translations' => 'only',
'trailer' => '/' . $code
- ),
- array( 'known', 'noclasses' )
+ ]
);
$linkList = $lang->listToText( $links );
@@ -158,21 +159,21 @@ class SpecialSupportedLanguages extends SpecialPage {
}
}
- $dbr = wfGetDB( DB_SLAVE );
- $tables = array( 'recentchanges' );
- $fields = array( 'substring_index(rc_title, \'/\', -1) as lang', 'count(*) as count' );
+ $dbr = wfGetDB( DB_REPLICA );
+ $tables = [ 'recentchanges' ];
+ $fields = [ 'substring_index(rc_title, \'/\', -1) as lang', 'count(*) as count' ];
$timestamp = $dbr->timestamp( wfTimestamp( TS_UNIX ) - 60 * 60 * 24 * $this->period );
- $conds = array(
+ $conds = [
# Without the quotes the rc_timestamp index isn't used and this query is much slower
"rc_timestamp > '$timestamp'",
'rc_namespace' => $wgTranslateMessageNamespaces,
'rc_title' . $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() ),
- );
- $options = array( 'GROUP BY' => 'lang', 'HAVING' => 'count > 20', 'ORDER BY' => 'NULL' );
+ ];
+ $options = [ 'GROUP BY' => 'lang', 'HAVING' => 'count > 20', 'ORDER BY' => 'NULL' ];
$res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options );
- $data = array();
+ $data = [];
foreach ( $res as $row ) {
$data[$row->lang] = $row->count;
}
@@ -207,10 +208,10 @@ class SpecialSupportedLanguages extends SpecialPage {
$work = new PoolCounterWorkViaCallback(
'TranslateFetchTranslators',
"TranslateFetchTranslators-$code",
- array(
+ [
'doWork' => function () use ( $that, $code, $cache, $cachekey ) {
$users = $that->loadTranslators( $code );
- $newData = array( 'users' => $users, 'asOfTime' => time() );
+ $newData = [ 'users' => $users, 'asOfTime' => time() ];
$cache->set( $cachekey, $newData, 86400 );
return $users;
},
@@ -223,7 +224,7 @@ class SpecialSupportedLanguages extends SpecialPage {
// Use stale cache if possible
return is_array( $data ) ? $data['users'] : false;
}
- )
+ ]
);
return $work->execute();
@@ -238,22 +239,35 @@ class SpecialSupportedLanguages extends SpecialPage {
public function loadTranslators( $code ) {
global $wgTranslateMessageNamespaces;
- $dbr = wfGetDB( DB_SLAVE, 'vslow' );
- $tables = array( 'page', 'revision' );
- $fields = array(
- 'rev_user_text',
+ $dbr = wfGetDB( DB_REPLICA, 'vslow' );
+
+ if ( class_exists( ActorMigration::class ) ) {
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'rev_user' );
+ } else {
+ $actorQuery = [
+ 'tables' => [],
+ 'fields' => [ 'rev_user_text' => 'rev_user_text' ],
+ 'joins' => [],
+ ];
+ }
+
+ $tables = [ 'page', 'revision' ] + $actorQuery['tables'];
+ $fields = [
+ 'rev_user_text' => $actorQuery['fields']['rev_user_text'],
'count(page_id) as count'
- );
- $conds = array(
+ ];
+ $conds = [
'page_title' . $dbr->buildLike( $dbr->anyString(), '/', $code ),
'page_namespace' => $wgTranslateMessageNamespaces,
- 'page_id=rev_page',
- );
- $options = array( 'GROUP BY' => 'rev_user_text', 'ORDER BY' => 'NULL' );
+ ];
+ $options = [ 'GROUP BY' => $actorQuery['fields']['rev_user_text'], 'ORDER BY' => 'NULL' ];
+ $joins = [
+ 'revision' => [ 'JOIN', 'page_id=rev_page' ],
+ ] + $actorQuery['joins'];
- $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options );
+ $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options, $joins );
- $data = array();
+ $data = [];
foreach ( $res as $row ) {
$data[$row->rev_user_text] = $row->count;
}
@@ -297,12 +311,12 @@ class SpecialSupportedLanguages extends SpecialPage {
$name = $names[$k];
$size = round( log( $v ) * 20 ) + 10;
- $params = array(
+ $params = [
'href' => $this->getPageTitle( $k )->getLocalURL(),
'class' => 'tag',
'style' => "font-size:$size%",
'lang' => $k,
- );
+ ];
$tag = Html::element( 'a', $params, $name );
$out->addHTML( $tag . "\n" );
@@ -317,15 +331,16 @@ class SpecialSupportedLanguages extends SpecialPage {
// longer than this is just inactive
$period = $this->period;
- $links = array();
+ $links = [];
$statsTable = new StatsTable();
+ arsort( $users );
foreach ( $users as $username => $count ) {
$title = Title::makeTitleSafe( NS_USER, $username );
$enc = htmlspecialchars( $username );
- $attribs = array();
- $styles = array();
+ $attribs = [];
+ $styles = [];
if ( isset( $stats[$username][0] ) ) {
if ( $count === -1 ) {
$count = $stats[$username][0];
@@ -339,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>";
}
@@ -349,7 +364,7 @@ class SpecialSupportedLanguages extends SpecialPage {
$attribs['style'] = $stylestr;
}
- $links[] = Linker::link( $title, $enc, $attribs );
+ $links[] = $this->getLinkRenderer()->makeLink( $title, new HtmlArmor( $enc ), $attribs );
}
// for GENDER support
@@ -372,15 +387,15 @@ class SpecialSupportedLanguages extends SpecialPage {
protected function getUserStats( $users ) {
$cache = wfGetCache( CACHE_ANYTHING );
- $dbr = wfGetDB( DB_SLAVE );
- $keys = array();
+ $dbr = wfGetDB( DB_REPLICA );
+ $keys = [];
foreach ( $users as $username ) {
$keys[] = wfMemcKey( 'translate', 'sl-usertats', $username );
}
$cached = $cache->getMulti( $keys );
- $data = array();
+ $data = [];
foreach ( $users as $index => $username ) {
$cachekey = $keys[$index];
@@ -390,15 +405,24 @@ class SpecialSupportedLanguages extends SpecialPage {
continue;
}
- $tables = array( 'user', 'revision' );
- $fields = array( 'user_name', 'user_editcount', 'MAX(rev_timestamp) as lastedit' );
- $conds = array(
+ if ( class_exists( ActorMigration::class ) ) {
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'rev_user' );
+ $tables = [ 'user', 'r' => [ 'revision' ] + $actorQuery['tables'] ];
+ $joins = [
+ 'r' => [ 'JOIN', 'user_id = rev_user' ],
+ ] + $actorQuery['joins'];
+ } else {
+ $tables = [ 'user', 'revision' ];
+ $joins = [ 'revision' => [ 'JOIN', 'user_id = rev_user' ] ];
+ }
+
+ $fields = [ 'user_name', 'user_editcount', 'MAX(rev_timestamp) as lastedit' ];
+ $conds = [
'user_name' => $username,
- 'user_id = rev_user',
- );
+ ];
- $res = $dbr->selectRow( $tables, $fields, $conds, __METHOD__ );
- $data[$username] = array( $res->user_editcount, $res->lastedit );
+ $res = $dbr->selectRow( $tables, $fields, $conds, __METHOD__, [], $joins );
+ $data[$username] = [ $res->user_editcount, $res->lastedit ];
$cache->set( $cachekey, $data[$username], 3600 );
}
@@ -433,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/www/wiki/extensions/Translate/specials/SpecialTranslate.php b/www/wiki/extensions/Translate/specials/SpecialTranslate.php
index 7734a25f..fad30847 100644
--- a/www/wiki/extensions/Translate/specials/SpecialTranslate.php
+++ b/www/wiki/extensions/Translate/specials/SpecialTranslate.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,14 +15,11 @@
* @ingroup SpecialPage TranslateSpecialPage
*/
class SpecialTranslate extends SpecialPage {
- /** @var TranslateTask */
- protected $task;
-
/** @var MessageGroup */
protected $group;
protected $defaults;
- protected $nondefaults = array();
+ protected $nondefaults = [];
protected $options;
public function __construct() {
@@ -44,29 +41,15 @@ class SpecialTranslate extends SpecialPage {
* @throws ErrorPageError
*/
public function execute( $parameters ) {
- global $wgTranslateBlacklist, $wgContLang;
-
$out = $this->getOutput();
- $out->addModuleStyles( array(
+ $out->addModuleStyles( [
'ext.translate.special.translate.styles',
'jquery.uls.grid',
- ) );
- $out->addModules( 'ext.translate.special.translate' );
+ 'mediawiki.ui.button'
+ ] );
$this->setHeaders();
- $request = $this->getRequest();
- // @todo Move to api or so
- if ( $parameters === 'editpage' ) {
- $editpage = TranslationEditPage::newFromRequest( $request );
-
- if ( $editpage ) {
- $editpage->execute();
-
- return;
- }
- }
-
if ( !defined( 'ULS_VERSION' ) ) {
throw new ErrorPageError(
'translate-ulsdep-title',
@@ -75,219 +58,37 @@ class SpecialTranslate extends SpecialPage {
}
$this->setup( $parameters );
- $isBeta = self::isBeta( $request );
-
- if ( $this->options['group'] === '' || ( $isBeta && !$this->group ) ) {
- $this->groupInformation();
-
- return;
- }
-
- $errors = $this->getFormErrors();
-
- if ( $isBeta && $this->options['taction'] !== 'export' ) {
- $out->addHTML( Html::openElement( 'div', array(
- 'class' => 'grid ext-translate-container',
- ) ) );
-
- $out->addHTML( $this->tuxSettingsForm( $errors ) );
- $out->addHTML( $this->messageSelector() );
- } else {
- $out->addModuleStyles( 'ext.translate.legacy' );
- $out->addHelpLink( 'Help:Extension:Translate/Translation_example' );
- // Show errors nicely.
- $out->addHTML( $this->settingsForm( $errors ) );
- }
-
- if ( count( $errors ) ) {
- return;
- } else {
- $langCode = $this->options['language'];
-
- if ( $this->group->getSourceLanguage() === $langCode ) {
- $langName = TranslateUtils::getLanguageName(
- $langCode,
- $this->getLanguage()->getCode()
- );
- $reason = $this->msg( 'translate-page-disabled-source', $langName )->plain();
- $out->addWikiMsg( 'translate-page-disabled', $reason );
- if ( $isBeta ) {
- // Close div.ext-translate-container
- $out->addHTML( Html::closeElement( 'div' ) );
- }
- return;
- }
-
- $checks = array(
- $this->options['group'],
- strtok( $this->options['group'], '-' ),
- '*'
- );
-
- foreach ( $checks as $check ) {
- if ( isset( $wgTranslateBlacklist[$check][$langCode] ) ) {
- $reason = $wgTranslateBlacklist[$check][$langCode];
- $out->addWikiMsg( 'translate-page-disabled', $reason );
- if ( $isBeta ) {
- // Close div.ext-translate-container
- $out->addHTML( Html::closeElement( 'div' ) );
- }
- return;
- }
- }
- }
-
- $params = array( $this->getContext(), $this->task, $this->group, $this->options );
- if ( !Hooks::run( 'SpecialTranslate::executeTask', $params ) ) {
- return;
- }
-
- // Initialise and get output.
- if ( !$this->task ) {
- return;
- }
-
- $this->task->init( $this->group, $this->options, $this->nondefaults, $this->getContext() );
- $output = $this->task->execute();
-
- if ( $this->task->plainOutput() ) {
- $out->disable();
- header( 'Content-type: text/plain; charset=UTF-8' );
- echo $output;
- } else {
- $description = $this->getGroupDescription( $this->group );
-
- $taskid = $this->options['task'];
- if ( in_array( $taskid, array( 'untranslated', 'reviewall' ), true ) ) {
- $hasOptional = count( $this->group->getTags( 'optional' ) );
- if ( $hasOptional ) {
- $linktext = $this->msg( 'translate-page-description-hasoptional-open' )->escaped();
- $params = array( 'task' => 'optional' ) + $this->nondefaults;
- $link = Linker::link( $this->getPageTitle(), $linktext, array(), $params );
- $note = $this->msg( 'translate-page-description-hasoptional' )
- ->rawParams( $link )->parseAsBlock();
-
- if ( $description ) {
- $description .= '<br />' . $note;
- } else {
- $description = $note;
- }
- }
- }
-
- $groupId = $this->group->getId();
- // PHP is such an awesome language
- $priorityLangs = TranslateMetadata::get( $groupId, 'prioritylangs' );
- $priorityLangs = array_flip( array_filter( explode( ',', $priorityLangs ) ) );
- $priorityLangsCount = count( $priorityLangs );
- if ( $priorityLangsCount && !isset( $priorityLangs[$this->options['language']] ) ) {
- $priorityForce = TranslateMetadata::get( $groupId, 'priorityforce' );
- if ( $priorityForce === 'on' ) {
- // Hide table
- $priorityMessageClass = 'errorbox';
- $priorityMessageKey = 'tpt-discouraged-language-force';
- } else {
- $priorityMessageClass = 'warningbox';
- $priorityMessageKey = 'tpt-discouraged-language';
- }
-
- $priorityLanguageNames = array();
- $languageNames = TranslateUtils::getLanguageNames( $this->getLanguage()->getCode() );
- foreach ( array_keys( $priorityLangs ) as $langCode ) {
- $priorityLanguageNames[] = $languageNames[$langCode];
- }
-
- $priorityReason = TranslateMetadata::get( $groupId, 'priorityreason' );
- if ( $priorityReason !== '' ) {
- $priorityReason = "\n\n" . $this->msg(
- 'tpt-discouraged-language-reason',
- Xml::element( 'span',
- // The reason is probably written in the content language
- array(
- 'lang' => $wgContLang->getHtmlCode(),
- 'dir' => $wgContLang->getDir(),
- ),
- $priorityReason
- )
- )->parse();
- }
-
- $description .= Html::rawElement( 'div',
- array( 'class' => $priorityMessageClass ),
- $this->msg(
- $priorityMessageKey,
- '', // param formerly used for reason, now empty
- $languageNames[$this->options['language']],
- $this->getLanguage()->listToText( $priorityLanguageNames )
- )->parseAsBlock() . $priorityReason
- );
- }
-
- if ( $description ) {
- $description = Xml::fieldset(
- $this->msg( 'translate-page-description-legend' )->text(),
- $description,
- array( 'class' => 'mw-sp-translate-description' )
- );
- }
-
- if ( $isBeta ) {
- $out->addHTML( $output );
- } else {
- $out->addHTML( $description . $output );
- }
- }
-
- if ( $isBeta ) {
- $out->addHTML( Html::closeElement( 'div' ) );
- }
- }
-
- /**
- * Returns array of errors in the form parameters.
- */
- protected function getFormErrors() {
- $errors = array();
+ $out->addModules( 'ext.translate.special.translate' );
+ $out->addJsConfigVars( 'wgTranslateLanguages', TranslateUtils::getLanguageNames( null ) );
- $codes = TranslateUtils::getLanguageNames( 'en' );
- if ( !$this->options['language'] || !isset( $codes[$this->options['language']] ) ) {
- $errors['language'] = $this->msg( 'translate-page-no-such-language' )->text();
- $this->options['language'] = $this->defaults['language'];
- }
+ $out->addHTML( Html::openElement( 'div', [
+ 'class' => 'grid ext-translate-container',
+ ] ) );
- if ( !$this->group instanceof MessageGroup ) {
- $errors['group'] = $this->msg( 'translate-page-no-such-group' )->text();
- $this->options['group'] = $this->defaults['group'];
- } else {
- $languages = $this->group->getTranslatableLanguages();
+ $out->addHTML( $this->tuxSettingsForm() );
+ $out->addHTML( $this->messageSelector() );
- if ( $languages !== null && !isset( $languages[$this->options['language']] ) ) {
- $errors['language'] = $this->msg( 'translate-language-disabled' )->text();
- }
- }
+ $table = new TuxMessageTable( $this->getContext(), $this->group, $this->options['language'] );
+ $output = $table->fullTable();
- return $errors;
+ $out->addHTML( $output );
+ $out->addHTML( Html::closeElement( 'div' ) );
}
protected function setup( $parameters ) {
$request = $this->getRequest();
- $isBeta = self::isBeta( $request );
- $defaults = array(
+ $defaults = [
/* str */'taction' => 'translate',
- /* str */'task' => $isBeta ? 'custom' : 'untranslated',
/* str */'language' => $this->getLanguage()->getCode(),
- /* str */'group' => $isBeta ? '!additions' : '',
- /* str */'offset' => '', // Used to be int, now str
- /* int */'limit' => $isBeta ? 0 : 100,
- /* int */'optional' => '0',
- );
+ /* str */'group' => '!additions',
+ ];
// Dump everything here
- $nondefaults = array();
+ $nondefaults = [];
$parameters = array_map( 'trim', explode( ';', $parameters ) );
- $pars = array();
+ $pars = [];
foreach ( $parameters as $_ ) {
if ( $_ === '' ) {
@@ -325,157 +126,50 @@ class SpecialTranslate extends SpecialPage {
// Fix defaults based on what we got
if ( isset( $nondefaults['taction'] ) ) {
- if ( $nondefaults['taction'] === 'proofread' ) {
- if ( $this->getUser()->isAllowed( 'translate-messagereview' ) ) {
- $defaults['task'] = 'acceptqueue';
- } else {
- $defaults['task'] = 'reviewall';
+ if ( $nondefaults['taction'] === 'export' ) {
+ // Redirect old export URLs to Special:ExportTranslations
+ $params = [];
+ if ( isset( $nondefaults['group'] ) ) {
+ $params['group'] = $nondefaults['group'];
+ }
+ if ( isset( $nondefaults['language'] ) ) {
+ $params['language'] = $nondefaults['language'];
}
- } elseif ( $nondefaults['taction'] === 'export' ) {
- $defaults['task'] = '';
- }
- }
- if ( $isBeta ) {
- /* @todo fix all the places in Translate to create correct links.
- * The least effort way is to change them once we totally drop the
- * old UI. The penalty is only http redirect in some cases. More
- * effort would be to create utilities like makeTranslationLink
- * and makeProofreadLink.
- */
- $this->rewriteLegacyUrls( $nondefaults );
+ $export = SpecialPage::getTitleFor( 'ExportTranslations' )->getLocalURL( $params );
+ $this->getOutput()->redirect( $export );
+ }
}
$this->defaults = $defaults;
$this->nondefaults = $nondefaults;
- Hooks::run( 'TranslateGetSpecialTranslateOptions', array( &$defaults, &$nondefaults ) );
+ Hooks::run( 'TranslateGetSpecialTranslateOptions', [ &$defaults, &$nondefaults ] );
$this->options = $nondefaults + $defaults;
$this->group = MessageGroups::getGroup( $this->options['group'] );
if ( $this->group ) {
$this->options['group'] = $this->group->getId();
- }
- $this->task = TranslateTasks::getTask( $this->options['task'] );
-
- if ( $this->group && MessageGroups::isDynamic( $this->group ) ) {
- $this->group->setLanguage( $this->options['language'] );
- }
- }
-
- protected function rewriteLegacyUrls( $params ) {
- if (
- !isset( $params['task'] ) &&
- isset( $params['taction'] ) && $params['taction'] === 'proofread'
- ) {
- $params['task'] = 'acceptqueue';
- }
-
- if ( !isset( $params['task'] ) || $params['task'] === 'custom' ) {
- return;
- }
-
- // Not used in TUX
- unset( $params['taction'], $params['limit'], $params['offset'] );
-
- $out = $this->getOutput();
-
- switch ( $params['task'] ) {
- case 'reviewall':
- case 'acceptqueue':
- // @todo handle these two separately
- unset( $params['task'] );
- $params['action'] = 'proofread';
- $out->redirect( $this->getPageTitle()->getLocalURL( $params ) );
- break;
-
- case 'view':
- unset( $params['task'] );
- $params['filter'] = '';
- $out->redirect( $this->getPageTitle()->getLocalURL( $params ) );
- break;
-
- // Optional does not directly map to the new UI.
- // Handle it as untranslated with optional filter.
- /** @noinspection PhpMissingBreakStatementInspection */
- case 'optional':
- $params['optional'] = 1;
- case 'untranslated':
- unset( $params['task'] );
- $params['filter'] = '!translated';
- $out->redirect( $this->getPageTitle()->getLocalURL( $params ) );
- break;
- }
- }
-
- protected function settingsForm( $errors ) {
- global $wgScript;
-
- $taction = $this->options['taction'];
-
- $selectors = array(
- 'group' => $this->groupSelector(),
- 'language' => $this->languageSelector(),
- 'limit' => $this->limitSelector(),
- );
-
- if ( $taction === 'export' ) {
- unset( $selectors['limit'] );
- }
-
- $options = array();
- foreach ( $selectors as $g => $selector ) {
- // Give grep a chance to find the usages:
- // translate-page-group, translate-page-language, translate-page-limit
- $options[] = self::optionRow(
- $this->msg( 'translate-page-' . $g )->escaped(),
- $selector,
- array_key_exists( $g, $errors ) ? $errors[$g] : null
- );
- }
-
- if ( $taction === 'proofread' ) {
- $extra = $this->taskLinks( array( 'acceptqueue', 'reviewall' ) );
- } elseif ( $taction === 'translate' ) {
- $extra = $this->taskLinks( array( 'view', 'untranslated', 'optional' ) );
- } elseif ( $taction === 'export' ) {
- $extra = $this->taskLinks( array( 'export-as-po', 'export-to-file' ) );
} else {
- $extra = '';
+ $this->group = MessageGroups::getGroup( $this->defaults['group'] );
}
- $nonEssential = Html::rawElement(
- 'span',
- array( 'class' => 'mw-sp-translate-nonessential' ),
- implode( '', $options )
- );
-
- $button = Xml::submitButton( $this->msg( 'translate-submit' )->text() );
+ if ( !Language::isKnownLanguageTag( $this->options['language'] ) ) {
+ $this->options['language'] = $this->defaults['language'];
+ }
- $formAttributes = array( 'class' => 'mw-sp-translate-settings' );
- if ( $this->group ) {
- $formAttributes['data-grouptype'] = get_class( $this->group );
+ if ( MessageGroups::isDynamic( $this->group ) ) {
+ $this->group->setLanguage( $this->options['language'] );
}
- $form =
- Html::openElement( 'fieldset', $formAttributes ) .
- Html::element( 'legend', array(), $this->msg( 'translate-page-settings-legend' )->text() ) .
- Html::openElement( 'form', array( 'action' => $wgScript, 'method' => 'get' ) ) .
- Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
- Html::hidden( 'taction', $this->options['taction'] ) .
- "$nonEssential\n$extra\n$button\n" .
- Html::closeElement( 'form' ) .
- Html::closeElement( 'fieldset' );
-
- return $form;
}
protected function tuxSettingsForm() {
$nojs = Html::element(
- 'noscript',
- array( 'class' => 'tux-nojs errorbox' ),
+ 'div',
+ [ 'class' => 'tux-nojs errorbox' ],
$this->msg( 'tux-nojs' )->plain()
);
- $attrs = array( 'class' => 'row tux-editor-header' );
+ $attrs = [ 'class' => 'row tux-editor-header' ];
$selectors = $this->tuxGroupSelector() .
$this->tuxLanguageSelector() .
$this->tuxGroupDescription() .
@@ -486,20 +180,19 @@ class SpecialTranslate extends SpecialPage {
}
protected function messageSelector() {
- $output = Html::openElement( 'div', array( 'class' => 'row tux-messagetable-header' ) );
- $output .= Html::openElement( 'div', array( 'class' => 'nine columns' ) );
- $output .= Html::openElement( 'ul', array( 'class' => 'row tux-message-selector' ) );
+ $output = Html::openElement( 'div', [ 'class' => 'row tux-messagetable-header hide' ] );
+ $output .= Html::openElement( 'div', [ 'class' => 'nine columns' ] );
+ $output .= Html::openElement( 'ul', [ 'class' => 'row tux-message-selector' ] );
$userId = $this->getUser()->getId();
- $tabs = array(
+ $tabs = [
'all' => '',
'untranslated' => '!translated',
'outdated' => 'fuzzy',
'translated' => 'translated',
'unproofread' => "translated|!reviewer:$userId|!last-translator:$userId",
- );
+ ];
$params = $this->nondefaults;
- $params['task'] = 'custom';
foreach ( $tabs as $tab => $filter ) {
// Possible classes and messages, for grepping:
@@ -509,15 +202,15 @@ class SpecialTranslate extends SpecialPage {
// tux-tab-translated
// tux-tab-unproofread
$tabClass = "tux-tab-$tab";
- $taskParams = array( 'filter' => $filter ) + $params;
+ $taskParams = [ 'filter' => $filter ] + $params;
ksort( $taskParams );
$href = $this->getPageTitle()->getLocalURL( $taskParams );
- $link = Html::element( 'a', array( 'href' => $href ), $this->msg( $tabClass )->text() );
- $output .= Html::rawElement( 'li', array(
+ $link = Html::element( 'a', [ 'href' => $href ], $this->msg( $tabClass )->text() );
+ $output .= Html::rawElement( 'li', [
'class' => 'column ' . $tabClass,
'data-filter' => $filter,
'data-title' => $tab,
- ), $link );
+ ], $link );
}
// Check boxes for the "more" tab.
@@ -525,20 +218,20 @@ class SpecialTranslate extends SpecialPage {
// in the id attribute as tux-option-KEY,
// and and also for the data-filter attribute.
// The message is shown as the check box's label.
- $options = array(
+ $options = [
'optional' => $this->msg( 'tux-message-filter-optional-messages-label' )->escaped(),
- );
+ ];
- $container = Html::openElement( 'ul', array( 'class' => 'column tux-message-selector' ) );
+ $container = Html::openElement( 'ul', [ 'class' => 'column tux-message-selector' ] );
foreach ( $options as $optFilter => $optLabel ) {
$container .= Html::rawElement( 'li',
- array( 'class' => 'column' ),
+ [ 'class' => 'column' ],
Xml::checkLabel(
$optLabel,
$optFilter,
"tux-option-$optFilter",
isset( $this->nondefaults[$optFilter] ),
- array( 'data-filter' => $optFilter )
+ [ 'data-filter' => $optFilter ]
)
);
}
@@ -546,23 +239,20 @@ class SpecialTranslate extends SpecialPage {
$container .= Html::closeElement( 'ul' );
// @todo FIXME: Hard coded "ellipsis".
- $output .= Html::openElement( 'li', array( 'class' => 'column more' ) ) .
+ $output .= Html::openElement( 'li', [ 'class' => 'column more' ] ) .
'...' .
$container .
Html::closeElement( 'li' );
$output .= Html::closeElement( 'ul' );
$output .= Html::closeElement( 'div' ); // close nine columns
- $output .= Html::openElement( 'div', array( 'class' => 'three columns' ) );
- $output .= Html::openElement( 'div', array( 'class' => 'two columns' ) );
- $output .= Html::element( 'div', array( 'class' => 'tux-message-filter-box-icon' ) );
- $output .= Html::closeElement( 'div' ); // close two columns
- $output .= Html::openElement( 'div', array( 'class' => 'ten columns' ) );
- $output .= Html::element( 'input', array(
+ $output .= Html::openElement( 'div', [ 'class' => 'three columns' ] );
+ $output .= Html::openElement( 'div', [ 'class' => 'tux-message-filter-wrapper' ] );
+ $output .= Html::element( 'input', [
'class' => 'tux-message-filter-box',
'type' => 'search',
- ) );
- $output .= Html::closeElement( 'div' ); // close ten columns
+ ] );
+ $output .= Html::closeElement( 'div' ); // close tux-message-filter-wrapper
$output .= Html::closeElement( 'div' ); // close three columns
@@ -572,27 +262,30 @@ class SpecialTranslate extends SpecialPage {
}
protected function tuxGroupSelector() {
- $group = MessageGroups::getGroup( $this->options['group'] );
+ $groupClass = [ 'grouptitle', 'grouplink' ];
+ if ( $this->group instanceof AggregateMessageGroup ) {
+ $groupClass[] = 'tux-breadcrumb__item--aggregate';
+ }
// @todo FIXME The selector should have expanded parent-child lists
- $output = Html::openElement( 'div', array(
+ $output = Html::openElement( 'div', [
'class' => 'eight columns tux-breadcrumb',
'data-language' => $this->options['language'],
- ) ) .
+ ] ) .
Html::element( 'span',
- array( 'class' => 'grouptitle' ),
+ [ 'class' => 'grouptitle' ],
$this->msg( 'translate-msggroupselector-projects' )->text()
) .
Html::element( 'span',
- array( 'class' => 'grouptitle grouplink expanded' ),
+ [ 'class' => 'grouptitle grouplink tux-breadcrumb__item--aggregate' ],
$this->msg( 'translate-msggroupselector-search-all' )->text()
) .
Html::element( 'span',
- array(
- 'class' => 'grouptitle grouplink tail',
- 'data-msggroupid' => $this->options['group'],
- ),
- $group->getLabel()
+ [
+ 'class' => $groupClass,
+ 'data-msggroupid' => $this->group->getId(),
+ ],
+ $this->group->getLabel()
) .
Html::closeElement( 'div' );
@@ -600,231 +293,85 @@ class SpecialTranslate extends SpecialPage {
}
protected function tuxLanguageSelector() {
- // Changes here must also be reflected when the language
- // changes on the client side
global $wgTranslateDocumentationLanguageCode;
if ( $this->options['language'] === $wgTranslateDocumentationLanguageCode ) {
- // The name will be displayed in the UI language,
- // so use for lang and dir
- $targetLang = $this->getLanguage();
$targetLangName = $this->msg( 'translate-documentation-language' )->text();
} else {
- $targetLang = Language::factory( $this->options['language'] );
$targetLangName = Language::fetchLanguageName( $this->options['language'] );
}
- // No-break space is added for spacing after the label
- // and to ensure separation of words (in Arabic, for example)
- return Html::rawElement( 'div',
- array( 'class' => 'four columns ext-translate-language-selector' ),
- Html::element( 'span',
- array( 'class' => 'ext-translate-language-selector-label' ),
- $this->msg( 'tux-languageselector' )->text()
- ) .
- '&#160;' . // nbsp
- Html::element( 'span',
- array(
- 'class' => 'uls',
- 'lang' => $targetLang->getHtmlCode(),
- 'dir' => $targetLang->getDir(),
- ),
- $targetLangName
- )
+ $label = Html::element(
+ 'span',
+ [ 'class' => 'ext-translate-language-selector-label' ],
+ $this->msg( 'tux-languageselector' )->text()
+ );
+ $value = Html::element(
+ 'span',
+ [ 'class' => 'uls' ],
+ $targetLangName
);
- }
- protected function tuxGroupDescription() {
return Html::rawElement(
'div',
- array( 'class' => 'twelve columns description' ),
- $this->getGroupDescription( $this->group )
+ [ 'class' => 'four columns ext-translate-language-selector' ],
+ "$label $value"
);
}
- protected function tuxGroupWarning() {
+ protected function tuxGroupDescription() {
// Initialize an empty warning box to be filled client-side.
- return Html::element(
+ return Html::rawElement(
'div',
- array( 'class' => 'twelve columns group-warning' ),
- ''
- );
- }
-
- /**
- * @param $label string
- * @param $option string
- * @param $error string Html
- * @return string
- */
- private static function optionRow( $label, $option, $error = null ) {
- return "<label>$label&nbsp;$option</label>" .
- ( $error ?
- Html::rawElement( 'span', array( 'class' => 'mw-sp-translate-error' ), $error ) :
- ''
- ) . ' ';
- }
-
- protected function taskLinks( $tasks ) {
- $user = $this->getUser();
-
- foreach ( $tasks as $index => $id ) {
- $task = TranslateTasks::getTask( $id );
-
- if ( !$task ) {
- unset( $tasks[$index] );
- continue;
- }
-
- if ( !$task->isAllowedFor( $user ) ) {
- unset( $tasks[$index] );
- continue;
- }
- }
-
- $sep = Html::element( 'br' );
- $count = count( $tasks );
- if ( $count === 0 ) {
- return $sep . $this->msg( 'translate-taction-disabled' )->escaped();
- } elseif ( $count === 1 ) {
- $id = array_pop( $tasks );
-
- // If there is only one task, and it is the default task, hide it.
- // If someone disables the default task for action, we will show
- // a list of alternative task(s), but not showing anything
- // by default. */
- if ( $this->defaults['task'] === $id ) {
- return '';
- }
-
- // Give grep a chance to find the usages:
- // translate-taskui-view, translate-taskui-untranslated, translate-taskui-optional,
- // translate-taskui-acceptqueue, translate-taskui-reviewall,
- // translate-taskui-export-to-file, translate-taskui-export-as-po
- return $sep . Html::rawElement( 'label', array(),
- Xml::radio( 'task', $id, true ) . ' ' .
- $this->msg( "translate-taskui-$id" )->escaped()
- );
- } else {
- $output = '';
-
- foreach ( $tasks as $id ) {
- // Give grep a chance to find the usages:
- // translate-taskui-view, translate-taskui-untranslated, translate-taskui-optional,
- // translate-taskui-acceptqueue, translate-taskui-reviewall,
- // translate-taskui-export-to-file, translate-taskui-export-as-po
- $output .= Html::rawElement( 'label', array(),
- Xml::radio( 'task', $id, $this->options['task'] === $id ) . ' ' .
- $this->msg( "translate-taskui-$id" )->escaped()
- ) . ' ';
- }
-
- return $sep . $output;
- }
- }
-
- protected function groupSelector() {
- $groups = MessageGroups::getAllGroups();
- uasort( $groups, array( 'MessageGroups', 'groupLabelSort' ) );
- $dynamic = MessageGroups::getDynamicGroups();
- $groups = array_keys( array_merge( $dynamic, $groups ) );
-
- $selected = $this->options['group'];
-
- $selector = new XmlSelect( 'group', 'group' );
- $selector->setDefault( $selected );
-
- foreach ( $groups as $id ) {
- $group = MessageGroups::getGroup( $id );
- $hide = MessageGroups::getPriority( $group ) === 'discouraged';
-
- if ( !$group->exists() || ( $hide && $id !== $selected ) ) {
- continue;
- }
-
- $selector->addOption( $group->getLabel(), $id );
- }
-
- return $selector->getHTML();
- }
-
- protected function languageSelector() {
- return TranslateUtils::languageSelector(
- $this->getLanguage()->getCode(),
- $this->options['language']
+ [ 'class' => 'twelve columns description' ],
+ $this->getGroupDescription( $this->group )
);
}
- protected function limitSelector() {
- $items = array( 100, 1000, 5000 );
- $selector = new XmlSelect( 'limit', 'limit' );
- $selector->setDefault( $this->options['limit'] );
-
- foreach ( $items as $count ) {
- $selector->addOption(
- $this->msg( 'translate-page-limit-option' )->numParams( $count )->text(),
- $count
- );
- }
-
- return $selector->getHTML();
- }
-
protected function getGroupDescription( MessageGroup $group ) {
$description = $group->getDescription( $this->getContext() );
if ( $description !== null ) {
- return $this->getOutput()->parse( $description, false );
+ return TranslateUtils::parseAsInterface(
+ $this->getOutput(), $description
+ );
}
-
return '';
}
- /**
- * This function renders the default list of groups when no parameters
- * are passed.
- */
- public function groupInformation() {
- $output = $this->getOutput();
-
- // If we get here in the TUX mode, it means that invalid group
- // was requested. There is default group for no params case.
- if ( self::isBeta( $this->getRequest() ) ) {
- $output->addHTML( Html::rawElement(
+ protected function tuxGroupWarning() {
+ if ( $this->options['group'] === '' ) {
+ return Html::rawElement(
'div',
- array( 'class' => 'twelve columns group-warning' ),
+ [ 'class' => 'twelve columns group-warning' ],
$this->msg( 'tux-translate-page-no-such-group' )->parse()
- ) );
+ );
}
- $output->addHTML(
- Html::openElement( 'div', array(
- 'class' => 'eight columns tux-breadcrumb',
- 'data-language' => $this->options['language'],
- ) ) .
- '<span class="grouptitle">' .
- $this->msg( 'translate-msggroupselector-projects' )->escaped() .
- '</span>
- <span class="grouptitle grouplink tail">' .
- $this->msg( 'translate-msggroupselector-search-all' )->escaped() .
- '</span>
- </div>'
+ // Initialize an empty warning box to be filled client-side.
+ return Html::element(
+ 'div',
+ [ 'class' => 'twelve columns group-warning' ],
+ ''
);
}
protected function tuxWorkflowSelector() {
- return Html::element( 'div', array( 'class' => 'tux-workflow twelve columns' ) );
+ return Html::element( 'div', [ 'class' => 'tux-workflow twelve columns' ] );
}
/**
* Adds the task-based tabs on Special:Translate and few other special pages.
* Hook: SkinTemplateNavigation::SpecialPage
* @since 2012-02-10
+ * @param Skin $skin
+ * @param array &$tabs
+ * @return true
*/
public static function tabify( Skin $skin, array &$tabs ) {
$title = $skin->getTitle();
- list( $alias, $sub ) = SpecialPageFactory::resolveAlias( $title->getText() );
+ list( $alias, $sub ) = TranslateUtils::resolveSpecialPageAlias( $title->getText() );
- $pagesInGroup = array( 'Translate', 'LanguageStats', 'MessageGroupStats' );
+ $pagesInGroup = [ 'Translate', 'LanguageStats', 'MessageGroupStats' ];
if ( !in_array( $alias, $pagesInGroup, true ) ) {
return true;
}
@@ -832,7 +379,7 @@ class SpecialTranslate extends SpecialPage {
$skin->getOutput()->addModuleStyles( 'ext.translate.tabgroup' );
// Extract subpage syntax, otherwise the values are not passed forward
- $params = array();
+ $params = [];
if ( trim( $sub ) !== '' ) {
if ( $alias === 'Translate' || $alias === 'MessageGroupStats' ) {
$params['group'] = $sub;
@@ -854,84 +401,43 @@ class SpecialTranslate extends SpecialPage {
$messagegroupstats = SpecialPage::getTitleFor( 'MessageGroupStats' );
// Clear the special page tab that might be there already
- $tabs['namespaces'] = array();
+ $tabs['namespaces'] = [];
- $tabs['namespaces']['translate'] = array(
+ $tabs['namespaces']['translate'] = [
'text' => wfMessage( 'translate-taction-translate' )->text(),
'href' => $translate->getLocalURL( $params ),
'class' => 'tux-tab',
- );
+ ];
if ( $alias === 'Translate' && $taction === 'translate' ) {
$tabs['namespaces']['translate']['class'] .= ' selected';
}
- if ( !self::isBeta( $request ) ) {
- $tabs['namespaces']['proofread'] = array(
- 'text' => wfMessage( 'translate-taction-proofread' )->text(),
- 'href' => $translate->getLocalURL( array( 'taction' => 'proofread' ) + $params ),
- 'class' => 'tux-tab',
- );
-
- if ( $alias === 'Translate' && $taction === 'proofread' ) {
- $tabs['namespaces']['proofread']['class'] .= ' selected';
- }
- }
-
- $tabs['views']['lstats'] = array(
+ $tabs['views']['lstats'] = [
'text' => wfMessage( 'translate-taction-lstats' )->text(),
'href' => $languagestats->getLocalURL( $params ),
'class' => 'tux-tab',
- );
+ ];
if ( $alias === 'LanguageStats' ) {
$tabs['views']['lstats']['class'] .= ' selected';
}
- $tabs['views']['mstats'] = array(
+ $tabs['views']['mstats'] = [
'text' => wfMessage( 'translate-taction-mstats' )->text(),
'href' => $messagegroupstats->getLocalURL( $params ),
'class' => 'tux-tab',
- );
+ ];
if ( $alias === 'MessageGroupStats' ) {
$tabs['views']['mstats']['class'] .= ' selected';
}
- // Kind of hackish, but works for now
- global $wgTranslateTasks;
- foreach ( array_keys( $wgTranslateTasks ) as $taskname ) {
- if ( !preg_match( '/^export-/', $taskname ) ) {
- continue;
- }
-
- $tabs['views']['export'] = array(
- 'text' => wfMessage( 'translate-taction-export' )->text(),
- 'href' => $translate->getLocalURL( array( 'taction' => 'export' ) + $params ),
- 'class' => 'tux-tab',
- );
-
- if ( $alias === 'Translate' && $taction === 'export' ) {
- $tabs['views']['export']['class'] .= ' selected';
- }
-
- // We only need the tab to apper once ;)
- break;
- }
+ $tabs['views']['export'] = [
+ 'text' => wfMessage( 'translate-taction-export' )->text(),
+ 'href' => SpecialPage::getTitleFor( 'ExportTranslations' )->getLocalURL( $params ),
+ 'class' => 'tux-tab',
+ ];
return true;
}
-
- public static function isBeta( WebRequest $request ) {
- $tux = $request->getVal( 'tux', null );
-
- if ( $tux === null ) {
- $tux = $request->getCookie( 'tux', null, true );
- } elseif ( $tux ) {
- $request->response()->setCookie( 'tux', 1 );
- } else {
- $request->response()->setCookie( 'tux', 0 );
- }
-
- return $tux;
- }
}
diff --git a/www/wiki/extensions/Translate/specials/SpecialTranslationStash.php b/www/wiki/extensions/Translate/specials/SpecialTranslationStash.php
index 676db05b..78ff4b38 100644
--- a/www/wiki/extensions/Translate/specials/SpecialTranslationStash.php
+++ b/www/wiki/extensions/Translate/specials/SpecialTranslationStash.php
@@ -4,7 +4,7 @@
*
* @file
* @author Santhosh Thottingal
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -52,6 +52,7 @@ class SpecialTranslationStash extends SpecialPage {
$out->addJsConfigVars( 'wgTranslateSandboxLimit', $wgTranslateSandboxLimit );
$out->addModules( 'ext.translate.special.translationstash' );
+ $out->addModuleStyles( 'mediawiki.ui.button' );
$this->showPage();
}
@@ -131,13 +132,13 @@ HTML
$sourceLang = $this->getSourceLanguage();
$targetLang = $this->getTargetLanguage();
- $list = Html::element( 'div', array(
+ $list = Html::element( 'div', [
'class' => 'row tux-messagelist',
'data-sourcelangcode' => $sourceLang->getCode(),
'data-sourcelangdir' => $sourceLang->getDir(),
'data-targetlangcode' => $targetLang->getCode(),
'data-targetlangdir' => $targetLang->getDir(),
- ) );
+ ] );
return $list;
}
@@ -150,17 +151,17 @@ HTML
$label = Html::element(
'span',
- array( 'class' => 'ext-translate-language-selector-label' ),
+ [ 'class' => 'ext-translate-language-selector-label' ],
$this->msg( 'tux-languageselector' )->text()
);
$trigger = Html::element(
'span',
- array(
+ [
'class' => 'uls',
'lang' => $language->getHtmlCode(),
'dir' => $language->getDir(),
- ),
+ ],
$targetLangName
);
@@ -185,7 +186,7 @@ HTML
protected function getTargetLanguage() {
$ui = $this->getLanguage();
$source = $this->getSourceLanguage();
- if ( $ui->getCode() !== $source->getCode() ) {
+ if ( !$ui->equals( $source ) ) {
return $ui;
}
diff --git a/www/wiki/extensions/Translate/specials/SpecialTranslationStats.php b/www/wiki/extensions/Translate/specials/SpecialTranslationStats.php
index 2fe65d88..f84fa429 100644
--- a/www/wiki/extensions/Translate/specials/SpecialTranslationStats.php
+++ b/www/wiki/extensions/Translate/specials/SpecialTranslationStats.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -20,13 +20,13 @@
*/
class SpecialTranslationStats extends SpecialPage {
/// @since 2012-03-05
- protected static $graphs = array(
+ protected static $graphs = [
'edits' => 'TranslatePerLanguageStats',
'users' => 'TranslatePerLanguageStats',
'registrations' => 'TranslateRegistrationStats',
'reviews' => 'ReviewPerLanguageStats',
'reviewers' => 'ReviewPerLanguageStats',
- );
+ ];
public function __construct() {
parent::__construct( 'TranslationStats' );
@@ -72,6 +72,7 @@ class SpecialTranslationStats extends SpecialPage {
$opts->add( 'group', '' );
$opts->add( 'uselang', '' );
$opts->add( 'start', '' );
+ $opts->add( 'imagescale', 1.0 );
$opts->fetchValuesFromRequest( $this->getRequest() );
$pars = explode( ';', $par );
@@ -90,12 +91,13 @@ class SpecialTranslationStats extends SpecialPage {
$opts->validateIntBounds( 'days', 1, 10000 );
$opts->validateIntBounds( 'width', 200, 1000 );
$opts->validateIntBounds( 'height', 200, 1000 );
+ $opts->validateBounds( 'imagescale', 1.0, 4.0 );
if ( $opts['start'] !== '' ) {
- $opts['start'] = (string)( wfTimestamp( TS_MW, $opts['start'] ) );
+ $opts['start'] = rtrim( wfTimestamp( TS_ISO_8601, $opts['start'] ), 'Z' );
}
- $validScales = array( 'months', 'weeks', 'days', 'hours' );
+ $validScales = [ 'months', 'weeks', 'days', 'hours' ];
if ( !in_array( $opts['scale'], $validScales ) ) {
$opts['scale'] = 'days';
}
@@ -109,7 +111,7 @@ class SpecialTranslationStats extends SpecialPage {
$opts['count'] = 'edits';
}
- foreach ( array( 'group', 'language' ) as $t ) {
+ foreach ( [ 'group', 'language' ] as $t ) {
$values = array_map( 'trim', explode( ',', $opts[$t] ) );
$values = array_splice( $values, 0, 4 );
if ( $t === 'group' ) {
@@ -122,8 +124,7 @@ class SpecialTranslationStats extends SpecialPage {
if ( $this->including() ) {
$this->getOutput()->addHTML( $this->image( $opts ) );
} elseif ( $opts['graphit'] ) {
-
- if ( !class_exists( 'PHPlot' ) ) {
+ if ( !class_exists( PHPlot::class ) ) {
header( 'HTTP/1.0 500 Multi fail' );
echo 'PHPlot not found';
}
@@ -143,6 +144,7 @@ class SpecialTranslationStats extends SpecialPage {
/**
* Constructs the form which can be used to generate custom graphs.
* @param FormOptions $opts
+ * @suppress SecurityCheck-DoubleEscaped Intentionally outputting what user should type
*/
protected function form( FormOptions $opts ) {
global $wgScript;
@@ -154,7 +156,7 @@ class SpecialTranslationStats extends SpecialPage {
$out->addHTML(
Xml::fieldset( $this->msg( 'translate-statsf-options' )->text() ) .
- Html::openElement( 'form', array( 'action' => $wgScript ) ) .
+ Html::openElement( 'form', [ 'action' => $wgScript ] ) .
Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
Html::hidden( 'preview', 1 ) .
'<table>'
@@ -166,9 +168,9 @@ class SpecialTranslationStats extends SpecialPage {
$this->eInput( 'width', $opts ) .
$this->eInput( 'height', $opts ) .
'<tr><td colspan="2"><hr /></td></tr>' .
- $this->eInput( 'start', $opts, 16 ) . // Should fit yyyymmddhhmmss
+ $this->eInput( 'start', $opts, 24 ) .
$this->eInput( 'days', $opts ) .
- $this->eRadio( 'scale', $opts, array( 'months', 'weeks', 'days', 'hours' ) ) .
+ $this->eRadio( 'scale', $opts, [ 'months', 'weeks', 'days', 'hours' ] ) .
$this->eRadio( 'count', $opts, $this->getGraphTypes() ) .
'<tr><td colspan="2"><hr /></td></tr>' .
$this->eLanguage( 'language', $opts ) .
@@ -208,14 +210,14 @@ class SpecialTranslationStats extends SpecialPage {
$out->addHTML(
Html::element( 'hr' ) .
- Html::element( 'pre', array(), "{{{$titleText}{$spiParams}}}" )
+ Html::element( 'pre', [], "{{{$titleText}{$spiParams}}}" )
);
$out->addHTML(
Html::element( 'hr' ) .
Html::rawElement(
'div',
- array( 'style' => 'margin: 1em auto; text-align: center;' ),
+ [ 'style' => 'margin: 1em auto; text-align: center;' ],
$this->image( $opts )
)
);
@@ -231,9 +233,8 @@ class SpecialTranslationStats extends SpecialPage {
protected function eInput( $name, FormOptions $opts, $width = 4 ) {
$value = $opts[$name];
- return
- '<tr><td>' . $this->eLabel( $name ) . '</td><td>' .
- Xml::input( $name, $width, $value, array( 'id' => $name ) ) .
+ return '<tr><td>' . $this->eLabel( $name ) . '</td><td>' .
+ Xml::input( $name, $width, $value, [ 'id' => $name ] ) .
'</td></tr>' . "\n";
}
@@ -250,7 +251,7 @@ class SpecialTranslationStats extends SpecialPage {
$label = 'translate-statsf-' . $name;
$label = $this->msg( $label )->escaped();
- return Xml::tags( 'label', array( 'for' => $name ), $label );
+ return Xml::tags( 'label', [ 'for' => $name ], $label );
}
/**
@@ -267,11 +268,11 @@ class SpecialTranslationStats extends SpecialPage {
$label = $this->msg( $label )->escaped();
$s = '<tr><td>' . $label . '</td><td>';
- $options = array();
+ $options = [];
foreach ( $alts as $alt ) {
$id = "$name-$alt";
$radio = Xml::radio( $name, $alt, $alt === $opts[$name],
- array( 'id' => $id ) ) . ' ';
+ [ 'id' => $id ] ) . ' ';
$options[] = $radio . ' ' . $this->eLabel( $id );
}
@@ -293,10 +294,9 @@ class SpecialTranslationStats extends SpecialPage {
$select = $this->languageSelector();
$select->setTargetId( 'language' );
- return
- '<tr><td>' . $this->eLabel( $name ) . '</td><td>' .
+ return '<tr><td>' . $this->eLabel( $name ) . '</td><td>' .
$select->getHtmlAndPrepareJS() . '<br />' .
- Xml::input( $name, 20, $value, array( 'id' => $name ) ) .
+ Xml::input( $name, 20, $value, [ 'id' => $name ] ) .
'</td></tr>' . "\n";
}
@@ -305,14 +305,7 @@ class SpecialTranslationStats extends SpecialPage {
* @return JsSelectToInput
*/
protected function languageSelector() {
- if ( is_callable( array( 'LanguageNames', 'getNames' ) ) ) {
- $languages = LanguageNames::getNames( $this->getLanguage()->getCode(),
- LanguageNames::FALLBACK_NORMAL,
- LanguageNames::LIST_MW_AND_CLDR
- );
- } else {
- $languages = Language::fetchLanguageNames();
- }
+ $languages = TranslateUtils::getLanguageNames( $this->getLanguage()->getCode() );
ksort( $languages );
@@ -322,7 +315,6 @@ class SpecialTranslationStats extends SpecialPage {
}
$jsSelect = new JsSelectToInput( $selector );
- $jsSelect->setSourceId( 'mw-language-selector' );
return $jsSelect;
}
@@ -339,10 +331,9 @@ class SpecialTranslationStats extends SpecialPage {
$select = $this->groupSelector();
$select->setTargetId( 'group' );
- return
- '<tr><td>' . $this->eLabel( $name ) . '</td><td>' .
+ return '<tr><td>' . $this->eLabel( $name ) . '</td><td>' .
$select->getHtmlAndPrepareJS() . '<br />' .
- Xml::input( $name, 20, $value, array( 'id' => $name ) ) .
+ Xml::input( $name, 20, $value, [ 'id' => $name ] ) .
'</td></tr>' . "\n";
}
@@ -353,7 +344,7 @@ class SpecialTranslationStats extends SpecialPage {
protected function groupSelector() {
$groups = MessageGroups::singleton()->getGroups();
/**
- * @var $group MessageGroup
+ * @var MessageGroup $group
*/
foreach ( $groups as $key => $group ) {
if ( !$group->exists() ) {
@@ -373,7 +364,6 @@ class SpecialTranslationStats extends SpecialPage {
}
$jsSelect = new JsSelectToInput( $selector );
- $jsSelect->setSourceId( 'mw-group-selector' );
return $jsSelect;
}
@@ -385,15 +375,24 @@ class SpecialTranslationStats extends SpecialPage {
*/
protected function image( FormOptions $opts ) {
$title = $this->getPageTitle();
- $cgiparams = wfArrayToCgi( array( 'graphit' => true ), $opts->getAllValues() );
- $href = $title->getLocalURL( $cgiparams );
+
+ $params = $opts->getChangedValues();
+ $params[ 'graphit' ] = true;
+ $src = $title->getLocalURL( $params );
+
+ $srcsets = [];
+ foreach ( [ 1.5, 2, 3 ] as $scale ) {
+ $params[ 'imagescale' ] = $scale;
+ $srcsets[] = "{$title->getLocalURL( $params )} {$scale}x";
+ }
return Xml::element( 'img',
- array(
- 'src' => $href,
+ [
+ 'src' => $src,
+ 'srcset' => implode( ', ', $srcsets ),
'width' => $opts['width'],
'height' => $opts['height'],
- )
+ ]
);
}
@@ -403,7 +402,7 @@ class SpecialTranslationStats extends SpecialPage {
* @return array ( string => array ) Data indexed by their date labels.
*/
protected function getData( FormOptions $opts ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$class = $this->getGraphClass( $opts['count'] );
$so = new $class( $opts );
@@ -428,14 +427,15 @@ class SpecialTranslationStats extends SpecialPage {
$end = null;
}
- $tables = array();
- $fields = array();
- $conds = array();
+ $tables = [];
+ $fields = [];
+ $conds = [];
$type = __METHOD__;
- $options = array();
+ $options = [];
+ $joins = [];
- $so->preQuery( $tables, $fields, $conds, $type, $options, $start, $end );
- $res = $dbr->select( $tables, $fields, $conds, $type, $options );
+ $so->preQuery( $tables, $fields, $conds, $type, $options, $joins, $start, $end );
+ $res = $dbr->select( $tables, $fields, $conds, $type, $options, $joins );
wfDebug( __METHOD__ . "-queryend\n" );
// Start processing the data
@@ -444,10 +444,10 @@ class SpecialTranslationStats extends SpecialPage {
$labels = $so->labels();
$keys = array_keys( $labels );
- $values = array_pad( array(), count( $labels ), 0 );
+ $values = array_pad( [], count( $labels ), 0 );
$defaults = array_combine( $keys, $values );
- $data = array();
+ $data = [];
// Allow 10 seconds in the future for processing time
$lastValue = $end !== null ? $end : $now + 10;
$lang = $this->getLanguage();
@@ -482,7 +482,7 @@ class SpecialTranslationStats extends SpecialPage {
// Don't display dummy label
if ( count( $labels ) === 1 && $labels[0] === 'all' ) {
- $labels = array();
+ $labels = [];
}
foreach ( $labels as &$label ) {
@@ -509,7 +509,7 @@ class SpecialTranslationStats extends SpecialPage {
$data[key( $last ) . '*'] = current( $last );
}
- return array( $labels, $data );
+ return [ $labels, $data ];
}
/**
@@ -570,16 +570,17 @@ class SpecialTranslationStats extends SpecialPage {
public function draw( FormOptions $opts ) {
global $wgTranslatePHPlotFont;
+ $imageScale = $opts->getValue( 'imagescale' );
$width = $opts->getValue( 'width' );
$height = $opts->getValue( 'height' );
// Define the object
- $plot = new PHPlot( $width, $height );
+ $plot = new PHPlot( $width * $imageScale, $height * $imageScale );
list( $legend, $resData ) = $this->getData( $opts );
$count = count( $resData );
$skip = (int)( $count / ( $width / 60 ) - 1 );
$i = $count;
- $data = array();
+ $data = [];
foreach ( $resData as $date => $edits ) {
if ( $skip > 0 &&
@@ -598,22 +599,24 @@ class SpecialTranslationStats extends SpecialPage {
}
$font = FCFontFinder::findFile( $this->getLanguage()->getCode() );
-
- if ( $font ) {
- $plot->SetDefaultTTFont( $font );
- } else {
- $plot->SetDefaultTTFont( $wgTranslatePHPlotFont );
+ if ( !$font ) {
+ $font = $wgTranslatePHPlotFont;
}
+ $numberFont = FCFontFinder::findFile( 'en' );
+ $plot->SetDefaultTTFont( $font );
+ $plot->SetFontTTF( 'generic', $font, 12 * $imageScale );
+ $plot->SetFontTTF( 'legend', $font, 12 * $imageScale );
+ $plot->SetFontTTF( 'x_title', $font, 10 * $imageScale );
+ $plot->SetFontTTF( 'y_title', $font, 10 * $imageScale );
+ $plot->SetFontTTF( 'x_label', $numberFont, 8 * $imageScale );
+ $plot->SetFontTTF( 'y_label', $numberFont, 8 * $imageScale );
+
$plot->SetDataValues( $data );
if ( $legend !== null ) {
$plot->SetLegend( $legend );
}
- $numberFont = FCFontFinder::findFile( 'en' );
-
- $plot->setFont( 'x_label', $numberFont, 8 );
- $plot->setFont( 'y_label', $numberFont, 8 );
// Give grep a chance to find the usages:
// translate-stats-edits, translate-stats-users, translate-stats-registrations,
// translate-stats-reviews, translate-stats-reviewers
@@ -706,15 +709,16 @@ interface TranslationStatsInterface {
/**
* Query details that the graph must fill.
- * @param array $tables Empty list. Append table names.
- * @param array $fields Empty list. Append field names.
- * @param array $conds Empty array. Append select conditions.
- * @param string $type Append graph type (used to identify queries).
- * @param array $options Empty array. Append extra query options.
+ * @param array &$tables Empty list. Append table names.
+ * @param array &$fields Empty list. Append field names.
+ * @param array &$conds Empty array. Append select conditions.
+ * @param string &$type Append graph type (used to identify queries).
+ * @param array &$options Empty array. Append extra query options.
+ * @param array &$joins Empty array. Append extra join conditions.
* @param string $start Precalculated start cutoff timestamp
* @param string $end Precalculated end cutoff timestamp
*/
- public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, $start, $end );
+ public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, &$joins, $start, $end );
/**
* Return the indexes which this result contributes to.
@@ -734,7 +738,7 @@ interface TranslationStatsInterface {
/**
* Return the timestamp associated with this result row.
* @param array $row Database Result Row
- * @return \string Timestamp.
+ * @return string Timestamp.
*/
public function getTimestamp( $row );
@@ -761,11 +765,11 @@ abstract class TranslationStatsBase implements TranslationStatsInterface {
}
public function indexOf( $row ) {
- return array( 'all' );
+ return [ 'all' ];
}
public function labels() {
- return array( 'all' );
+ return [ 'all' ];
}
public function getDateFormat() {
@@ -782,9 +786,9 @@ abstract class TranslationStatsBase implements TranslationStatsInterface {
}
protected static function makeTimeCondition( $field, $start, $end ) {
- $db = wfGetDB( DB_SLAVE );
+ $db = wfGetDB( DB_REPLICA );
- $conds = array();
+ $conds = [];
if ( $start !== null ) {
$conds[] = "$field >= '{$db->timestamp( $start )}'";
}
@@ -795,9 +799,13 @@ abstract class TranslationStatsBase implements TranslationStatsInterface {
return $conds;
}
- /// @since 2012-03-05
+ /**
+ * @since 2012-03-05
+ * @param array $groupIds
+ * @return array
+ */
protected static function namespacesFromGroups( $groupIds ) {
- $namespaces = array();
+ $namespaces = [];
foreach ( $groupIds as $id ) {
$group = MessageGroups::getGroup( $id );
if ( $group ) {
@@ -815,7 +823,7 @@ abstract class TranslationStatsBase implements TranslationStatsInterface {
* @ingroup Stats
*/
class TranslatePerLanguageStats extends TranslationStatsBase {
- /// array ( string => bool ) Cache used to count active users only once per day.
+ /** @var bool[] array( string => bool ) Cache used to count active users only once per day. */
protected $usercache;
protected $codes, $groups;
@@ -826,24 +834,25 @@ class TranslatePerLanguageStats extends TranslationStatsBase {
$opts->validateIntBounds( 'days', 1, 200 );
}
- public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, $start, $end ) {
+ public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, &$joins, $start, $end ) {
global $wgTranslateMessageNamespaces;
- $db = wfGetDB( DB_SLAVE );
+ $db = wfGetDB( DB_REPLICA );
- $tables = array( 'recentchanges' );
- $fields = array( 'rc_timestamp' );
+ $tables = [ 'recentchanges' ];
+ $fields = [ 'rc_timestamp' ];
+ $joins = [];
- $conds = array(
+ $conds = [
'rc_namespace' => $wgTranslateMessageNamespaces,
'rc_bot' => 0,
'rc_type != ' . RC_LOG,
- );
+ ];
$timeConds = self::makeTimeCondition( 'rc_timestamp', $start, $end );
$conds = array_merge( $conds, $timeConds );
- $options = array( 'ORDER BY' => 'rc_timestamp' );
+ $options = [ 'ORDER BY' => 'rc_timestamp' ];
$this->groups = array_filter( array_map( 'trim', explode( ',', $this->opts['group'] ) ) );
$this->groups = array_map( 'MessageGroups::normalizeId', $this->groups );
@@ -854,7 +863,7 @@ class TranslatePerLanguageStats extends TranslationStatsBase {
$conds['rc_namespace'] = $namespaces;
}
- $languages = array();
+ $languages = [];
foreach ( $this->codes as $code ) {
$languages[] = 'rc_title ' . $db->buildLike( $db->anyString(), "/$code" );
}
@@ -869,7 +878,14 @@ class TranslatePerLanguageStats extends TranslationStatsBase {
}
if ( $this->opts['count'] === 'users' ) {
- $fields[] = 'rc_user_text';
+ if ( class_exists( ActorMigration::class ) ) {
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'rc_user' );
+ $tables += $actorQuery['tables'];
+ $fields['rc_user_text'] = $actorQuery['fields']['rc_user_text'];
+ $joins += $actorQuery['joins'];
+ } else {
+ $fields[] = 'rc_user_text';
+ }
}
$type .= '-perlang';
@@ -900,8 +916,8 @@ class TranslatePerLanguageStats extends TranslationStatsBase {
// The key-building needs to be in sync with ::labels().
list( $key, $code ) = TranslateUtils::figureMessage( $row->rc_title );
- $groups = array();
- $codes = array();
+ $groups = [];
+ $codes = [];
if ( $this->groups ) {
/*
@@ -913,7 +929,7 @@ class TranslatePerLanguageStats extends TranslationStatsBase {
}
if ( $this->codes ) {
- $codes = array( $code );
+ $codes = [ $code ];
}
return $this->combineTwoArrays( $groups, $codes );
@@ -958,7 +974,7 @@ class TranslatePerLanguageStats extends TranslationStatsBase {
$codes[] = false;
}
- $items = array();
+ $items = [];
foreach ( $groups as $group ) {
foreach ( $codes as $code ) {
$items[] = $this->makeLabel( $group, $code );
@@ -1000,12 +1016,13 @@ class TranslatePerLanguageStats extends TranslationStatsBase {
* @ingroup Stats
*/
class TranslateRegistrationStats extends TranslationStatsBase {
- public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, $start, $end ) {
+ public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, &$joins, $start, $end ) {
$tables = 'user';
$fields = 'user_registration';
$conds = self::makeTimeCondition( 'user_registration', $start, $end );
$type .= '-registration';
- $options = array();
+ $options = [];
+ $joins = [];
}
public function getTimestamp( $row ) {
@@ -1019,23 +1036,24 @@ class TranslateRegistrationStats extends TranslationStatsBase {
* @ingroup Stats
*/
class ReviewPerLanguageStats extends TranslatePerLanguageStats {
- public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, $start, $end ) {
+ public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, &$joins, $start, $end ) {
global $wgTranslateMessageNamespaces;
- $db = wfGetDB( DB_SLAVE );
+ $db = wfGetDB( DB_REPLICA );
- $tables = array( 'logging' );
- $fields = array( 'log_timestamp' );
+ $tables = [ 'logging' ];
+ $fields = [ 'log_timestamp' ];
+ $joins = [];
- $conds = array(
+ $conds = [
'log_namespace' => $wgTranslateMessageNamespaces,
'log_action' => 'message',
- );
+ ];
$timeConds = self::makeTimeCondition( 'log_timestamp', $start, $end );
$conds = array_merge( $conds, $timeConds );
- $options = array( 'ORDER BY' => 'log_timestamp' );
+ $options = [ 'ORDER BY' => 'log_timestamp' ];
$this->groups = array_filter( array_map( 'trim', explode( ',', $this->opts['group'] ) ) );
$this->codes = array_filter( array_map( 'trim', explode( ',', $this->opts['language'] ) ) );
@@ -1045,7 +1063,7 @@ class ReviewPerLanguageStats extends TranslatePerLanguageStats {
$conds['log_namespace'] = $namespaces;
}
- $languages = array();
+ $languages = [];
foreach ( $this->codes as $code ) {
$languages[] = 'log_title ' . $db->buildLike( $db->anyString(), "/$code" );
}
@@ -1060,7 +1078,14 @@ class ReviewPerLanguageStats extends TranslatePerLanguageStats {
}
if ( $this->opts['count'] === 'reviewers' ) {
- $fields[] = 'log_user_text';
+ if ( class_exists( ActorMigration::class ) ) {
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'log_user' );
+ $tables += $actorQuery['tables'];
+ $fields['log_user_text'] = $actorQuery['fields']['log_user_text'];
+ $joins += $actorQuery['joins'];
+ } else {
+ $fields[] = 'log_user_text';
+ }
}
$type .= '-reviews';
@@ -1091,8 +1116,8 @@ class ReviewPerLanguageStats extends TranslatePerLanguageStats {
// The key-building needs to be in sync with ::labels().
list( $key, $code ) = TranslateUtils::figureMessage( $row->log_title );
- $groups = array();
- $codes = array();
+ $groups = [];
+ $codes = [];
if ( $this->groups ) {
/* Get list of keys that the message belongs to, and filter
@@ -1102,7 +1127,7 @@ class ReviewPerLanguageStats extends TranslatePerLanguageStats {
}
if ( $this->codes ) {
- $codes = array( $code );
+ $codes = [ $code ];
}
return $this->combineTwoArrays( $groups, $codes );
diff --git a/www/wiki/extensions/Translate/specials/SpecialTranslations.php b/www/wiki/extensions/Translate/specials/SpecialTranslations.php
index 2ce54d32..4dab4b05 100644
--- a/www/wiki/extensions/Translate/specials/SpecialTranslations.php
+++ b/www/wiki/extensions/Translate/specials/SpecialTranslations.php
@@ -5,7 +5,7 @@
* @file
* @author Siebrand Mazeland
* @author Niklas Laxstörm
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -23,7 +23,7 @@ class SpecialTranslations extends SpecialAllPages {
return 'pages';
}
- function getDescription() {
+ public function getDescription() {
return $this->msg( 'translations' )->text();
}
@@ -35,9 +35,9 @@ class SpecialTranslations extends SpecialAllPages {
public function execute( $par ) {
$this->setHeaders();
$this->outputHeader();
- $this->includeAssets();
$out = $this->getOutput();
+ $out->addModuleStyles( 'ext.translate.legacy' );
$par = (string)$par;
@@ -71,9 +71,10 @@ class SpecialTranslations extends SpecialAllPages {
if ( !$title ) {
$title = Title::makeTitle( NS_MEDIAWIKI, '' );
- $out->addHTML( $this->namespaceMessageForm( $title ) );
+ $this->namespaceMessageForm( $title );
} else {
- $out->addHTML( $this->namespaceMessageForm( $title ) . '<br />' );
+ $this->namespaceMessageForm( $title );
+ $out->addHTML( '<br />' );
$this->showTranslations( $title );
}
}
@@ -81,52 +82,44 @@ class SpecialTranslations extends SpecialAllPages {
/**
* Message input fieldset
*
- * @param Title $title (default: null)
- * @return string HTML for fieldset.
+ * @param Title|null $title (default: null)
*/
protected function namespaceMessageForm( Title $title = null ) {
- global $wgScript;
-
- $namespaces = new XmlSelect( 'namespace', 'namespace' );
- $namespaces->setDefault( $title->getNamespace() );
+ $options = [];
foreach ( $this->getSortedNamespaces() as $text => $index ) {
- $namespaces->addOption( $text, $index );
+ $options[ $text ] = $index;
}
- $out = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) );
- $out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
- $out .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
- $out .= Xml::openElement( 'fieldset' );
- $out .= Xml::element(
- 'legend',
- null,
- $this->msg( 'translate-translations-fieldset-title' )->text()
- );
- $out .= Xml::openElement( 'table', array( 'id' => 'nsselect', 'class' => 'allpages' ) );
- $out .= "<tr>
- <td class='mw-label'>" .
- Xml::label( $this->msg( 'translate-translations-messagename' )->text(), 'message' ) .
- "</td>
- <td class='mw-input'>" .
- Xml::input( 'message', 30, $title->getText(), array( 'id' => 'message' ) ) .
- "</td>
- </tr>
- <tr>
- <td class='mw-label'>" .
- Xml::label( $this->msg( 'translate-translations-project' )->text(), 'namespace' ) .
- "</td>
- <td class='mw-input'>" .
- $namespaces->getHTML() . ' ' .
- Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) .
- '</td>
- </tr>';
- $out .= Xml::closeElement( 'table' );
- $out .= Xml::closeElement( 'fieldset' );
- $out .= Xml::closeElement( 'form' );
- $out .= Xml::closeElement( 'div' );
-
- return $out;
+ $formDescriptor = [
+ 'textbox' => [
+ 'type' => 'text',
+ 'name' => 'message',
+ 'id' => 'message',
+ 'label-message' => 'translate-translations-messagename',
+ 'size' => 30,
+ 'default' => $title->getText(),
+ ],
+ 'selector' => [
+ 'type' => 'select',
+ 'name' => 'namespace',
+ 'id' => 'namespace',
+ 'label-message' => 'translate-translations-project',
+ 'options' => $options,
+ 'default' => $title->getNamespace(),
+ ]
+ ];
+
+ $context = new DerivativeContext( $this->getContext() );
+ $context->setTitle( $this->getPageTitle() ); // Remove subpage
+
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $context );
+ $htmlForm
+ ->setMethod( 'get' )
+ ->setSubmitTextMsg( 'allpagessubmit' )
+ ->setWrapperLegendMsg( 'translate-translations-fieldset-title' )
+ ->prepareForm()
+ ->displayForm( false );
}
/**
@@ -137,7 +130,7 @@ class SpecialTranslations extends SpecialAllPages {
public function getSortedNamespaces() {
global $wgTranslateMessageNamespaces, $wgContLang;
- $nslist = array();
+ $nslist = [];
foreach ( $wgTranslateMessageNamespaces as $ns ) {
$nslist[$wgContLang->getFormattedNsText( $ns )] = $ns;
}
@@ -162,19 +155,19 @@ class SpecialTranslations extends SpecialAllPages {
return;
}
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$res = $dbr->select( 'page',
- array( 'page_namespace', 'page_title' ),
- array(
+ [ 'page_namespace', 'page_title' ],
+ [
'page_namespace' => $namespace,
'page_title ' . $dbr->buildLike( "$message/", $dbr->anyString() ),
- ),
+ ],
__METHOD__,
- array(
+ [
'ORDER BY' => 'page_title',
'USE INDEX' => 'name_title',
- )
+ ]
);
if ( !$res->numRows() ) {
@@ -192,7 +185,7 @@ class SpecialTranslations extends SpecialAllPages {
}
// Normal output.
- $titles = array();
+ $titles = [];
foreach ( $res as $s ) {
$titles[] = $s->page_title;
@@ -200,9 +193,9 @@ class SpecialTranslations extends SpecialAllPages {
$pageInfo = TranslateUtils::getContents( $titles, $namespace );
- $tableheader = Xml::openElement( 'table', array(
+ $tableheader = Xml::openElement( 'table', [
'class' => 'mw-sp-translate-table sortable'
- ) );
+ ] );
$tableheader .= Xml::openElement( 'tr' );
$tableheader .= Xml::element( 'th', null, $this->msg( 'allmessagesname' )->text() );
@@ -212,9 +205,6 @@ class SpecialTranslations extends SpecialAllPages {
// Adapted version of TranslateUtils:makeListing() by Nikerabbit.
$out = $tableheader;
- $canTranslate = $this->getUser()->isAllowed( 'translate' );
-
- $ajaxPageList = array();
$historyText = '&#160;<sup>' .
$this->msg( 'translate-translations-history-short' )->escaped() .
'</sup>&#160;';
@@ -223,7 +213,6 @@ class SpecialTranslations extends SpecialAllPages {
foreach ( $res as $s ) {
$key = $s->page_title;
$tTitle = Title::makeTitle( $s->page_namespace, $key );
- $ajaxPageList[] = $tTitle->getPrefixedDBkey();
$tHandle = new MessageHandle( $tTitle );
$code = $tHandle->getCode();
@@ -231,25 +220,19 @@ class SpecialTranslations extends SpecialAllPages {
$text = TranslateUtils::getLanguageName( $code, $this->getLanguage()->getCode() );
$text .= $separator;
$text .= $this->msg( 'parentheses' )->params( $code )->plain();
- $text = htmlspecialchars( $text );
-
- if ( $canTranslate ) {
- $tools['edit'] = TranslationHelpers::ajaxEditLink(
- $tTitle,
- $text
- );
- } else {
- $tools['edit'] = Linker::link( $tTitle, $text );
- }
+ $tools['edit'] = Html::element(
+ 'a',
+ [ 'href' => TranslateUtils::getEditorUrl( $tHandle ) ],
+ $text
+ );
- $tools['history'] = Linker::link(
+ $tools['history'] = $this->getLinkRenderer()->makeLink(
$tTitle,
- $historyText,
- array(
- 'action',
+ new HtmlArmor( $historyText ),
+ [
'title' => $this->msg( 'history-title', $tTitle->getPrefixedDBkey() )->text()
- ),
- array( 'action' => 'history' )
+ ],
+ [ 'action' => 'history' ]
);
if ( MessageHandle::hasFuzzyString( $pageInfo[$key][0] ) || $tHandle->isFuzzy() ) {
@@ -258,19 +241,19 @@ class SpecialTranslations extends SpecialAllPages {
$class = 'def';
}
- $languageAttributes = array();
+ $languageAttributes = [];
if ( Language::isKnownLanguageTag( $code ) ) {
$language = Language::factory( $code );
- $languageAttributes = array(
+ $languageAttributes = [
'lang' => $language->getHtmlCode(),
'dir' => $language->getDir(),
- );
+ ];
}
$formattedContent = TranslateUtils::convertWhiteSpaceToHTML( $pageInfo[$key][0] );
$leftColumn = $tools['history'] . $tools['edit'];
- $out .= Xml::tags( 'tr', array( 'class' => $class ),
+ $out .= Xml::tags( 'tr', [ 'class' => $class ],
Xml::tags( 'td', null, $leftColumn ) .
Xml::tags( 'td', $languageAttributes, $formattedContent )
);
@@ -278,17 +261,5 @@ class SpecialTranslations extends SpecialAllPages {
$out .= Xml::closeElement( 'table' );
$this->getOutput()->addHTML( $out );
-
- $vars = array( 'trlKeys' => $ajaxPageList );
- $this->getOutput()->addScript( Skin::makeVariablesScript( $vars ) );
- }
-
- /**
- * Add JavaScript assets
- */
- private function includeAssets() {
- $out = $this->getOutput();
- TranslationHelpers::addModules( $out );
- $out->addModuleStyles( 'ext.translate.legacy' );
}
}
diff --git a/www/wiki/extensions/Translate/sql/translate_reviews-patch-01-primary-key.sql b/www/wiki/extensions/Translate/sql/translate_reviews-patch-01-primary-key.sql
new file mode 100644
index 00000000..9017fb53
--- /dev/null
+++ b/www/wiki/extensions/Translate/sql/translate_reviews-patch-01-primary-key.sql
@@ -0,0 +1,3 @@
+ALTER TABLE /*_*/translate_reviews
+ ADD PRIMARY KEY (trr_page, trr_revision, trr_user),
+ DROP INDEX /*i*/trr_user_page_revision;
diff --git a/www/wiki/extensions/Translate/sql/translate_reviews.sql b/www/wiki/extensions/Translate/sql/translate_reviews.sql
index 28bee7d9..63f1d8d8 100644
--- a/www/wiki/extensions/Translate/sql/translate_reviews.sql
+++ b/www/wiki/extensions/Translate/sql/translate_reviews.sql
@@ -6,8 +6,7 @@ CREATE TABLE /*$wgDBprefix*/translate_reviews (
trr_page int NOT NULL,
-- Link to revision.rev_id
- trr_revision int NOT NULL
-) /*$wgDBTableOptions*/;
+ trr_revision int NOT NULL,
-CREATE UNIQUE INDEX /*i*/trr_user_page_revision ON /*$wgDBprefix*/translate_reviews
-(trr_user, trr_page, trr_revision);
+ PRIMARY KEY (trr_page, trr_revision, trr_user)
+) /*$wgDBTableOptions*/;
diff --git a/www/wiki/extensions/Translate/sql/translate_tm.sql b/www/wiki/extensions/Translate/sql/translate_tm.sql
index af97dc4b..99442078 100644
--- a/www/wiki/extensions/Translate/sql/translate_tm.sql
+++ b/www/wiki/extensions/Translate/sql/translate_tm.sql
@@ -33,6 +33,6 @@ DROP TABLE IF EXISTS /*_*/translate_tmf;
CREATE TABLE /*_*/translate_tmf (
tmf_sid int unsigned NOT NULL,
tmf_text text
-) ENGINE=MYISAM;
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
CREATE FULLTEXT INDEX /*i*/tmf_text ON /*_*/translate_tmf (tmf_text);
diff --git a/www/wiki/extensions/Translate/stash/StashedTranslation.php b/www/wiki/extensions/Translate/stash/StashedTranslation.php
index c2c05bda..3eaf1f3b 100644
--- a/www/wiki/extensions/Translate/stash/StashedTranslation.php
+++ b/www/wiki/extensions/Translate/stash/StashedTranslation.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -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;
@@ -24,22 +37,30 @@ class StashedTranslation {
$this->metadata = $metadata;
}
- /// @return User
+ /**
+ * @return User
+ */
public function getUser() {
return $this->user;
}
- /// @return Title
+ /**
+ * @return Title
+ */
public function getTitle() {
return $this->title;
}
- /// @return string
+ /**
+ * @return string
+ */
public function getValue() {
return $this->value;
}
- /// @return array
+ /**
+ * @return array|null
+ */
public function getMetadata() {
return $this->metadata;
}
diff --git a/www/wiki/extensions/Translate/stash/TranslationStashStorage.php b/www/wiki/extensions/Translate/stash/TranslationStashStorage.php
index 08a3ef2b..fb67449f 100644
--- a/www/wiki/extensions/Translate/stash/TranslationStashStorage.php
+++ b/www/wiki/extensions/Translate/stash/TranslationStashStorage.php
@@ -4,18 +4,27 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Storage class for stashed translations. This one uses sql tables as storage.
* @since 2013.06
*/
class TranslationStashStorage {
+ /** @var IDatabase */
protected $db;
+
+ /** @var string */
protected $dbTable;
- public function __construct( DatabaseBase $db, $table = 'translate_stash' ) {
+ /**
+ * @param IDatabase $db
+ * @param string $table
+ */
+ public function __construct( IDatabase $db, $table = 'translate_stash' ) {
$this->db = $db;
$this->dbTable = $table;
}
@@ -27,17 +36,17 @@ class TranslationStashStorage {
* @param StashedTranslation $item
*/
public function addTranslation( StashedTranslation $item ) {
- $row = array(
+ $row = [
'ts_user' => $item->getUser()->getId(),
'ts_title' => $item->getTitle()->getDBkey(),
'ts_namespace' => $item->getTitle()->getNamespace(),
'ts_value' => $item->getValue(),
'ts_metadata' => serialize( $item->getMetadata() ),
- );
+ ];
- $indexes = array(
- array( 'ts_user', 'ts_namespace', 'ts_title' )
- );
+ $indexes = [
+ [ 'ts_user', 'ts_namespace', 'ts_title' ]
+ ];
$this->db->replace( $this->dbTable, $indexes, $row, __METHOD__ );
}
@@ -48,12 +57,12 @@ class TranslationStashStorage {
* @return StashedTranslation[]
*/
public function getTranslations( User $user ) {
- $conds = array( 'ts_user' => $user->getId() );
- $fields = array( 'ts_namespace', 'ts_title', 'ts_value', 'ts_metadata' );
+ $conds = [ 'ts_user' => $user->getId() ];
+ $fields = [ 'ts_namespace', 'ts_title', 'ts_value', 'ts_metadata' ];
$res = $this->db->select( $this->dbTable, $fields, $conds, __METHOD__ );
- $objects = array();
+ $objects = [];
foreach ( $res as $row ) {
$objects[] = new StashedTranslation(
$user,
@@ -72,7 +81,7 @@ class TranslationStashStorage {
* @since 2013.10
*/
public function deleteTranslations( User $user ) {
- $conds = array( 'ts_user' => $user->getId() );
+ $conds = [ 'ts_user' => $user->getId() ];
$this->db->delete( $this->dbTable, $conds, __METHOD__ );
}
}
diff --git a/www/wiki/extensions/Translate/stringmangler/StringMangler.php b/www/wiki/extensions/Translate/stringmangler/StringMangler.php
index efc72486..6e0e1575 100644
--- a/www/wiki/extensions/Translate/stringmangler/StringMangler.php
+++ b/www/wiki/extensions/Translate/stringmangler/StringMangler.php
@@ -3,7 +3,7 @@
* StringMangler interface.
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -14,7 +14,6 @@
*
* The operations have to be reversible so that
* x equals unmangle( mangle( x ) ).
- *
*/
interface StringMangler {
/// @todo Does this really need to be in the interface???
@@ -30,7 +29,7 @@ interface StringMangler {
* Match strings against a pattern.
* If string matches, mangle() should mangle the key.
* @param string $string Message key.
- * @return \bool
+ * @return bool
*/
public function match( $string );
diff --git a/www/wiki/extensions/Translate/stringmangler/StringMatcher.php b/www/wiki/extensions/Translate/stringmangler/StringMatcher.php
index 31ef6e1a..e238062d 100644
--- a/www/wiki/extensions/Translate/stringmangler/StringMatcher.php
+++ b/www/wiki/extensions/Translate/stringmangler/StringMatcher.php
@@ -3,7 +3,7 @@
* Default StringMangler implementation.
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -12,22 +12,22 @@
* All matching strings are prefixed with the same prefix.
*/
class StringMatcher implements StringMangler, MetaYamlSchemaExtender {
- /// Prefix for mangled message keys
+ /** @var string Prefix for mangled message keys */
protected $sPrefix = '';
- /// Exact message keys
- protected $aExact = array();
- /// Patterns of type foo*
- protected $aPrefix = array();
- /// Patterns that contain wildcard anywhere else than in the end
- protected $aRegex = array();
+ /** @var string[] Exact message keys */
+ protected $aExact = [];
+ /** @var string[] Patterns of type foo* */
+ protected $aPrefix = [];
+ /** @var string[] Patterns that contain wildcard anywhere else than in the end */
+ protected $aRegex = [];
/**
* Alias for making NO-OP string mangler.
*
- * @return StringMatcher
+ * @return self
*/
public static function EmptyMatcher() {
- return new StringMatcher();
+ return new self();
}
/**
@@ -36,7 +36,7 @@ class StringMatcher implements StringMangler, MetaYamlSchemaExtender {
* @param string $prefix
* @param array $patterns
*/
- public function __construct( $prefix = '', array $patterns = array() ) {
+ public function __construct( $prefix = '', array $patterns = [] ) {
$this->sPrefix = $prefix;
$this->init( $patterns );
}
@@ -45,11 +45,11 @@ class StringMatcher implements StringMangler, MetaYamlSchemaExtender {
static $valid = null;
if ( $valid === null ) {
global $wgLegalTitleChars;
- $valid = strtr( $wgLegalTitleChars, array(
+ $valid = strtr( $wgLegalTitleChars, [
'=' => '', // equals sign, which is itself usef for escaping
'&' => '', // ampersand, for entities
'%' => '', // percent sign, which is used in URL encoding
- ) );
+ ] );
}
return $valid;
@@ -75,7 +75,7 @@ class StringMatcher implements StringMangler, MetaYamlSchemaExtender {
$prefix = substr( $string, 0, -1 );
$this->aPrefix[$prefix] = strlen( $prefix );
} else {
- $string = str_replace( '\\*', '.+', preg_quote( $string ) );
+ $string = str_replace( '\\*', '.+', preg_quote( $string, '/' ) );
$this->aRegex[] = "/^$string$/";
}
}
@@ -153,16 +153,23 @@ class StringMatcher implements StringMangler, MetaYamlSchemaExtender {
$string = $this->sPrefix . $string;
}
+ $escaper = function ( $match ) {
+ $esc = '';
+ foreach ( str_split( $match[ 0 ] ) as $c ) {
+ $esc .= '=' . sprintf( '%02X', ord( $c ) );
+ }
+ return $esc;
+ };
+
// Apply a "quoted-printable"-like escaping
$valid = self::getValidKeyChars();
- $escapedString = preg_replace_callback( "/[^$valid]/",
- function ( $match ) {
- return '=' . sprintf( '%02X', ord( $match[0] ) );
- },
- $string
- );
+ $string = preg_replace_callback( "/[^$valid]/", $escaper, $string );
+ // Additional limitations in MediaWiki, see MediaWikiTitleCodec::splitTitleString
+ $string = preg_replace_callback( '/(~~~|^[ _]|[ _]$|[ _]{2,}|^:)/', $escaper, $string );
+ // TODO: length check + truncation
+ // TODO: forbid path travels
- return $escapedString;
+ return $string;
}
/**
@@ -196,7 +203,7 @@ class StringMatcher implements StringMangler, MetaYamlSchemaExtender {
* @return string[]|array (Un)mangled strings.
*/
protected function mangleArray( array $array, $reverse = false ) {
- $temp = array();
+ $temp = [];
if ( !$this->isAssoc( $array ) ) {
foreach ( $array as $key => &$value ) {
@@ -224,28 +231,28 @@ class StringMatcher implements StringMangler, MetaYamlSchemaExtender {
}
public static function getExtraSchema() {
- $schema = array(
- 'root' => array(
+ $schema = [
+ 'root' => [
'_type' => 'array',
- '_children' => array(
- 'MANGLER' => array(
+ '_children' => [
+ 'MANGLER' => [
'_type' => 'array',
- '_children' => array(
- 'prefix' => array(
+ '_children' => [
+ 'prefix' => [
'_type' => 'text',
'_not_empty' => true
- ),
- 'patterns' => array(
+ ],
+ 'patterns' => [
'_type' => 'array',
'_required' => true,
'_ignore_extra_keys' => true,
- '_children' => array(),
- ),
- )
- )
- )
- )
- );
+ '_children' => [],
+ ],
+ ]
+ ]
+ ]
+ ]
+ ];
return $schema;
}
diff --git a/www/wiki/extensions/Translate/tag/PageTranslationHooks.php b/www/wiki/extensions/Translate/tag/PageTranslationHooks.php
index c173e449..607440df 100644
--- a/www/wiki/extensions/Translate/tag/PageTranslationHooks.php
+++ b/www/wiki/extensions/Translate/tag/PageTranslationHooks.php
@@ -4,9 +4,11 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
+use Wikimedia\ScopedCallback;
+
/**
* Hooks for page translation.
*
@@ -19,11 +21,17 @@ class PageTranslationHooks {
// Check if job queue is running
public static $jobQueueRunning = false;
+ // Check if we are just rendering tags or such
+ public static $renderingContext = false;
+
+ // Used to communicate data between LanguageLinks and SkinTemplateGetLanguageLink hooks.
+ private static $languageLinkData = [];
+
/**
* Hook: ParserBeforeStrip
- * @param $parser Parser
- * @param $text
- * @param $state
+ * @param Parser $parser
+ * @param string &$text
+ * @param string $state
* @return bool
*/
public static function renderTagPage( $parser, &$text, $state ) {
@@ -33,13 +41,17 @@ class PageTranslationHooks {
try {
$parse = TranslatablePage::newFromText( $parser->getTitle(), $text )->getParse();
$text = $parse->getTranslationPageText( null );
+ $parser->getOutput()->addModuleStyles( 'ext.translate' );
} catch ( TPException $e ) {
- // Show ugly preview without processed <translate> tags
wfDebug( 'TPException caught; expected' );
}
}
- $parser->getOutput()->addModules( 'ext.translate' );
+ // For section previews, perform additional clean-up, given tags are often
+ // unbalanced when we preview one section only.
+ if ( $parser->getOptions()->getIsSectionPreview() ) {
+ $text = TranslatablePage::cleanupTags( $text );
+ }
// Set display title
$page = TranslatablePage::isTranslationPage( $title );
@@ -47,37 +59,89 @@ class PageTranslationHooks {
return true;
}
+ self::$renderingContext = true;
list( , $code ) = TranslateUtils::figureMessage( $title->getText() );
$name = $page->getPageDisplayTitle( $code );
-
if ( $name ) {
$name = $parser->recursivePreprocess( $name );
$parser->getOutput()->setDisplayTitle( $name );
}
+ self::$renderingContext = false;
+
+ $parser->getOutput()->setExtensionData(
+ 'translate-translation-page',
+ [
+ 'sourcepagetitle' => $page->getTitle(),
+ 'languagecode' => $code,
+ 'messagegroupid' => $page->getMessageGroupId()
+ ]
+ );
// Disable edit section links
- $parser->getOptions()->setEditSection( false );
+ $parser->getOutput()->setExtensionData( 'Translate-noeditsection', true );
+ if ( !defined( 'ParserOutput::SUPPORTS_STATELESS_TRANSFORMS' ) ) {
+ $parser->getOptions()->setEditSection( false );
+ }
return true;
}
/**
+ * Hook: ParserOutputPostCacheTransform
+ * @param ParserOutput $out
+ * @param string &$text
+ * @param array &$options
+ */
+ public static function onParserOutputPostCacheTransform(
+ ParserOutput $out, &$text, array &$options
+ ) {
+ if ( $out->getExtensionData( 'Translate-noeditsection' ) ) {
+ $options['enableSectionEditLinks'] = false;
+ }
+ }
+
+ /**
* Set the right page content language for translated pages ("Page/xx").
* Hook: PageContentLanguage
+ *
+ * @param Title $title
+ * @param Language|StubUserLang|string &$pageLang
+ * @return true
*/
- public static function onPageContentLanguage( Title $title, /*string*/&$pageLang ) {
+ public static function onPageContentLanguage( Title $title, &$pageLang ) {
// For translation pages, parse plural, grammar etc with correct language,
// and set the right direction
if ( TranslatablePage::isTranslationPage( $title ) ) {
list( , $code ) = TranslateUtils::figureMessage( $title->getText() );
- $pageLang = $code;
+ $pageLang = Language::factory( $code );
}
return true;
}
- /// Hook: OutputPageBeforeHTML
- public static function injectCss( OutputPage $out, /*string*/$text ) {
+ /**
+ * Display an edit notice for translatable source pages if it's enabled
+ * Hook: TitleGetEditNotices
+ *
+ * @param Title $title
+ * @param int $oldid
+ * @param array &$notices
+ */
+ public static function onTitleGetEditNotices( Title $title, $oldid, array &$notices ) {
+ $msg = wfMessage( 'translate-edit-tag-warning' )->inContentLanguage();
+
+ if ( !$msg->isDisabled() && TranslatablePage::isSourcePage( $title ) ) {
+ $notices['translate-tag'] = $msg->parseAsBlock();
+ }
+ }
+
+ /**
+ * Hook: OutputPageBeforeHTML
+ * @param OutputPage $out
+ * @param string $text
+ * @return true
+ */
+ public static function injectCss( OutputPage $out, /*string*/ $text ) {
global $wgTranslatePageTranslationULS;
$title = $out->getTitle();
@@ -85,8 +149,6 @@ class PageTranslationHooks {
$isTranslation = TranslatablePage::isTranslationPage( $title );
if ( $isSource || $isTranslation ) {
- $out->addModuleStyles( 'ext.translate' );
-
if ( $wgTranslatePageTranslationULS ) {
$out->addModules( 'ext.translate.pagetranslation.uls' );
}
@@ -106,6 +168,15 @@ class PageTranslationHooks {
/**
* This is triggered after saves to translation unit pages
+ * @param WikiPage $wikiPage
+ * @param User $user
+ * @param TextContent $content
+ * @param string $summary
+ * @param bool $minor
+ * @param int $flags
+ * @param Revision $revision
+ * @param MessageHandle $handle
+ * @return true
*/
public static function onSectionSave( WikiPage $wikiPage, User $user, TextContent $content,
$summary, $minor, $flags, $revision, MessageHandle $handle
@@ -115,12 +186,6 @@ class PageTranslationHooks {
return true;
}
- // Do not trigger renders for fuzzy
- $text = $content->getNativeData();
- if ( strpos( $text, TRANSLATE_FUZZY ) !== false ) {
- return true;
- }
-
$group = $handle->getGroup();
if ( !$group instanceof WikiPageMessageGroup ) {
return true;
@@ -165,52 +230,36 @@ class PageTranslationHooks {
}
/**
- * @param $data
- * @param $params
- * @param $parser Parser
+ * @param string $data
+ * @param array $params
+ * @param Parser $parser
* @return string
*/
public static function languages( $data, $params, $parser ) {
- $currentTitle = $parser->getTitle();
+ global $wgPageTranslationLanguageList;
- // Check if this is a source page or a translation page
- $page = TranslatablePage::newFromTitle( $currentTitle );
- if ( $page->getMarkedTag() === false ) {
- $page = TranslatablePage::isTranslationPage( $currentTitle );
- }
-
- if ( $page === false || $page->getMarkedTag() === false ) {
+ if ( $wgPageTranslationLanguageList === 'sidebar-only' ) {
return '';
}
- $status = $page->getTranslationPercentages();
- if ( !$status ) {
- return '';
- }
+ self::$renderingContext = true;
+ $context = new ScopedCallback( function () {
+ self::$renderingContext = false;
+ } );
- // If priority languages have been set always show those languages
- $priorityLangs = TranslateMetadata::get( $page->getMessageGroupId(), 'prioritylangs' );
- $priorityForce = TranslateMetadata::get( $page->getMessageGroupId(), 'priorityforce' );
- $filter = null;
- if ( strlen( $priorityLangs ) > 0 ) {
- $filter = array_flip( explode( ',', $priorityLangs ) );
+ // Add a dummy language link that is removed in self::addLanguageLinks.
+ if ( $wgPageTranslationLanguageList === 'sidebar-fallback' ) {
+ $parser->getOutput()->addLanguageLink( 'x-pagetranslation-tag' );
}
- if ( $filter !== null ) {
- // If translation is restricted to some languages, only show them
- if ( $priorityForce === 'on' ) {
- // Do not filter the source language link
- $filter[$page->getMessageGroup()->getSourceLanguage()] = true;
- $status = array_intersect_key( $status, $filter );
- }
- foreach ( $filter as $langCode => $value ) {
- if ( !isset( $status[$langCode] ) ) {
- // We need to show all priority languages even if no translation started
- $status[$langCode] = 0;
- }
- }
+
+ $currentTitle = $parser->getTitle();
+ $pageStatus = self::getTranslatablePageStatus( $currentTitle );
+ if ( !$pageStatus ) {
+ return '';
}
- // Fix title
+ $page = $pageStatus[ 'page' ];
+ $status = $pageStatus[ 'languages' ];
$pageTitle = $page->getTitle();
// Sort by language code, which seems to be the only sane method
@@ -224,7 +273,7 @@ class PageTranslationHooks {
// This should do the same thing for now.
$sourceLanguage = $pageTitle->getPageLanguage()->getCode();
- $languages = array();
+ $languages = [];
foreach ( $status as $code => $percent ) {
// Get autonyms (null)
$name = TranslateUtils::getLanguageName( $code, null );
@@ -235,7 +284,7 @@ class PageTranslationHooks {
$targetTitleString = $pageTitle->getDBkey() . $suffix;
$subpage = Title::makeTitle( $pageTitle->getNamespace(), $targetTitleString );
- $classes = array();
+ $classes = [];
if ( $code === $userLangCode ) {
$classes[] = 'mw-pt-languages-ui';
}
@@ -243,7 +292,11 @@ class PageTranslationHooks {
if ( $currentTitle->equals( $subpage ) ) {
$classes[] = 'mw-pt-languages-selected';
$classes = array_merge( $classes, self::tpProgressIcon( $percent ) );
- $name = Html::rawElement( 'span', array( 'class' => $classes ), $name );
+ $element = Html::rawElement(
+ 'span',
+ [ 'class' => $classes , 'lang' => LanguageCode::bcp47( $code ) ],
+ $name
+ );
} elseif ( $subpage->isKnown() ) {
$pagename = $page->getPageDisplayTitle( $code );
if ( !is_string( $pagename ) ) {
@@ -257,51 +310,56 @@ class PageTranslationHooks {
->params( $pagename )
->numParams( 100 * $percent )
->text();
- $attribs = array(
+ $attribs = [
'title' => $title,
'class' => $classes,
- );
+ 'lang' => LanguageCode::bcp47( $code ),
+ ];
- $name = Linker::linkKnown( $subpage, $name, $attribs );
+ $element = Linker::linkKnown( $subpage, $name, $attribs );
} else {
/* When language is included because it is a priority language,
* but translation does not yet exists, link directly to the
* translation view. */
$specialTranslateTitle = SpecialPage::getTitleFor( 'Translate' );
- $params = array(
+ $params = [
'group' => $page->getMessageGroupId(),
'language' => $code,
'task' => 'view'
- );
+ ];
$classes[] = 'new'; // For red link color
- $attribs = array(
+ $attribs = [
'title' => wfMessage( 'tpt-languages-zero' )->inLanguage( $userLang )->text(),
'class' => $classes,
- );
- $name = Linker::link( $specialTranslateTitle, $name, $attribs, $params );
+ ];
+ $element = Linker::linkKnown( $specialTranslateTitle, $name, $attribs, $params );
}
- $languages[] = $name;
+ $languages[ $name ] = $element;
}
+ // Sort languages by autonym
+ ksort( $languages );
+ $languages = array_values( $languages );
+
// dirmark (rlm/lrm) is added, because languages with RTL names can
// mess the display
$sep = wfMessage( 'tpt-languages-separator' )->inLanguage( $userLang )->escaped();
$sep .= $userLang->getDirMark();
$languages = implode( $sep, $languages );
- $out = Html::openElement( 'div', array(
+ $out = Html::openElement( 'div', [
'class' => 'mw-pt-languages noprint',
'lang' => $userLang->getHtmlCode(),
'dir' => $userLang->getDir()
- ) );
- $out .= Html::rawElement( 'div', array( 'class' => 'mw-pt-languages-label' ),
+ ] );
+ $out .= Html::rawElement( 'div', [ 'class' => 'mw-pt-languages-label' ],
wfMessage( 'tpt-languages-legend' )->inLanguage( $userLang )->escaped()
);
$out .= Html::rawElement(
'div',
- array( 'class' => 'mw-pt-languages-list autonym' ),
+ [ 'class' => 'mw-pt-languages-list autonym' ],
$languages
);
$out .= Html::closeElement( 'div' );
@@ -314,11 +372,11 @@ class PageTranslationHooks {
/**
* Return icon CSS class for given progress status: percentages
* are too accurate and take more space than simple images.
- * @param $percent float
+ * @param float $percent
* @return string[]
*/
protected static function tpProgressIcon( $percent ) {
- $classes = array( 'mw-pt-progress' );
+ $classes = [ 'mw-pt-progress' ];
$percent *= 100;
if ( $percent < 20 ) {
$classes[] = 'mw-pt-progress--stub';
@@ -335,8 +393,181 @@ class PageTranslationHooks {
}
/**
+ * Returns translatable page and language stats for given title.
+ * @param Title $title
+ * @return array|null Returns null if not a translatable page.
+ */
+ private static function getTranslatablePageStatus( Title $title ) {
+ // Check if this is a source page or a translation page
+ $page = TranslatablePage::newFromTitle( $title );
+ if ( $page->getMarkedTag() === false ) {
+ $page = TranslatablePage::isTranslationPage( $title );
+ }
+
+ if ( $page === false || $page->getMarkedTag() === false ) {
+ return null;
+ }
+
+ $status = $page->getTranslationPercentages();
+ if ( !$status ) {
+ return null;
+ }
+
+ // If priority languages have been set always show those languages
+ $priorityLangs = TranslateMetadata::get( $page->getMessageGroupId(), 'prioritylangs' );
+ $priorityForce = TranslateMetadata::get( $page->getMessageGroupId(), 'priorityforce' );
+ $filter = null;
+ if ( strlen( $priorityLangs ) > 0 ) {
+ $filter = array_flip( explode( ',', $priorityLangs ) );
+ }
+ if ( $filter !== null ) {
+ // If translation is restricted to some languages, only show them
+ if ( $priorityForce === 'on' ) {
+ // Do not filter the source language link
+ $filter[$page->getMessageGroup()->getSourceLanguage()] = true;
+ $status = array_intersect_key( $status, $filter );
+ }
+ foreach ( $filter as $langCode => $value ) {
+ if ( !isset( $status[$langCode] ) ) {
+ // We need to show all priority languages even if no translation started
+ $status[$langCode] = 0;
+ }
+ }
+ }
+
+ return [
+ 'page' => $page,
+ 'languages' => $status
+ ];
+ }
+
+ /**
+ * Hooks: LanguageLinks
+ * @param Title $title Title of the page for which links are needed.
+ * @param array &$languageLinks List of language links to modify.
+ */
+ public static function addLanguageLinks( Title $title, array &$languageLinks ) {
+ global $wgPageTranslationLanguageList;
+
+ $hasLanguagesTag = false;
+ foreach ( $languageLinks as $index => $name ) {
+ if ( $name === 'x-pagetranslation-tag' ) {
+ $hasLanguagesTag = true;
+ unset( $languageLinks[ $index ] );
+ }
+ }
+
+ if ( $wgPageTranslationLanguageList === 'tag-only' ) {
+ return;
+ }
+
+ if ( $wgPageTranslationLanguageList === 'sidebar-fallback' && $hasLanguagesTag ) {
+ return;
+ }
+
+ // $wgPageTranslationLanguageList === 'sidebar-always' OR 'sidebar-only'
+
+ $status = self::getTranslatablePageStatus( $title );
+ if ( !$status ) {
+ return;
+ }
+
+ self::$renderingContext = true;
+ $context = new ScopedCallback( function () {
+ self::$renderingContext = false;
+ } );
+
+ $page = $status[ 'page' ];
+ $languages = $status[ 'languages' ];
+ $en = Language::factory( 'en' );
+
+ $newLanguageLinks = [];
+
+ // Batch the Title::exists queries used below
+ $lb = new LinkBatch();
+ foreach ( array_keys( $languages ) as $code ) {
+ $title = $page->getTitle()->getSubpage( $code );
+ $lb->addObj( $title );
+ }
+ $lb->execute();
+
+ foreach ( $languages as $code => $percentage ) {
+ $title = $page->getTitle()->getSubpage( $code );
+ $key = "x-pagetranslation:{$title->getPrefixedText()}";
+ $translatedName = $page->getPageDisplayTitle( $code ) ?: $title->getPrefixedText();
+
+ if ( $title->exists() ) {
+ $href = $title->getLocalURL();
+ $classes = self::tpProgressIcon( $percentage );
+ $title = wfMessage( 'tpt-languages-nonzero' )
+ ->params( $translatedName )
+ ->numParams( 100 * $percentage );
+ } else {
+ $href = SpecialPage::getTitleFor( 'Translate' )->getLocalURL( [
+ 'group' => $page->getMessageGroupId(),
+ 'language' => $code,
+ ] );
+ $classes = [ 'mw-pt-progress--none' ];
+ $title = wfMessage( 'tpt-languages-zero' );
+ }
+
+ self::$languageLinkData[ $key ] = [
+ 'href' => $href,
+ 'language' => $code,
+ 'percentage' => $percentage,
+ 'classes' => $classes,
+ 'autonym' => $en->ucfirst( Language::fetchLanguageName( $code ) ),
+ 'title' => $title,
+ ];
+
+ $newLanguageLinks[ $key ] = self::$languageLinkData[ $key ][ 'autonym' ];
+ }
+
+ asort( $newLanguageLinks );
+ $languageLinks = array_merge( array_keys( $newLanguageLinks ), $languageLinks );
+ }
+
+ /**
+ * Hooks: SkinTemplateGetLanguageLink
+ * @param array &$link
+ * @param Title $linkTitle
+ * @param Title $pageTitle
+ * @param OutputPage $out
+ */
+ public static function formatLanguageLink(
+ array &$link,
+ Title $linkTitle,
+ Title $pageTitle,
+ OutputPage $out
+ ) {
+ if ( substr( $link[ 'text' ], 0, 18 ) !== 'x-pagetranslation:' ) {
+ return;
+ }
+
+ if ( !isset( self::$languageLinkData[ $link[ 'text' ] ] ) ) {
+ return;
+ }
+
+ $data = self::$languageLinkData[ $link[ 'text' ] ];
+
+ $link[ 'class' ] .= ' ' . implode( ' ', $data[ 'classes' ] );
+ $link[ 'href' ] = $data[ 'href' ];
+ $link[ 'text' ] = $data[ 'autonym' ];
+ $link[ 'title' ] = $data[ 'title' ]->inLanguage( $out->getLanguage()->getCode() )->text();
+ $link[ 'lang'] = LanguageCode::bcp47( $data[ 'language' ] );
+ $link[ 'hreflang'] = LanguageCode::bcp47( $data[ 'language' ] );
+
+ $out->addModuleStyles( 'ext.translate.tag.languages' );
+ }
+
+ /**
* Display nice error when editing content.
* Hook: EditFilterMergedContent
+ * @param IContextSource $context
+ * @param Content $content
+ * @param Status $status
+ * @param string $summary
+ * @return true
*/
public static function tpSyntaxCheckForEditContent( $context, $content, $status, $summary ) {
if ( !$content instanceof TextContent ) {
@@ -344,6 +575,8 @@ class PageTranslationHooks {
}
$text = $content->getNativeData();
+ // See T154500
+ $text = str_replace( [ "\r\n", "\r" ], "\n", rtrim( $text ) );
$title = $context->getTitle();
$e = self::tpSyntaxError( $title, $text );
@@ -353,7 +586,7 @@ class PageTranslationHooks {
// $msg is an array containing a message key followed by any parameters.
// @todo Use Message object instead.
- call_user_func_array( array( $status, 'fatal' ), $msg );
+ call_user_func_array( [ $status, 'fatal' ], $msg );
}
return true;
@@ -361,6 +594,9 @@ class PageTranslationHooks {
/**
* Returns any syntax error.
+ * @param Title $title
+ * @param string $text
+ * @return null|TPException
*/
protected static function tpSyntaxError( $title, $text ) {
if ( strpos( $text, '<translate>' ) === false ) {
@@ -381,12 +617,24 @@ class PageTranslationHooks {
* When attempting to save, last resort. Edit page would only display
* edit conflict if there wasn't tpSyntaxCheckForEditPage.
* Hook: PageContentSave
+ * @param WikiPage $wikiPage
+ * @param User $user
+ * @param Content $content
+ * @param string $summary
+ * @param bool $minor
+ * @param string $_1
+ * @param bool $_2
+ * @param int $flags
+ * @param Status $status
+ * @return true
*/
- public static function tpSyntaxCheck( $wikiPage, $user, $content, $summary,
+ public static function tpSyntaxCheck( WikiPage $wikiPage, $user, $content, $summary,
$minor, $_1, $_2, $flags, $status
) {
if ( $content instanceof TextContent ) {
$text = $content->getNativeData();
+ // See T154500
+ $text = str_replace( [ "\r\n", "\r" ], "\n", rtrim( $text ) );
} else {
// Screw it, not interested
return true;
@@ -401,7 +649,7 @@ class PageTranslationHooks {
try {
$page->getParse();
} catch ( TPException $e ) {
- call_user_func_array( array( $status, 'fatal' ), $e->getMsg() );
+ call_user_func_array( [ $status, 'fatal' ], $e->getMsg() );
return false;
}
@@ -411,8 +659,18 @@ class PageTranslationHooks {
/**
* Hook: PageContentSaveComplete
+ * @param WikiPage $wikiPage
+ * @param User $user
+ * @param Content $content
+ * @param string $summary
+ * @param bool $minor
+ * @param string $_1
+ * @param bool $_2
+ * @param int $flags
+ * @param Revision $revision
+ * @return true
*/
- public static function addTranstag( $wikiPage, $user, $content, $summary,
+ public static function addTranstag( WikiPage $wikiPage, $user, $content, $summary,
$minor, $_1, $_2, $flags, $revision
) {
// We are not interested in null revisions
@@ -454,6 +712,10 @@ class PageTranslationHooks {
* at the moment.
* Hook: RevisionInsertComplete
* @since 2012-05-08
+ * @param Revision $rev
+ * @param string $text
+ * @param int $flags
+ * @return true
*/
public static function updateTranstagOnNullRevisions( Revision $rev, $text, $flags ) {
$title = $rev->getTitle();
@@ -467,10 +729,10 @@ class PageTranslationHooks {
$dbw = wfGetDB( DB_MASTER );
$table = 'revision';
$field = 'rev_text_id';
- $conds = array(
+ $conds = [
'rev_page' => $rev->getPage(),
'rev_id' => $oldRevId,
- );
+ ];
// FIXME: optimize away this query. Bug T38588.
$oldTextId = $dbw->selectField( $table, $field, $conds, __METHOD__ );
@@ -488,18 +750,34 @@ class PageTranslationHooks {
}
/**
- * Prevent editing of unknown pages in Translations namespace.
+ * Prevent editing of certain pages in Translations namespace.
* Hook: getUserPermissionsErrorsExpensive
+ *
+ * @param Title $title
+ * @param User $user
+ * @param string $action
+ * @param mixed &$result
+ * @return bool
*/
- public static function preventUnknownTranslations( Title $title, User $user,
+ public static function onGetUserPermissionsErrorsExpensive( Title $title, User $user,
$action, &$result
) {
$handle = new MessageHandle( $title );
- if ( $action === 'edit' && $handle->isPageTranslation() &&
- !$handle->isValid()
- ) {
- $result = array( 'tpt-unknown-page' );
+ // Check only when someone tries to edit (or create) page translation messages
+ if ( $action !== 'edit' || !$handle->isPageTranslation() ) {
+ return true;
+ }
+
+ if ( !$handle->isValid() ) {
+ // Don't allow editing invalid messages that do not belong to any translatable page
+ $result = [ 'tpt-unknown-page' ];
+ return false;
+ }
+
+ $error = self::getTranslationRestrictions( $handle );
+ if ( count( $error ) ) {
+ $result = $error;
return false;
}
@@ -507,22 +785,17 @@ class PageTranslationHooks {
}
/**
- * Prevent editing of restricted languages.
- * Hook: getUserPermissionsErrorsExpensive
- * @since 2012-03-01
+ * Prevent editing of restricted languages when prioritized.
+ *
+ * @param MessageHandle $handle
+ * @return array array containing error message if restricted, empty otherwise
*/
- public static function preventRestrictedTranslations( Title $title, User $user,
- $action, &$result
- ) {
+ private static function getTranslationRestrictions( MessageHandle $handle ) {
global $wgTranslateDocumentationLanguageCode;
- // Preventing editing (includes creation) should be enough
- if ( $action !== 'edit' ) {
- return true;
- }
- $handle = new MessageHandle( $title );
- if ( !$handle->isValid() ) {
- return true;
+ // Allow adding message documentation even when translation is restricted
+ if ( $handle->getCode() === $wgTranslateDocumentationLanguageCode ) {
+ return [];
}
// Get the primary group id
@@ -532,12 +805,7 @@ class PageTranslationHooks {
// Check if anything is prevented for the group in the first place
$force = TranslateMetadata::get( $groupId, 'priorityforce' );
if ( $force !== 'on' ) {
- return true;
- }
-
- // Allow adding message documentation even when translation is restricted
- if ( $handle->getCode() === $wgTranslateDocumentationLanguageCode ) {
- return true;
+ return [];
}
// And finally check whether the language is not included in whitelist
@@ -546,42 +814,45 @@ class PageTranslationHooks {
if ( !isset( $filter[$handle->getCode()] ) ) {
// @todo Default reason if none provided
$reason = TranslateMetadata::get( $groupId, 'priorityreason' );
- $result = array( 'tpt-translation-restricted', $reason );
-
- return false;
+ return [ 'tpt-translation-restricted', $reason ];
}
- return true;
+ return [];
}
/**
* Prevent editing of translation pages directly.
* Hook: getUserPermissionsErrorsExpensive
+ * @param Title $title
+ * @param User $user
+ * @param string $action
+ * @param bool &$result
+ * @return bool
*/
public static function preventDirectEditing( Title $title, User $user, $action, &$result ) {
- $page = TranslatablePage::isTranslationPage( $title );
- $whitelist = array(
- 'read' => true,
- 'delete' => true,
- 'review' => true, // FlaggedRevs
- );
+ if ( self::$allowTargetEdit ) {
+ return true;
+ }
- if ( $page !== false && !isset( $whitelist[$action] ) ) {
- if ( self::$allowTargetEdit ) {
- return true;
- }
+ $whitelist = [
+ 'read', 'delete', 'undelete', 'deletedtext', 'deletedhistory',
+ 'review', // FlaggedRevs
+ ];
+ if ( in_array( $action, $whitelist ) ) {
+ return true;
+ }
- if ( $page->getMarkedTag() ) {
- list( , $code ) = TranslateUtils::figureMessage( $title->getText() );
- $result = array(
- 'tpt-target-page',
- ':' . $page->getTitle()->getPrefixedText(),
- // This url shouldn't get cached
- wfExpandUrl( $page->getTranslationUrl( $code ) )
- );
+ $page = TranslatablePage::isTranslationPage( $title );
+ if ( $page !== false && $page->getMarkedTag() ) {
+ list( , $code ) = TranslateUtils::figureMessage( $title->getText() );
+ $result = [
+ 'tpt-target-page',
+ ':' . $page->getTitle()->getPrefixedText(),
+ // This url shouldn't get cached
+ wfExpandUrl( $page->getTranslationUrl( $code ) )
+ ];
- return false;
- }
+ return false;
}
return true;
@@ -594,7 +865,7 @@ class PageTranslationHooks {
* @param Title $title
* @param User $user
* @param string $action
- * @param mixed $result
+ * @param mixed &$result
*
* @return bool
*/
@@ -617,15 +888,18 @@ class PageTranslationHooks {
* Redirects the delete action to our own for translatable pages.
* Hook: ArticleConfirmDelete
*
- * @param $article Article
- * @param $out OutputPage
- * @param $reason
+ * @param Article $article
+ * @param OutputPage $out
+ * @param string &$reason
*
* @return bool
*/
public static function disableDelete( $article, $out, &$reason ) {
$title = $article->getTitle();
- if ( TranslatablePage::isSourcePage( $title ) ||
+ $translatablePage = TranslatablePage::newFromTitle( $title );
+
+ if (
+ $translatablePage->getMarkedTag() !== false ||
TranslatablePage::isTranslationPage( $title )
) {
$new = SpecialPage::getTitleFor(
@@ -641,9 +915,9 @@ class PageTranslationHooks {
/**
* Hook: ArticleViewHeader
*
- * @param $article Article
- * @param $outputDone
- * @param $pcache
+ * @param Article &$article
+ * @param bool &$outputDone
+ * @param bool &$pcache
* @return bool
*/
public static function translatablePageHeader( &$article, &$outputDone, &$pcache ) {
@@ -651,58 +925,47 @@ class PageTranslationHooks {
return true;
}
- $title = $article->getTitle();
-
- if ( TranslatablePage::isTranslationPage( $title ) ) {
- self::translationPageHeader( $title );
+ $transPage = TranslatablePage::isTranslationPage( $article->getTitle() );
+ $context = $article->getContext();
+ if ( $transPage ) {
+ self::translationPageHeader( $context, $transPage );
} else {
// Check for pages that are tagged or marked
- self::sourcePageHeader( $title );
+ self::sourcePageHeader( $context );
}
return true;
}
- protected static function sourcePageHeader( Title $title ) {
- $context = RequestContext::getMain();
+ protected static function sourcePageHeader( IContextSource $context ) {
+ $language = $context->getLanguage();
+ $title = $context->getTitle();
$page = TranslatablePage::newFromTitle( $title );
$marked = $page->getMarkedTag();
$ready = $page->getReadyTag();
-
- $title = $page->getTitle();
-
$latest = $title->getLatestRevID();
- $canmark = $ready === $latest && $marked !== $latest;
-
- $actions = array();
+ $actions = [];
if ( $marked && $context->getUser()->isAllowed( 'translate' ) ) {
- $par = array(
- 'group' => $page->getMessageGroupId(),
- 'language' => $context->getLanguage()->getCode(),
- 'action' => 'page',
- 'filter' => '',
- );
-
- $translate = SpecialPage::getTitleFor( 'Translate' );
- $linkDesc = $context->msg( 'translate-tag-translate-link-desc' )->escaped();
- $actions[] = Linker::link( $translate, $linkDesc, array(), $par );
+ $actions[] = self::getTranslateLink( $context, $page, $language->getCode() );
}
- if ( $canmark ) {
- $diffUrl = $title->getFullURL( array( 'oldid' => $marked, 'diff' => $latest ) );
- $par = array( 'target' => $title->getPrefixedText(), 'do' => 'mark' );
- $translate = SpecialPage::getTitleFor( 'PageTranslation' );
+ $hasChanges = $ready === $latest && $marked !== $latest;
+ if ( $hasChanges ) {
+ $diffUrl = $title->getFullURL( [ 'oldid' => $marked, 'diff' => $latest ] );
if ( $context->getUser()->isAllowed( 'pagetranslation' ) ) {
- // This page has never been marked
+ $pageTranslation = SpecialPage::getTitleFor( 'PageTranslation' );
+ $params = [ 'target' => $title->getPrefixedText(), 'do' => 'mark' ];
+
if ( $marked === false ) {
+ // This page has never been marked
$linkDesc = $context->msg( 'translate-tag-markthis' )->escaped();
- $actions[] = Linker::link( $translate, $linkDesc, array(), $par );
+ $actions[] = Linker::linkKnown( $pageTranslation, $linkDesc, [], $params );
} else {
- $markUrl = $translate->getFullURL( $par );
+ $markUrl = $pageTranslation->getFullURL( $params );
$actions[] = $context->msg( 'translate-tag-markthisagain', $diffUrl, $markUrl )
->parse();
}
@@ -715,28 +978,42 @@ class PageTranslationHooks {
return;
}
- $language = $context->getLanguage();
- $legend = Html::rawElement(
+ $header = Html::rawElement(
'div',
- array(
+ [
'class' => 'mw-pt-translate-header noprint nomobile',
'dir' => $language->getDir(),
'lang' => $language->getHtmlCode(),
- ),
- $context->getLanguage()->semicolonList( $actions )
+ ],
+ $language->semicolonList( $actions )
) . Html::element( 'hr' );
- $context->getOutput()->addHTML( $legend );
+ $context->getOutput()->addHTML( $header );
}
- protected static function translationPageHeader( Title $title ) {
- if ( !$title->exists() ) {
- return;
- }
+ private static function getTranslateLink(
+ IContextSource $context, TranslatablePage $page, $langCode
+ ) {
+ return Linker::linkKnown(
+ SpecialPage::getTitleFor( 'Translate' ),
+ $context->msg( 'translate-tag-translate-link-desc' )->escaped(),
+ [],
+ [
+ 'group' => $page->getMessageGroupId(),
+ 'language' => $langCode,
+ 'action' => 'page',
+ 'filter' => '',
+ ]
+ );
+ }
- // Check if applicable
- $page = TranslatablePage::isTranslationPage( $title );
- if ( $page === false ) {
+ protected static function translationPageHeader(
+ IContextSource $context, TranslatablePage $page
+ ) {
+ global $wgTranslateKeepOutdatedTranslations;
+
+ $title = $context->getTitle();
+ if ( !$title->exists() ) {
return;
}
@@ -748,46 +1025,65 @@ class PageTranslationHooks {
if ( isset( $pers[$code] ) ) {
$per = $pers[$code] * 100;
}
- $titleText = $page->getTitle()->getPrefixedText();
- // This url might get cached
- $url = wfExpandUrl( $page->getTranslationUrl( $code ), PROTO_RELATIVE );
-
- // Output
- $context = RequestContext::getMain();
$language = $context->getLanguage();
- $wrap = Html::rawElement(
+ $output = $context->getOutput();
+
+ if ( $page->getSourceLanguageCode() === $code ) {
+ // If we are on the source language page, link to translate for user's language
+ $msg = self::getTranslateLink( $context, $page, $language->getCode() );
+ } else {
+ $url = wfExpandUrl( $page->getTranslationUrl( $code ), PROTO_RELATIVE );
+ $msg = $context->msg( 'tpt-translation-intro',
+ $url,
+ ':' . $page->getTitle()->getPrefixedText(),
+ $language->formatNum( $per )
+ )->parse();
+ }
+
+ $header = Html::rawElement(
'div',
- array(
+ [
'class' => 'mw-pt-translate-header noprint',
'dir' => $language->getDir(),
'lang' => $language->getHtmlCode(),
- ),
- '$1'
- );
+ ],
+ $msg
+ ) . Html::element( 'hr' );
- $out = $context->getOutput();
+ $output->addHTML( $header );
- $out->wrapWikiMsg(
- $wrap,
- array(
- 'tpt-translation-intro',
- $url,
- ':' . $titleText,
- $language->formatNum( $per )
- )
- );
- $out->addHTML( '<hr />' );
+ if ( $wgTranslateKeepOutdatedTranslations ) {
+ $groupId = $page->getMessageGroupId();
+ // This is already calculated and cached by above call to getTranslationPercentages
+ $stats = MessageGroupStats::forItem( $groupId, $code );
+ if ( $stats[MessageGroupStats::FUZZY] ) {
+ // Only show if there is fuzzy messages
+ $wrap = '<div class="mw-pt-translate-header"><span class="mw-translate-fuzzy">$1</span></div>';
+ $output->wrapWikiMsg( $wrap, [ 'tpt-translation-intro-fuzzy' ] );
+ }
+ }
}
- /// Hook: SpecialPage_initList
+ /**
+ * Hook: SpecialPage_initList
+ * @param array &$list
+ * @return true
+ */
public static function replaceMovePage( &$list ) {
$list['Movepage'] = 'SpecialPageTranslationMovePage';
return true;
}
- /// Hook: getUserPermissionsErrorsExpensive
+ /**
+ * Hook: getUserPermissionsErrorsExpensive
+ * @param Title $title
+ * @param User $user
+ * @param string $action
+ * @param array &$result
+ * @return bool
+ */
public static function lockedPagesCheck( Title $title, User $user, $action, &$result ) {
if ( $action === 'read' ) {
return true;
@@ -795,9 +1091,8 @@ class PageTranslationHooks {
$cache = wfGetCache( CACHE_ANYTHING );
$key = wfMemcKey( 'pt-lock', sha1( $title->getPrefixedText() ) );
- // At least memcached mangles true to "1"
- if ( $cache->get( $key ) !== false ) {
- $result = array( 'pt-locked-page' );
+ if ( $cache->get( $key ) === 'locked' ) {
+ $result = [ 'pt-locked-page' ];
return false;
}
@@ -805,9 +1100,16 @@ class PageTranslationHooks {
return true;
}
- /// Hook: SkinSubPageSubtitle
- public static function replaceSubtitle( &$subpages, $skin = null, OutputPage $out ) {
- if ( !TranslatablePage::isTranslationPage( $out->getTitle() )
+ /**
+ * Hook: SkinSubPageSubtitle
+ * @param array &$subpages
+ * @param Skin|null $skin
+ * @param OutputPage $out
+ * @return bool
+ */
+ public static function replaceSubtitle( &$subpages, Skin $skin = null, OutputPage $out ) {
+ $isTranslationPage = TranslatablePage::isTranslationPage( $out->getTitle() );
+ if ( !$isTranslationPage
&& !TranslatablePage::isSourcePage( $out->getTitle() )
) {
return true;
@@ -816,23 +1118,24 @@ class PageTranslationHooks {
// Copied from Skin::subPageSubtitle()
if ( $out->isArticle() && MWNamespace::hasSubpages( $out->getTitle()->getNamespace() ) ) {
$ptext = $out->getTitle()->getPrefixedText();
- if ( preg_match( '/\//', $ptext ) ) {
+ if ( strpos( $ptext, '/' ) !== false ) {
$links = explode( '/', $ptext );
array_pop( $links );
- // Also pop of one extra for language code is needed
- if ( TranslatablePage::isTranslationPage( $out->getTitle() ) ) {
+ if ( $isTranslationPage ) {
+ // Also remove language code page
array_pop( $links );
}
$c = 0;
$growinglink = '';
$display = '';
+ $lang = $skin->getLanguage();
foreach ( $links as $link ) {
$growinglink .= $link;
$display .= $link;
$linkObj = Title::newFromText( $growinglink );
- if ( is_object( $linkObj ) && $linkObj->exists() ) {
+ if ( is_object( $linkObj ) && $linkObj->isKnown() ) {
$getlink = Linker::linkKnown(
SpecialPage::getTitleFor( 'MyLanguage', $growinglink ),
htmlspecialchars( $display )
@@ -841,10 +1144,9 @@ class PageTranslationHooks {
$c++;
if ( $c > 1 ) {
- $subpages .= wfMessage( 'pipe-separator' )->plain();
+ $subpages .= $lang->getDirMarkEntity() . $skin->msg( 'pipe-separator' )->escaped();
} else {
- // This one is stupid imho, doesn't work with chihuahua
- // $subpages .= '&lt; ';
+ $subpages .= '&lt; ';
}
$subpages .= $getlink;
@@ -863,34 +1165,13 @@ class PageTranslationHooks {
return true;
}
- /// Hook: SpecialTranslate::executeTask
- public static function sourceExport( RequestContext $context,
- TranslateTask $task = null, MessageGroup $group, array $options
- ) {
- if ( $task || $options['taction'] !== 'export'
- || !$group instanceof WikiPageMessageGroup
- ) {
- return true;
- }
-
- $page = TranslatablePage::newFromTitle( $group->getTitle() );
- $collection = $group->initCollection( $options['language'] );
- $collection->loadTranslations( DB_MASTER );
- $text = $page->getParse()->getTranslationPageText( $collection );
- $display = $page->getPageDisplayTitle( $options['language'] );
- if ( $display ) {
- $text = "{{DISPLAYTITLE:$display}}$text";
- }
- $output = Html::element( 'textarea', array( 'rows' => 25 ), $text );
- $context->getOutput()->addHTML( $output );
-
- return false;
- }
-
/**
* Converts the edit tab (if exists) for translation pages to translate tab.
* Hook: SkinTemplateNavigation
* @since 2013.06
+ * @param Skin $skin
+ * @param array &$tabs
+ * @return true
*/
public static function translateTab( Skin $skin, array &$tabs ) {
$title = $skin->getTitle();
@@ -917,17 +1198,26 @@ class PageTranslationHooks {
* Hook to update source and destination translation pages on moving translation units
* Hook: TitleMoveComplete
* @since 2014.08
+ * @param Title $ot
+ * @param Title $nt
+ * @param User $user
+ * @param int $oldid
+ * @param int $newid
+ * @param string $reason
*/
public static function onMoveTranslationUnits( Title $ot, Title $nt, User $user,
$oldid, $newid, $reason
) {
- // Do the update only once. In case running by job queue, the update is not done here
- if ( self::$jobQueueRunning ) {
+ // TranslatablePageMoveJob takes care of handling updates because it performs
+ // a lot of moves at once. As a performance optimization, skip this hook if
+ // we detect moves from that job. As there isn't a good way to pass information
+ // to this hook what originated the move, we use some heuristics.
+ if ( defined( 'MEDIAWIKI_JOB_RUNNER' ) && $user->equals( FuzzyBot::getUser() ) ) {
return;
}
$groupLast = null;
- foreach ( array( $ot, $nt ) as $title ) {
+ foreach ( [ $ot, $nt ] as $title ) {
$handle = new MessageHandle( $title );
if ( !$handle->isValid() ) {
continue;
@@ -959,4 +1249,79 @@ class PageTranslationHooks {
}
}
}
+
+ /**
+ * Hook to update translation page on deleting a translation unit
+ * Hook: ArticleDeleteComplete
+ * @since 2016.05
+ * @param WikiPage &$unit
+ * @param User &$user
+ * @param string $reason
+ * @param int $id
+ * @param Content $content
+ * @param ManualLogEntry $logEntry
+ */
+ public static function onDeleteTranslationUnit( WikiPage &$unit, User &$user, $reason,
+ $id, $content, $logEntry
+ ) {
+ // Do the update. In case job queue is doing the work, the update is not done here
+ if ( self::$jobQueueRunning ) {
+ return;
+ }
+ $title = $unit->getTitle();
+
+ $handle = new MessageHandle( $title );
+ if ( !$handle->isValid() ) {
+ return;
+ }
+
+ $group = $handle->getGroup();
+ if ( !$group instanceof WikiPageMessageGroup ) {
+ return;
+ }
+
+ // There could be interfaces which may allow mass deletion (eg. Nuke). Since they could
+ // delete many units in one request, it may do several unnecessary edits and cause several
+ // other unnecessary updates to be done slowing down the user. To avoid that, we push this
+ // to a queue that is run after the current transaction is committed so that we can see the
+ // version that is after all the deletions has been done. This allows us to do just one edit
+ // per translation page after the current deletions has been done. This is sort of hackish
+ // but this is better user experience and is also more efficent.
+ static $queuedPages = [];
+ $target = $group->getTitle();
+ $langCode = $handle->getCode();
+ $targetPage = $target->getSubpage( $langCode )->getPrefixedText();
+
+ if ( !isset( $queuedPages[ $targetPage ] ) ) {
+ $queuedPages[ $targetPage ] = true;
+ $fname = __METHOD__;
+
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->onTransactionIdle( function () use ( $dbw, $queuedPages, $targetPage,
+ $target, $handle, $langCode, $user, $reason, $fname
+ ) {
+ $dbw->startAtomic( $fname );
+
+ $page = TranslatablePage::newFromTitle( $target );
+
+ MessageGroupStats::forItem(
+ $page->getMessageGroupId(),
+ $langCode,
+ MessageGroupStats::FLAG_NO_CACHE
+ );
+
+ if ( !$handle->isDoc() ) {
+ // Assume that $user and $reason for the first deletion is the same for all
+ self::updateTranslationPage( $page, $langCode, $user, 0, $reason );
+ }
+
+ // If a unit was deleted after the edit here is done, this allows us
+ // to add the page back to the queue again and so we can make another
+ // edit here with the latest changes.
+ unset( $queuedPages[ $targetPage ] );
+
+ $dbw->endAtomic( $fname );
+ } );
+ }
+ }
}
diff --git a/www/wiki/extensions/Translate/tag/PageTranslationLogFormatter.php b/www/wiki/extensions/Translate/tag/PageTranslationLogFormatter.php
index a2362c94..7e0d4938 100644
--- a/www/wiki/extensions/Translate/tag/PageTranslationLogFormatter.php
+++ b/www/wiki/extensions/Translate/tag/PageTranslationLogFormatter.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -22,7 +22,7 @@ class PageTranslationLogFormatter extends LogFormatter {
$targetPage = $this->makePageLink(
$this->entry->getTarget(),
- array( 'oldid' => $revision )
+ [ 'oldid' => $revision ]
);
$params[2] = Message::rawParam( $targetPage );
diff --git a/www/wiki/extensions/Translate/tag/SpecialPageMigration.php b/www/wiki/extensions/Translate/tag/SpecialPageMigration.php
new file mode 100644
index 00000000..dc2daac7
--- /dev/null
+++ b/www/wiki/extensions/Translate/tag/SpecialPageMigration.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Contains code for special page Special:PageMigration
+ *
+ * @file
+ * @author Pratik Lahoti
+ * @copyright Copyright © 2014-2015 Pratik Lahoti
+ * @license GPL-2.0-or-later
+ */
+
+class SpecialPageMigration extends SpecialPage {
+ public function __construct() {
+ parent::__construct( 'PageMigration', 'pagetranslation' );
+ }
+
+ protected function getGroupName() {
+ return 'wiki';
+ }
+
+ public function getDescription() {
+ return $this->msg( 'pagemigration' )->text();
+ }
+
+ public function execute( $par ) {
+ $request = $this->getRequest();
+ $output = $this->getOutput();
+ $this->setHeaders();
+ $this->checkPermissions();
+ $this->outputHeader( 'pagemigration-summary' );
+ $output->addModules( 'ext.translate.special.pagemigration' );
+ $output->addModuleStyles( [
+ 'ext.translate.special.pagemigration.styles',
+ 'jquery.uls.grid'
+ ] );
+ # Get request data from, e.g.
+ $param = $request->getText( 'param' );
+ # Do stuff
+ # ...
+ $out = '';
+ $out .= Html::openElement( 'div', [ 'class' => 'grid' ] );
+ $out .= Html::openElement( 'div', [ 'class' => 'mw-tpm-sp-error row',
+ 'id' => 'mw-tpm-sp-error-div' ] );
+ $out .= Html::element( 'div',
+ [ 'class' => 'mw-tpm-sp-error__message five columns hide' ] );
+ $out .= Html::closeElement( 'div' );
+ $out .= Html::openElement( 'form', [ 'class' => 'mw-tpm-sp-form row',
+ 'id' => 'mw-tpm-sp-primary-form', 'action' => '' ] );
+ $out .= Html::element( 'input', [ 'id' => 'pm-summary', 'type' => 'hidden',
+ 'value' => $this->msg( 'pm-summary-import' )->inContentLanguage()->text() ] );
+ $out .= "\n";
+ $out .= Html::element( 'input', [ 'id' => 'title', 'class' => 'mw-searchInput mw-ui-input',
+ 'data-mw-searchsuggest' => FormatJson::encode( [
+ 'wrapAsLink' => false
+ ] ), 'placeholder' => $this->msg( 'pm-pagetitle-placeholder' )->text() ] );
+ $out .= "\n";
+ $out .= Html::element( 'input', [ 'id' => 'action-import',
+ 'class' => 'mw-ui-button mw-ui-progressive', 'type' => 'button',
+ 'value' => $this->msg( 'pm-import-button-label' )->text() ] );
+ $out .= "\n";
+ $out .= Html::element( 'input', [ 'id' => 'action-save',
+ 'class' => 'mw-ui-button mw-ui-progressive hide', 'type' => 'button',
+ 'value' => $this->msg( 'pm-savepages-button-label' )->text() ] );
+ $out .= "\n";
+ $out .= Html::element( 'input', [ 'id' => 'action-cancel',
+ 'class' => 'mw-ui-button mw-ui-quiet hide', 'type' => 'button',
+ 'value' => $this->msg( 'pm-cancel-button-label' )->text() ] );
+ $out .= Html::closeElement( 'form' );
+ $out .= Html::element( 'div', [ 'class' => 'mw-tpm-sp-instructions hide' ] );
+ $out .= Html::openElement( 'div', [ 'class' => 'mw-tpm-sp-unit-listing' ] );
+ $out .= Html::closeElement( 'div' );
+ $out .= Html::closeElement( 'div' );
+
+ $output->addHTML( $out );
+
+ $nojs = Html::element(
+ 'div',
+ [ 'class' => 'tux-nojs errorbox' ],
+ $this->msg( 'tux-nojs' )->plain()
+ );
+ $output->addHTML( $nojs );
+ }
+}
diff --git a/www/wiki/extensions/Translate/tag/SpecialPagePreparation.php b/www/wiki/extensions/Translate/tag/SpecialPagePreparation.php
new file mode 100644
index 00000000..cd854e06
--- /dev/null
+++ b/www/wiki/extensions/Translate/tag/SpecialPagePreparation.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Contains code for special page Special:PagePreparation
+ *
+ * @file
+ * @author Pratik Lahoti
+ * @copyright Copyright © 2014 Pratik Lahoti
+ * @license GPL-2.0-or-later
+ */
+
+class SpecialPagePreparation extends SpecialPage {
+ public function __construct() {
+ parent::__construct( 'PagePreparation', 'pagetranslation' );
+ }
+
+ protected function getGroupName() {
+ return 'wiki';
+ }
+
+ public function execute( $par ) {
+ $request = $this->getRequest();
+ $output = $this->getOutput();
+ $this->setHeaders();
+ $this->checkPermissions();
+
+ $inputValue = htmlspecialchars( $request->getText( 'page', $par ) );
+ $pagenamePlaceholder = $this->msg( 'pp-pagename-placeholder' )->escaped();
+ $prepareButtonValue = $this->msg( 'pp-prepare-button-label' )->escaped();
+ $saveButtonValue = $this->msg( 'pp-save-button-label' )->escaped();
+ $cancelButtonValue = $this->msg( 'pp-cancel-button-label' )->escaped();
+ $summaryValue = $this->msg( 'pp-save-summary' )->inContentLanguage()->escaped();
+ $output->addModules( 'ext.translate.special.pagepreparation' );
+ $output->addModuleStyles( [
+ 'ext.translate.special.pagepreparation.styles',
+ 'jquery.uls.grid'
+ ] );
+
+ $out = '';
+ $diff = new DifferenceEngine( $this->getContext() );
+ $diffHeader = $diff->addHeader( ' ', $this->msg( 'pp-diff-old-header' )->escaped(),
+ $this->msg( 'pp-diff-new-header' )->escaped() );
+
+ $out = <<<HTML
+<div class="grid">
+ <form class="mw-tpp-sp-form row" name="mw-tpp-sp-input-form" action="">
+ <input id="pp-summary" type="hidden" value="{$summaryValue}" />
+ <input name="page" id="page" class="mw-searchInput mw-ui-input"
+ placeholder="{$pagenamePlaceholder}" value="{$inputValue}"/>
+ <button id="action-prepare" class="mw-ui-button mw-ui-progressive" type="button">
+ {$prepareButtonValue}</button>
+ <button id="action-save" class="mw-ui-button mw-ui-progressive hide" type="button">
+ {$saveButtonValue}</button>
+ <button id="action-cancel" class="mw-ui-button mw-ui-quiet hide" type="button">
+ {$cancelButtonValue}</button>
+ </form>
+ <div class="messageDiv hide"></div>
+ <div class="divDiff hide">
+ {$diffHeader}
+ </div>
+</div>
+HTML;
+ $output->addHTML( $out );
+
+ $nojs = Html::element(
+ 'div',
+ [ 'class' => 'tux-nojs errorbox' ],
+ $this->msg( 'tux-nojs' )->plain()
+ );
+ $output->addHTML( $nojs );
+ }
+}
diff --git a/www/wiki/extensions/Translate/tag/SpecialPageTranslation.php b/www/wiki/extensions/Translate/tag/SpecialPageTranslation.php
index a0c1896d..377d6c91 100644
--- a/www/wiki/extensions/Translate/tag/SpecialPageTranslation.php
+++ b/www/wiki/extensions/Translate/tag/SpecialPageTranslation.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @author Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -82,11 +82,11 @@ class SpecialPageTranslation extends SpecialPage {
if ( $action === 'unlink' ) {
$this->showUnlinkConfirmation( $title, $target );
} else {
- $params = array(
+ $params = [
'do' => $action,
'target' => $title->getPrefixedText(),
'revision' => $revision
- );
+ ];
$this->showGenericConfirmation( $params );
}
@@ -137,7 +137,7 @@ class SpecialPageTranslation extends SpecialPage {
if ( !$status->isOK() ) {
$out->wrapWikiMsg(
'<div class="errorbox">$1</div>',
- array( 'tpt-edit-failed', $status->getWikiText() )
+ [ 'tpt-edit-failed', $status->getWikiText() ]
);
return;
@@ -147,7 +147,7 @@ class SpecialPageTranslation extends SpecialPage {
$this->unmarkPage( $page, $user );
$out->wrapWikiMsg(
'<div class="successbox">$1</div>',
- array( 'tpt-unmarked', $title->getPrefixedText() )
+ [ 'tpt-unmarked', $title->getPrefixedText() ]
);
$this->listPages();
@@ -159,7 +159,7 @@ class SpecialPageTranslation extends SpecialPage {
$this->unmarkPage( $page, $user );
$out->wrapWikiMsg(
'<div class="successbox">$1</div>',
- array( 'tpt-unmarked', $title->getPrefixedText() )
+ [ 'tpt-unmarked', $title->getPrefixedText() ]
);
$this->listPages();
@@ -171,6 +171,8 @@ class SpecialPageTranslation extends SpecialPage {
$request = $this->getRequest();
$out = $this->getOutput();
+ $out->addModuleStyles( 'ext.translate.special.pagetranslation.styles' );
+
if ( $revision === 0 ) {
// Get the latest revision
$revision = (int)$title->getLatestRevID();
@@ -180,7 +182,7 @@ class SpecialPageTranslation extends SpecialPage {
if ( !$page instanceof TranslatablePage ) {
$out->wrapWikiMsg(
'<div class="errorbox">$1</div>',
- array( 'tpt-notsuitable', $title->getPrefixedText(), $revision )
+ [ 'tpt-notsuitable', $title->getPrefixedText(), $revision ]
);
return;
@@ -188,22 +190,23 @@ class SpecialPageTranslation extends SpecialPage {
if ( $revision !== (int)$title->getLatestRevID() ) {
// We do want to notify the reviewer if the underlying page changes during review
- $target = $title->getFullURL( array( 'oldid' => $revision ) );
+ $target = $title->getFullURL( [ 'oldid' => $revision ] );
$link = "<span class='plainlinks'>[$target $revision]</span>";
$out->wrapWikiMsg(
'<div class="warningbox">$1</div>',
- array( 'tpt-oldrevision', $title->getPrefixedText(), $link )
+ [ 'tpt-oldrevision', $title->getPrefixedText(), $link ]
);
$this->listPages();
return;
}
- $lastrev = $page->getMarkedTag();
- if ( $lastrev !== false && $lastrev === $revision ) {
+ $lastRev = $page->getMarkedTag();
+ $firstMark = $lastRev === false;
+ if ( !$firstMark && $lastRev === $revision ) {
$out->wrapWikiMsg(
'<div class="warningbox">$1</div>',
- array( 'tpt-already-marked' )
+ [ 'tpt-already-marked' ]
);
$this->listPages();
@@ -219,7 +222,7 @@ class SpecialPageTranslation extends SpecialPage {
// Check if user wants to translate title
// If not, remove it from the list of sections
if ( !$request->getCheck( 'translatetitle' ) ) {
- $sections = array_filter( $sections, function( $s ) {
+ $sections = array_filter( $sections, function ( $s ) {
return $s->id !== 'Page display title';
} );
}
@@ -227,9 +230,9 @@ class SpecialPageTranslation extends SpecialPage {
$err = $this->markForTranslation( $page, $sections );
if ( $err ) {
- call_user_func_array( array( $out, 'addWikiMsg' ), $err );
+ call_user_func_array( [ $out, 'addWikiMsg' ], $err );
} else {
- $this->showSuccess( $page );
+ $this->showSuccess( $page, $firstMark );
$this->listPages();
}
@@ -240,38 +243,46 @@ class SpecialPageTranslation extends SpecialPage {
}
/**
+ * Displays success message and other instructions after a page has been marked for translation.
* @param TranslatablePage $page
+ * @param bool $firstMark true if it is the first time the page is being marked for translation.
*/
- public function showSuccess( TranslatablePage $page ) {
+ public function showSuccess( TranslatablePage $page, $firstMark = false ) {
$titleText = $page->getTitle()->getPrefixedText();
$num = $this->getLanguage()->formatNum( $page->getParse()->countSections() );
- $link = SpecialPage::getTitleFor( 'Translate' )->getFullURL( array(
+ $link = SpecialPage::getTitleFor( 'Translate' )->getFullURL( [
'group' => $page->getMessageGroupId(),
'action' => 'page',
'filter' => '',
- ) );
+ ] );
$this->getOutput()->wrapWikiMsg(
'<div class="successbox">$1</div>',
- array( 'tpt-saveok', $titleText, $num, $link )
+ [ 'tpt-saveok', $titleText, $num, $link ]
);
+ // If the page is being marked for translation for the first time
+ // add a link to Special:PageMigration.
+ if ( $firstMark ) {
+ $this->getOutput()->addWikiMsg( 'tpt-saveok-first' );
+ }
+
// If TranslationNotifications is installed, and the user can notify
// translators, add a convenience link.
if ( method_exists( 'SpecialNotifyTranslators', 'execute' ) &&
$this->getUser()->isAllowed( SpecialNotifyTranslators::$right )
) {
$link = SpecialPage::getTitleFor( 'NotifyTranslators' )->getFullURL(
- array( 'tpage' => $page->getTitle()->getArticleID() ) );
+ [ 'tpage' => $page->getTitle()->getArticleID() ] );
$this->getOutput()->addWikiMsg( 'tpt-offer-notify', $link );
}
}
protected function showGenericConfirmation( array $params ) {
- $formParams = array(
+ $formParams = [
'method' => 'post',
'action' => $this->getPageTitle()->getFullURL(),
- );
+ ];
$params['title'] = $this->getPageTitle()->getPrefixedText();
$params['token'] = $this->getUser()->getEditToken();
@@ -287,17 +298,17 @@ class SpecialPageTranslation extends SpecialPage {
$this->msg( 'tpt-generic-confirm' )->parseAsBlock() .
Xml::submitButton(
$this->msg( 'tpt-generic-button' )->text(),
- array( 'class' => 'mw-ui-button mw-ui-primary' )
+ [ 'class' => 'mw-ui-button mw-ui-progressive' ]
) .
Html::closeElement( 'form' )
);
}
protected function showUnlinkConfirmation( Title $target ) {
- $formParams = array(
+ $formParams = [
'method' => 'post',
'action' => $this->getPageTitle()->getFullURL(),
- );
+ ];
$this->getOutput()->addHTML(
Html::openElement( 'form', $formParams ) .
@@ -308,7 +319,7 @@ class SpecialPageTranslation extends SpecialPage {
$this->msg( 'tpt-unlink-confirm', $target->getPrefixedText() )->parseAsBlock() .
Xml::submitButton(
$this->msg( 'tpt-unlink-button' )->text(),
- array( 'class' => 'mw-ui-button mw-ui-destructive' )
+ [ 'class' => 'mw-ui-button mw-ui-destructive' ]
) .
Html::closeElement( 'form' )
);
@@ -327,34 +338,34 @@ class SpecialPageTranslation extends SpecialPage {
public function loadPagesFromDB() {
$dbr = TranslateUtils::getSafeReadDB();
- $tables = array( 'page', 'revtag' );
- $vars = array(
+ $tables = [ 'page', 'revtag' ];
+ $vars = [
'page_id',
'page_title',
'page_namespace',
'page_latest',
'MAX(rt_revision) AS rt_revision',
'rt_type'
- );
- $conds = array(
+ ];
+ $conds = [
'page_id=rt_page',
- 'rt_type' => array( RevTag::getType( 'tp:mark' ), RevTag::getType( 'tp:tag' ) ),
- );
- $options = array(
+ 'rt_type' => [ RevTag::getType( 'tp:mark' ), RevTag::getType( 'tp:tag' ) ],
+ ];
+ $options = [
'ORDER BY' => 'page_namespace, page_title',
'GROUP BY' => 'page_id, rt_type',
- );
+ ];
$res = $dbr->select( $tables, $vars, $conds, __METHOD__, $options );
return $res;
}
protected function buildPageArray( /*db result*/$res ) {
- $pages = array();
+ $pages = [];
foreach ( $res as $r ) {
// We have multiple rows for same page, because of different tags
if ( !isset( $pages[$r->page_id] ) ) {
- $pages[$r->page_id] = array();
+ $pages[$r->page_id] = [];
$title = Title::newFromRow( $r );
$pages[$r->page_id]['title'] = $title;
$pages[$r->page_id]['latest'] = (int)$title->getLatestRevID();
@@ -372,12 +383,12 @@ class SpecialPageTranslation extends SpecialPage {
* @return array
*/
protected function classifyPages( array $in ) {
- $out = array(
- 'proposed' => array(),
- 'active' => array(),
- 'broken' => array(),
- 'discouraged' => array(),
- );
+ $out = [
+ 'proposed' => [],
+ 'active' => [],
+ 'broken' => [],
+ 'discouraged' => [],
+ ];
foreach ( $in as $index => $page ) {
if ( !isset( $page['tp:mark'] ) ) {
@@ -411,13 +422,21 @@ class SpecialPageTranslation extends SpecialPage {
$out = $this->getOutput();
$res = $this->loadPagesFromDB();
- $allpages = $this->buildPageArray( $res );
- if ( !count( $allpages ) ) {
+ $allPages = $this->buildPageArray( $res );
+ if ( !count( $allPages ) ) {
$out->addWikiMsg( 'tpt-list-nopages' );
return;
}
- $types = $this->classifyPages( $allpages );
+
+ $lb = new LinkBatch();
+ $lb->setCaller( __METHOD__ );
+ foreach ( $allPages as $page ) {
+ $lb->addObj( $page['title'] );
+ }
+ $lb->execute();
+
+ $types = $this->classifyPages( $allPages );
$pages = $types['proposed'];
if ( count( $pages ) ) {
@@ -486,7 +505,7 @@ class SpecialPageTranslation extends SpecialPage {
* @return string
*/
protected function actionLinks( array $page, $type ) {
- $actions = array();
+ $actions = [];
/**
* @var Title $title
*/
@@ -494,57 +513,57 @@ class SpecialPageTranslation extends SpecialPage {
$user = $this->getUser();
// Class to allow one-click POSTs
- $js = array( 'class' => 'mw-translate-jspost' );
+ $js = [ 'class' => 'mw-translate-jspost' ];
if ( $user->isAllowed( 'pagetranslation' ) ) {
$pending = $type === 'active' && $page['latest'] !== $page['tp:mark'];
if ( $type === 'proposed' || $pending ) {
- $actions[] = Linker::link(
+ $actions[] = Linker::linkKnown(
$this->getPageTitle(),
$this->msg( 'tpt-rev-mark' )->escaped(),
- array( 'title' => $this->msg( 'tpt-rev-mark-tooltip' )->text() ),
- array(
+ [ 'title' => $this->msg( 'tpt-rev-mark-tooltip' )->text() ],
+ [
'do' => 'mark',
'target' => $title->getPrefixedText(),
'revision' => $title->getLatestRevID(),
- )
+ ]
);
}
if ( $type === 'active' ) {
- $actions[] = Linker::link(
+ $actions[] = Linker::linkKnown(
$this->getPageTitle(),
$this->msg( 'tpt-rev-discourage' )->escaped(),
- array( 'title' => $this->msg( 'tpt-rev-discourage-tooltip' )->text() ) + $js,
- array(
+ [ 'title' => $this->msg( 'tpt-rev-discourage-tooltip' )->text() ] + $js,
+ [
'do' => 'discourage',
'target' => $title->getPrefixedText(),
'revision' => -1,
- )
+ ]
);
} elseif ( $type === 'discouraged' ) {
- $actions[] = Linker::link(
+ $actions[] = Linker::linkKnown(
$this->getPageTitle(),
$this->msg( 'tpt-rev-encourage' )->escaped(),
- array( 'title' => $this->msg( 'tpt-rev-encourage-tooltip' )->text() ) + $js,
- array(
+ [ 'title' => $this->msg( 'tpt-rev-encourage-tooltip' )->text() ] + $js,
+ [
'do' => 'encourage',
'target' => $title->getPrefixedText(),
'revision' => -1,
- )
+ ]
);
}
if ( $type !== 'proposed' ) {
- $actions[] = Linker::link(
+ $actions[] = Linker::linkKnown(
$this->getPageTitle(),
$this->msg( 'tpt-rev-unmark' )->escaped(),
- array( 'title' => $this->msg( 'tpt-rev-unmark-tooltip' )->text() ),
- array(
+ [ 'title' => $this->msg( 'tpt-rev-unmark-tooltip' )->text() ],
+ [
'do' => $type === 'broken' ? 'unmark' : 'unlink',
'target' => $title->getPrefixedText(),
'revision' => -1,
- )
+ ]
);
}
}
@@ -557,18 +576,18 @@ class SpecialPageTranslation extends SpecialPage {
return Html::rawElement(
'span',
- array( 'class' => 'mw-tpt-actions' ),
+ [ 'class' => 'mw-tpt-actions' ],
$this->msg( 'parentheses' )->rawParams( $flattened )->escaped()
);
}
/**
* @param TranslatablePage $page
- * @param bool $error
+ * @param bool &$error
* @return TPSection[] The array has string keys.
*/
public function checkInput( TranslatablePage $page, &$error ) {
- $usedNames = array();
+ $usedNames = [];
$highest = (int)TranslateMetadata::get( $page->getMessageGroupId(), 'maxid' );
$parse = $page->getParse();
$sections = $parse->getSectionsForSave( $highest );
@@ -594,19 +613,17 @@ class SpecialPageTranslation extends SpecialPage {
* @param TPSection[] $sections
*/
public function showPage( TranslatablePage $page, array $sections ) {
- global $wgContLang;
-
$out = $this->getOutput();
$out->setSubtitle( Linker::link( $page->getTitle() ) );
$out->addWikiMsg( 'tpt-showpage-intro' );
- $formParams = array(
+ $formParams = [
'method' => 'post',
'action' => $this->getPageTitle()->getFullURL(),
'class' => 'mw-tpt-sp-markform',
- );
+ ];
$out->addHTML(
Xml::openElement( 'form', $formParams ) .
@@ -627,6 +644,8 @@ class SpecialPageTranslation extends SpecialPage {
// If the page is marked for translation the first time, default to checked.
$defaultChecked = $page->hasPageDisplayTitle();
+ $sourceLanguage = Language::factory( $page->getSourceLanguageCode() );
+
foreach ( $sections as $s ) {
if ( $s->name === 'Page display title' ) {
// Set section type as new if title previously unchecked
@@ -651,9 +670,7 @@ class SpecialPageTranslation extends SpecialPage {
if ( $s->type === 'changed' ) {
$hasChanges = true;
$diff = new DifferenceEngine;
- if ( method_exists( 'DifferenceEngine', 'setTextLanguage' ) ) {
- $diff->setTextLanguage( $wgContLang );
- }
+ $diff->setTextLanguage( $sourceLanguage );
$diff->setReducedLineNumbers();
$oldContent = ContentHandler::makeContent( $s->getOldText(), $diff->getTitle() );
@@ -678,11 +695,12 @@ class SpecialPageTranslation extends SpecialPage {
}
# For changed text, the language is set by $diff->setTextLanguage()
- $lang = $s->type === 'changed' ? null : $wgContLang;
+ $lang = $s->type === 'changed' ? null : $sourceLanguage;
$out->addHTML( MessageWebImporter::makeSectionElement(
$name,
$s->type,
- $text, $lang
+ $text,
+ $lang
) );
}
@@ -701,7 +719,7 @@ class SpecialPageTranslation extends SpecialPage {
$name,
$s->type,
$text,
- $wgContLang
+ $sourceLanguage
) );
}
}
@@ -720,9 +738,7 @@ class SpecialPageTranslation extends SpecialPage {
$out->wrapWikiMsg( '==$1==', 'tpt-sections-template' );
$diff = new DifferenceEngine;
- if ( method_exists( 'DifferenceEngine', 'setTextLanguage' ) ) {
- $diff->setTextLanguage( $wgContLang );
- }
+ $diff->setTextLanguage( $sourceLanguage );
$oldContent = ContentHandler::makeContent( $oldTemplate, $diff->getTitle() );
$newContent = ContentHandler::makeContent( $newTemplate, $diff->getTitle() );
@@ -736,7 +752,7 @@ class SpecialPageTranslation extends SpecialPage {
$diff->showDiffStyle();
$diff->setReducedLineNumbers();
- $contentParams = array( 'class' => 'mw-tpt-sp-content' );
+ $contentParams = [ 'class' => 'mw-tpt-sp-content' ];
$out->addHTML( Xml::tags( 'div', $contentParams, $text ) );
}
}
@@ -832,7 +848,7 @@ class SpecialPageTranslation extends SpecialPage {
);
if ( !$status->isOK() ) {
- return array( 'tpt-edit-failed', $status->getWikiText() );
+ return [ 'tpt-edit-failed', $status->getWikiText() ];
}
$newrevision = $status->value['revision'];
@@ -849,8 +865,8 @@ class SpecialPageTranslation extends SpecialPage {
$newrevision = $page->getTitle()->getLatestRevID();
}
- $inserts = array();
- $changed = array();
+ $inserts = [];
+ $changed = [];
$maxid = (int)TranslateMetadata::get( $page->getMessageGroupId(), 'maxid' );
$pageId = $page->getTitle()->getArticleID();
@@ -862,22 +878,22 @@ class SpecialPageTranslation extends SpecialPage {
$changed[] = $s->name;
if ( $this->getRequest()->getCheck( "tpt-sect-{$s->id}-action-nofuzzy" ) ) {
- // This will be checked by TranslationsUpdateJob::getTranslationUnitJobs()
+ // TranslationsUpdateJob will only fuzzy when type is changed
$s->type = 'old';
}
- $inserts[] = array(
+ $inserts[] = [
'trs_page' => $pageId,
'trs_key' => $s->name,
'trs_text' => $s->getText(),
'trs_order' => $index
- );
+ ];
}
$dbw = wfGetDB( DB_MASTER );
$dbw->delete(
'translate_sections',
- array( 'trs_page' => $page->getTitle()->getArticleID() ),
+ [ 'trs_page' => $page->getTitle()->getArticleID() ],
__METHOD__
);
$dbw->insert( 'translate_sections', $inserts, __METHOD__ );
@@ -886,10 +902,7 @@ class SpecialPageTranslation extends SpecialPage {
$page->addMarkedTag( $newrevision );
MessageGroups::singleton()->recache();
- $job = new TranslationsUpdateJob(
- $page->getTitle(),
- array( 'sections' => $sections )
- );
+ $job = TranslationsUpdateJob::newFromPage( $page, $sections );
JobQueueGroup::singleton()->push( $job );
// Logging
@@ -898,10 +911,10 @@ class SpecialPageTranslation extends SpecialPage {
$entry = new ManualLogEntry( 'pagetranslation', 'mark' );
$entry->setPerformer( $this->getUser() );
$entry->setTarget( $page->getTitle() );
- $entry->setParameters( array(
+ $entry->setParameters( [
'revision' => $newrevision,
'changed' => count( $changed ),
- ) );
+ ] );
$logid = $entry->insert();
$entry->publish( $logid );
@@ -949,11 +962,11 @@ class SpecialPageTranslation extends SpecialPage {
TranslateMetadata::set( $groupId, 'priorityreason', $npReason );
if ( $opLangs !== $npLangs || $opForce !== $npForce || $opReason !== $npReason ) {
- $params = array(
+ $params = [
'languages' => $npLangs,
'force' => $npForce,
'reason' => $npReason,
- );
+ ];
$entry = new ManualLogEntry( 'pagetranslation', 'prioritylanguages' );
$entry->setPerformer( $this->getUser() );
@@ -973,7 +986,7 @@ class SpecialPageTranslation extends SpecialPage {
* @since 2014.09
*/
public static function getStrippedSourcePageText( TPParse $parse ) {
- $text = $parse->getTranslationPageText( array() );
+ $text = $parse->getTranslationPageText( [] );
$text = preg_replace( '~<languages\s*/>\n?~s', '', $text );
return $text;
}
diff --git a/www/wiki/extensions/Translate/tag/SpecialPageTranslationDeletePage.php b/www/wiki/extensions/Translate/tag/SpecialPageTranslationDeletePage.php
index 713393da..168d574a 100644
--- a/www/wiki/extensions/Translate/tag/SpecialPageTranslationDeletePage.php
+++ b/www/wiki/extensions/Translate/tag/SpecialPageTranslationDeletePage.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -63,7 +63,7 @@ class SpecialPageTranslationDeletePage extends SpecialPage {
// Yes, the use of getVal() and getText() is wanted, see bug T22365
$this->text = $request->getVal( 'wpTitle', $par );
$this->title = Title::newFromText( $this->text );
- $this->reason = $request->getText( 'reason' );
+ $this->reason = $request->getText( 'wpReason' );
// Checkboxes that default being checked are tricky
$this->doSubpages = $request->getBool( 'subpages', !$request->wasPosted() );
@@ -176,57 +176,33 @@ class SpecialPageTranslationDeletePage extends SpecialPage {
protected function showForm() {
$this->getOutput()->addWikiMsg( 'pt-deletepage-intro' );
- $subaction = array( 'name' => 'subaction' );
- $formParams = array(
- 'method' => 'post',
- 'action' => $this->getPageTitle( $this->text )->getLocalURL()
- );
-
- $form = array();
- $form[] = Xml::fieldset( $this->msg( 'pt-deletepage-any-legend' )->text() );
- $form[] = Html::openElement( 'form', $formParams );
- $form[] = Html::hidden( 'wpEditToken', $this->getUser()->getEditToken() );
- $this->addInputLabel(
- $form,
- $this->msg( 'pt-deletepage-current' )->text(),
- 'wpTitle',
- 30,
- $this->text
- );
- $this->addInputLabel(
- $form,
- $this->msg( 'pt-deletepage-reason' )->text(),
- 'reason',
- 60,
- $this->reason
- );
- $form[] = Xml::submitButton(
- $this->msg( 'pt-deletepage-action-check' )->text(),
- $subaction
- );
- $form[] = Xml::closeElement( 'form' );
- $form[] = Xml::closeElement( 'fieldset' );
- $this->getOutput()->addHTML( implode( "\n", $form ) );
- }
-
- /**
- * Shortcut for keeping the code at least a bit readable. Adds label and
- * input into $form array.
- *
- * @param array $form \list{String} Array where input element and label is appended.
- * @param string $label Label text.
- * @param string $name Name attribute.
- * @param int|bool $size Size attribute of the input element. Default false.
- * @param string|bool $text Text of the value attribute. Default false.
- * @param array $attribs Extra attributes. Default empty array.
- */
- protected function addInputLabel( &$form, $label, $name, $size = false, $text = false,
- array $attribs = array()
- ) {
- $br = Html::element( 'br' );
- list( $label, $input ) = Xml::inputLabelSep( $label, $name, $name, $size, $text, $attribs );
- $form[] = $label . $br;
- $form[] = $input . $br;
+ $formDescriptor = [
+ 'wpTitle' => [
+ 'type' => 'text',
+ 'name' => 'wpTitle',
+ 'label' => $this->msg( 'pt-deletepage-current' )->text(),
+ 'size' => 30,
+ 'default' => $this->text,
+ ],
+ 'wpReason' => [
+ 'type' => 'text',
+ 'name' => 'wpReason',
+ 'label' => $this->msg( 'pt-deletepage-reason' )->text(),
+ 'size' => 60,
+ 'default' => $this->reason,
+ ]
+ ];
+
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
+ $htmlForm
+ ->addHiddenField( 'wpEditToken', $this->getUser()->getEditToken() )
+ ->setMethod( 'post' )
+ ->setAction( $this->getPageTitle( $this->text )->getLocalURL() )
+ ->setSubmitName( 'subaction' )
+ ->setSubmitTextMsg( 'pt-deletepage-action-check' )
+ ->setWrapperLegendMsg( 'pt-deletepage-any-legend' )
+ ->prepareForm()
+ ->displayForm( false );
}
/**
@@ -235,32 +211,40 @@ class SpecialPageTranslationDeletePage extends SpecialPage {
*/
protected function showConfirmation() {
$out = $this->getOutput();
+ $count = 0;
$out->addWikiMsg( 'pt-deletepage-intro' );
- $count = 1; // Base page
-
$out->wrapWikiMsg( '== $1 ==', 'pt-deletepage-list-pages' );
if ( !$this->singleLanguage() ) {
- $this->printChangeLine( $this->title );
+ $count++;
+ TranslateUtils::addWikiTextAsInterface(
+ $out,
+ $this->getChangeLine( $this->title )
+ );
}
$out->wrapWikiMsg( '=== $1 ===', 'pt-deletepage-list-translation' );
$translationPages = $this->getTranslationPages();
+ $lines = [];
foreach ( $translationPages as $old ) {
$count++;
- $this->printChangeLine( $old );
+ $lines[] = $this->getChangeLine( $old );
}
+ TranslateUtils::addWikiTextAsInterface( $out, implode( "\n", $lines ) );
$out->wrapWikiMsg( '=== $1 ===', 'pt-deletepage-list-section' );
$sectionPages = $this->getSectionPages();
+ $lines = [];
foreach ( $sectionPages as $old ) {
$count++;
- $this->printChangeLine( $old );
+ $lines[] = $this->getChangeLine( $old );
}
+ TranslateUtils::addWikiTextAsInterface( $out, implode( "\n", $lines ) );
$out->wrapWikiMsg( '=== $1 ===', 'pt-deletepage-list-other' );
$subpages = $this->getSubpages();
+ $lines = [];
foreach ( $subpages as $old ) {
if ( TranslatablePage::isTranslationPage( $old ) ) {
continue;
@@ -270,75 +254,75 @@ class SpecialPageTranslationDeletePage extends SpecialPage {
$count++;
}
- $this->printChangeLine( $old, $this->doSubpages );
+ $lines[] = $this->getChangeLine( $old, $this->doSubpages );
}
+ TranslateUtils::addWikiTextAsInterface( $out, implode( "\n", $lines ) );
- $out->addWikiText( "----\n" );
+ TranslateUtils::addWikiTextAsInterface( $out, "----\n" );
$out->addWikiMsg( 'pt-deletepage-list-count', $this->getLanguage()->formatNum( $count ) );
- $br = Html::element( 'br' );
- $readonly = array( 'readonly' => 'readonly' );
-
- $subaction = array( 'name' => 'subaction' );
- $formParams = array(
- 'method' => 'post',
- 'action' => $this->getPageTitle( $this->text )->getLocalURL()
- );
+ $formDescriptor = [
+ 'wpTitle' => [
+ 'type' => 'text',
+ 'name' => 'wpTitle',
+ 'label' => $this->msg( 'pt-deletepage-current' )->text(),
+ 'size' => 30,
+ 'default' => $this->text,
+ 'readonly' => true,
+ ],
+ 'wpReason' => [
+ 'type' => 'text',
+ 'name' => 'wpReason',
+ 'label' => $this->msg( 'pt-deletepage-reason' )->text(),
+ 'size' => 60,
+ 'default' => $this->reason,
+ ],
+ 'subpages' => [
+ 'type' => 'check',
+ 'name' => 'subpages',
+ 'id' => 'mw-subpages',
+ 'label' => $this->msg( 'pt-deletepage-subpages' )->text(),
+ 'default' => $this->doSubpages,
+ ]
+ ];
+
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
- $form = array();
if ( $this->singleLanguage() ) {
- $form[] = Xml::fieldset( $this->msg( 'pt-deletepage-lang-legend' )->text() );
+ $htmlForm->setWrapperLegendMsg( 'pt-deletepage-lang-legend' );
} else {
- $form[] = Xml::fieldset( $this->msg( 'pt-deletepage-full-legend' )->text() );
+ $htmlForm->setWrapperLegendMsg( 'pt-deletepage-full-legend' );
}
- $form[] = Html::openElement( 'form', $formParams );
- $form[] = Html::hidden( 'wpEditToken', $this->getUser()->getEditToken() );
- $this->addInputLabel(
- $form,
- $this->msg( 'pt-deletepage-current' )->text(),
- 'wpTitle',
- 30,
- $this->text, $readonly );
- $this->addInputLabel(
- $form,
- $this->msg( 'pt-deletepage-reason' )->text(),
- 'reason',
- 60,
- $this->reason );
- $form[] = Xml::checkLabel(
- $this->msg( 'pt-deletepage-subpages' )->text(),
- 'subpages',
- 'mw-subpages',
- $this->doSubpages,
- $readonly
- ) . $br;
- $form[] = Xml::submitButton(
- $this->msg( 'pt-deletepage-action-perform' )->text(),
- $subaction
- );
- $form[] = Xml::submitButton(
- $this->msg( 'pt-deletepage-action-other' )->text(),
- $subaction
- );
- $form[] = Xml::closeElement( 'form' );
- $form[] = Xml::closeElement( 'fieldset' );
- $out->addHTML( implode( "\n", $form ) );
+
+ $htmlForm
+ ->addHiddenField( 'wpEditToken', $this->getUser()->getEditToken() )
+ ->setMethod( 'post' )
+ ->setAction( $this->getPageTitle( $this->text )->getLocalURL() )
+ ->setSubmitTextMsg( 'pt-deletepage-action-perform' )
+ ->setSubmitName( 'subaction' )
+ ->addButton( [
+ 'name' => 'subaction',
+ 'value' => $this->msg( 'pt-deletepage-action-other' )->text(),
+ ] )
+ ->prepareForm()
+ ->displayForm( false );
}
/**
- * @param $title Title
- * @param $enabled bool
+ * @param Title $title
+ * @param bool $enabled
+ * @return string One line of wikitext, without trailing newline.
*/
- protected function printChangeLine( $title, $enabled = true ) {
+ protected function getChangeLine( $title, $enabled = true ) {
if ( $enabled ) {
- $this->getOutput()->addWikiText( '* ' . $title->getPrefixedText() );
+ return '* ' . $title->getPrefixedText();
} else {
- $this->getOutput()->addWikiText( '* <s>' . $title->getPrefixedText() . '</s>' );
+ return '* <s>' . $title->getPrefixedText() . '</s>';
}
}
protected function performAction() {
- $jobs = array();
+ $jobs = [];
$target = $this->title;
$base = $this->title->getPrefixedText();
@@ -397,7 +381,7 @@ class SpecialPageTranslationDeletePage extends SpecialPage {
$this->clearMetadata();
MessageGroups::singleton()->recache();
- MessageIndexRebuildJob::newJob()->insert();
+ MessageIndexRebuildJob::newJob()->insertIntoJobQueue();
$this->getOutput()->addWikiMsg( 'pt-deletepage-started' );
}
@@ -409,22 +393,21 @@ class SpecialPageTranslationDeletePage extends SpecialPage {
TranslateMetadata::set( $groupId, 'priorityforce', false );
TranslateMetadata::set( $groupId, 'priorityreason', false );
// remove the page from aggregate groups, if present in any of them.
- $groups = MessageGroups::getAllGroups();
- foreach ( $groups as $group ) {
- if ( $group instanceof AggregateMessageGroup ) {
- $subgroups = TranslateMetadata::get( $group->getId(), 'subgroups' );
- if ( $subgroups !== false ) {
- $subgroups = explode( ',', $subgroups );
+ $aggregateGroups = MessageGroups::getGroupsByType( AggregateMessageGroup::class );
+ TranslateMetadata::preloadGroups( array_keys( $aggregateGroups ) );
+ foreach ( $aggregateGroups as $group ) {
+ $subgroups = TranslateMetadata::get( $group->getId(), 'subgroups' );
+ if ( $subgroups !== false ) {
+ $subgroups = explode( ',', $subgroups );
+ $subgroups = array_flip( $subgroups );
+ if ( isset( $subgroups[$groupId] ) ) {
+ unset( $subgroups[$groupId] );
$subgroups = array_flip( $subgroups );
- if ( isset( $subgroups[$groupId] ) ) {
- unset( $subgroups[$groupId] );
- $subgroups = array_flip( $subgroups );
- TranslateMetadata::set(
- $group->getId(),
- 'subgroups',
- implode( ',', $subgroups )
- );
- }
+ TranslateMetadata::set(
+ $group->getId(),
+ 'subgroups',
+ implode( ',', $subgroups )
+ );
}
}
}
@@ -446,7 +429,7 @@ class SpecialPageTranslationDeletePage extends SpecialPage {
*/
protected function getTranslationPages() {
if ( $this->singleLanguage() ) {
- return array( $this->title );
+ return [ $this->title ];
}
if ( !isset( $this->translationPages ) ) {
diff --git a/www/wiki/extensions/Translate/tag/SpecialPageTranslationMovePage.php b/www/wiki/extensions/Translate/tag/SpecialPageTranslationMovePage.php
index a488266c..452f65fb 100644
--- a/www/wiki/extensions/Translate/tag/SpecialPageTranslationMovePage.php
+++ b/www/wiki/extensions/Translate/tag/SpecialPageTranslationMovePage.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -94,9 +94,8 @@ class SpecialPageTranslationMovePage extends MovePageForm {
// Checkboxes that default being checked are tricky
$this->moveSubpages = $request->getBool( 'subpages', !$request->wasPosted() );
- if ( $this->doBasicChecks() !== true ) {
- return;
- }
+ // This will throw exceptions if there is an error.
+ $this->doBasicChecks();
// Real stuff starts here
$page = TranslatablePage::newFromTitle( $this->oldTitle );
@@ -129,14 +128,14 @@ class SpecialPageTranslationMovePage extends MovePageForm {
$blockers = $this->checkMoveBlockers();
if ( count( $blockers ) ) {
$this->showErrors( $blockers );
- $this->showForm( array() );
+ $this->showForm( [] );
} else {
$this->showConfirmation();
}
} elseif ( $subaction === 'perform' && $this->checkToken() && $request->wasPosted() ) {
$this->performAction();
} else {
- $this->showForm( array() );
+ $this->showForm( [] );
}
} else {
// Delegate... don't want to reimplement this
@@ -148,14 +147,10 @@ class SpecialPageTranslationMovePage extends MovePageForm {
/**
* Do the basic checks whether moving is possible and whether
* the input looks anywhere near sane.
- * @throws PermissionsError|ErrorPageError|ReadOnlyError
- * @return bool
+ * @throws PermissionsError|ErrorPageError|ReadOnlyError|ThrottledError
*/
protected function doBasicChecks() {
- # Check for database lock
- if ( wfReadOnly() ) {
- throw new ReadOnlyError;
- }
+ $this->checkReadOnly();
if ( $this->oldTitle === null ) {
throw new ErrorPageError( 'notargettitle', 'notargettext' );
@@ -165,14 +160,15 @@ class SpecialPageTranslationMovePage extends MovePageForm {
throw new ErrorPageError( 'nopagetitle', 'nopagetext' );
}
- # Check rights
+ if ( $this->getUser()->pingLimiter( 'move' ) ) {
+ throw new ThrottledError;
+ }
+
+ // Check rights
$permErrors = $this->oldTitle->getUserPermissionsErrors( 'move', $this->getUser() );
- if ( !empty( $permErrors ) ) {
+ if ( count( $permErrors ) ) {
throw new PermissionsError( 'move', $permErrors );
}
-
- // Let the caller know it's safe to continue
- return true;
}
/**
@@ -193,80 +189,78 @@ class SpecialPageTranslationMovePage extends MovePageForm {
if ( count( $errors ) ) {
$out = $this->getOutput();
- $out->addHTML( Html::openElement( 'div', array( 'class' => 'error' ) ) );
+ $out->addHTML( Html::openElement( 'div', [ 'class' => 'error' ] ) );
$out->addWikiMsg(
'pt-movepage-blockers',
$this->getLanguage()->formatNum( count( $errors ) )
);
- $out->addHTML( '<ul>' );
+ $s = '';
foreach ( $errors as $error ) {
- // I have no idea what the parser is doing, but this is mad.
- // <li>$1</li> doesn't work.
- $out->wrapWikiMsg( "<li>$1", $error );
+ $s .= '* ' . wfMessage( ...$error )->plain() . "\n";
}
- $out->addHTML( '</ul></div>' );
+ TranslateUtils::addWikiTextAsInterface( $out, $s );
+ $out->addHTML( '</div>' );
}
}
/**
* 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' );
- $br = Html::element( 'br' );
- $subaction = array( 'name' => 'subaction' );
- $readonly = array( 'readonly' => 'readonly' );
- $formParams = array(
- 'method' => 'post',
- 'action' => $this->getPageTitle( $this->oldText )->getLocalURL()
- );
-
- $form = array();
- $form[] = Xml::fieldset( $this->msg( 'pt-movepage-legend' )->text() );
- $form[] = Html::openElement( 'form', $formParams );
- $form[] = Html::hidden( 'wpEditToken', $this->getUser()->getEditToken() );
- $this->addInputLabel(
- $form,
- $this->msg( 'pt-movepage-current' )->text(),
- 'wpOldTitle',
- 30,
- $this->oldText,
- $readonly
- );
- $this->addInputLabel(
- $form,
- $this->msg( 'pt-movepage-new' )->text(),
- 'wpNewTitle',
- 30,
- $this->newText
- );
- $this->addInputLabel(
- $form,
- $this->msg( 'pt-movepage-reason' )->text(),
- 'reason',
- 45,
- $this->reason
- );
- $form[] = Xml::checkLabel(
- $this->msg( 'pt-movepage-subpages' )->text(),
- 'subpages',
- 'mw-subpages',
- $this->moveSubpages
- ) . $br;
- $form[] = Xml::submitButton( $this->msg( 'pt-movepage-action-check' )->text(), $subaction );
- $form[] = Xml::closeElement( 'form' );
- $form[] = Xml::closeElement( 'fieldset' );
- $this->getOutput()->addHTML( implode( "\n", $form ) );
+ $formDescriptor = [
+ 'wpOldTitle' => [
+ 'type' => 'text',
+ 'name' => 'wpOldTitle',
+ 'label' => $this->msg( 'pt-movepage-current' )->text(),
+ 'size' => 30,
+ 'default' => $this->oldText,
+ 'readonly' => true,
+ ],
+ 'wpNewTitle' => [
+ 'type' => 'text',
+ 'name' => 'wpNewTitle',
+ 'label' => $this->msg( 'pt-movepage-new' )->text(),
+ 'size' => 30,
+ 'default' => $this->newText,
+ ],
+ 'reason' => [
+ 'type' => 'text',
+ 'name' => 'reason',
+ 'label' => $this->msg( 'pt-movepage-reason' )->text(),
+ 'size' => 45,
+ 'default' => $this->reason,
+ ],
+ 'subpages' => [
+ 'type' => 'check',
+ 'name' => 'subpages',
+ 'id' => 'mw-subpages',
+ 'label' => $this->msg( 'pt-movepage-subpages' )->text(),
+ 'default' => $this->moveSubpages,
+ ]
+ ];
+
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
+ $htmlForm
+ ->addHiddenField( 'wpEditToken', $this->getUser()->getEditToken() )
+ ->setMethod( 'post' )
+ ->setAction( $this->getPageTitle( $this->oldText )->getLocalURL() )
+ ->setSubmitName( 'subaction' )
+ ->setSubmitTextMsg( 'pt-movepage-action-check' )
+ ->setWrapperLegendMsg( 'pt-movepage-legend' )
+ ->prepareForm()
+ ->displayForm( false );
}
/**
* Shortcut for keeping the code at least a bit readable. Adds label and
* input into $form array.
*
- * @param string[] $form Array where input element and label is appended.
+ * @param string[] &$form Array where input element and label is appended.
* @param string $label Label text.
* @param string $name Name attribute.
* @param bool|int $size Size attribute of the input element. Default false.
@@ -274,7 +268,7 @@ class SpecialPageTranslationMovePage extends MovePageForm {
* @param array $attribs Extra attributes. Default empty array.
*/
protected function addInputLabel( &$form, $label, $name, $size = false, $text = false,
- array $attribs = array()
+ array $attribs = []
) {
$br = Html::element( 'br' );
list( $label, $input ) = Xml::inputLabelSep(
@@ -302,27 +296,31 @@ class SpecialPageTranslationMovePage extends MovePageForm {
$target = $this->newTitle;
$count = 0;
- $types = array(
- 'pt-movepage-list-pages' => array( $this->oldTitle ),
+ $types = [
+ '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 ===', array( $type, count( $pages ) ) );
+ $out->wrapWikiMsg( '=== $1 ===', [ $type, count( $pages ) ] );
+ if ( $type === 'pt-movepage-list-translatable' ) {
+ $out->addWikiMsg( 'pt-movepage-list-translatable-note' );
+ }
- $lines = array();
+ $lines = [];
foreach ( $pages as $old ) {
$toBeMoved = true;
// 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 ) {
@@ -332,21 +330,21 @@ class SpecialPageTranslationMovePage extends MovePageForm {
$lines[] = $this->getChangeLine( $base, $old, $target, $toBeMoved );
}
- $out->addWikiText( implode( "\n", $lines ) );
+ TranslateUtils::addWikiTextAsInterface( $out, implode( "\n", $lines ) );
}
- $out->addWikiText( "----\n" );
+ TranslateUtils::addWikiTextAsInterface( $out, "----\n" );
$out->addWikiMsg( 'pt-movepage-list-count', $this->getLanguage()->formatNum( $count ) );
$br = Html::element( 'br' );
- $readonly = array( 'readonly' => 'readonly' );
- $subaction = array( 'name' => 'subaction' );
- $formParams = array(
+ $readonly = [ 'readonly' => 'readonly' ];
+ $subaction = [ 'name' => 'subaction' ];
+ $formParams = [
'method' => 'post',
'action' => $this->getPageTitle( $this->oldText )->getLocalURL()
- );
+ ];
- $form = array();
+ $form = [];
$form[] = Xml::fieldset( $this->msg( 'pt-movepage-legend' )->text() );
$form[] = Html::openElement( 'form', $formParams );
$form[] = Html::hidden( 'wpEditToken', $this->getUser()->getEditToken() );
@@ -406,129 +404,53 @@ class SpecialPageTranslationMovePage extends MovePageForm {
}
protected function performAction() {
- $jobs = array();
- $user = $this->getUser();
$target = $this->newTitle;
$base = $this->oldTitle->getPrefixedText();
- $oldLatest = $this->oldTitle->getLatestRevID();
- $params = array(
- 'base-source' => $this->oldTitle->getPrefixedText(),
- 'base-target' => $this->newTitle->getPrefixedText(),
- );
+ $moves = [];
+ $moves[$base] = $target->getPrefixedText();
- $translationPages = $this->getTranslationPages();
- foreach ( $translationPages as $old ) {
- $to = $this->newPageTitle( $base, $old, $target );
- $jobs[$old->getPrefixedText()] = TranslateMoveJob::newJob( $old, $to, $params, $user );
+ foreach ( $this->getTranslationPages() as $from ) {
+ $to = $this->newPageTitle( $base, $from, $target );
+ $moves[$from->getPrefixedText()] = $to->getPrefixedText();
}
- $sectionPages = $this->getSectionPages();
- foreach ( $sectionPages as $old ) {
- $to = $this->newPageTitle( $base, $old, $target );
- $jobs[$old->getPrefixedText()] = TranslateMoveJob::newJob( $old, $to, $params, $user );
+ foreach ( $this->getSectionPages() as $from ) {
+ $to = $this->newPageTitle( $base, $from, $target );
+ $moves[$from->getPrefixedText()] = $to->getPrefixedText();
}
if ( $this->moveSubpages ) {
- $subpages = $this->getSubpages();
- foreach ( $subpages as $old ) {
- if ( TranslatablePage::isTranslationPage( $old ) ) {
- continue;
- }
-
- $to = $this->newPageTitle( $base, $old, $target );
- $jobs[$old->getPrefixedText()] = TranslateMoveJob::newJob(
- $old,
- $to,
- $params,
- $user
- );
+ $subpages = $this->getNormalSubpages();
+ foreach ( $subpages as $from ) {
+ $to = $this->newPageTitle( $base, $from, $target );
+ $moves[$from->getPrefixedText()] = $to->getPrefixedText();
}
}
- // This is used by TranslateMoveJob
- wfGetCache( CACHE_ANYTHING )->set( wfMemcKey( 'translate-pt-move', $base ), count( $jobs ) );
- JobQueueGroup::singleton()->push( $jobs );
-
- TranslateMoveJob::forceRedirects( false );
-
- $errors = $this->oldTitle->moveTo( $this->newTitle, true, $this->reason, false );
- if ( is_array( $errors ) ) {
- $this->showErrors( $errors );
- }
-
- TranslateMoveJob::forceRedirects( true );
-
- $newTpage = TranslatablePage::newFromTitle( $this->newTitle );
- $newTpage->addReadyTag( $this->newTitle->getLatestRevID( Title::GAID_FOR_UPDATE ) );
-
- if ( $newTpage->getMarkedTag() === $oldLatest ) {
- $newTpage->addMarkedTag( $this->newTitle->getLatestRevID( Title::GAID_FOR_UPDATE ) );
- }
-
- // remove the entries from metadata table.
- $oldGroupId = $this->page->getMessageGroupId();
- $newGroupId = $newTpage->getMessageGroupId();
- $this->moveMetadata( $oldGroupId, $newGroupId );
+ $summary = $this->msg( 'pt-movepage-logreason', $base )->inContentLanguage()->text();
+ $job = TranslatablePageMoveJob::newJob(
+ $this->oldTitle, $this->newTitle, $moves, $summary, $this->getUser()
+ );
- MessageGroups::singleton()->recache();
- MessageIndexRebuildJob::newJob()->insert();
+ JobQueueGroup::singleton()->push( $job );
$this->getOutput()->addWikiMsg( 'pt-movepage-started' );
}
- protected function moveMetadata( $oldGroupId, $newGroupId ) {
- $prioritylangs = TranslateMetadata::get( $oldGroupId, 'prioritylangs' );
- $priorityforce = TranslateMetadata::get( $oldGroupId, 'priorityforce' );
- $priorityreason = TranslateMetadata::get( $oldGroupId, 'priorityreason' );
- TranslateMetadata::set( $oldGroupId, 'prioritylangs', false );
- TranslateMetadata::set( $oldGroupId, 'priorityforce', false );
- TranslateMetadata::set( $oldGroupId, 'priorityreason', false );
- if ( $prioritylangs ) {
- TranslateMetadata::set( $newGroupId, 'prioritylangs', $prioritylangs );
- }
- if ( $priorityforce ) {
- TranslateMetadata::set( $newGroupId, 'priorityforce', $priorityforce );
- }
- if ( $priorityreason !== false ) {
- TranslateMetadata::set( $newGroupId, 'priorityreason', $priorityreason );
- }
- // make the changes in aggregate groups metadata, if present in any of them.
- $groups = MessageGroups::getAllGroups();
- foreach ( $groups as $group ) {
- if ( $group instanceof AggregateMessageGroup ) {
- $subgroups = TranslateMetadata::get( $group->getId(), 'subgroups' );
- if ( $subgroups !== false ) {
- $subgroups = explode( ',', $subgroups );
- $subgroups = array_flip( $subgroups );
- if ( isset( $subgroups[$oldGroupId] ) ) {
- $subgroups[$newGroupId] = $subgroups[$oldGroupId];
- unset( $subgroups[$oldGroupId] );
- $subgroups = array_flip( $subgroups );
- TranslateMetadata::set(
- $group->getId(),
- 'subgroups',
- implode( ',', $subgroups )
- );
- }
- }
- }
- }
- }
-
protected function checkMoveBlockers() {
- $blockers = array();
+ $blockers = [];
$target = $this->newTitle;
if ( !$target ) {
- $blockers[] = array( 'pt-movepage-block-base-invalid' );
+ $blockers[] = [ 'pt-movepage-block-base-invalid' ];
return $blockers;
}
if ( $target->inNamespaces( NS_MEDIAWIKI, NS_TRANSLATIONS ) ) {
- $blockers[] = array( 'immobile-target-namespace', $target->getNsText() );
+ $blockers[] = [ 'immobile-target-namespace', $target->getNsText() ];
return $blockers;
}
@@ -536,7 +458,7 @@ class SpecialPageTranslationMovePage extends MovePageForm {
$base = $this->oldTitle->getPrefixedText();
if ( $target->exists() ) {
- $blockers[] = array( 'pt-movepage-block-base-exists', $target->getPrefixedText() );
+ $blockers[] = [ 'pt-movepage-block-base-exists', $target->getPrefixedText() ];
} else {
$errors = $this->oldTitle->isValidMoveOperation( $target, true, $this->reason );
if ( is_array( $errors ) ) {
@@ -550,26 +472,21 @@ class SpecialPageTranslationMovePage extends MovePageForm {
}
// Collect all the old and new titles for checcks
- $titles = array();
+ $titles = [];
$pages = $this->getTranslationPages();
foreach ( $pages as $old ) {
- $titles['tp'][] = array( $old, $this->newPageTitle( $base, $old, $target ) );
+ $titles['tp'][] = [ $old, $this->newPageTitle( $base, $old, $target ) ];
}
$pages = $this->getSectionPages();
foreach ( $pages as $old ) {
- $titles['section'][] = array( $old, $this->newPageTitle( $base, $old, $target ) );
+ $titles['section'][] = [ $old, $this->newPageTitle( $base, $old, $target ) ];
}
- $subpages = array();
- if ( $this->moveSubpages ) {
- $subpages = $this->getSubpages();
- }
+ $subpages = $this->moveSubpages ? $this->getNormalSubpages() : [];
foreach ( $subpages as $old ) {
- if ( !TranslatablePage::isTranslationPage( $old ) ) {
- $titles['subpage'][] = array( $old, $this->newPageTitle( $base, $old, $target ) );
- }
+ $titles['subpage'][] = [ $old, $this->newPageTitle( $base, $old, $target ) ];
}
// Check that all new titles are valid
@@ -581,10 +498,10 @@ class SpecialPageTranslationMovePage extends MovePageForm {
foreach ( $list as $pair ) {
list( $old, $new ) = $pair;
if ( $new === null ) {
- $blockers[] = array(
+ $blockers[] = [
"pt-movepage-block-$type-invalid",
$old->getPrefixedText()
- );
+ ];
continue;
}
$lb->addObj( $old );
@@ -605,11 +522,11 @@ class SpecialPageTranslationMovePage extends MovePageForm {
foreach ( $list as $pair ) {
list( $old, $new ) = $pair;
if ( $new->exists() ) {
- $blockers[] = array(
+ $blockers[] = [
"pt-movepage-block-$type-exists",
$old->getPrefixedText(),
$new->getPrefixedText()
- );
+ ];
} else {
/* This method has terrible performance:
* - 2 queries by core
@@ -658,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 ) ) {
@@ -687,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/www/wiki/extensions/Translate/tag/TPException.php b/www/wiki/extensions/Translate/tag/TPException.php
index b0a1f39c..b01682d6 100644
--- a/www/wiki/extensions/Translate/tag/TPException.php
+++ b/www/wiki/extensions/Translate/tag/TPException.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2009-2013 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
diff --git a/www/wiki/extensions/Translate/tag/TPParse.php b/www/wiki/extensions/Translate/tag/TPParse.php
index ea2d3f88..9e1b32bc 100644
--- a/www/wiki/extensions/Translate/tag/TPParse.php
+++ b/www/wiki/extensions/Translate/tag/TPParse.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2009-2013 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,14 +15,14 @@
* @ingroup PageTranslation
*/
class TPParse {
- /// \type{Title} Title of the page.
+ /** @var Title Title of the page. */
protected $title;
- /** \arrayof{String,TPSection} Parsed sections indexed with placeholder.
+ /** @var TPSection[] Parsed sections indexed with placeholder.
* @todo Encapsulate
*/
- public $sections = array();
- /** \string Page source with content replaced with placeholders.
+ public $sections = [];
+ /** @var string Page source with content replaced with placeholders.
* @todo Encapsulate
*/
public $template = null;
@@ -38,7 +38,7 @@ class TPParse {
/**
* Returns the number of sections in this page.
- * @return \int
+ * @return int
*/
public function countSections() {
return count( $this->sections );
@@ -47,7 +47,7 @@ class TPParse {
/**
* Returns the page template where translatable content is replaced with
* placeholders.
- * @return \string
+ * @return string
*/
public function getTemplate() {
return $this->template;
@@ -57,7 +57,7 @@ class TPParse {
* Returns the page template where the ugly placeholders are replaced with
* section markers. Sections which previously had no number will get one
* assigned now.
- * @return \string
+ * @return string
*/
public function getTemplatePretty() {
$text = $this->template;
@@ -72,7 +72,7 @@ class TPParse {
/**
* Gets the sections and assigns section id for new sections
* @param int $highest The largest used integer id (Since 2012-08-02)
- * @return array array( string => TPSection, ... )
+ * @return TPSection[] array( string => TPSection, ... )
*/
public function getSectionsForSave( $highest = 0 ) {
$this->loadFromDatabase();
@@ -108,7 +108,7 @@ class TPParse {
/**
* Returns list of deleted sections.
- * @return array List of sections indexed by id. array( string => TPsection, ... )
+ * @return TPSection[] List of sections indexed by id. array( string => TPsection, ... )
*/
public function getDeletedSections() {
$sections = $this->getSectionsForSave();
@@ -131,12 +131,12 @@ class TPParse {
return;
}
- $this->dbSections = array();
+ $this->dbSections = [];
$db = TranslateUtils::getSafeReadDB();
$tables = 'translate_sections';
- $vars = array( 'trs_key', 'trs_text' );
- $conds = array( 'trs_page' => $this->title->getArticleID() );
+ $vars = [ 'trs_key', 'trs_text' ];
+ $conds = [ 'trs_page' => $this->title->getArticleID() ];
$res = $db->select( $tables, $vars, $conds, __METHOD__ );
foreach ( $res as $r ) {
@@ -164,32 +164,51 @@ class TPParse {
}
/**
- * Returns translation page with all possible translations replaced in
- * and ugly translation tags removed.
+ * Returns translation page with all possible translations replaced in, ugly
+ * translation tags removed and outdated translation marked with a class
+ * mw-translate-fuzzy.
*
* @param MessageCollection $collection Collection that holds translated messages.
+ * @param bool $showOutdated Whether to show outdated sections, wrapped in a HTML class.
* @return string Whole page as wikitext.
*/
- public function getTranslationPageText( $collection ) {
+ public function getTranslationPageText( $collection, $showOutdated = false ) {
$text = $this->template; // The source
// For finding the messages
$prefix = $this->title->getPrefixedDBkey() . '/';
if ( $collection instanceof MessageCollection ) {
- $collection->loadTranslations( DB_MASTER );
- $collection->filter( 'translated', false );
+ $collection->loadTranslations();
+ if ( $showOutdated ) {
+ $collection->filter( 'hastranslation', false );
+ } else {
+ $collection->filter( 'translated', false );
+ }
}
foreach ( $this->sections as $ph => $s ) {
$sectiontext = null;
if ( isset( $collection[$prefix . $s->id] ) ) {
- /**
- * @var TMessage $msg
- */
+ /** @var TMessage $msg */
$msg = $collection[$prefix . $s->id];
+ /** @var string|null */
$sectiontext = $msg->translation();
+
+ // If translation is fuzzy, $sectiontext must be a string
+ if ( $msg->hasTag( 'fuzzy' ) ) {
+ // We do not ever want to show explicit fuzzy marks in the rendered pages
+ $sectiontext = str_replace( TRANSLATE_FUZZY, '', $sectiontext );
+
+ if ( $s->isInline() ) {
+ $sectiontext = "<span class=\"mw-translate-fuzzy\">$sectiontext</span>";
+ } else {
+ // We add new lines around the text to avoid disturbing any mark-up that
+ // has special handling on line start, such as lists.
+ $sectiontext = "<div class=\"mw-translate-fuzzy\">\n$sectiontext\n</div>";
+ }
+ }
}
// Use the original text if no translation is available.
@@ -208,11 +227,11 @@ class TPParse {
$text = str_replace( $ph, $sectiontext, $text );
}
- $nph = array();
+ $nph = [];
$text = TranslatablePage::armourNowiki( $nph, $text );
// Remove translation markup from the template to produce final text
- $cb = array( __CLASS__, 'replaceTagCb' );
+ $cb = [ __CLASS__, 'replaceTagCb' ];
$text = preg_replace_callback( '~(<translate>)(.*)(</translate>)~sU', $cb, $text );
$text = TranslatablePage::unArmourNowiki( $nph, $text );
@@ -222,7 +241,7 @@ class TPParse {
/**
* Chops of trailing or preceeding whitespace intelligently to avoid
* build up of unintented whitespace.
- * @param array $matches
+ * @param string[] $matches
* @return string
*/
protected static function replaceTagCb( $matches ) {
diff --git a/www/wiki/extensions/Translate/tag/TPSection.php b/www/wiki/extensions/Translate/tag/TPSection.php
index 105dd981..e42e2b46 100644
--- a/www/wiki/extensions/Translate/tag/TPSection.php
+++ b/www/wiki/extensions/Translate/tag/TPSection.php
@@ -4,8 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @copyright Copyright © 2009-2013 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -20,9 +19,9 @@ class TPSection {
public $id;
/**
- * @var string New name of the section, that will be saved to database.
+ * @var string|null New name of the section, that will be saved to database.
*/
- public $name;
+ public $name = null;
/**
* @var string Section text.
@@ -35,9 +34,33 @@ class TPSection {
public $type;
/**
- * @var string Text of previous version of this section.
+ * @var string|null Text of previous version of this section.
*/
- public $oldText;
+ public $oldText = null;
+
+ /**
+ * @var bool Whether this section is inline section.
+ * E.g. "Something <translate>foo</translate> bar".
+ */
+ protected $inline = false;
+
+ /**
+ * @var int Version number for the serialization.
+ */
+ private $version = 1;
+
+ /**
+ * @var string[] List of properties to serialize.
+ */
+ private static $properties = [ 'version', 'id', 'name', 'text', 'type', 'oldText', 'inline' ];
+
+ public function setIsInline( $value ) {
+ $this->inline = (bool)$value;
+ }
+
+ public function isInline() {
+ return $this->inline;
+ }
/**
* Returns section text unmodified.
@@ -53,7 +76,7 @@ class TPSection {
* @since 2014.07
*/
public function getTextWithVariables() {
- $re = '~<tvar\|([^>]+)>(.*?)</>~u';
+ $re = '~<tvar\|([^>]+)>(.*?)</>~us';
return preg_replace( $re, '$\1', $this->text );
}
@@ -63,17 +86,18 @@ class TPSection {
* @return string Wikitext.
*/
public function getTextForTrans() {
- $re = '~<tvar\|([^>]+)>(.*?)</>~u';
+ $re = '~<tvar\|([^>]+)>(.*?)</>~us';
return preg_replace( $re, '\2', $this->text );
}
/**
* Returns the section text with updated or added section marker.
+ *
* @return string Wikitext.
*/
public function getMarkedText() {
- $id = isset( $this->name ) ? $this->name : $this->id;
+ $id = $this->name !== null ? $this->name : $this->id;
$header = "<!--T:{$id}-->";
$re = '~^(=+.*?=+\s*?$)~m';
$rep = "\\1 $header";
@@ -82,7 +106,11 @@ class TPSection {
$text = preg_replace( $re, $rep, $this->text, 1, $count );
if ( $count === 0 ) {
- $text = $header . "\n" . $this->text;
+ if ( $this->inline ) {
+ $text = $header . ' ' . $this->text;
+ } else {
+ $text = $header . "\n" . $this->text;
+ }
}
return $text;
@@ -93,7 +121,7 @@ class TPSection {
* @return string Wikitext.
*/
public function getOldText() {
- return isset( $this->oldText ) ? $this->oldText : $this->text;
+ return $this->oldText !== null ? $this->oldText : $this->text;
}
/**
@@ -102,10 +130,10 @@ class TPSection {
* prefixed with a dollar sign.
*/
public function getVariables() {
- $re = '~<tvar\|([^>]+)>(.*?)</>~u';
- $matches = array();
+ $re = '~<tvar\|([^>]+)>(.*?)</>~us';
+ $matches = [];
preg_match_all( $re, $this->text, $matches, PREG_SET_ORDER );
- $vars = array();
+ $vars = [];
foreach ( $matches as $m ) {
$vars['$' . $m[1]] = $m[2];
@@ -113,4 +141,35 @@ class TPSection {
return $vars;
}
+
+ /**
+ * Serialize this object to a PHP array.
+ * @return array
+ * @since 2018.07
+ */
+ public function serializeToArray() {
+ $data = [];
+ foreach ( self::$properties as $index => $property ) {
+ // Because this is used for the JobQueue, use a list
+ // instead of an array to save space.
+ $data[ $index ] = $this->$property;
+ }
+
+ return $data;
+ }
+
+ /**
+ * Construct an object from previously serialized array.
+ * @param array $data
+ * @return self
+ * @since 2018.07
+ */
+ public static function unserializeFromArray( $data ) {
+ $section = new self;
+ foreach ( self::$properties as $index => $property ) {
+ $section->$property = $data[ $index ];
+ }
+
+ return $section;
+ }
}
diff --git a/www/wiki/extensions/Translate/tag/TranslatablePage.php b/www/wiki/extensions/Translate/tag/TranslatablePage.php
index c0236b98..51a32db9 100644
--- a/www/wiki/extensions/Translate/tag/TranslatablePage.php
+++ b/www/wiki/extensions/Translate/tag/TranslatablePage.php
@@ -4,9 +4,11 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
+use Wikimedia\Rdbms\Database;
+
/**
* Class to parse translatable wiki pages.
*
@@ -61,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
@@ -71,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 );
@@ -87,9 +87,9 @@ class TranslatablePage {
* behavior will happen.
*
* @param Title $title
- * @param integer $revision Revision number
+ * @param int $revision Revision number
* @throws MWException
- * @return TranslatablePage
+ * @return self
*/
public static function newFromRevision( Title $title, $revision ) {
$rev = Revision::newFromTitle( $title, $revision );
@@ -109,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 );
@@ -118,8 +118,6 @@ class TranslatablePage {
return $obj;
}
- // Getters //
-
/**
* Returns the title for this translatable page.
* @return Title
@@ -159,7 +157,7 @@ class TranslatablePage {
/**
* Revision is null if object was constructed using newFromText.
- * @return null or integer
+ * @return null|int
*/
public function getRevision() {
return $this->revision;
@@ -167,7 +165,7 @@ class TranslatablePage {
/**
* Manually set a revision number to use loading page text.
- * @param integer $revision
+ * @param int $revision
*/
public function setRevision( $revision ) {
$this->revision = $revision;
@@ -175,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.
@@ -216,7 +212,7 @@ class TranslatablePage {
/**
* Check whether title is marked for translation
* @return bool
- * @return 2014.06
+ * @since 2014.06
*/
public function hasPageDisplayTitle() {
// Cached value
@@ -256,7 +252,7 @@ class TranslatablePage {
return null;
}
- return $group->getMessage( "$page/$section", $code );
+ return $group->getMessage( "$page/$section", $code, $group::READ_NORMAL );
}
/**
@@ -272,10 +268,10 @@ class TranslatablePage {
$text = $this->getText();
- $nowiki = array();
+ $nowiki = [];
$text = self::armourNowiki( $nowiki, $text );
- $sections = array();
+ $sections = [];
// Add section to allow translating the page name
$displaytitle = new TPSection;
@@ -283,11 +279,11 @@ class TranslatablePage {
$displaytitle->text = $this->getTitle()->getPrefixedText();
$sections[TranslateUtils::getPlaceholder()] = $displaytitle;
- $tagPlaceHolders = array();
+ $tagPlaceHolders = [];
while ( true ) {
- $re = '~(<translate>)\s*(.*?)(</translate>)~s';
- $matches = array();
+ $re = '~(<translate>)(.*?)(</translate>)~s';
+ $matches = [];
$ok = preg_match_all( $re, $text, $matches, PREG_OFFSET_CAPTURE );
if ( $ok === 0 ) {
@@ -311,15 +307,16 @@ class TranslatablePage {
$sectiontext = substr( $contents, $start, $len );
if ( strpos( $sectiontext, '<translate>' ) !== false ) {
- throw new TPException( array( 'pt-parse-nested', $sectiontext ) );
+ throw new TPException( [ 'pt-parse-nested', $sectiontext ] );
}
$sectiontext = self::unArmourNowiki( $nowiki, $sectiontext );
- $ret = $this->sectionise( $sections, $sectiontext );
+ $parse = self::sectionise( $sectiontext );
+ $sections += $parse['sections'];
$tagPlaceHolders[$ph] =
- self::index_replace( $contents, $ret, $start, $end );
+ self::index_replace( $contents, $parse['template'], $start, $end );
}
$prettyTemplate = $text;
@@ -328,9 +325,9 @@ class TranslatablePage {
}
if ( strpos( $text, '<translate>' ) !== false ) {
- throw new TPException( array( 'pt-parse-open', $prettyTemplate ) );
+ throw new TPException( [ 'pt-parse-open', $prettyTemplate ] );
} elseif ( strpos( $text, '</translate>' ) !== false ) {
- throw new TPException( array( 'pt-parse-close', $prettyTemplate ) );
+ throw new TPException( [ 'pt-parse-close', $prettyTemplate ] );
}
foreach ( $tagPlaceHolders as $ph => $value ) {
@@ -339,7 +336,7 @@ class TranslatablePage {
if ( count( $sections ) === 1 ) {
// Don't return display title for pages which have no sections
- $sections = array();
+ $sections = [];
}
$text = self::unArmourNowiki( $nowiki, $text );
@@ -354,10 +351,28 @@ class TranslatablePage {
return $parse;
}
- // Inner functionality //
+ /**
+ * Remove all opening and closing translate tags following the same whitespace rules
+ * as the regular parsing. The difference is that this doesn't try to parse the page,
+ * so it can handle unbalanced tags.
+ *
+ * @param string $text Wikitext
+ * @return string Wikitext without translate tags.
+ */
+ public static function cleanupTags( $text ) {
+ $nowiki = [];
+ $text = self::armourNowiki( $nowiki, $text );
+ $text = preg_replace( '~<translate>\n?~s', '', $text );
+ $text = preg_replace( '~\n?</translate>~s', '', $text );
+ // Mirroring what TPSection::getTextForTrans does
+ $text = preg_replace( '~<tvar\|([^>]+)>(.*?)</>~u', '\2', $text );
+
+ $text = self::unArmourNowiki( $nowiki, $text );
+ return $text;
+ }
/**
- * @param array $holders
+ * @param array &$holders
* @param string $text
* @return string
*/
@@ -374,7 +389,7 @@ class TranslatablePage {
}
/**
- * @param $holders
+ * @param array $holders
* @param string $text
* @return mixed
*/
@@ -400,27 +415,36 @@ class TranslatablePage {
/**
* Splits the content marked with \<translate> tags into sections, which
* are separated with with two or more newlines. Extra whitespace is captured
- * in the template and not included in the sections.
- * @param array $sections Array of placeholder => TPSection.
+ * in the template and is not included in the sections.
+ *
* @param string $text Contents of one pair of \<translate> tags.
- * @return string Template with placeholders for sections, which itself are added to $sections.
+ * @return array Contains a template and array of unparsed sections.
*/
- protected function sectionise( &$sections, $text ) {
+ public static function sectionise( $text ) {
$flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE;
- $parts = preg_split( '~(\s*\n\n\s*|\s*$)~', $text, -1, $flags );
+ $parts = preg_split( '~(^\s*|\s*\n\n\s*|\s*$)~', $text, -1, $flags );
+
+ $inline = preg_match( '~\n~', $text ) === 0;
$template = '';
+ $sections = [];
+
foreach ( $parts as $_ ) {
if ( trim( $_ ) === '' ) {
$template .= $_;
} else {
$ph = TranslateUtils::getPlaceholder();
- $sections[$ph] = $this->shakeSection( $_ );
+ $tpsection = self::shakeSection( $_ );
+ $tpsection->setIsInline( $inline );
+ $sections[$ph] = $tpsection;
$template .= $ph;
}
}
- return $template;
+ return [
+ 'template' => $template,
+ 'sections' => $sections,
+ ];
}
/**
@@ -435,13 +459,13 @@ class TranslatablePage {
* @throws TPException
* @return TPSection
*/
- protected function shakeSection( $content ) {
+ public static function shakeSection( $content ) {
$re = '~<!--T:(.*?)-->~';
- $matches = array();
+ $matches = [];
$count = preg_match_all( $re, $content, $matches, PREG_SET_ORDER );
if ( $count > 1 ) {
- throw new TPException( array( 'pt-shake-multiple', $content ) );
+ throw new TPException( [ 'pt-shake-multiple', $content ] );
}
$section = new TPSection;
@@ -452,15 +476,15 @@ class TranslatablePage {
// Currently handle only these two standard places.
// Is this too strict?
- $rer1 = '~^<!--T:(.*?)-->\n~'; // Normal sections
+ $rer1 = '~^<!--T:(.*?)-->( |\n)~'; // Normal sections
$rer2 = '~\s*<!--T:(.*?)-->$~m'; // Sections with title
$content = preg_replace( $rer1, '', $content );
$content = preg_replace( $rer2, '', $content );
if ( preg_match( $re, $content ) === 1 ) {
- throw new TPException( array( 'pt-shake-position', $content ) );
+ throw new TPException( [ 'pt-shake-position', $content ] );
} elseif ( trim( $content ) === '' ) {
- throw new TPException( array( 'pt-shake-empty', $id ) );
+ throw new TPException( [ 'pt-shake-empty', $id ] );
}
}
} else {
@@ -473,14 +497,12 @@ class TranslatablePage {
return $section;
}
- // Tag methods //
-
- protected static $tagCache = array();
+ protected static $tagCache = [];
/**
* Adds a tag which indicates that this page is
* suitable for translation.
- * @param integer $revision
+ * @param int $revision
* @param null|string $value
*/
public function addMarkedTag( $revision, $value = null ) {
@@ -490,7 +512,7 @@ class TranslatablePage {
/**
* Adds a tag which indicates that this page source is
* ready for marking for translation.
- * @param integer $revision
+ * @param int $revision
*/
public function addReadyTag( $revision ) {
$this->addTag( 'tp:tag', $revision );
@@ -499,7 +521,7 @@ class TranslatablePage {
/**
* @param string $tag Tag name
* @param int $revision Revision ID to add tag for
- * @param mixed $value Optional. Value to be stored as serialized with | as separator
+ * @param mixed|null $value Optional. Value to be stored as serialized with | as separator
* @throws MWException
*/
protected function addTag( $tag, $revision, $value = null ) {
@@ -511,11 +533,11 @@ class TranslatablePage {
throw new MWException( 'Got object, expected id' );
}
- $conds = array(
+ $conds = [
'rt_page' => $aid,
'rt_type' => RevTag::getType( $tag ),
'rt_revision' => $revision
- );
+ ];
$dbw->delete( 'revtag', $conds, __METHOD__ );
if ( $value !== null ) {
@@ -529,7 +551,7 @@ class TranslatablePage {
/**
* Returns the latest revision which has marked tag, if any.
- * @return integer|bool false
+ * @return int|bool false
*/
public function getMarkedTag() {
return $this->getTag( 'tp:mark' );
@@ -551,25 +573,25 @@ class TranslatablePage {
$aid = $this->getTitle()->getArticleID();
$dbw = wfGetDB( DB_MASTER );
- $conds = array(
+ $conds = [
'rt_page' => $aid,
- 'rt_type' => array(
+ 'rt_type' => [
RevTag::getType( 'tp:mark' ),
RevTag::getType( 'tp:tag' ),
- ),
- );
+ ],
+ ];
$dbw->delete( 'revtag', $conds, __METHOD__ );
- $dbw->delete( 'translate_sections', array( 'trs_page' => $aid ), __METHOD__ );
+ $dbw->delete( 'translate_sections', [ 'trs_page' => $aid ], __METHOD__ );
unset( self::$tagCache[$aid] );
}
/**
- * @param $tag
+ * @param string $tag
* @param int $dbt
* @return int|bool False if tag is not found, else revision id
*/
- protected function getTag( $tag, $dbt = DB_SLAVE ) {
+ protected function getTag( $tag, $dbt = DB_REPLICA ) {
if ( !$this->getTitle()->exists() ) {
return false;
}
@@ -583,12 +605,12 @@ class TranslatablePage {
$db = wfGetDB( $dbt );
- $conds = array(
+ $conds = [
'rt_page' => $aid,
'rt_type' => RevTag::getType( $tag ),
- );
+ ];
- $options = array( 'ORDER BY' => 'rt_revision DESC' );
+ $options = [ 'ORDER BY' => 'rt_revision DESC' ];
$value = $db->selectField( 'revtag', 'rt_revision', $conds, __METHOD__, $options );
return $value === false ? $value : (int)$value;
@@ -600,12 +622,12 @@ class TranslatablePage {
* @return string Relative url
*/
public function getTranslationUrl( $code = false ) {
- $params = array(
+ $params = [
'group' => $this->getMessageGroupId(),
'action' => 'page',
'filter' => '',
'language' => $code,
- );
+ ];
$translate = SpecialPage::getTitleFor( 'Translate' );
@@ -615,12 +637,12 @@ class TranslatablePage {
public function getMarkedRevs() {
$db = TranslateUtils::getSafeReadDB();
- $fields = array( 'rt_revision', 'rt_value' );
- $conds = array(
+ $fields = [ 'rt_revision', 'rt_value' ];
+ $conds = [
'rt_page' => $this->getTitle()->getArticleID(),
'rt_type' => RevTag::getType( 'tp:mark' ),
- );
- $options = array( 'ORDER BY' => 'rt_revision DESC' );
+ ];
+ $options = [ 'ORDER BY' => 'rt_revision DESC' ];
return $db->select( 'revtag', $fields, $conds, __METHOD__, $options );
}
@@ -636,16 +658,16 @@ class TranslatablePage {
$likePattern = $dbr->buildLike( $prefix, $dbr->anyString() );
$res = $dbr->select(
'page',
- array( 'page_namespace', 'page_title' ),
- array(
+ [ 'page_namespace', 'page_title' ],
+ [
'page_namespace' => $this->getTitle()->getNamespace(),
"page_title $likePattern"
- ),
+ ],
__METHOD__
);
$titles = TitleArray::newFromResult( $res );
- $filtered = array();
+ $filtered = [];
// Make sure we only get translation subpages while ignoring others
$codes = Language::fetchLanguageNames();
@@ -670,10 +692,10 @@ class TranslatablePage {
protected function getSections() {
$dbr = TranslateUtils::getSafeReadDB();
- $conds = array( 'trs_page' => $this->getTitle()->getArticleID() );
+ $conds = [ 'trs_page' => $this->getTitle()->getArticleID() ];
$res = $dbr->select( 'translate_sections', 'trs_key', $conds, __METHOD__ );
- $sections = array();
+ $sections = [];
foreach ( $res as $row ) {
$sections[] = $row->trs_key;
}
@@ -701,11 +723,11 @@ class TranslatablePage {
$like = $dbw->buildLike( "$base/", $dbw->anyString() );
}
- $fields = array( 'page_namespace', 'page_title' );
- $conds = array(
+ $fields = [ 'page_namespace', 'page_title' ];
+ $conds = [
'page_namespace' => NS_TRANSLATIONS,
'page_title ' . $like
- );
+ ];
$res = $dbw->select( 'page', $fields, $conds, __METHOD__ );
// Only include pages which belong to this translatable page.
@@ -713,7 +735,7 @@ class TranslatablePage {
// translatable. Then when querying for Foo, we also get units
// belonging to Foo/bar.
$sections = array_flip( $this->getSections() );
- $units = array();
+ $units = [];
foreach ( $res as $row ) {
$title = Title::newFromRow( $row );
@@ -746,12 +768,12 @@ class TranslatablePage {
// Calculate percentages for the available translations
$group = $this->getMessageGroup();
if ( !$group instanceof WikiPageMessageGroup ) {
- return array();
+ return [];
}
$titles = $this->getTranslationPages();
$temp = MessageGroupStats::forGroup( $this->getMessageGroupId() );
- $stats = array();
+ $stats = [];
foreach ( $titles as $t ) {
$handle = new MessageHandle( $t );
@@ -779,18 +801,18 @@ class TranslatablePage {
$db = TranslateUtils::getSafeReadDB();
$fields = 'rt_value';
- $conds = array(
+ $conds = [
'rt_page' => $title->getArticleID(),
'rt_type' => RevTag::getType( 'tp:transver' ),
- );
- $options = array( 'ORDER BY' => 'rt_revision DESC' );
+ ];
+ $options = [ 'ORDER BY' => 'rt_revision DESC' ];
return $db->selectField( 'revtag', $fields, $conds, __METHOD__, $options );
}
/**
* @param Title $title
- * @return bool|TranslatablePage
+ * @return bool|self
*/
public static function isTranslationPage( Title $title ) {
$handle = new MessageHandle( $title );
@@ -815,7 +837,7 @@ class TranslatablePage {
return false;
}
- $page = TranslatablePage::newFromTitle( $newtitle );
+ $page = self::newFromTitle( $newtitle );
if ( $page->getMarkedTag() === false ) {
return false;
@@ -833,39 +855,42 @@ class TranslatablePage {
* @return bool
*/
public static function isSourcePage( Title $title ) {
- static $cache = null;
-
- $cacheObj = wfGetCache( CACHE_ANYTHING );
- $cacheKey = wfMemcKey( 'pagetranslation', 'sourcepages' );
-
- if ( $cache === null ) {
- $cache = $cacheObj->get( $cacheKey );
- }
- if ( !is_array( $cache ) ) {
- $cache = self::getTranslatablePages();
- $cacheObj->set( $cacheKey, $cache, 60 * 5 );
- }
+ $cache = ObjectCache::getMainWANInstance();
+ $pcTTL = $cache::TTL_PROC_LONG;
+
+ $translatablePageIds = $cache->getWithSetCallback(
+ $cache->makeKey( 'pagetranslation', 'sourcepages' ),
+ $cache::TTL_MINUTE * 5,
+ function ( $oldValue, &$ttl, array &$setOpts ) {
+ $dbr = wfGetDB( DB_REPLICA );
+ $setOpts += Database::getCacheSetOptions( $dbr );
+
+ return self::getTranslatablePages();
+ },
+ [ 'pcTTL' => $pcTTL, 'pcGroup' => __CLASS__ . ':30' ]
+ );
- return in_array( $title->getArticleID(), $cache );
+ return in_array( $title->getArticleID(), $translatablePageIds );
}
/**
* Get a list of page ids where the latest revision is either tagged or marked
+ * @return array
*/
public static function getTranslatablePages() {
$dbr = TranslateUtils::getSafeReadDB();
- $tables = array( 'revtag', 'page' );
+ $tables = [ 'revtag', 'page' ];
$fields = 'rt_page';
- $conds = array(
+ $conds = [
'rt_page = page_id',
'rt_revision = page_latest',
- 'rt_type' => array( RevTag::getType( 'tp:mark' ), RevTag::getType( 'tp:tag' ) ),
- );
- $options = array( 'GROUP BY' => 'rt_page' );
+ 'rt_type' => [ RevTag::getType( 'tp:mark' ), RevTag::getType( 'tp:tag' ) ],
+ ];
+ $options = [ 'GROUP BY' => 'rt_page' ];
$res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options );
- $results = array();
+ $results = [];
foreach ( $res as $row ) {
$results[] = $row->rt_page;
}
diff --git a/www/wiki/extensions/Translate/tag/TranslatablePageMoveJob.php b/www/wiki/extensions/Translate/tag/TranslatablePageMoveJob.php
new file mode 100644
index 00000000..27f4b48d
--- /dev/null
+++ b/www/wiki/extensions/Translate/tag/TranslatablePageMoveJob.php
@@ -0,0 +1,168 @@
+<?php
+/**
+ * Contains class with job for moving translation pages.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Contains class with job for moving translation pages. Used together with
+ * SpecialPageTranslationMovePage class.
+ *
+ * @ingroup PageTranslation JobQueue
+ */
+class TranslatablePageMoveJob extends Job {
+
+ /**
+ * @param Title $source
+ * @param Title $target
+ * @param array $moves should include base-source and base-target
+ * @param string $summary
+ * @param User $performer
+ * @return TranslatablePageMoveJob
+ */
+ public static function newJob(
+ Title $source, Title $target, array $moves, $summary, User $performer
+ ) {
+ $params = [
+ 'source' => $source->getPrefixedText(),
+ 'target' => $target->getPrefixedText(),
+ 'moves' => $moves,
+ 'summary' => $summary,
+ 'performer' => $performer->getName(),
+ ];
+
+ $self = new self( $target, $params );
+ $self->lock( array_keys( $moves ) );
+ $self->lock( array_values( $moves ) );
+
+ return $self;
+ }
+
+ public function __construct( $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
+ }
+
+ public function run() {
+ $sourceTitle = Title::newFromText( $this->params['source'] );
+ $targetTitle = Title::newFromText( $this->params['target'] );
+ $sourcePage = TranslatablePage::newFromTitle( $sourceTitle );
+ $targetPage = TranslatablePage::newFromTitle( $targetTitle );
+
+ $this->doMoves();
+
+ $this->moveMetadata(
+ $sourcePage->getMessageGroupId(),
+ $targetPage->getMessageGroupId()
+ );
+
+ $entry = new ManualLogEntry( 'pagetranslation', 'moveok' );
+ $entry->setPerformer( User::newFromName( $this->params['performer'] ) );
+ $entry->setParameters( [ 'target' => $this->params['target'] ] );
+ $entry->setTarget( $sourceTitle );
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+
+ // Re-render the pages to get everything in sync
+ MessageGroups::singleton()->recache();
+ // Update message index now so that, when after this job the MoveTranslationUnits hook
+ // runs in deferred updates, it will not run MessageIndexRebuildJob (T175834).
+ MessageIndex::singleton()->rebuild();
+
+ $job = TranslationsUpdateJob::newFromPage( $targetPage );
+ JobQueueGroup::singleton()->push( $job );
+
+ return true;
+ }
+
+ protected function doMoves() {
+ $fuzzybot = FuzzyBot::getUser();
+ $performer = User::newFromName( $this->params['performer'] );
+
+ PageTranslationHooks::$allowTargetEdit = true;
+
+ foreach ( $this->params['moves'] as $source => $target ) {
+ $sourceTitle = Title::newFromText( $source );
+ $targetTitle = Title::newFromText( $target );
+
+ if ( $source === $this->params['source'] ) {
+ $user = $performer;
+ } else {
+ $user = $fuzzybot;
+ }
+
+ $mover = new MovePage( $sourceTitle, $targetTitle );
+ $status = $mover->move( $user, $this->params['summary'], false );
+ if ( !$status->isOK() ) {
+ $entry = new ManualLogEntry( 'pagetranslation', 'movenok' );
+ $entry->setPerformer( $performer );
+ $entry->setTarget( $sourceTitle );
+ $entry->setParameters( [
+ 'target' => $target,
+ 'error' => $status->getErrorsArray(),
+ ] );
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+ }
+
+ $this->unlock( [ $source, $target ] );
+ }
+
+ PageTranslationHooks::$allowTargetEdit = false;
+ }
+
+ protected function moveMetadata( $oldGroupId, $newGroupId ) {
+ $types = [ 'prioritylangs', 'priorityforce', 'priorityreason' ];
+
+ TranslateMetadata::preloadGroups( [ $oldGroupId, $newGroupId ] );
+ foreach ( $types as $type ) {
+ $value = TranslateMetadata::get( $oldGroupId, $type );
+ if ( $value !== false ) {
+ TranslateMetadata::set( $oldGroupId, $type, false );
+ TranslateMetadata::set( $newGroupId, $type, $value );
+ }
+ }
+
+ // Make the changes in aggregate groups metadata, if present in any of them.
+ $aggregateGroups = MessageGroups::getGroupsByType( AggregateMessageGroup::class );
+ TranslateMetadata::preloadGroups( array_keys( $aggregateGroups ) );
+
+ foreach ( $aggregateGroups as $id => $group ) {
+ $subgroups = TranslateMetadata::get( $id, 'subgroups' );
+ if ( $subgroups === false ) {
+ continue;
+ }
+
+ $subgroups = explode( ',', $subgroups );
+ $subgroups = array_flip( $subgroups );
+ if ( isset( $subgroups[$oldGroupId] ) ) {
+ $subgroups[$newGroupId] = $subgroups[$oldGroupId];
+ unset( $subgroups[$oldGroupId] );
+ $subgroups = array_flip( $subgroups );
+ TranslateMetadata::set(
+ $group->getId(),
+ 'subgroups',
+ implode( ',', $subgroups )
+ );
+ }
+ }
+ }
+
+ private function lock( array $titles ) {
+ $cache = wfGetCache( CACHE_ANYTHING );
+ $data = [];
+ foreach ( $titles as $title ) {
+ $data[wfMemcKey( 'pt-lock', sha1( $title ) )] = 'locked';
+ }
+ $cache->setMulti( $data );
+ }
+
+ private function unlock( array $titles ) {
+ $cache = wfGetCache( CACHE_ANYTHING );
+ foreach ( $titles as $title ) {
+ $cache->delete( wfMemcKey( 'pt-lock', sha1( $title ) ) );
+ }
+ }
+}
diff --git a/www/wiki/extensions/Translate/tag/TranslateDeleteJob.php b/www/wiki/extensions/Translate/tag/TranslateDeleteJob.php
index 0c78e7f2..a59f2c6d 100644
--- a/www/wiki/extensions/Translate/tag/TranslateDeleteJob.php
+++ b/www/wiki/extensions/Translate/tag/TranslateDeleteJob.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2008-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,14 +15,14 @@
*/
class TranslateDeleteJob extends Job {
/**
- * @param $target Title
- * @param $base
- * @param $full
- * @param $performer
- * @param $reason
- * @return TranslateDeleteJob
+ * @param Title $target
+ * @param string $base
+ * @param string $full
+ * @param User $performer
+ * @param string $reason
+ * @return self
*/
- public static function newJob( Title $target, $base, $full, /*User*/$performer, $reason ) {
+ public static function newJob( Title $target, $base, $full, /*User*/ $performer, $reason ) {
$job = new self( $target );
$job->setUser( FuzzyBot::getUser() );
$job->setFull( $full );
@@ -38,10 +38,9 @@ class TranslateDeleteJob extends Job {
/**
* @param Title $title
* @param array $params
- * @param int $id
*/
- public function __construct( $title, $params = array(), $id = 0 ) {
- parent::__construct( __CLASS__, $title, $params, $id );
+ public function __construct( $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
}
public function run() {
@@ -55,15 +54,17 @@ class TranslateDeleteJob extends Job {
$reason = $this->getReason();
PageTranslationHooks::$allowTargetEdit = true;
+ PageTranslationHooks::$jobQueueRunning = true;
$error = '';
$wikipage = new WikiPage( $title );
- $ok = $wikipage->doDeleteArticle( "{$summary}: $reason", false, 0, true, $error, $user );
- if ( !$ok ) {
- $params = array(
+ $status = $wikipage->doDeleteArticleReal( "{$summary}: $reason", false, 0, true, $error,
+ $user, [], 'delete', true );
+ if ( !$status->isGood() ) {
+ $params = [
'target' => $base,
- 'error' => $ok,
- );
+ 'errors' => $status->getErrorsArray(),
+ ];
$type = $this->getFull() ? 'deletefnok' : 'deletelnok';
$entry = new ManualLogEntry( 'pagetranslation', $type );
@@ -97,6 +98,7 @@ class TranslateDeleteJob extends Job {
$page->invalidateCache();
}
$title->invalidateCache();
+ PageTranslationHooks::$jobQueueRunning = false;
}
return true;
@@ -127,7 +129,7 @@ class TranslateDeleteJob extends Job {
}
/**
- * @param $performer User|string
+ * @param User|string $performer
*/
public function setPerformer( $performer ) {
if ( is_object( $performer ) ) {
@@ -142,7 +144,7 @@ class TranslateDeleteJob extends Job {
}
/**
- * @param $user User|string
+ * @param User|string $user
*/
public function setUser( $user ) {
if ( is_object( $user ) ) {
diff --git a/www/wiki/extensions/Translate/tag/TranslateMoveJob.php b/www/wiki/extensions/Translate/tag/TranslateMoveJob.php
index 0e429cb2..a1771b1d 100644
--- a/www/wiki/extensions/Translate/tag/TranslateMoveJob.php
+++ b/www/wiki/extensions/Translate/tag/TranslateMoveJob.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2008-2010, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,14 +16,14 @@
*/
class TranslateMoveJob extends Job {
/**
- * @param $source Title
- * @param $target Title
- * @param $params array, should include base-source and base-target
- * @param $performer
- * @return TranslateMoveJob
+ * @param Title $source
+ * @param Title $target
+ * @param array $params should include base-source and base-target
+ * @param User $performer
+ * @return self
*/
public static function newJob( Title $source, Title $target, array $params,
- /*User*/$performer
+ /*User*/ $performer
) {
$job = new self( $source );
$job->setUser( FuzzyBot::getUser() );
@@ -41,10 +41,9 @@ class TranslateMoveJob extends Job {
/**
* @param Title $title
* @param array $params
- * @param int $id
*/
- public function __construct( $title, $params = array(), $id = 0 ) {
- parent::__construct( __CLASS__, $title, $params, $id );
+ public function __construct( $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
}
public function run() {
@@ -71,10 +70,10 @@ class TranslateMoveJob extends Job {
// Don't check perms, don't leave a redirect
$ok = $title->moveTo( $target, false, $summary, false );
if ( !$ok ) {
- $params = array(
+ $params = [
'target' => $target->getPrefixedText(),
'error' => $ok,
- );
+ ];
$entry = new ManualLogEntry( 'pagetranslation', 'movenok' );
$entry->setPerformer( $doer );
@@ -98,9 +97,9 @@ class TranslateMoveJob extends Job {
if ( $last ) {
$cache->delete( $key );
- $params = array(
+ $params = [
'target' => $this->params['base-target'],
- );
+ ];
$entry = new ManualLogEntry( 'pagetranslation', 'moveok' );
$entry->setPerformer( $doer );
@@ -137,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();
@@ -185,7 +187,7 @@ class TranslateMoveJob extends Job {
/**
* Adapted from wfSuppressWarnings to allow not leaving redirects.
- * @param $end bool
+ * @param bool $end
*/
public static function forceRedirects( $end = false ) {
static $suppressCount = 0;
@@ -207,9 +209,7 @@ class TranslateMoveJob extends Job {
}
} else {
if ( !$suppressCount ) {
- $originalLevel = isset( $wgGroupPermissions['*']['suppressredirect'] ) ?
- $wgGroupPermissions['*']['suppressredirect'] :
- null;
+ $originalLevel = $wgGroupPermissions['*']['suppressredirect'] ?? null;
$wgGroupPermissions['*']['suppressredirect'] = true;
}
++$suppressCount;
diff --git a/www/wiki/extensions/Translate/tag/TranslateRenderJob.php b/www/wiki/extensions/Translate/tag/TranslateRenderJob.php
index 7e731d8c..1b6ff517 100644
--- a/www/wiki/extensions/Translate/tag/TranslateRenderJob.php
+++ b/www/wiki/extensions/Translate/tag/TranslateRenderJob.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,8 +15,8 @@
class TranslateRenderJob extends Job {
/**
- * @param $target Title
- * @return TranslateRenderJob
+ * @param Title $target
+ * @return self
*/
public static function newJob( Title $target ) {
$job = new self( $target );
@@ -30,15 +30,15 @@ class TranslateRenderJob extends Job {
/**
* @param Title $title
* @param array $params
- * @param int $id
*/
- public function __construct( $title, $params = array(), $id = 0 ) {
- parent::__construct( __CLASS__, $title, $params, $id );
- $this->params = $params;
+ public function __construct( $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
$this->removeDuplicates = true;
}
public function run() {
+ global $wgTranslateKeepOutdatedTranslations;
+
// Initialization
$title = $this->title;
list( , $code ) = TranslateUtils::figureMessage( $title->getPrefixedText() );
@@ -46,15 +46,16 @@ class TranslateRenderJob extends Job {
// Return the actual translation page...
$page = TranslatablePage::isTranslationPage( $title );
if ( !$page ) {
- var_dump( $this->params );
- var_dump( $title );
- throw new MWException( 'Oops, this should not happen!' );
+ throw new MWException( "Cannot render translation page for {$title->getPrefixedText()}!" );
}
$group = $page->getMessageGroup();
$collection = $group->initCollection( $code );
- $text = $page->getParse()->getTranslationPageText( $collection );
+ $text = $page->getParse()->getTranslationPageText(
+ $collection,
+ $wgTranslateKeepOutdatedTranslations
+ );
// Other stuff
$user = $this->getUser();
@@ -90,7 +91,7 @@ class TranslateRenderJob extends Job {
}
/**
- * @param $user User|string
+ * @param User|string $user
*/
public function setUser( $user ) {
if ( $user instanceof User ) {
diff --git a/www/wiki/extensions/Translate/tag/TranslationsUpdateJob.php b/www/wiki/extensions/Translate/tag/TranslationsUpdateJob.php
new file mode 100644
index 00000000..f3020f41
--- /dev/null
+++ b/www/wiki/extensions/Translate/tag/TranslationsUpdateJob.php
@@ -0,0 +1,127 @@
+<?php
+/**
+ * Job for updating translation units and translation pages when
+ * a translatable page is marked for translation.
+ *
+ * @note MessageUpdateJobs from getTranslationUnitJobs() should be run
+ * before the TranslateRenderJobs are run so that the latest changes can
+ * take effect on the translation pages.
+ *
+ * @since 2016.03
+ */
+class TranslationsUpdateJob extends Job {
+ /**
+ * @inheritDoc
+ */
+ public function __construct( Title $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
+ }
+
+ /**
+ * Create a job that updates a translation page.
+ *
+ * If a list of sections is provided, then the job will also update translation
+ * unit pages.
+ *
+ * @param TranslatablePage $page
+ * @param TPSection[] $sections
+ * @return TranslationsUpdateJob
+ * @since 2018.07
+ */
+ public static function newFromPage( TranslatablePage $page, array $sections = [] ) {
+ $params = [];
+ $params[ 'sections' ] = [];
+ foreach ( $sections as $section ) {
+ $params[ 'sections' ][] = $section->serializeToArray();
+ }
+
+ return new self( $page->getTitle(), $params );
+ }
+
+ public function run() {
+ $page = TranslatablePage::newFromTitle( $this->title );
+ $sections = $this->params[ 'sections' ];
+ foreach ( $sections as $index => $section ) {
+ // Old jobs stored sections as objects because they were serialized and
+ // unserialized transparently. That is no longer supported, so we
+ // convert manually to primitive types first (to an PHP array).
+ if ( is_array( $section ) ) {
+ $sections[ $index ] = TPSection::unserializeFromArray( $section );
+ }
+ }
+
+ // Units should be updated before the render jobs are run
+ $unitJobs = self::getTranslationUnitJobs( $page, $sections );
+ foreach ( $unitJobs as $job ) {
+ $job->run();
+ }
+
+ // Ensure we are using the latest group definitions. This is needed so
+ // that in long running scripts we do see the page which was just
+ // marked for translation. Otherwise getMessageGroup in the next line
+ // returns null. There is no need to regenerate the global cache.
+ MessageGroups::singleton()->clearProcessCache();
+ // Ensure fresh definitions for MessageIndex and stats
+ $page->getMessageGroup()->clearCaches();
+
+ MessageIndex::singleton()->rebuild();
+
+ // Refresh translations statistics
+ $id = $page->getMessageGroupId();
+ MessageGroupStats::forGroup( $id, MessageGroupStats::FLAG_NO_CACHE );
+
+ $wikiPage = WikiPage::factory( $page->getTitle() );
+ $wikiPage->doPurge();
+
+ $renderJobs = self::getRenderJobs( $page );
+ JobQueueGroup::singleton()->push( $renderJobs );
+ return true;
+ }
+
+ /**
+ * Creates jobs needed to create or update all translation page definitions.
+ * @param TranslatablePage $page
+ * @param TPSection[] $sections
+ * @return Job[]
+ * @since 2013-01-28
+ */
+ public static function getTranslationUnitJobs( TranslatablePage $page, array $sections ) {
+ $jobs = [];
+
+ $code = $page->getSourceLanguageCode();
+ $prefix = $page->getTitle()->getPrefixedText();
+
+ foreach ( $sections as $s ) {
+ $unit = $s->name;
+ $title = Title::makeTitle( NS_TRANSLATIONS, "$prefix/$unit/$code" );
+
+ $fuzzy = $s->type === 'changed';
+ $jobs[] = MessageUpdateJob::newJob( $title, $s->getTextWithVariables(), $fuzzy );
+ }
+
+ return $jobs;
+ }
+
+ /**
+ * Creates jobs needed to create or update all translation pages.
+ * @param TranslatablePage $page
+ * @return Job[]
+ * @since 2013-01-28
+ */
+ public static function getRenderJobs( TranslatablePage $page ) {
+ $jobs = [];
+
+ $jobTitles = $page->getTranslationPages();
+ // $jobTitles may have the source language title already but duplicate TranslateRenderJobs
+ // are not executed so it's not run twice for the source language page present. This is
+ // added to ensure that we create the source language page from the very beginning.
+ $sourceLangTitle = $page->getTitle()->getSubpage( $page->getSourceLanguageCode() );
+ $jobTitles[] = $sourceLangTitle;
+ foreach ( $jobTitles as $t ) {
+ $jobs[] = TranslateRenderJob::newJob( $t );
+ }
+
+ return $jobs;
+ }
+
+}
diff --git a/www/wiki/extensions/Translate/tests/generateRandomSandboxData.php b/www/wiki/extensions/Translate/tests/generateRandomSandboxData.php
index 7cdc6251..78e2d1b5 100644
--- a/www/wiki/extensions/Translate/tests/generateRandomSandboxData.php
+++ b/www/wiki/extensions/Translate/tests/generateRandomSandboxData.php
@@ -3,7 +3,7 @@
* Script to generate some random data to help testing sandbox.
*
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -44,7 +44,7 @@ class TranslateGenerateRandomSandboxData extends Maintenance {
for ( $j = 0; $j < $count; $j++ ) {
$title = Title::makeTitle( NS_MEDIAWIKI, wfRandomString( 24 ) . '/' . $language );
- $value = array( 'Pupu söi' );
+ $value = [ 'Pupu söi' ];
for ( $k = rand( 0, 20 ); $k > 0; $k-- ) {
$value[] = wfRandomString( rand( 1, 28 ) );
}
@@ -59,7 +59,7 @@ class TranslateGenerateRandomSandboxData extends Maintenance {
/*
* Gauss functions are based on Mark Baker's code from
- * http://stackoverflow.com/questions/5188900/bell-curve-algorithm-with-php
+ * https://stackoverflow.com/questions/5188900/bell-curve-algorithm-with-php
*/
function wfGauss() {
@@ -97,7 +97,7 @@ function wfGaussMs( $mean, $stddev ) {
function wfRandom01() {
// Returns random number using mt_rand() with a flat distribution from 0 to 1 inclusive
- return (float) mt_rand() / (float) mt_getrandmax();
+ return (float)mt_rand() / (float)mt_getrandmax();
}
function wfRandomPn() {
@@ -105,5 +105,5 @@ function wfRandomPn() {
return ( 2.0 * wfRandom01() ) - 1.0;
}
-$maintClass = 'TranslateGenerateRandomSandboxData';
+$maintClass = TranslateGenerateRandomSandboxData::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/Translate/tests/phpunit/BlackListTest.php b/www/wiki/extensions/Translate/tests/phpunit/BlackListTest.php
index 19806b3e..0e91f765 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/BlackListTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/BlackListTest.php
@@ -1,11 +1,9 @@
<?php
/**
- * Unit tests.
- *
* @file
* @author Santhosh Thottingal
* @copyright Copyright © 2012-2013, Santhosh Thottingal
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -18,18 +16,18 @@ class BlackListTest extends MediaWikiTestCase {
*/
protected $group;
protected $codes;
- protected $groupConfiguration = array(
- 'BASIC' => array(
+ protected $groupConfiguration = [
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
- ),
- 'FILES' => array(
+ ],
+ 'FILES' => [
'class' => 'TestFFS',
- ),
- );
+ ],
+ ];
protected function setUp() {
parent::setUp();
@@ -49,9 +47,9 @@ class BlackListTest extends MediaWikiTestCase {
public function testAllBlackList() {
$conf = $this->groupConfiguration;
- $conf['LANGUAGES'] = array(
+ $conf['LANGUAGES'] = [
'blacklist' => '*',
- );
+ ];
$group = MessageGroupBase::factory( $conf );
$translatableLanguages = $group->getTranslatableLanguages();
$this->assertEquals( count( $translatableLanguages ), 0 );
@@ -59,9 +57,9 @@ class BlackListTest extends MediaWikiTestCase {
public function testAllWhiteList() {
$conf = $this->groupConfiguration;
- $conf['LANGUAGES'] = array(
+ $conf['LANGUAGES'] = [
'whitelist' => '*',
- );
+ ];
$group = MessageGroupBase::factory( $conf );
$translatableLanguages = $group->getTranslatableLanguages();
$this->assertNull( $translatableLanguages );
@@ -69,10 +67,10 @@ class BlackListTest extends MediaWikiTestCase {
public function testWhiteListOverrideBlackList() {
$conf = $this->groupConfiguration;
- $conf['LANGUAGES'] = array(
- 'whitelist' => array( 'en', 'hi', 'ta' ),
- 'blacklist' => array( 'ta' ),
- );
+ $conf['LANGUAGES'] = [
+ 'whitelist' => [ 'en', 'hi', 'ta' ],
+ 'blacklist' => [ 'ta' ],
+ ];
$group = MessageGroupBase::factory( $conf );
$translatableLanguages = $group->getTranslatableLanguages();
$this->assertTrue( isset( $translatableLanguages['ta'] ) );
@@ -81,9 +79,9 @@ class BlackListTest extends MediaWikiTestCase {
public function testSomeBlackList() {
$conf = $this->groupConfiguration;
- $conf['LANGUAGES'] = array(
- 'blacklist' => array( 'or', 'hi' ),
- );
+ $conf['LANGUAGES'] = [
+ 'blacklist' => [ 'or', 'hi' ],
+ ];
$group = MessageGroupBase::factory( $conf );
$translatableLanguages = $group->getTranslatableLanguages();
$this->assertTrue( !isset( $translatableLanguages['hi'] ) );
diff --git a/www/wiki/extensions/Translate/tests/phpunit/HookDocTest.php b/www/wiki/extensions/Translate/tests/phpunit/HookDocTest.php
index cf51f72d..242c481c 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/HookDocTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/HookDocTest.php
@@ -5,14 +5,14 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
class HookDocTest extends MediaWikiTestCase {
- protected $documented = array();
- protected $used = array();
- protected $paths = array(
- 'php' => array(
+ protected $documented = [];
+ protected $used = [];
+ protected $paths = [
+ 'php' => [
'',
'api',
'ffs',
@@ -23,11 +23,11 @@ class HookDocTest extends MediaWikiTestCase {
'ttmserver',
'utils',
'webservices',
- ),
- 'js' => array(
+ ],
+ 'js' => [
'resources/js',
- ),
- );
+ ],
+ ];
protected function setUp() {
parent::setUp();
@@ -72,11 +72,11 @@ class HookDocTest extends MediaWikiTestCase {
protected static function getJSHooksFromFile( $file ) {
$content = file_get_contents( $file );
- $m = array();
- preg_match_all( '/(?:mw\.translateHooks\.run)\(\s*([\'"])(.*?)\1/', $content, $m );
- $hooks = array();
- foreach ( $m[2] as $hook ) {
- $hooks[$hook] = array();
+ $m = [];
+ preg_match_all( '/\bmw\.hook\(\s*[\'"]([^\'"]+)[\'"]\s*\).fire\(/', $content, $m );
+ $hooks = [];
+ foreach ( $m[1] as $hook ) {
+ $hooks[$hook] = [];
}
return $hooks;
@@ -84,18 +84,18 @@ class HookDocTest extends MediaWikiTestCase {
protected static function getPHPHooksFromFile( $file ) {
$content = file_get_contents( $file );
- $m = array();
- preg_match_all( '/(?:wfRunHooks|Hooks\:\:run)\(\s*([\'"])(.*?)\1/', $content, $m );
- $hooks = array();
- foreach ( $m[2] as $hook ) {
- $hooks[$hook] = array();
+ $m = [];
+ preg_match_all( '/\bHooks::run\(\s*[\'"]([^\'"]+)/', $content, $m );
+ $hooks = [];
+ foreach ( $m[1] as $hook ) {
+ $hooks[$hook] = [];
}
return $hooks;
}
protected static function getHooksFromPath( $path, $callback ) {
- $hooks = array();
+ $hooks = [];
$dh = opendir( $path );
if ( $dh ) {
$file = readdir( $dh );
@@ -115,12 +115,12 @@ class HookDocTest extends MediaWikiTestCase {
preg_match( '/^;([^ ]+):/', $block, $match );
$name = $match[1];
preg_match_all( '/^ ([^ ]+)\s+([ ^])/', $block, $matches, PREG_SET_ORDER );
- $params = array();
+ $params = [];
foreach ( $matches as $match ) {
$params[$match[2]] = $match[1];
}
- return array( $name, $params );
+ return [ $name, $params ];
}
public function testHookIsDocumentedPHP() {
diff --git a/www/wiki/extensions/Translate/tests/phpunit/MediaWikiMessageCheckerTest.php b/www/wiki/extensions/Translate/tests/phpunit/MediaWikiMessageCheckerTest.php
index cf564e54..11a4a11d 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/MediaWikiMessageCheckerTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/MediaWikiMessageCheckerTest.php
@@ -1,16 +1,11 @@
<?php
/**
- * Unit tests.
- *
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-/**
- * Unit tests for MediaWikiMessageCheckerTest class.
- */
class MediaWikiMessageCheckerTest extends MediaWikiTestCase {
/**
@@ -22,11 +17,11 @@ class MediaWikiMessageCheckerTest extends MediaWikiTestCase {
}
public function getPluralFormCountProvider() {
- return array(
- array( 2, 'en', 'English has two plural forms' ),
- array( 3, 'ro', 'Romanian has three plural forms' ),
- array( 5, 'br', 'Breton has five plural forms' ),
- );
+ return [
+ [ 2, 'en', 'English has two plural forms' ],
+ [ 3, 'ro', 'Romanian has three plural forms' ],
+ [ 5, 'br', 'Breton has five plural forms' ],
+ ];
}
/**
@@ -38,55 +33,55 @@ class MediaWikiMessageCheckerTest extends MediaWikiTestCase {
}
public function getPluralFormsProvider() {
- return array(
- array(
- array( array( '1', '2' ) ),
+ return [
+ [
+ [ [ '1', '2' ] ],
'a{{PLURAL:#|1|2}}b',
'one plural magic word is parsed correctly'
- ),
+ ],
- array(
- array( array( '1', '2' ), array( '3', '4' ) ),
+ [
+ [ [ '1', '2' ], [ '3', '4' ] ],
'{{PLURAL:#|1|2}}{{PLURAL:#|3|4}}',
'two plural magic words are parsed correctly'
- ),
+ ],
- array(
- array( array( '1', '2{{}}3' ) ),
+ [
+ [ [ '1', '2{{}}3' ] ],
'a{{PLURAL:#|1|2{{}}3}}',
'one plural magic word with curlies inside is parsed correctly'
- ),
+ ],
- array(
- array( array( '0=0', '1=one', '1', '2' ) ),
+ [
+ [ [ '0=0', '1=one', '1', '2' ] ],
'a{{PLURAL:#|0=0|1=one|1|2}}',
'one plural magic word with explicit forms is parsed correctly'
- ),
- array(
- array(),
+ ],
+ [
+ [],
'a{{PLURAL:#|0=0|1=one|1|2}',
'unclosed plural tag is ignored'
- ),
- array(
- array( array( '1=foo', '{{GENDER:#|he}}' ) ),
+ ],
+ [
+ [ [ '1=foo', '{{GENDER:#|he}}' ] ],
'a{{PLURAL:#|1=foo|{{GENDER:#|he}}}}',
'pipes in subtemplates are ignored'
- ),
- array(
- array( array( '[[Special:A|письмо]]', '[[Special:A|писем]]', '[[Special:A|письма]]' ) ),
+ ],
+ [
+ [ [ '[[Special:A|письмо]]', '[[Special:A|писем]]', '[[Special:A|письма]]' ] ],
'{{PLURAL:#|[[Special:A|письмо]]|[[Special:A|писем]]|[[Special:A|письма]]}}',
'pipes in links are ignored'
- ),
- array(
- array(
- array( 'a', 'b' ),
- array( 'c', 'd' ),
- array( '{{PLURAL:#|a|b}}', '{{PLURAL:#|c|d}}' ),
- ),
+ ],
+ [
+ [
+ [ 'a', 'b' ],
+ [ 'c', 'd' ],
+ [ '{{PLURAL:#|a|b}}', '{{PLURAL:#|c|d}}' ],
+ ],
'{{PLURAL:#|{{PLURAL:#|a|b}}|{{PLURAL:#|c|d}}}}',
'nested plurals are handled correctly'
- )
- );
+ ]
+ ];
}
/**
@@ -98,24 +93,24 @@ class MediaWikiMessageCheckerTest extends MediaWikiTestCase {
}
public function removeExplicitPluralFormsProvider() {
- return array(
- array(
- array( '1', '2' ),
- array( '1', '2' ),
+ return [
+ [
+ [ '1', '2' ],
+ [ '1', '2' ],
'default forms are not removed',
- ),
+ ],
- array(
- array( '1', '2' ),
- array( '0=0', '1', '0=0', '2', '1=one' ),
+ [
+ [ '1', '2' ],
+ [ '0=0', '1', '0=0', '2', '1=one' ],
'explicit forms are removed regardless of position',
- ),
+ ],
- array(
- array( '1', '2' ),
- array( '1', '2', '500=lots' ),
+ [
+ [ '1', '2' ],
+ [ '1', '2', '500=lots' ],
'works for any number',
- ),
- );
+ ],
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/MessageCollectionTest.php b/www/wiki/extensions/Translate/tests/phpunit/MessageCollectionTest.php
index d77678d1..6032df89 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/MessageCollectionTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/MessageCollectionTest.php
@@ -1,13 +1,11 @@
<?php
/**
- * Tests for MessageCollection.
* @author Niklas Laxström
* @file
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
- * Tests for MessageCollection.
* @group Database
* @group medium
*/
@@ -16,14 +14,14 @@ class MessageCollectionTest extends MediaWikiTestCase {
parent::setUp();
global $wgHooks;
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgHooks' => $wgHooks,
- 'wgTranslateTranslationServices' => array(),
- ) );
- $wgHooks['TranslatePostInitGroups'] = array( array( $this, 'getTestGroups' ) );
+ 'wgTranslateTranslationServices' => [],
+ ] );
+ $wgHooks['TranslatePostInitGroups'] = [ [ $this, 'getTestGroups' ] ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
@@ -31,18 +29,17 @@ class MessageCollectionTest extends MediaWikiTestCase {
}
public function getTestGroups( &$list ) {
- $messages = array(
+ $messages = [
'translated' => 'bunny',
'untranslated' => 'fanny',
- );
+ ];
$list['test-group'] = new MockWikiMessageGroup( 'test-group', $messages );
return false;
}
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 +60,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/www/wiki/extensions/Translate/tests/phpunit/MessageGroupBaseTest.php b/www/wiki/extensions/Translate/tests/phpunit/MessageGroupBaseTest.php
index be2dfa50..2a76de70 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/MessageGroupBaseTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/MessageGroupBaseTest.php
@@ -7,15 +7,15 @@ class MessageGroupBaseTest extends MediaWikiTestCase {
*/
protected $group;
- protected $groupConfiguration = array(
- 'BASIC' => array(
+ protected $groupConfiguration = [
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
- ),
- );
+ ],
+ ];
protected function setUp() {
parent::setUp();
@@ -61,11 +61,11 @@ class MessageGroupBaseTest extends MediaWikiTestCase {
public function testGetNamespaceNumber() {
$conf = $this->groupConfiguration;
- $conf['BASIC']['namespace'] = NS_IMAGE;
+ $conf['BASIC']['namespace'] = NS_FILE;
$this->group = MessageGroupBase::factory( $conf );
$this->assertEquals(
- NS_IMAGE,
+ NS_FILE,
$this->group->getNamespace(),
'should parse integer namespace number.'
);
@@ -77,19 +77,115 @@ class MessageGroupBaseTest extends MediaWikiTestCase {
$this->group = MessageGroupBase::factory( $conf );
$this->assertEquals(
- NS_IMAGE,
+ NS_FILE,
$this->group->getNamespace(),
'should parse string namespace name.'
);
}
- /**
- * @expectedException MWException
- * @expectedExceptionMessage No valid namespace defined
- */
+ public function testInsertablesSuggesterClass() {
+ $conf = $this->groupConfiguration;
+ $conf['INSERTABLES']['class'] = 'FakeInsertablesSuggester';
+ $this->group = MessageGroupBase::factory( $conf );
+
+ $this->assertArrayEquals(
+ [ new Insertable( 'Fake', 'Insertables', 'Suggester' ) ],
+ $this->group->getInsertablesSuggester()->getInsertables( '' ),
+ 'should correctly get an InsertablesSuggester using \'class\' option.'
+ );
+ }
+
+ public function testInsertablesSuggesterClasses() {
+ $conf = $this->groupConfiguration;
+ $conf['INSERTABLES']['classes'] = [
+ 'FakeInsertablesSuggester',
+ 'AnotherFakeInsertablesSuggester',
+ ];
+ $this->group = MessageGroupBase::factory( $conf );
+
+ $this->assertArrayEquals(
+ [
+ new Insertable( 'Fake', 'Insertables', 'Suggester' ),
+ new Insertable( 'AnotherFake', 'Insertables', 'Suggester' ),
+ ],
+ $this->group->getInsertablesSuggester()->getInsertables( '' ),
+ 'should correctly get InsertablesSuggesters using \'classes\' option.'
+ );
+ }
+
+ public function testInsertablesSuggesterClassAndClasses() {
+ $conf = $this->groupConfiguration;
+ $conf['INSERTABLES']['class'] = 'FakeInsertablesSuggester';
+ $conf['INSERTABLES']['classes'] = [ 'AnotherFakeInsertablesSuggester' ];
+ $this->group = MessageGroupBase::factory( $conf );
+
+ $this->assertArrayEquals(
+ [
+ new Insertable( 'Fake', 'Insertables', 'Suggester' ),
+ new Insertable( 'AnotherFake', 'Insertables', 'Suggester' ),
+ ],
+ $this->group->getInsertablesSuggester()->getInsertables( '' ),
+ 'should correctly get InsertablesSuggesters using both \'class\' and \'classes\' options.'
+ );
+
+ $conf['INSERTABLES']['classes'][] = 'FakeInsertablesSuggester';
+ $conf['INSERTABLES']['classes'][] = 'AnotherFakeInsertablesSuggester';
+ $this->group = MessageGroupBase::factory( $conf );
+
+ $this->assertArrayEquals(
+ [
+ new Insertable( 'Fake', 'Insertables', 'Suggester' ),
+ new Insertable( 'AnotherFake', 'Insertables', 'Suggester' ),
+ ],
+ $this->group->getInsertablesSuggester()->getInsertables( '' ),
+ 'should correctly get InsertablesSuggesters using ' .
+ 'both \'class\' and \'classes\' options and removing duplicates.'
+ );
+ }
+
public function testGetNamespaceInvalid() {
$conf = $this->groupConfiguration;
$conf['BASIC']['namespace'] = 'ergweofijwef';
+ $this->setExpectedException( MWException::class, 'No valid namespace defined' );
MessageGroupBase::factory( $conf );
}
+
+ public function testModifyMessageGroupStates() {
+ // Create a basic workflow.
+ $this->setMwGlobals( [
+ 'wgTranslateWorkflowStates' => [
+ 'progress' => [ 'color' => 'd33' ],
+ 'proofreading' => [ 'color' => 'fc3' ],
+ ],
+ ] );
+ // Install a special permission when the group ID is matched.
+ $this->setTemporaryHook(
+ 'Translate:modifyMessageGroupStates',
+ function ( $groupId, &$conf ) {
+ if ( $groupId === 'test-id' ) {
+ // No users have this.
+ $conf['proofreading']['right'] = 'inobtanium';
+ }
+ }
+ );
+
+ $expectedStates = [
+ 'progress' => [ 'color' => 'd33' ],
+ 'proofreading' => [ 'color' => 'fc3', 'right' => 'inobtanium' ],
+ ];
+ $states = $this->group->getMessageGroupStates()->getStates();
+ $this->assertEquals( $expectedStates, $states );
+ }
+}
+
+class FakeInsertablesSuggester implements InsertablesSuggester {
+ public function getInsertables( $text ) {
+ return [ new Insertable( 'Fake', 'Insertables', 'Suggester' ) ];
+ }
+}
+
+class AnotherFakeInsertablesSuggester implements InsertablesSuggester {
+ public function getInsertables( $text ) {
+ return [ new Insertable( 'AnotherFake', 'Insertables', 'Suggester' ) ];
+ }
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php b/www/wiki/extensions/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php
index 6f8961b8..e96e8bee 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php
@@ -9,22 +9,22 @@ class MessageGroupStatesUpdaterJobTest extends MediaWikiTestCase {
parent::setUp();
global $wgHooks;
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgHooks' => $wgHooks,
- 'wgTranslateTranslationServices' => array(),
- 'wgTranslateMessageNamespaces' => array( NS_MEDIAWIKI ),
- ) );
- $wgHooks['TranslatePostInitGroups'] = array( array( $this, 'getTestGroups' ) );
+ 'wgTranslateTranslationServices' => [],
+ 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ],
+ ] );
+ $wgHooks['TranslatePostInitGroups'] = [ [ $this, 'getTestGroups' ] ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
}
public function getTestGroups( &$list ) {
- $messages = array( 'key1' => 'msg1', 'key2' => 'msg2' );
+ $messages = [ 'key1' => 'msg1', 'key2' => 'msg2' ];
$list['group-trans'] = new MessageGroupWithTransitions( 'group-trans', $messages );
- $list['group-notrans'] = new MessageGroupWithoutTransitions( 'group-notrans', array() );
+ $list['group-notrans'] = new MessageGroupWithoutTransitions( 'group-notrans', [] );
return false;
}
@@ -41,23 +41,23 @@ class MessageGroupStatesUpdaterJobTest extends MediaWikiTestCase {
* @dataProvider provideStatValues
*/
public function testGetStatValue( $type, $expected ) {
- $stats = array(
+ $stats = [
MessageGroupStats::TOTAL => 666,
MessageGroupStats::FUZZY => 111,
MessageGroupStats::TRANSLATED => 222,
MessageGroupStats::PROOFREAD => 111,
- );
+ ];
$actual = MessageGroupStatesUpdaterJob::getStatValue( $stats, $type );
$this->assertEquals( $expected, $actual );
}
public static function provideStatValues() {
- return array(
- array( 'UNTRANSLATED', 333 ),
- array( 'OUTDATED', 111 ),
- array( 'TRANSLATED', 222 ),
- array( 'PROOFREAD', 111 ),
- );
+ return [
+ [ 'UNTRANSLATED', 333 ],
+ [ 'OUTDATED', 111 ],
+ [ 'TRANSLATED', 222 ],
+ [ 'PROOFREAD', 111 ],
+ ];
}
/**
@@ -69,38 +69,38 @@ class MessageGroupStatesUpdaterJobTest extends MediaWikiTestCase {
}
public static function provideMatchCondition() {
- return array(
- array( true, 0, 'ZERO', 666 ),
- array( false, 1, 'ZERO', 666 ),
- array( true, 1, 'NONZERO', 666 ),
- array( false, 0, 'NONZERO', 666 ),
- array( true, 666, 'MAX', 666 ),
- array( false, 0, 'MAX', 666 ),
- array( false, 12, 'MAX', 666 ),
- );
+ return [
+ [ true, 0, 'ZERO', 666 ],
+ [ false, 1, 'ZERO', 666 ],
+ [ true, 1, 'NONZERO', 666 ],
+ [ false, 0, 'NONZERO', 666 ],
+ [ true, 666, 'MAX', 666 ],
+ [ false, 0, 'MAX', 666 ],
+ [ false, 12, 'MAX', 666 ],
+ ];
}
public function testGetNewState() {
$group = MessageGroups::getGroup( 'group-trans' );
$transitions = $group->getMessageGroupStates()->getConditions();
- $stats = array( 5, 0, 0, 0 );
+ $stats = [ 5, 0, 0, 0 ];
$newstate = MessageGroupStatesUpdaterJob::getNewState( $stats, $transitions );
$this->assertEquals( 'unset', $newstate, 'all zero, should be unset' );
- $stats = array( 5, 1, 0, 0 );
+ $stats = [ 5, 1, 0, 0 ];
$newstate = MessageGroupStatesUpdaterJob::getNewState( $stats, $transitions );
$this->assertEquals( 'inprogress', $newstate, 'one translated message' );
- $stats = array( 5, 0, 1, 0 );
+ $stats = [ 5, 0, 1, 0 ];
$newstate = MessageGroupStatesUpdaterJob::getNewState( $stats, $transitions );
$this->assertEquals( 'inprogress', $newstate, 'one outdated message' );
- $stats = array( 5, 1, 1, 0 );
+ $stats = [ 5, 1, 1, 0 ];
$newstate = MessageGroupStatesUpdaterJob::getNewState( $stats, $transitions );
$this->assertEquals( 'inprogress', $newstate, 'one translated and one outdated message' );
- $stats = array( 5, 5, 0, 0 );
+ $stats = [ 5, 5, 0, 0 ];
$newstate = MessageGroupStatesUpdaterJob::getNewState( $stats, $transitions );
$this->assertEquals( 'proofreading', $newstate, 'all translated' );
}
@@ -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...
@@ -189,7 +189,7 @@ class MockMessageHandle extends MessageHandle {
}
public function getGroupIds() {
- return array( 'group-trans', 'group-notrans' );
+ return [ 'group-trans', 'group-notrans' ];
}
}
@@ -201,20 +201,20 @@ class MessageGroupWithoutTransitions extends MockWikiMessageGroup {
class MessageGroupWithTransitions extends MockWikiMessageGroup {
public function getMessageGroupStates() {
- return new MessageGroupStates( array(
- 'state conditions' => array(
- array( 'ready', array( 'PROOFREAD' => 'MAX' ) ),
- array( 'proofreading', array( 'TRANSLATED' => 'MAX' ) ),
- array(
+ return new MessageGroupStates( [
+ 'state conditions' => [
+ [ 'ready', [ 'PROOFREAD' => 'MAX' ] ],
+ [ 'proofreading', [ 'TRANSLATED' => 'MAX' ] ],
+ [
'unset',
- array(
+ [
'UNTRANSLATED' => 'MAX',
'OUTDATED' => 'ZERO',
'TRANSLATED' => 'ZERO'
- )
- ),
- array( 'inprogress', array( 'UNTRANSLATED' => 'NONZERO' ) ),
- )
- ) );
+ ]
+ ],
+ [ 'inprogress', [ 'UNTRANSLATED' => 'NONZERO' ] ],
+ ]
+ ] );
}
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/MessageGroupsTest.php b/www/wiki/extensions/Translate/tests/phpunit/MessageGroupsTest.php
index 9d6190d3..7a483e5f 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/MessageGroupsTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/MessageGroupsTest.php
@@ -1,10 +1,8 @@
<?php
/**
- * Unit tests.
- *
* @author Niklas Laxström
* @file
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,21 +13,21 @@ class MessageGroupsTest extends MediaWikiTestCase {
protected function setUp() {
parent::setUp();
- $conf = array(
+ $conf = [
__DIR__ . '/data/ParentGroups.yaml',
- );
+ ];
global $wgHooks;
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgHooks' => $wgHooks,
'wgTranslateGroupFiles' => $conf,
- 'wgTranslateTranslationServices' => array(),
- 'wgTranslateMessageNamespaces' => array( NS_MEDIAWIKI ),
- ) );
- $wgHooks['TranslatePostInitGroups'] = array( 'MessageGroups::getConfiguredGroups' );
+ 'wgTranslateTranslationServices' => [],
+ 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ],
+ ] );
+ $wgHooks['TranslatePostInitGroups'] = [ 'MessageGroups::getConfiguredGroups' ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
@@ -46,34 +44,34 @@ class MessageGroupsTest extends MediaWikiTestCase {
}
public static function provideGroups() {
- $cases = array();
- $cases[] = array(
- array( array( 'root1' ), array( 'root2' ) ),
+ $cases = [];
+ $cases[] = [
+ [ [ 'root1' ], [ 'root2' ] ],
'twoparents'
- );
+ ];
- $cases[] = array(
- array( array( 'root3', 'sub1' ), array( 'root3', 'sub2' ) ),
+ $cases[] = [
+ [ [ 'root3', 'sub1' ], [ 'root3', 'sub2' ] ],
'oneparent-twopaths'
- );
+ ];
- $cases[] = array(
- array(
- array( 'root4' ),
- array( 'root4', 'nested1' ),
- array( 'root4', 'nested1', 'nested2' ),
- array( 'root4', 'nested2' ),
- ),
+ $cases[] = [
+ [
+ [ 'root4' ],
+ [ 'root4', 'nested1' ],
+ [ 'root4', 'nested1', 'nested2' ],
+ [ 'root4', 'nested2' ],
+ ],
'multilevelnested'
- );
+ ];
return $cases;
}
public function testHaveSingleSourceLanguage() {
- $this->setMwGlobals( array(
- 'wgTranslateGroupFiles' => array( __DIR__ . '/data/MixedSourceLanguageGroups.yaml' ),
- ) );
+ $this->setMwGlobals( [
+ 'wgTranslateGroupFiles' => [ __DIR__ . '/data/MixedSourceLanguageGroups.yaml' ],
+ ] );
MessageGroups::singleton()->recache();
$enGroup1 = MessageGroups::getGroup( 'EnglishGroup1' );
@@ -81,10 +79,10 @@ class MessageGroupsTest extends MediaWikiTestCase {
$teGroup1 = MessageGroups::getGroup( 'TeluguGroup1' );
$this->assertEquals( 'en', MessageGroups::haveSingleSourceLanguage(
- array( $enGroup1, $enGroup2 ) )
+ [ $enGroup1, $enGroup2 ] )
);
$this->assertEquals( '', MessageGroups::haveSingleSourceLanguage(
- array( $enGroup1, $enGroup2, $teGroup1 ) )
+ [ $enGroup1, $enGroup2, $teGroup1 ] )
);
}
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/MessageIndexRebuildJobTest.php b/www/wiki/extensions/Translate/tests/phpunit/MessageIndexRebuildJobTest.php
index 398693f7..bdc4620e 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/MessageIndexRebuildJobTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/MessageIndexRebuildJobTest.php
@@ -1,33 +1,30 @@
<?php
/**
- * Unit tests.
- *
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
- * Unit tests for MessageIndexRebuildJob class.
* @group Database
* @group medium
*/
class MessageIndexRebuildJobTest extends MediaWikiTestCase {
- protected $config = array();
+ protected $config = [];
public function setUp() {
parent::setUp();
global $wgHooks;
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgHooks' => $wgHooks,
- 'wgTranslateTranslationServices' => array(),
+ 'wgTranslateTranslationServices' => [],
'wgTranslateDelayedMessageIndexRebuild' => false
- ) );
- $wgHooks['TranslatePostInitGroups'] = array();
+ ] );
+ $wgHooks['TranslatePostInitGroups'] = [];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
@@ -37,7 +34,7 @@ class MessageIndexRebuildJobTest extends MediaWikiTestCase {
public function testInsertImmediate() {
global $wgTranslateDelayedMessageIndexRebuild;
$wgTranslateDelayedMessageIndexRebuild = false;
- MessageIndexRebuildJob::newJob()->insert();
+ MessageIndexRebuildJob::newJob()->insertIntoJobQueue();
$this->assertFalse(
JobQueueGroup::singleton()->get( 'MessageIndexRebuildJob' )->pop(),
'There is no job in the JobQueue'
@@ -47,13 +44,13 @@ class MessageIndexRebuildJobTest extends MediaWikiTestCase {
public function testInsertDelayed() {
global $wgTranslateDelayedMessageIndexRebuild;
$wgTranslateDelayedMessageIndexRebuild = true;
- MessageIndexRebuildJob::newJob()->insert();
+ MessageIndexRebuildJob::newJob()->insertIntoJobQueue();
$job = JobQueueGroup::singleton()->get( 'MessageIndexRebuildJob' )->pop();
$this->assertInstanceOf(
'MessageIndexRebuildJob',
$job,
'There is a job in the JobQueue'
);
- $this->assertTrue( $job->run(), 'Job is executed succesfully' );
+ $this->assertTrue( $job->run(), 'Job is executed successfully' );
}
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/MessageIndexTest.php b/www/wiki/extensions/Translate/tests/phpunit/MessageIndexTest.php
index 5d9136f0..6d61f4be 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/MessageIndexTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/MessageIndexTest.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -14,10 +14,10 @@
class MessageIndexTest extends MediaWikiTestCase {
protected function setUp() {
parent::setUp();
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgTranslateCacheDirectory' => $this->getNewTempDirectory(),
- 'wgTranslateTranslationServices' => array(),
- ) );
+ 'wgTranslateTranslationServices' => [],
+ ] );
}
/**
@@ -30,85 +30,85 @@ class MessageIndexTest extends MediaWikiTestCase {
}
public function provideTestGetArrayDiff() {
- $tests = array();
+ $tests = [];
// Addition
- $old = array();
- $new = array(
+ $old = [];
+ $new = [
'label' => 'carpet',
- );
- $expected = array(
- 'keys' => array(
- 'add' => array(
- 'label' => array(
- array(),
- array( 'carpet' ),
- ),
- ),
- 'del' => array(),
- 'mod' => array(),
- ),
- 'values' => array( 'carpet' ),
- );
- $tests[] = array( $expected, $old, $new );
+ ];
+ $expected = [
+ 'keys' => [
+ 'add' => [
+ 'label' => [
+ [],
+ [ 'carpet' ],
+ ],
+ ],
+ 'del' => [],
+ 'mod' => [],
+ ],
+ 'values' => [ 'carpet' ],
+ ];
+ $tests[] = [ $expected, $old, $new ];
// Deletion
- $old = array(
- 'bath' => array( 'goal', 'morals', 'coronation' ),
- );
- $new = array();
- $expected = array(
- 'keys' => array(
- 'add' => array(),
- 'del' => array(
- 'bath' => array(
- array( 'goal', 'morals', 'coronation' ),
- array(),
- ),
- ),
- 'mod' => array(),
- ),
- 'values' => array( 'goal', 'morals', 'coronation' ),
- );
- $tests[] = array( $expected, $old, $new );
+ $old = [
+ 'bath' => [ 'goal', 'morals', 'coronation' ],
+ ];
+ $new = [];
+ $expected = [
+ 'keys' => [
+ 'add' => [],
+ 'del' => [
+ 'bath' => [
+ [ 'goal', 'morals', 'coronation' ],
+ [],
+ ],
+ ],
+ 'mod' => [],
+ ],
+ 'values' => [ 'goal', 'morals', 'coronation' ],
+ ];
+ $tests[] = [ $expected, $old, $new ];
// No change
- $old = $new = array(
+ $old = $new = [
'label' => 'carpet',
- 'salt' => array( 'morals' ),
- 'bath' => array( 'goal', 'morals', 'coronation' ),
- );
- $expected = array(
- 'keys' => array(
- 'add' => array(),
- 'del' => array(),
- 'mod' => array(),
- ),
- 'values' => array(),
- );
- $tests[] = array( $expected, $old, $new );
+ 'salt' => [ 'morals' ],
+ 'bath' => [ 'goal', 'morals', 'coronation' ],
+ ];
+ $expected = [
+ 'keys' => [
+ 'add' => [],
+ 'del' => [],
+ 'mod' => [],
+ ],
+ 'values' => [],
+ ];
+ $tests[] = [ $expected, $old, $new ];
// Modification
- $old = array(
- 'bath' => array( 'goal', 'morals', 'coronation' ),
- );
- $new = array(
- 'bath' => array( 'goal', 'beliefs', 'coronation', 'showcase' ),
- );
- $expected = array(
- 'keys' => array(
- 'add' => array(),
- 'del' => array(),
- 'mod' => array(
- 'bath' => array(
- array( 'goal', 'morals', 'coronation' ),
- array( 'goal', 'beliefs', 'coronation', 'showcase' ),
- ),
- ),
- ),
- 'values' => array( 'morals', 'beliefs', 'showcase' ),
- );
- $tests[] = array( $expected, $old, $new );
+ $old = [
+ 'bath' => [ 'goal', 'morals', 'coronation' ],
+ ];
+ $new = [
+ 'bath' => [ 'goal', 'beliefs', 'coronation', 'showcase' ],
+ ];
+ $expected = [
+ 'keys' => [
+ 'add' => [],
+ 'del' => [],
+ 'mod' => [
+ 'bath' => [
+ [ 'goal', 'morals', 'coronation' ],
+ [ 'goal', 'beliefs', 'coronation', 'showcase' ],
+ ],
+ ],
+ ],
+ 'values' => [ 'morals', 'beliefs', 'showcase' ],
+ ];
+ $tests[] = [ $expected, $old, $new ];
return $tests;
}
@@ -128,7 +128,7 @@ class MessageIndexTest extends MediaWikiTestCase {
public function testMessageIndexImplementation( $mi ) {
$data = self::getTestData();
/** @var TestableDatabaseMessageIndex|TestableCDBMessageIndex|TestableSerializedMessageIndex */
- $diff = MessageIndex::getArrayDiff( array(), $data );
+ $diff = MessageIndex::getArrayDiff( [], $data );
$mi->store( $data, $diff['keys'] );
$tests = array_rand( $data, 10 );
@@ -160,60 +160,52 @@ class MessageIndexTest extends MediaWikiTestCase {
}
public static function provideMessageIndexImplementation() {
- return array(
- array( new TestableDatabaseMessageIndex() ),
- array( new TestableCDBMessageIndex() ),
- array( new TestableSerializedMessageIndex() ),
- array( new TestableHashMessageIndex() ),
+ return [
+ [ new TestableDatabaseMessageIndex() ],
+ [ new TestableCDBMessageIndex() ],
+ [ new TestableSerializedMessageIndex() ],
+ [ new TestableHashMessageIndex() ],
// Not testing CachedMessageIndex because there is no easy way to mockup those.
- );
+ ];
}
}
class TestableDatabaseMessageIndex extends DatabaseMessageIndex {
- // @codingStandardsIgnoreStart PHP CodeSniffer warns "Useless method overriding
- // detected", but store() and get() are protected in parent.
public function store( array $a, array $diff ) {
parent::store( $a, $diff );
}
public function get( $a ) {
return parent::get( $a );
- } // @codingStandardsIgnoreEnd
+ }
}
class TestableCDBMessageIndex extends CDBMessageIndex {
- // @codingStandardsIgnoreStart PHP CodeSniffer warns "Useless method overriding
- // detected", but store() and get() are protected in parent.
public function store( array $a, array $diff ) {
parent::store( $a, $diff );
}
public function get( $a ) {
return parent::get( $a );
- } // @codingStandardsIgnoreEnd
+ }
}
class TestableSerializedMessageIndex extends SerializedMessageIndex {
- // @codingStandardsIgnoreStart PHP CodeSniffer warns "Useless method overriding
- // detected", but store() and get() are protected in parent.
public function store( array $a, array $diff ) {
parent::store( $a, $diff );
}
public function get( $a ) {
return parent::get( $a );
- } // @codingStandardsIgnoreEnd
+ }
}
class TestableHashMessageIndex extends HashMessageIndex {
- // @codingStandardsIgnoreStart PHP CodeSniffer warns "Useless method overriding
- // detected", but store() and get() are protected in parent.
public function store( array $a, array $diff ) {
parent::store( $a, $diff );
}
public function get( $a ) {
return parent::get( $a );
- } // @codingStandardsIgnoreEnd
+ }
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/MockFileBasedMessageGroup.php b/www/wiki/extensions/Translate/tests/phpunit/MockFileBasedMessageGroup.php
index 6685505a..b0baa86f 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/MockFileBasedMessageGroup.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/MockFileBasedMessageGroup.php
@@ -5,12 +5,12 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
class MockFileBasedMessageGroup extends FileBasedMessageGroup {
public function load( $code ) {
- return array( $this->getId() . '-messagekey' => 'üga' );
+ return [ $this->getId() . '-messagekey' => 'üga' ];
}
public function exists() {
diff --git a/www/wiki/extensions/Translate/tests/phpunit/MockMessageCollectionForExport.php b/www/wiki/extensions/Translate/tests/phpunit/MockMessageCollectionForExport.php
index d7f40459..0f260f85 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/MockMessageCollectionForExport.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/MockMessageCollectionForExport.php
@@ -4,7 +4,7 @@
* @author Niklas Laxström
* @file
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -24,15 +24,15 @@ class MockMessageCollectionForExport extends MessageCollection {
$msg = new FatMessage( 'untranslatedmsg', 'definition' );
$this->messages['untranslatedmsg'] = $msg;
- $this->tags = array(
- 'fuzzy' => array( 'fuzzymsg' ),
- );
+ $this->tags = [
+ 'fuzzy' => [ 'fuzzymsg' ],
+ ];
$this->keys = array_flip( array_keys( $this->messages ) );
}
public function getAuthors() {
- return array( 'Nike the bunny' );
+ return [ 'Nike the bunny' ];
}
public function getLanguage() {
diff --git a/www/wiki/extensions/Translate/tests/phpunit/MockWikiMessageGroup.php b/www/wiki/extensions/Translate/tests/phpunit/MockWikiMessageGroup.php
index 5801bbe3..f10e1903 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/MockWikiMessageGroup.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/MockWikiMessageGroup.php
@@ -6,7 +6,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
class MockWikiMessageGroup extends WikiMessageGroup {
diff --git a/www/wiki/extensions/Translate/tests/phpunit/PageTranslationParserTest.php b/www/wiki/extensions/Translate/tests/phpunit/PageTranslationParserTest.php
index 8abd4976..5e82176e 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/PageTranslationParserTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/PageTranslationParserTest.php
@@ -1,10 +1,8 @@
<?php
/**
- * Unit tests for page translation parser
- *
* @author Niklas Laxström
* @copyright Copyright © 2010-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
@@ -18,7 +16,7 @@ class PageTranslationParserTest extends MediaWikiTestCase {
$dir = __DIR__;
$testFiles = glob( "$dir/pagetranslation/*.ptfile" );
foreach ( $testFiles as $i => $file ) {
- $testFiles[$i] = array( $file );
+ $testFiles[$i] = [ $file ];
}
return $testFiles;
@@ -28,13 +26,12 @@ class PageTranslationParserTest extends MediaWikiTestCase {
* @dataProvider provideTestFiles
*/
public function testParsing( $file ) {
-
$filename = basename( $file );
list( $pagename, ) = explode( '.', $filename, 2 );
$title = Title::newFromText( $pagename );
$translatablePage = TranslatablePage::newFromText( $title, file_get_contents( $file ) );
- $pattern = $file;
+ $pattern = dirname( $file ) . "/$pagename";
if ( $filename === 'FailNotAtomic.ptfile' ) {
$this->markTestSkipped( 'Extended validation not yet implemented' );
@@ -51,12 +48,12 @@ class PageTranslationParserTest extends MediaWikiTestCase {
if ( file_exists( "$pattern.ptsource" ) ) {
$source = $parse->getSourcePageText();
- $this->assertEquals( $source, file_get_contents( "$pattern.ptsource" ) );
+ $this->assertEquals( file_get_contents( "$pattern.ptsource" ), $source );
}
if ( file_exists( "$pattern.pttarget" ) ) {
- $target = $parse->getTranslationPageText( MessageCollection::newEmpty( 'foo' ) );
- $this->assertEquals( $target, file_get_contents( "$pattern.pttarget" ) );
+ $target = $parse->getTranslationPageText( [] );
+ $this->assertEquals( file_get_contents( "$pattern.pttarget" ), $target );
}
// Custom tests written in php
diff --git a/www/wiki/extensions/Translate/tests/phpunit/PageTranslationTaggingTest.php b/www/wiki/extensions/Translate/tests/phpunit/PageTranslationTaggingTest.php
index 976b2bc6..e457aa70 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/PageTranslationTaggingTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/PageTranslationTaggingTest.php
@@ -4,21 +4,21 @@
* @group Database
* @group medium
*/
-class PageTranslationTaggingText extends MediaWikiTestCase {
+class PageTranslationTaggingTest extends MediaWikiTestCase {
protected function setUp() {
parent::setUp();
global $wgHooks;
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgHooks' => $wgHooks,
'wgEnablePageTranslation' => true,
- 'wgTranslateTranslationServices' => array(),
- ) );
+ 'wgTranslateTranslationServices' => [],
+ ] );
TranslateHooks::setupTranslate();
- $wgHooks['TranslatePostInitGroups'] = array( 'MessageGroups::getTranslatablePages' );
+ $wgHooks['TranslatePostInitGroups'] = [ 'MessageGroups::getTranslatablePages' ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
@@ -65,15 +65,15 @@ class PageTranslationTaggingText extends MediaWikiTestCase {
$status = $page->doEditContent( $content, 'Test case' );
$latest = $status->value['revision']->getId();
- $translatablePage->addMarkedTag( $latest, array( 'foo' ) );
+ $translatablePage->addMarkedTag( $latest, [ 'foo' ] );
$this->assertSame( $latest, $translatablePage->getReadyTag(), 'Ready tag was added' );
$this->assertSame( $latest, $translatablePage->getMarkedTag(), 'Marked tag was added' );
global $wgUser;
$cascade = false;
$page->doUpdateRestrictions(
- array( 'edit' => 'sysop' ),
- array(),
+ [ 'edit' => 'sysop' ],
+ [],
$cascade,
'Test case',
$wgUser
@@ -91,11 +91,11 @@ class PageTranslationTaggingText extends MediaWikiTestCase {
'Marked tag was not updated after protection'
);
- $page->doUpdateRestrictions( array(), array(), $cascade, 'Test case', $wgUser );
+ $page->doUpdateRestrictions( [], [], $cascade, 'Test case', $wgUser );
}
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/www/wiki/extensions/Translate/tests/phpunit/SolrTTMServerTest.php b/www/wiki/extensions/Translate/tests/phpunit/SolrTTMServerTest.php
index bbf19c20..36bc0b30 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/SolrTTMServerTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/SolrTTMServerTest.php
@@ -1,10 +1,8 @@
<?php
/**
- * Tests for SolrTTMServer
- *
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,17 +13,22 @@ class SolrTTMServerTest extends MediaWikiTestCase {
protected function setUp() {
parent::setUp();
- global $wgHooks, $wgTranslateTranslationServices, $wgTranslateTestTTMServer;
- $this->setMwGlobals( array(
+ global $wgHooks,
+ $wgTranslateTranslationServices,
+ $wgTranslateTranslationDefaultService,
+ $wgTranslateTestTTMServer;
+ $this->setMwGlobals( [
'wgHooks' => $wgHooks,
- 'wgTranslateTranslationServices' => array(),
- ) );
- $wgTranslateTranslationServices['TTMServer'] = $wgTranslateTestTTMServer;
+ 'wgTranslateTranslationServices' => [],
+ ] );
+ // because var names are too long...
+ $default = $wgTranslateTranslationDefaultService;
+ $wgTranslateTranslationServices[$default] = $wgTranslateTestTTMServer;
- $wgHooks['TranslatePostInitGroups'] = array( array( $this, 'addGroups' ) );
+ $wgHooks['TranslatePostInitGroups'] = [ [ $this, 'addGroups' ] ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
MessageIndex::setInstance( new HashMessageIndex() );
@@ -33,8 +36,8 @@ class SolrTTMServerTest extends MediaWikiTestCase {
}
public function addGroups( &$list ) {
- $list['ttmserver-test'] = new MockWikiMessageGroup( 'ttmserver-test', array(
- 'one' => '1', 'two' => 'kaksi', 'three' => '3' ) );
+ $list['ttmserver-test'] = new MockWikiMessageGroup( 'ttmserver-test', [
+ 'one' => '1', 'two' => 'kaksi', 'three' => '3' ] );
return true;
}
@@ -79,7 +82,7 @@ class SolrTTMServerTest extends MediaWikiTestCase {
$this->assertEquals( wfWikiID(), $doc->wiki );
$this->assertEquals( 'en', $doc->language );
$this->assertEquals( '1', $doc->content );
- $this->assertEquals( array( 'ttmserver-test' ), $doc->group );
+ $this->assertEquals( [ 'ttmserver-test' ], $doc->group );
// Add one translation
$title = Title::newFromText( 'MediaWiki:one/fi' );
@@ -97,7 +100,7 @@ class SolrTTMServerTest extends MediaWikiTestCase {
// @todo FIXME Empty foreach statement.
}
$this->assertEquals( 'yksi', $doc->content );
- $this->assertEquals( array( 'ttmserver-test' ), $doc->group );
+ $this->assertEquals( [ 'ttmserver-test' ], $doc->group );
// Update definition
$title = Title::newFromText( 'MediaWiki:one/en' );
@@ -139,7 +142,7 @@ class SolrTTMServerTest extends MediaWikiTestCase {
// And now the messages should be orphaned
global $wgHooks;
- $wgHooks['TranslatePostInitGroups'] = array();
+ $wgHooks['TranslatePostInitGroups'] = [];
MessageGroups::singleton()->recache();
MessageIndex::singleton()->rebuild();
self::runJobs();
diff --git a/www/wiki/extensions/Translate/tests/phpunit/StringMatcherTest.php b/www/wiki/extensions/Translate/tests/phpunit/StringMatcherTest.php
index 90334327..b38b9b8a 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/StringMatcherTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/StringMatcherTest.php
@@ -22,27 +22,28 @@ class StringMatcherTest extends MediaWikiTestCase {
public function messageKeyProvider() {
// The fourth parameter causes the key to be prefixed or unprefixed
- $keys = array(
- array( 'key', 'p-key', 'p-', array( 'key' ), 'Exact match' ),
- array( 'key', 'key', 'p-', array( 'bar' ), 'Exact not match' ),
- array( 'key', 'p-key', 'p-', array( 'k*' ), 'Prefix match' ),
- array( 'key', 'key', 'p-', array( 'b*' ), 'Prefix not match' ),
- array( 'key', 'p-key', 'p-', array( '*y' ), 'Suffix match' ),
- array( 'key', 'key', 'p-', array( '*r' ), 'Suffix not match' ),
- array( 'key', 'p-key', 'p-', array( 'k*y' ), 'Wildcard match' ),
- array( 'key', 'key', 'p-', array( '*a*' ), 'Wildcard not match' ),
- array( 'key', 'p-key', 'p-', array( 'key', '*ey', 'ke*' ), 'Multiple rules match' ),
- array( 'key', 'key', 'p-', array( '*a*', '*ar', 'ba*' ), 'Multiple rules not match' ),
- array( 'key', 'p-key', 'p-', array( '*' ), 'All match' ),
- array(
- '[k.ssa]', 'p-=5Bk.ssa=5D', 'p-', array( '[k.s*' ),
+ $keys = [
+ [ 'key', 'p-key', 'p-', [ 'key' ], 'Exact match' ],
+ [ 'key', 'key', 'p-', [ 'bar' ], 'Exact not match' ],
+ [ 'key', 'p-key', 'p-', [ 'k*' ], 'Prefix match' ],
+ [ 'key', 'key', 'p-', [ 'b*' ], 'Prefix not match' ],
+ [ 'key', 'p-key', 'p-', [ '*y' ], 'Suffix match' ],
+ [ 'key', 'key', 'p-', [ '*r' ], 'Suffix not match' ],
+ [ 'key', 'p-key', 'p-', [ 'k*y' ], 'Wildcard match' ],
+ [ 'key', 'key', 'p-', [ '*a*' ], 'Wildcard not match' ],
+ [ 'key', 'p-key', 'p-', [ 'key', '*ey', 'ke*' ], 'Multiple rules match' ],
+ [ 'key', 'key', 'p-', [ '*a*', '*ar', 'ba*' ], 'Multiple rules not match' ],
+ [ 'key', 'p-key', 'p-', [ '*' ], 'All match' ],
+ [
+ '[k.ssa]', 'p-=5Bk.ssa=5D', 'p-', [ '[k.s*' ],
'Message key with special chars'
- ),
- array(
- '[kissa]', '=5Bkissa=5D', 'p-', array( '[k.s*' ),
+ ],
+ [
+ '[kissa]', '=5Bkissa=5D', 'p-', [ '[k.s*' ],
'Message key with special chars'
- ),
- );
+ ],
+ [ 'keyblah/i', 'p-keyblah/i', 'p-', [ 'key*/i' ], 'Slash in pattern does not trigger modifier' ],
+ ];
return $keys;
}
@@ -64,7 +65,7 @@ class StringMatcherTest extends MediaWikiTestCase {
* @dataProvider problematicMessageKeyProvider
*/
public function testKeyManglingWithPrefixing( $key, $comment ) {
- $matcher = new StringMatcher( 'prefix', array( '*' ) );
+ $matcher = new StringMatcher( 'prefix', [ '*' ] );
$mangled = $matcher->mangle( $key );
$title = Title::makeTitleSafe( NS_MEDIAWIKI, $mangled );
$this->assertInstanceOf( 'Title', $title, "Key '$mangled' did not produce a valid title" );
@@ -74,15 +75,18 @@ class StringMatcherTest extends MediaWikiTestCase {
}
public function problematicMessageKeyProvider() {
- $keys = array(
- array( 'key', 'simple string' ),
- array( 'key[]', 'string with brackets' ),
- array( 'key%AB', 'string with invalid url encoding' ),
- array( 'key&amp;', 'string with html entity' ),
- array( 'key=2A', 'string with fake escaping' ),
- array( 'abcdefgh', 'string with fake escaping' ),
- array( 'общегосударственные', 'Unicode string' ),
- );
+ $keys = [
+ [ 'key', 'simple string' ],
+ [ 'key[]', 'string with brackets' ],
+ [ 'key%AB', 'string with invalid url encoding' ],
+ [ 'key&amp;', 'string with html entity' ],
+ [ 'key=2A', 'string with fake escaping' ],
+ [ 'общегосударственные', 'Unicode string' ],
+ [ ' la la land_', 'string starting or ending with spaces or underscores' ],
+ [ 'one two__three _four', 'multiple spaces consisting of spaces or underscores' ],
+ [ 'Signed by ~~~', 'Magic tilde expansion' ],
+ [ ':iam', 'string starting with a colon' ],
+ ];
// Add tests for ranges of exotic ASCII characters
foreach ( range( 0, 7 ) as $k ) {
@@ -93,7 +97,7 @@ class StringMatcherTest extends MediaWikiTestCase {
$start = $k * 16;
$end = $start + 16;
- $keys[] = array( $key, "ASCII range $start..$end" );
+ $keys[] = [ $key, "ASCII range $start..$end" ];
}
return $keys;
diff --git a/www/wiki/extensions/Translate/tests/phpunit/TPParseTest.php b/www/wiki/extensions/Translate/tests/phpunit/TPParseTest.php
index abfe18e4..d70689b8 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/TPParseTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/TPParseTest.php
@@ -1,14 +1,11 @@
<?php
/**
- * Unit tests for class TPParse
- *
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
/**
- * Unit tests for class TPParse
* @ingroup PageTranslation
*/
class TPParseTest extends MediaWikiTestCase {
@@ -21,7 +18,7 @@ class TPParseTest extends MediaWikiTestCase {
$prefix = $title->getPrefixedDBkey() . '/';
$parse = $page->getParse();
- $collection = array();
+ $collection = [];
$expected = 'Hello peter!';
$actual = $parse->getTranslationPageText( $collection );
diff --git a/www/wiki/extensions/Translate/tests/phpunit/TPSectionTest.php b/www/wiki/extensions/Translate/tests/phpunit/TPSectionTest.php
new file mode 100644
index 00000000..ccd9f300
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/TPSectionTest.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+/**
+ * @ingroup PageTranslation
+ */
+class TPSectionTest extends PHPUnit\Framework\TestCase {
+ /**
+ * @dataProvider providerTestGetMarkedText
+ */
+ public function testGetMarkedText( $name, $text, $inline, $expected ) {
+ $section = new TPSection();
+ $section->name = $name;
+ $section->text = $text;
+ $section->setIsInline( $inline );
+
+ $output = $section->getMarkedText();
+
+ $this->assertEquals( $expected, $output );
+ }
+
+ /**
+ * @dataProvider providerTestGetTextWithVariables
+ */
+ public function testGetTextWithVariables( $text, $expected ) {
+ $section = new TPSection();
+ $section->text = $text;
+
+ $output = $section->getTextWithVariables();
+
+ $this->assertEquals( $expected, $output );
+ }
+
+ /**
+ * @dataProvider providerTestGetTextForTrans
+ */
+ public function testGetTextForTrans( $text, $expected ) {
+ $section = new TPSection();
+ $section->text = $text;
+
+ $output = $section->getTextForTrans();
+
+ $this->assertEquals( $expected, $output );
+ }
+
+ public static function providerTestGetMarkedText() {
+ $cases = [];
+
+ // Inline syntax
+ $cases[] = [
+ 'name',
+ 'Hello',
+ true,
+ '<!--T:name--> Hello',
+ ];
+
+ // Normal syntax
+ $cases[] = [
+ 'name',
+ 'Hello',
+ false,
+ "<!--T:name-->\nHello",
+ ];
+
+ // Inline should not matter for headings, which have special syntax, but test both values
+ $cases[] = [
+ 'name',
+ '== Hello ==',
+ true,
+ '== Hello == <!--T:name-->',
+ ];
+
+ $cases[] = [
+ 'name',
+ '====== Hello ======',
+ false,
+ '====== Hello ====== <!--T:name-->',
+ ];
+
+ return $cases;
+ }
+
+ public static function providerTestGetTextWithVariables() {
+ $cases = [];
+
+ // syntax
+ $cases[] = [
+ "<tvar|abc>Peter\n cat!</>",
+ '$abc',
+ ];
+
+ $cases[] = [
+ "<tvar|1>Hello</>\n<tvar|2>Hello</>",
+ "$1\n$2",
+ ];
+
+ return $cases;
+ }
+
+ public static function providerTestGetTextForTrans() {
+ $cases = [];
+
+ // syntax
+ $cases[] = [
+ "<tvar|abc>Peter\n cat!</>",
+ "Peter\n cat!",
+ ];
+
+ $cases[] = [
+ "<tvar|1>Hello</>\n<tvar|2>Hello</>",
+ "Hello\nHello",
+ ];
+
+ return $cases;
+ }
+}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/TTMServerMessageUpdateJobTest.php b/www/wiki/extensions/Translate/tests/phpunit/TTMServerMessageUpdateJobTest.php
new file mode 100644
index 00000000..1509c5b8
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/TTMServerMessageUpdateJobTest.php
@@ -0,0 +1,438 @@
+<?php
+/**
+ * @file
+ * @author David Causse
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Mostly test mirroring and failure modes.
+ */
+class TTMServerMessageUpdateJobTest extends MediaWikiTestCase {
+ /**
+ * @var WritableTTMServer[] used to link our mocks with TestableTTMServer built by the
+ * factory
+ */
+ public static $mockups = [];
+
+ public function setUp() {
+ parent::setUp();
+ self::$mockups = [];
+ $this->setMwGlobals( [
+ 'wgTranslateTranslationServices' => [
+ 'primary' => [
+ 'class' => TestableTTMServer::class,
+ // will be used as the key in static::$mockups to attach the
+ // mock to the newly created TestableTTMServer instance
+ 'name' => 'primary',
+ 'mirrors' => [ 'secondary' ],
+ ],
+ 'secondary' => [
+ 'class' => TestableTTMServer::class,
+ 'name' => 'secondary',
+ ]
+ ],
+ 'wgTranslateTranslationDefaultService' => 'primary'
+ ] );
+ }
+
+ public function tearDown() {
+ parent::tearDown();
+ self::$mockups = [];
+ }
+
+ /**
+ * Normal mode, we ensure that update is called on primary and its mirror without any resent
+ * jobs
+ */
+ public function testReplication() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' );
+ static::$mockups['secondary'] = $mock;
+
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [ 'command' => 'refresh' ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertEmpty( $job->getResentJobs() );
+ }
+
+ /**
+ * The mirror failed, we ensure that we resend a job
+ * with the appropriate params.
+ */
+ public function testReplicationError() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' )
+ ->will( $this->throwException( new TTMServerException ) );
+ static::$mockups['secondary'] = $mock;
+
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [ 'command' => 'refresh' ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertEquals( 1, count( $job->getResentJobs() ) );
+ $expectedParams = [
+ 'errorCount' => 1,
+ 'service' => 'secondary',
+ 'command' => 'refresh'
+ ];
+ $actualParams = array_intersect_key(
+ $job->getResentJobs()[0]->getParams(),
+ $expectedParams
+ );
+ $this->assertEquals( $expectedParams, $actualParams );
+ }
+
+ /**
+ * All services failed, we ensure that we resend 2 jobs for
+ * each services
+ */
+ public function testAllServicesInError() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' )
+ ->will( $this->throwException( new TTMServerException ) );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' )
+ ->will( $this->throwException( new TTMServerException ) );
+ static::$mockups['secondary'] = $mock;
+
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [ 'command' => 'refresh' ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertEquals( 2, count( $job->getResentJobs() ) );
+ $expectedParams = [
+ 'errorCount' => 1,
+ 'service' => 'primary',
+ 'command' => 'refresh'
+ ];
+ $actualParams = array_intersect_key(
+ $job->getResentJobs()[0]->getParams(),
+ $expectedParams
+ );
+ $this->assertEquals( $expectedParams, $actualParams );
+
+ $expectedParams = [
+ 'errorCount' => 1,
+ 'service' => 'secondary',
+ 'command' => 'refresh'
+ ];
+ $actualParams = array_intersect_key(
+ $job->getResentJobs()[1]->getParams(),
+ $expectedParams
+ );
+ $this->assertEquals( $expectedParams, $actualParams );
+ }
+
+ /**
+ * We simulate a resent job after a failure, this job is directed to a specific service, we
+ * ensure that we do not replicate the write to its mirror
+ */
+ public function testJobOnSingleService() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->never() )
+ ->method( 'update' );
+ static::$mockups['secondary'] = $mock;
+
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [
+ 'errorCount' => 1,
+ 'service' => 'primary',
+ 'command' => 'refresh'
+ ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertEmpty( $job->getResentJobs() );
+ }
+
+ /**
+ * We simulate a job that failed multiple times and we fail again, we encure that we adandon
+ * the job by not resending it to queue
+ */
+ public function testAbandonedJob() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' )
+ ->will( $this->throwException( new TTMServerException ) );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->never() )
+ ->method( 'update' );
+ static::$mockups['secondary'] = $mock;
+
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [
+ 'errorCount' => 4,
+ 'service' => 'primary',
+ 'command' => 'refresh'
+ ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertEmpty( $job->getResentJobs() );
+ }
+
+ /**
+ * One service is frozen
+ */
+ public function testOneServiceFrozen() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->never() )
+ ->method( 'update' );
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'isFrozen' )
+ ->willReturn( true );
+ static::$mockups['secondary'] = $mock;
+
+ $now = time();
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [
+ 'command' => 'refresh',
+ 'createdAt' => $now
+ ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertEquals( 1, count( $job->getResentJobs() ) );
+ $expectedParams = [
+ 'errorCount' => 0,
+ 'retryCount' => 1,
+ 'createdAt' => $now,
+ 'service' => 'secondary',
+ 'command' => 'refresh'
+ ];
+ $actualParams = array_intersect_key(
+ $job->getResentJobs()[0]->getParams(),
+ $expectedParams
+ );
+ $this->assertEquals( $expectedParams, $actualParams );
+ }
+
+ /**
+ * One is broken
+ * One is frozen
+ */
+ public function testOneBrokenOneFrozen() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' )
+ ->will( $this->throwException( new TTMServerException ) );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->never() )
+ ->method( 'update' );
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'isFrozen' )
+ ->willReturn( true );
+ static::$mockups['secondary'] = $mock;
+
+ $now = time();
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [
+ 'command' => 'refresh',
+ 'createdAt' => $now
+ ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertEquals( 2, count( $job->getResentJobs() ) );
+ $expectedParams = [
+ 'errorCount' => 1,
+ 'retryCount' => 0,
+ 'createdAt' => $now,
+ 'service' => 'primary',
+ 'command' => 'refresh'
+ ];
+ $actualParams = array_intersect_key(
+ $job->getResentJobs()[0]->getParams(),
+ $expectedParams
+ );
+ $this->assertEquals( $expectedParams, $actualParams );
+
+ $expectedParams = [
+ 'errorCount' => 0,
+ 'retryCount' => 1,
+ 'createdAt' => $now,
+ 'service' => 'secondary',
+ 'command' => 'refresh'
+ ];
+ $actualParams = array_intersect_key(
+ $job->getResentJobs()[1]->getParams(),
+ $expectedParams
+ );
+ $this->assertEquals( $expectedParams, $actualParams );
+ }
+
+ /**
+ * Old jobs are abandoned
+ */
+ public function testAbandonedOldJob() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->never() )
+ ->method( 'update' );
+ $mock->expects( $this->never() )
+ ->method( 'isFrozen' );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->never() )
+ ->method( 'update' );
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'isFrozen' )
+ ->willReturn( true );
+ static::$mockups['secondary'] = $mock;
+
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [
+ 'command' => 'refresh',
+ 'retryCount' => 10,
+ 'service' => 'secondary',
+ 'createdAt' => time() - TTMServerMessageUpdateJob::DROP_DELAYED_JOBS_AFTER - 1,
+ ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertEquals( 0, count( $job->getResentJobs() ) );
+ }
+}
+
+/**
+ * Test subclass to override methods that we are not able to mock
+ * easily.
+ * For the context of the test we can only test the 'refresh' command
+ * because other ones would need to have a more complex context to prepare
+ */
+class TestableTTMServerMessageUpdateJob extends TTMServerMessageUpdateJob {
+ private $resentJobs = [];
+ private $handleMock;
+ public function __construct( Title $title, $params, $handleMock ) {
+ parent::__construct( $title, $params );
+ $this->handleMock = $handleMock;
+ }
+ public function resend( TTMServerMessageUpdateJob $job ) {
+ $this->resentJobs[] = $job;
+ }
+
+ protected function getHandle() {
+ return $this->handleMock;
+ }
+
+ protected function getTranslation( MessageHandle $handle ) {
+ return 'random text';
+ }
+
+ public function getResentJobs() {
+ return $this->resentJobs;
+ }
+}
+
+/**
+ * This "testable" TTMServer implementation allows to:
+ * - test TTMServer specific methods
+ * - attach our mocks to the Test static context, this is needed because
+ * the factory always creates a new instance of the service
+ */
+class TestableTTMServer extends TTMServer implements WritableTTMServer {
+ private $delegate;
+ public function __construct( array $config ) {
+ parent::__construct( $config );
+ $this->delegate = TTMServerMessageUpdateJobTest::$mockups[$config['name']];
+ }
+
+ public function update( MessageHandle $handle, $targetText ) {
+ $this->delegate->update( $handle, $targetText );
+ }
+
+ public function beginBootstrap() {
+ $this->delegate->beginBootstrap();
+ }
+
+ public function beginBatch() {
+ $this->delegate->beginBatch();
+ }
+
+ public function batchInsertDefinitions( array $batch ) {
+ $this->delegate->batchInsertDefinitions( $batch );
+ }
+
+ public function batchInsertTranslations( array $batch ) {
+ $this->delegate->batchInsertTranslations( $batch );
+ }
+
+ public function endBatch() {
+ $this->delegate->endBatch();
+ }
+
+ public function endBootstrap() {
+ $this->delegate->endBootstrap();
+ }
+
+ public function isFrozen() {
+ return $this->delegate->isFrozen();
+ }
+}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/TTMServerTest.php b/www/wiki/extensions/Translate/tests/phpunit/TTMServerTest.php
index c5869ce2..ed434ddc 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/TTMServerTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/TTMServerTest.php
@@ -1,11 +1,9 @@
<?php
/**
- * Tests for TTMServer
- *
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
class TTMServerTest extends MediaWikiTestCase {
@@ -16,15 +14,15 @@ class TTMServerTest extends MediaWikiTestCase {
$this->config = $wgTranslateTranslationServices;
parent::setUp();
- $wgTranslateTranslationServices = array();
- $wgTranslateTranslationServices['localtm'] = array(
+ $wgTranslateTranslationServices = [];
+ $wgTranslateTranslationServices['localtm'] = [
'url' => 'http://example.com/sandwiki/api.php',
'displayname' => 'example.com',
'cutoff' => 0.75,
'type' => 'ttmserver',
- );
+ ];
- $wgTranslateTranslationServices['apitm'] = array(
+ $wgTranslateTranslationServices['apitm'] = [
'url' => 'http://example.com/w/api.php',
'displayname' => 'example.com',
'cutoff' => 0.75,
@@ -32,7 +30,7 @@ class TTMServerTest extends MediaWikiTestCase {
'timeout-async' => 4,
'type' => 'ttmserver',
'class' => 'RemoteTTMServer',
- );
+ ];
}
protected function tearDown() {
@@ -48,26 +46,27 @@ class TTMServerTest extends MediaWikiTestCase {
get_class( $server ),
'Fake server given when default server is disabled'
);
- global $wgTranslateTranslationServices;
- $wgTranslateTranslationServices['TTMServer'] = array(
+ global $wgTranslateTranslationServices,
+ $wgTranslateTranslationDefaultService;
+ $wgTranslateTranslationServices[$wgTranslateTranslationDefaultService] = [
'database' => false, // Passed to wfGetDB
'cutoff' => 0.75,
'type' => 'ttmserver',
'public' => false,
- );
+ ];
$server = TTMServer::primary();
$this->assertEquals(
'DatabaseTTMServer',
get_class( $server ),
'Real server given when default server is enabled'
);
- unset( $wgTranslateTranslationServices['TTMServer'] );
+ unset( $wgTranslateTranslationServices[$wgTranslateTranslationDefaultService] );
}
public function testFakeTTMServer() {
$server = new FakeTTMServer();
$this->assertEquals(
- array(),
+ [],
$server->query( 'en', 'fi', 'daa' ),
'FakeTTMServer returns no suggestions for all queries'
);
@@ -80,4 +79,21 @@ class TTMServerTest extends MediaWikiTestCase {
'FakeTTMServer returns null on update'
);
}
+
+ public function testMirrorsConfig() {
+ global $wgTranslateTranslationServices;
+ $wgTranslateTranslationServices['primary'] = [
+ 'class' => 'ElasticSearchTTMServer',
+ 'mirrors' => [ 'secondary' ]
+ ];
+ $wgTranslateTranslationServices['secondary'] = [
+ 'class' => 'ElasticSearchTTMServer',
+ 'mirrors' => [ 'primary', 'unknown' ]
+ ];
+ $primary = TTMServer::factory( $wgTranslateTranslationServices['primary'] );
+ $this->assertEquals( [ 'secondary' ], $primary->getMirrors() );
+ $secondary = TTMServer::factory( $wgTranslateTranslationServices['secondary'] );
+ $this->setExpectedException( TTMServerException::class );
+ $secondary->getMirrors();
+ }
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/TranslatablePageTest.php b/www/wiki/extensions/Translate/tests/phpunit/TranslatablePageTest.php
new file mode 100644
index 00000000..c492690b
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/TranslatablePageTest.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+/**
+ * @ingroup PageTranslation
+ */
+class TranslatablePageTest extends PHPUnit\Framework\TestCase {
+ /**
+ * @dataProvider provideTestSectionise
+ */
+ public function testSectionise( $input, $pattern, $comment ) {
+ $result = TranslatablePage::sectionise( $input );
+ $pattern = addcslashes( $pattern, '~' );
+ $this->assertRegExp( "~^$pattern$~", $result['template'], $comment );
+ }
+
+ public static function provideTestSectionise() {
+ // Ugly implicit assumption
+ $ph = "\x7fUNIQ[a-z0-9]{8,16}-\d+";
+
+ $cases = [];
+
+ $cases[] = [
+ 'Hello',
+ "$ph",
+ 'No surrounding whitespace',
+ ];
+
+ $cases[] = [
+ "\nHello",
+ "\n$ph",
+ 'With surrounding whitespace',
+ ];
+
+ $cases[] = [
+ "\nHello world\n\nBunny\n",
+ "\n$ph\n\n$ph\n",
+ 'Splitting at one empty line',
+ ];
+
+ $cases[] = [
+ "First\n\n\n\n\nSecond\n\nThird",
+ "$ph\n\n\n\n\n$ph\n\n$ph",
+ 'Splitting with multiple empty lines',
+ ];
+
+ return $cases;
+ }
+
+ /**
+ * @dataProvider provideTestCleanupTags
+ */
+ public function testCleanupTags( $input, $expected, $comment ) {
+ $output = TranslatablePage::cleanupTags( $input );
+ $this->assertEquals( $expected, $output, $comment );
+ }
+
+ public static function provideTestCleanupTags() {
+ $cases = [];
+
+ $cases[] = [
+ "== Hello ==\n</translate>",
+ '== Hello ==',
+ 'Unbalanced tag in a section preview',
+ ];
+
+ $cases[] = [
+ "</translate><translate>",
+ '',
+ 'Unbalanced tags, no whitespace',
+ ];
+
+ $cases[] = [
+ "1\n2<translate>3\n4</translate>5\n6",
+ "1\n23\n45\n6",
+ 'Unbalanced tags, non-removable whitespace',
+ ];
+
+ $cases[] = [
+ "1<translate>\n\n</translate>2",
+ '12',
+ 'Unbalanced tags, removable whitespace',
+ ];
+
+ $cases[] = [
+ '[[<tvar|wmf>Special:MyLanguage/Wikimedia Foundation</>|Wikimedia Foundation]].',
+ '[[Special:MyLanguage/Wikimedia Foundation|Wikimedia Foundation]].',
+ 'TVAR tag is collapsed',
+ ];
+
+ $cases[] = [
+ 'You can use the <nowiki><translate></nowiki> tag.',
+ 'You can use the <nowiki><translate></nowiki> tag.',
+ 'Tag inside a nowiki is retained',
+ ];
+
+ $cases[] = [
+ 'What if I <translate and </translate>.',
+ 'What if I <translate and .',
+ 'Broken tag is retained',
+ ];
+
+ return $cases;
+ }
+}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/TranslateHooksTest.php b/www/wiki/extensions/Translate/tests/phpunit/TranslateHooksTest.php
index 95edbea2..c711c557 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/TranslateHooksTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/TranslateHooksTest.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,16 +16,16 @@ class TranslateHooksTest extends MediaWikiLangTestCase {
parent::setUp();
global $wgHooks;
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgHooks' => $wgHooks,
'wgTranslateDocumentationLanguageCode' => 'qqq',
- 'wgTranslateTranslationServices' => array(),
- 'wgTranslateMessageNamespaces' => array( NS_MEDIAWIKI ),
- ) );
- $wgHooks['TranslatePostInitGroups'] = array( array( $this, 'getTestGroups' ) );
+ 'wgTranslateTranslationServices' => [],
+ '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() );
@@ -33,10 +33,10 @@ class TranslateHooksTest extends MediaWikiLangTestCase {
}
public function getTestGroups( &$list ) {
- $messages = array(
+ $messages = [
'ugakey1' => 'value1',
'ugakey2' => 'value2',
- );
+ ];
$list['testgroup'] = new MockWikiMessageGroup( 'testgroup', $messages );
@@ -44,14 +44,14 @@ 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 );
$wikipage->doEditContent( $content, __METHOD__, 0, false, $user );
$this->assertEquals(
- array(),
+ [],
$title->getParentCategories(),
'translation of known message'
);
@@ -62,7 +62,7 @@ class TranslateHooksTest extends MediaWikiLangTestCase {
$wikipage->doEditContent( $content, __METHOD__, 0, false, $user );
$this->assertEquals(
- array( 'Category:Shouldbe' => 'MediaWiki:ugakey2/qqq' ),
+ [ 'Category:Shouldbe' => 'MediaWiki:ugakey2/qqq' ],
$title->getParentCategories(),
'message docs'
);
@@ -72,17 +72,17 @@ class TranslateHooksTest extends MediaWikiLangTestCase {
$content = ContentHandler::makeContent( '[[Category:Shouldbealso]]', $title );
$wikipage->doEditContent( $content, __METHOD__, 0, false, $user );
- $this->assertEquals( array(), $title->getParentCategories(), 'unknown message' );
+ $this->assertEquals( [], $title->getParentCategories(), 'unknown message' );
}
public function testSearchProfile() {
- $profiles = array(
- 'files' => array(),
- 'all' => array(),
- 'advanced' => array()
- );
+ $profiles = [
+ 'files' => [],
+ 'all' => [],
+ 'advanced' => []
+ ];
- $expected = array( 'files', 'translation', 'all', 'advanced' );
+ $expected = [ 'files', 'translation', 'all', 'advanced' ];
TranslateHooks::searchProfile( $profiles );
diff --git a/www/wiki/extensions/Translate/tests/phpunit/TranslateSandboxTest.php b/www/wiki/extensions/Translate/tests/phpunit/TranslateSandboxTest.php
index b933f27e..2389ebc7 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/TranslateSandboxTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/TranslateSandboxTest.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -13,10 +13,10 @@
class TranslateSandboxTest extends MediaWikiTestCase {
protected function setUp() {
parent::setUp();
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgTranslateUseSandbox' => true,
'wgTranslateSandboxPromotedGroup' => 'translator',
- ) );
+ ] );
// Make sure the hooks are installed even if $wgTranslateUseSandbox is false.
TranslateHooks::setupTranslate();
@@ -28,7 +28,7 @@ class TranslateSandboxTest extends MediaWikiTestCase {
$groups = array_unique( $user->getGroups() );
- $this->assertSame( array( 'translate-sandboxed' ), $groups, 'User is in the sandboxed group' );
+ $this->assertSame( [ 'translate-sandboxed' ], $groups, 'User is in the sandboxed group' );
}
public function testDeleteUser() {
@@ -37,13 +37,10 @@ class TranslateSandboxTest extends MediaWikiTestCase {
$this->assertFalse( $user->isLoggedIn(), 'User no longer exists' );
}
- /**
- * @expectedException MWException
- * @expectedExceptionMessage Not a sandboxed user
- */
public function testDeleteUserPromoted() {
$user = TranslateSandbox::addUser( 'Test user3', 'test@blackhole.io', 'test password' );
TranslateSandbox::promoteUser( $user );
+ $this->setExpectedException( MWException::class, 'Not a sandboxed user' );
TranslateSandbox::deleteUser( $user );
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/TranslateYamlTest.php b/www/wiki/extensions/Translate/tests/phpunit/TranslateYamlTest.php
new file mode 100644
index 00000000..f0259528
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/TranslateYamlTest.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Tests for yaml wrapper.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+class TranslateYamlTest extends MediaWikiTestCase {
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgTranslateYamlLibrary' => 'phpyaml',
+ ] );
+ }
+
+ /**
+ * TODO: test other drivers too.
+ * @requires function yaml_parse
+ * @dataProvider provideTestLoadString
+ */
+ public function testLoadStringPhpyaml( $input, $expected, $comment ) {
+ $output = TranslateYaml::loadString( $input );
+ $this->assertEquals( $expected, $output, $comment );
+ }
+
+ public function provideTestLoadString() {
+ $tests = [];
+ $tests[] = [
+ 'a: b',
+ [ 'a' => 'b' ],
+ 'Simple key-value'
+ ];
+
+ $tests[] = [
+ 'a: !php/object "O:8:\"stdClass\":1:{s:1:\"a\";s:1:\"b\";}"',
+ [ 'a' => 'O:8:"stdClass":1:{s:1:"a";s:1:"b";}' ],
+ 'PHP objects must not be unserialized'
+ ];
+
+ return $tests;
+ }
+
+ /**
+ * Tests workaround for https://bugs.php.net/bug.php?id=76309
+ * @requires function yaml_emit
+ */
+ public function testBug76309() {
+ $input = [
+ 'a' => '2.',
+ 'b' => '22222222222222222222222222222222222222222222222222222222222222.',
+ 'c' => 2.0,
+ 'd' => "2.0"
+ ];
+
+ $expected = <<<YAML
+---
+a: "2."
+b: "22222222222222222222222222222222222222222222222222222222222222."
+c: 2.000000
+d: "2.0"
+...
+
+YAML;
+
+ $output = TranslateYaml::dump( $input );
+ $this->assertEquals( $expected, $output, "Floaty strings outputted as strings" );
+ $parsed = TranslateYaml::loadString( $output );
+ $this->assertEquals( $input, $parsed, "Floaty strings roundtrip" );
+ }
+}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php b/www/wiki/extensions/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php
index f830cdab..5bf8eff5 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php
@@ -3,7 +3,7 @@
* Tests for fuzzy flag change on edits.
* @author Niklas Laxström
* @file
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,15 +16,15 @@ class TranslationFuzzyUpdaterTest extends MediaWikiTestCase {
parent::setUp();
global $wgHooks;
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgHooks' => $wgHooks,
- 'wgTranslateTranslationServices' => array(),
- 'wgTranslateMessageNamespaces' => array( NS_MEDIAWIKI ),
- ) );
- $wgHooks['TranslatePostInitGroups'] = array( array( $this, 'getTestGroups' ) );
+ 'wgTranslateTranslationServices' => [],
+ '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() );
@@ -32,7 +32,7 @@ class TranslationFuzzyUpdaterTest extends MediaWikiTestCase {
}
public function getTestGroups( &$list ) {
- $messages = array( 'ugakey' => '$1 of $2', );
+ $messages = [ 'ugakey' => '$1 of $2', ];
$list['test-group'] = new MockWikiMessageGroup( 'test-group', $messages );
return false;
@@ -51,14 +51,14 @@ class TranslationFuzzyUpdaterTest extends MediaWikiTestCase {
$revision = $rev->getId();
$dbw = wfGetDB( DB_MASTER );
- $conds = array(
+ $conds = [
'rt_page' => $title->getArticleID(),
'rt_type' => RevTag::getType( 'fuzzy' ),
'rt_revision' => $revision
- );
+ ];
$index = array_keys( $conds );
- $dbw->replace( 'revtag', array( $index ), $conds, __METHOD__ );
+ $dbw->replace( 'revtag', [ $index ], $conds, __METHOD__ );
$handle = new MessageHandle( $title );
$this->assertTrue( $handle->isValid(), 'Message is known' );
diff --git a/www/wiki/extensions/Translate/tests/phpunit/TranslationStashStorageTest.php b/www/wiki/extensions/Translate/tests/phpunit/TranslationStashStorageTest.php
index 3208ab01..0908f3f9 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/TranslationStashStorageTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/TranslationStashStorageTest.php
@@ -2,7 +2,7 @@
/**
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -17,14 +17,14 @@ class TranslationStashStorageTest extends MediaWikiTestCase {
User::newFromId( 1 ),
Title::makeTitle( NS_MAIN, __METHOD__ ),
'test value',
- array( 'kissa', 'kala' )
+ [ 'kissa', 'kala' ]
);
$translation2 = new StashedTranslation(
User::newFromId( 2 ),
Title::makeTitle( NS_MAIN, __METHOD__ ),
'test value 2',
- array( 'kissa', 'kala' )
+ [ 'kissa', 'kala' ]
);
$storage->addTranslation( $translation1 );
diff --git a/www/wiki/extensions/Translate/tests/phpunit/WikiPageMessageGroupSerializationTest.php b/www/wiki/extensions/Translate/tests/phpunit/WikiPageMessageGroupSerializationTest.php
new file mode 100644
index 00000000..7012c643
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/WikiPageMessageGroupSerializationTest.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+ /**
+ * @group medium
+ */
+class WikiPageMessageGroupSerializationTest extends MediaWikiTestCase {
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setTemporaryHook(
+ 'TranslatePostInitGroups',
+ function ( &$list ) {
+ $pageMessageGroup = new WikiPageMessageGroup( 'pageid', 'mypage' );
+ $pageMessageGroup->setLabel( 'thelabel' ); // Example
+ $pageMessageGroup->setNamespace( 5 ); // Example
+ $list['pageid'] = $pageMessageGroup;
+ $pageMessageGroup->setIgnored( [ 'hello', 'world' ] );
+
+ $anotherPageMessageGroup = new WikiPageMessageGroup( 'anotherpageid', 'mypage' );
+ $anotherPageMessageGroup->setLabel( 'thelabel' ); // Example
+ $anotherPageMessageGroup->setNamespace( 5 ); // Example
+
+ $list['anotherpageid'] = $anotherPageMessageGroup;
+
+ return false;
+ }
+ );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
+ $mg->recache();
+ }
+
+ public function testDataSerialization() {
+ $groups = MessageGroups::getAllGroups();
+
+ $serialized = serialize( $groups );
+ $unserializedGroups = unserialize( $serialized );
+
+ $this->assertCount( 2, $unserializedGroups,
+ 'after serialization there are 2 groups.' );
+
+ $pageMessageGroup = $unserializedGroups['pageid'];
+ $this->assertEquals( $pageMessageGroup->getId(), 'pageid',
+ 'after serialization id is set' );
+ $this->assertInstanceOf( Title::class, $pageMessageGroup->getTitle(),
+ 'after serialization title property is an instance of the Title class.' );
+ $this->assertEquals( 5, $pageMessageGroup->getNamespace(),
+ 'after serialization namespace is not empty' );
+ $this->assertEquals( $pageMessageGroup->getTitle()->getPrefixedText(),
+ $pageMessageGroup->getLabel(), 'after serialization label is not empty' );
+ $this->assertCount( 2, $pageMessageGroup->getIgnored(),
+ 'after serialization ignored has 2 values.' );
+ }
+
+}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/api/ApiGroupReviewTest.php b/www/wiki/extensions/Translate/tests/phpunit/api/ApiGroupReviewTest.php
index 43d77e7d..c072f2a0 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/api/ApiGroupReviewTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/api/ApiGroupReviewTest.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
diff --git a/www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageCollectionTest.php b/www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageCollectionTest.php
new file mode 100644
index 00000000..17424a80
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageCollectionTest.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * @group medium
+ */
+class ApiQueryMessageCollectionTest extends ApiTestCase {
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setTemporaryHook(
+ 'TranslatePostInitGroups',
+ function ( &$list ) {
+ $exampleMessageGroup = new WikiMessageGroup( 'theid', 'thesource' );
+ $exampleMessageGroup->setLabel( 'thelabel' ); // Example
+ $exampleMessageGroup->setNamespace( 5 ); // Example
+ $list['theid'] = $exampleMessageGroup;
+
+ $anotherExampleMessageGroup = new WikiMessageGroup( 'anotherid', 'thesource' );
+ $anotherExampleMessageGroup->setLabel( 'thelabel' ); // Example
+ $anotherExampleMessageGroup->setNamespace( 5 ); // Example
+ $list['anotherid'] = $anotherExampleMessageGroup;
+
+ return false;
+ }
+ );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
+ $mg->recache();
+ }
+
+ public function testSameAsSourceLanguage() {
+ global $wgLanguageCode;
+
+ $groups = MessageGroups::getAllGroups();
+ list( $response ) = $this->doApiRequest(
+ [
+ 'mcgroup' => $groups['anotherid']->getId(),
+ 'action' => 'query',
+ 'list' => 'messagecollection',
+ 'mcprop' => 'definition|translation|tags|properties',
+ // @see https://gerrit.wikimedia.org/r/#/c/160222/
+ 'continue' => '',
+ 'errorformat' => 'html',
+ 'mclanguage' => $wgLanguageCode
+ ]
+ );
+
+ $this->assertArrayHasKey( 'warnings', $response,
+ 'warning triggered when source language same as target language.' );
+ $this->assertCount( 1, $response['warnings'],
+ 'warning triggered when source language same as target language.' );
+ $this->assertArrayNotHasKey( 'errors', $response,
+ 'no error triggered when source language same as target language.' );
+ }
+}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php b/www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php
index e4a74771..68265733 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php
@@ -1,11 +1,9 @@
<?php
/**
- * Unit tests for api module.
- *
* @file
* @author Harry Burt
* @copyright Copyright © 2012-2013, Harry Burt
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -17,14 +15,14 @@ class ApiQueryMessageGroupsTest extends ApiTestCase {
parent::setUp();
global $wgHooks;
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgHooks' => $wgHooks,
- 'wgTranslateTranslationServices' => array(),
- ) );
- $wgHooks['TranslatePostInitGroups'] = array( array( $this, 'getTestGroups' ) );
+ 'wgTranslateTranslationServices' => [],
+ ] );
+ $wgHooks['TranslatePostInitGroups'] = [ [ $this, 'getTestGroups' ] ];
$mg = MessageGroups::singleton();
- $mg->setCache( wfGetCache( 'hash' ) );
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
$mg->recache();
}
@@ -44,13 +42,13 @@ class ApiQueryMessageGroupsTest extends ApiTestCase {
public function testAPIAccuracy() {
list( $data ) = $this->doApiRequest(
- array(
+ [
'action' => 'query',
'meta' => 'messagegroups',
'mgprop' => 'id|label|class|namespace|exists',
// @see https://gerrit.wikimedia.org/r/#/c/160222/
'continue' => ''
- )
+ ]
);
// Check structure
@@ -86,19 +84,19 @@ class ApiQueryMessageGroupsTest extends ApiTestCase {
}
public function testAPIFilterAccuracy() {
- $ids = array( 'MadeUpGroup' );
+ $ids = [ 'MadeUpGroup' ];
$ids += array_keys( MessageGroups::getAllGroups() );
foreach ( $ids as $id ) {
list( $data ) = $this->doApiRequest(
- array(
+ [
'action' => 'query',
'meta' => 'messagegroups',
'mgprop' => 'id|label|class|namespace|exists',
'mgfilter' => $id,
// @see https://gerrit.wikimedia.org/r/#/c/160222/
'continue' => ''
- )
+ ]
);
if ( $id === 'MadeUpGroup' ) {
@@ -133,13 +131,13 @@ class ApiQueryMessageGroupsTest extends ApiTestCase {
public function testBadProperty() {
list( $data ) = $this->doApiRequest(
- array(
+ [
'action' => 'query',
'meta' => 'messagegroups',
'mgprop' => 'madeupproperty',
// @see https://gerrit.wikimedia.org/r/#/c/160222/
'continue' => ''
- )
+ ]
);
$this->assertArrayHasKey( 'query', $data );
diff --git a/www/wiki/extensions/Translate/tests/phpunit/api/ApiTranslationReviewTest.php b/www/wiki/extensions/Translate/tests/phpunit/api/ApiTranslationReviewTest.php
index 4710a306..930dad0e 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/api/ApiTranslationReviewTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/api/ApiTranslationReviewTest.php
@@ -3,7 +3,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -14,14 +14,18 @@ class ApiTranslationReviewTest extends MediaWikiTestCase {
parent::setUp();
global $wgHooks;
- $this->setMwGlobals( array(
+ $this->setMwGlobals( [
'wgHooks' => $wgHooks,
- 'wgGroupPermissions' => array(),
- 'wgTranslateMessageNamespaces' => array( NS_MEDIAWIKI ),
- ) );
- $wgHooks['TranslatePostInitGroups'] = array( array( $this, 'getTestGroups' ) );
+ '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() );
@@ -29,10 +33,10 @@ class ApiTranslationReviewTest extends MediaWikiTestCase {
}
public function getTestGroups( &$list ) {
- $messages = array(
+ $messages = [
'ugakey1' => 'value1',
'ugakey2' => 'value2',
- );
+ ];
$list['testgroup'] = new MockWikiMessageGroup( 'testgroup', $messages );
@@ -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 );
@@ -60,38 +62,38 @@ class ApiTranslationReviewTest extends MediaWikiTestCase {
$content = ContentHandler::makeContent( 'unknown message', $title );
WikiPage::factory( $title )->doEditContent( $content, __METHOD__, 0, false, $superUser1 );
- $testcases = array(
- array(
+ $testcases = [
+ [
'permissiondenied',
$plainUser,
'Ugakey1/fi',
'Unpriviledged user is not allowed to change state'
- ),
- array(
+ ],
+ [
'owntranslation',
$superUser1,
'Ugakey1/fi',
'Cannot approve own translation'
- ),
- array(
+ ],
+ [
'fuzzymessage',
$superUser1,
'Ugakey2/fi',
'Cannot approve fuzzy translation'
- ),
- array(
+ ],
+ [
'unknownmessage',
$superUser1,
'Ugakey3/fi',
'Cannot approve unknown translation'
- ),
- array(
+ ],
+ [
'',
$superUser2,
'Ugakey1/fi',
'Can approve non-fuzzy known non-own translation'
- ),
- );
+ ],
+ ];
foreach ( $testcases as $case ) {
list( $expected, $user, $page, $comment ) = $case;
diff --git a/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf2.yaml b/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf2.yaml
index a46c7477..aee2933d 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf2.yaml
+++ b/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf2.yaml
@@ -6,8 +6,8 @@ BASIC:
description: Plop
FILES:
- class: MediaWikiExtensionFFS
- sourcePattern: "%GROUPROOT%/mediawiki-extensions/extensions/WikimediaMessages/WikimediaMessages.i18n.php"
+ class: JsonFFS
+ sourcePattern: "%GROUPROOT%/mediawiki-extensions/extensions/WikimediaMessages/i18n/%CODE%.json"
aliasFile: FooBar.alias.php
magicFile: FooBar.magic.php
aliasFileSource: "%GROUPROOT%/mediawiki-extensions/extensions/FooBar.alias.php"
@@ -20,7 +20,6 @@ CHECKER:
- pluralFormsCheck
- wikiParameterCheck
- wikiLinksCheck
- - XhtmlCheck
- braceBalanceCheck
- pagenameMessagesCheck
- miscMWChecks
diff --git a/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf3.yaml b/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf3.yaml
index 7d76e0a9..dd62fa32 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf3.yaml
+++ b/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf3.yaml
@@ -17,7 +17,6 @@ CHECKER:
- pluralFormsCheck
- wikiParameterCheck
- wikiLinksCheck
- - XhtmlCheck
- braceBalanceCheck
- pagenameMessagesCheck
- miscMWChecks
diff --git a/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf4.yaml b/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf4.yaml
index 91ac7e88..ca8a2fa3 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf4.yaml
+++ b/www/wiki/extensions/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf4.yaml
@@ -7,7 +7,7 @@ BASIC:
extensionurl: false
FILES:
- class: MediaWikiExtensionFFS
+ class: JsonFFS
sourcePattern: "%GROUPROOT%/mediawiki-extensions/extensions/foo"
CHECKER:
@@ -17,7 +17,6 @@ CHECKER:
- pluralFormsCheck
- wikiParameterCheck
- wikiLinksCheck
- - XhtmlCheck
- braceBalanceCheck
- pagenameMessagesCheck
- miscMWChecks
diff --git a/www/wiki/extensions/Translate/tests/phpunit/data/mediawiki-extensions.txt b/www/wiki/extensions/Translate/tests/phpunit/data/mediawiki-extensions.txt
index af963a8b..37554f24 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/data/mediawiki-extensions.txt
+++ b/www/wiki/extensions/Translate/tests/phpunit/data/mediawiki-extensions.txt
@@ -1,5 +1,4 @@
Wikimedia Messages
-format = php
desc = Plop
ignored = sidebar, robots.txt
optional = grouppage-recursive-export
@@ -7,11 +6,13 @@ prefix = wmf- | sidebar, grouppage-Staff, group-Staff, group-Staff-member
aliasfile = FooBar.alias.php
magicfile = FooBar.magic.php
-Example Extension
-format = php
-
Example JsonExtension
Example Extension 2
-format = php
file = foo
+
+Languages Modified
+languages = +foo, -bar
+
+Languages Set
+languages = foo, bar
diff --git a/www/wiki/extensions/Translate/tests/phpunit/ffs/AmdFFSTest.php b/www/wiki/extensions/Translate/tests/phpunit/ffs/AmdFFSTest.php
index 66dc88f3..44ad2147 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/ffs/AmdFFSTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/ffs/AmdFFSTest.php
@@ -5,7 +5,7 @@
* @file
* @author Matthias Palmer
* @copyright Copyright © 2011-2015, MetaSolutions AB
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,20 +15,20 @@ class AmdFFSTest extends MediaWikiTestCase {
public function setUp() {
parent::setUp();
- $this->groupConfiguration = array(
- 'BASIC' => array(
+ $this->groupConfiguration = [
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
- ),
- 'FILES' => array(
+ ],
+ 'FILES' => [
'class' => 'AmdFFS',
'sourcePattern' => 'fake_reference_not_used_in_practise',
'targetPattern' => 'fake_reference_not_used_in_practise',
- ),
- );
+ ],
+ ];
}
protected $groupConfiguration;
@@ -43,16 +43,16 @@ class AmdFFSTest extends MediaWikiTestCase {
$group = MessageGroupBase::factory( $this->groupConfiguration );
$ffs = new AmdFFS( $group );
$parsed = $ffs->readFromVariable( $file );
- $expected = array(
+ $expected = [
'MESSAGES' => $messages,
- 'AUTHORS' => $authors,
- 'METADATA' => array(),
- );
+ 'AUTHORS' => $authors,
+ 'METADATA' => [],
+ ];
$this->assertEquals( $parsed, $expected );
}
public function amdProvider() {
- $values = array();
+ $values = [];
$file1 =
<<<JS
@@ -63,15 +63,15 @@ define({
});
JS;
- $values[] = array(
- array(
+ $values[] = [
+ [
'one' => 'jeden',
'two' => 'dwa',
'three' => 'trzy',
- ),
- array(),
+ ],
+ [],
$file1,
- );
+ ];
$file2 =
<<<JS
@@ -87,11 +87,11 @@ define({
});
JS;
- $values[] = array(
- array( 'word' => 'слово' ),
- array( 'Matthias', 'Hannes' ),
+ $values[] = [
+ [ 'word' => 'слово' ],
+ [ 'Matthias', 'Hannes' ],
$file2,
- );
+ ];
return $values;
}
@@ -107,7 +107,7 @@ JS;
$parsed = $ffs->readFromVariable( $data );
$this->assertEquals(
- array( 'Nike the bunny' ),
+ [ 'Nike the bunny' ],
$parsed['AUTHORS'],
'Authors are exported'
);
diff --git a/www/wiki/extensions/Translate/tests/phpunit/ffs/AndroidXmlFFSTest.php b/www/wiki/extensions/Translate/tests/phpunit/ffs/AndroidXmlFFSTest.php
index 6a526485..62b8ca41 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/ffs/AndroidXmlFFSTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/ffs/AndroidXmlFFSTest.php
@@ -1,32 +1,33 @@
<?php
/**
- * Tests for AndroidXmlFFS
- *
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
class AndroidXmlFFSTest extends MediaWikiTestCase {
- protected $groupConfiguration = array(
- 'BASIC' => array(
+ protected $groupConfiguration = [
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
- ),
- 'FILES' => array(
+ ],
+ 'FILES' => [
'class' => 'AndroidXmlFFS',
'sourcePattern' => '',
- ),
- );
+ ],
+ ];
public function testParsing() {
$file =
<<<XML
<?xml version="1.0" encoding="utf-8"?>
+<!-- Authors:
+* Imaginary translator
+-->
<resources>
<string name="wpt_voicerec">Voice recording</string>
<string name="wpt_stillimage" fuzzy="true">Picture</string>
@@ -36,6 +37,8 @@ class AndroidXmlFFSTest extends MediaWikiTestCase {
</plurals>
<string name="has_quotes">Go to \"Wikipedia\"</string>
<string name="starts_with_at">\@Wikipedia</string>
+ <string name="has_ampersand">1&amp;nbsp;000</string>
+ <string name="has_newline">first\nsecond</string>
</resources>
XML;
@@ -45,14 +48,21 @@ XML;
$group = MessageGroupBase::factory( $this->groupConfiguration );
$ffs = new AndroidXmlFFS( $group );
$parsed = $ffs->readFromVariable( $file );
- $expected = array(
- 'wpt_voicerec' => 'Voice recording',
- 'wpt_stillimage' => '!!FUZZY!!Picture',
- 'alot' => '{{PLURAL|one=bunny|other=bunnies}}',
- 'has_quotes' => 'Go to "Wikipedia"',
- 'starts_with_at' => '@Wikipedia',
- );
- $expected = array( 'MESSAGES' => $expected, 'AUTHORS' => array() );
+ $expected = [
+ 'MESSAGES' => [
+ 'wpt_voicerec' => 'Voice recording',
+ 'wpt_stillimage' => '!!FUZZY!!Picture',
+ 'alot' => '{{PLURAL|one=bunny|bunnies}}',
+ 'has_quotes' => 'Go to "Wikipedia"',
+ 'starts_with_at' => '@Wikipedia',
+ 'has_ampersand' => '1&nbsp;000',
+ 'has_newline' => "first\nsecond",
+ ],
+ 'AUTHORS' => [
+ 'Imaginary translator',
+ ]
+ ];
+
$this->assertEquals( $expected, $parsed );
}
@@ -63,16 +73,28 @@ XML;
$group = MessageGroupBase::factory( $this->groupConfiguration );
$ffs = new AndroidXmlFFS( $group );
- $messages = array(
+ $messages = [
'ko=26ra' => 'wawe',
'foobar' => '!!FUZZY!!Kissa kala <koira> "a\'b',
- 'amuch' => '{{PLURAL|one=bunny|other=bunnies}}',
- );
+ 'amuch' => '{{PLURAL|one=bunny|bunnies}}',
+ 'ampersand' => '&nbsp; &foo',
+ 'newlines' => "first\nsecond",
+ ];
+ $authors = [
+ '1 Hyphen-Fan',
+ '2 Hyphen--Lover',
+ '3 Hyphen---Fanatic-',
+ ];
+
$collection = new MockMessageCollection( $messages );
+ $collection->addCollectionAuthors( $authors, 'set' );
$xml = $ffs->writeIntoVariable( $collection );
$parsed = $ffs->readFromVariable( $xml );
- $expected = array( 'MESSAGES' => $messages, 'AUTHORS' => array() );
+ $expected = [
+ 'MESSAGES' => $messages,
+ 'AUTHORS' => $authors,
+ ];
$this->assertEquals( $expected, $parsed );
}
}
@@ -92,4 +114,7 @@ class MockMessageCollection extends MessageCollection {
public function filter( $type, $condition = true, $value = null ) {
}
+
+ public function loadTranslations() {
+ }
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/ffs/AppleFFSTest.php b/www/wiki/extensions/Translate/tests/phpunit/ffs/AppleFFSTest.php
index 2bbda88c..f9f00b1a 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/ffs/AppleFFSTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/ffs/AppleFFSTest.php
@@ -11,18 +11,18 @@
class AppleFFSTest extends MediaWikiTestCase {
- protected $groupConfiguration = array(
- 'BASIC' => array(
+ protected $groupConfiguration = [
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
- ),
- 'FILES' => array(
+ ],
+ 'FILES' => [
'class' => 'AppleFFS',
- ),
- );
+ ],
+ ];
public function testParsing() {
$file =
@@ -45,17 +45,17 @@ STRINGS;
$group = MessageGroupBase::factory( $this->groupConfiguration );
$ffs = new AppleFFS( $group );
$parsed = $ffs->readFromVariable( $file );
- $expected = array(
+ $expected = [
'website' => '<nowiki>http://en.wikipedia.org/</nowiki>',
'language' => 'English',
'key with spaces' => 'Value that can be looked up with "key with spaces".',
// We expect this one to be mangled for storage
'key-with-=7Bcurlies=7D' => 'Value that can be looked up with "key-with-{curlies}".',
- );
- $authors = array(
+ ];
+ $authors = [
'Testy McTesterson',
- );
- $expected = array( 'MESSAGES' => $expected, 'AUTHORS' => $authors );
+ ];
+ $expected = [ 'MESSAGES' => $expected, 'AUTHORS' => $authors ];
$this->assertEquals( $expected, $parsed );
}
@@ -90,24 +90,24 @@ STRINGS;
}
public function rowValuesProvider() {
- return array(
- array( 'key', 'value', 'simple row' ),
- array( 'key', 'value', 'row with different sep' ),
- array( 'key', 'val=ue', 'row with sep inside value' ),
- array( 'k=ey', 'value', 'row with sep inside key' ),
- array( '!key', 'value', 'row with ! at the beginning of key' ),
- array( 'k!ey', 'value', 'row with ! inside key' ),
- array( '#key', 'value', 'row with # at the beginning of key' ),
- array( 'k#ey', 'value', 'row with # inside key' ),
- array( 'k{ey}', 'value', 'row with { and } inside key' ),
- array( 'k\\tey', 'value\\', 'row with escapes' ),
- array( '01234', '13.34', 'row with numbers' ),
- array( '\\n\\tкая', 'кая', 'row with annoying characteres' ),
- array( '=', '', 'row with empty value' ),
- array( '#k e\\=y#', '=v!\\=alue\\ \\\\', 'complex row' ),
- array( 'Key with "quotes"', 'Value "with quotes" also', 'row with double-quotes' ),
- array( 'Key with \\"quotes\\"', 'Value \\"with quotes\\" also',
- 'row with double-quotes AND backslashes' ),
- );
+ return [
+ [ 'key', 'value', 'simple row' ],
+ [ 'key', 'value', 'row with different sep' ],
+ [ 'key', 'val=ue', 'row with sep inside value' ],
+ [ 'k=ey', 'value', 'row with sep inside key' ],
+ [ '!key', 'value', 'row with ! at the beginning of key' ],
+ [ 'k!ey', 'value', 'row with ! inside key' ],
+ [ '#key', 'value', 'row with # at the beginning of key' ],
+ [ 'k#ey', 'value', 'row with # inside key' ],
+ [ 'k{ey}', 'value', 'row with { and } inside key' ],
+ [ 'k\\tey', 'value\\', 'row with escapes' ],
+ [ '01234', '13.34', 'row with numbers' ],
+ [ '\\n\\tкая', 'кая', 'row with annoying characteres' ],
+ [ '=', '', 'row with empty value' ],
+ [ '#k e\\=y#', '=v!\\=alue\\ \\\\', 'complex row' ],
+ [ 'Key with "quotes"', 'Value "with quotes" also', 'row with double-quotes' ],
+ [ 'Key with \\"quotes\\"', 'Value \\"with quotes\\" also',
+ 'row with double-quotes AND backslashes' ],
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/ffs/DtdFFSTest.php b/www/wiki/extensions/Translate/tests/phpunit/ffs/DtdFFSTest.php
index bb44c21c..9e76454d 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/ffs/DtdFFSTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/ffs/DtdFFSTest.php
@@ -6,23 +6,23 @@
* @author Niklas Laxström
* @author Amir E. Aharoni
* @file
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
class DtdFFSTest extends MediaWikiTestCase {
- protected $groupConfiguration = array(
- 'BASIC' => array(
+ protected $groupConfiguration = [
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
- ),
- 'FILES' => array(
+ ],
+ 'FILES' => [
'class' => 'DtdFFS',
- ),
- );
+ ],
+ ];
public function testParsing() {
$file =
@@ -44,11 +44,11 @@ DTD;
$group = MessageGroupBase::factory( $this->groupConfiguration );
$ffs = new DtdFFS( $group );
$parsed = $ffs->readFromVariable( $file );
- $expected = array(
+ $expected = [
'okawix.title' => 'Okawix &okawix.vernum; - Navigator de Wikipedia',
'okawix.back' => 'Retro',
- );
- $expected = array( 'MESSAGES' => $expected, 'AUTHORS' => array( 'McDutchie' ) );
+ ];
+ $expected = [ 'MESSAGES' => $expected, 'AUTHORS' => [ 'McDutchie' ] ];
$this->assertEquals( $expected, $parsed );
}
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/ffs/GettextFFSTest.php b/www/wiki/extensions/Translate/tests/phpunit/ffs/GettextFFSTest.php
index f4e7a1f8..e471ceb9 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/ffs/GettextFFSTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/ffs/GettextFFSTest.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,19 +16,19 @@ class GettextFFSTest extends MediaWikiTestCase {
public function setUp() {
parent::setUp();
- $this->groupConfiguration = array(
- 'BASIC' => array(
+ $this->groupConfiguration = [
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
- ),
- 'FILES' => array(
+ ],
+ 'FILES' => [
'class' => 'GettextFFS',
'sourcePattern' => __DIR__ . '/../data/gettext.po',
- ),
- );
+ ],
+ ];
}
/**
@@ -39,44 +39,44 @@ class GettextFFSTest extends MediaWikiTestCase {
}
public static function provideMangling() {
- return array(
- array(
+ return [
+ [
'3f9999051ce0bc6e98f43224fe6ee1c220e34e49-Hello!_world_loooooooooooooooo',
- array( 'id' => 'Hello! world loooooooooooooooooooooooooooooooooooooooooong', 'ctxt' => 'baa' ),
+ [ 'id' => 'Hello! world loooooooooooooooooooooooooooooooooooooooooong', 'ctxt' => 'baa' ],
'legacy'
- ),
- array(
+ ],
+ [
'3f9999-Hello!_world_loooooooooooooooo',
- array( 'id' => 'Hello! world loooooooooooooooooooooooooooooooooooooooooong', 'ctxt' => 'baa' ),
+ [ 'id' => 'Hello! world loooooooooooooooooooooooooooooooooooooooooong', 'ctxt' => 'baa' ],
'simple'
- ),
+ ],
- array(
+ [
'1437e478b59e220640bf530f7e3bac93950eb8ae-"¤_=FJQ"_¤r_£_ab',
- array( 'id' => '"¤#=FJQ"<>¤r £}[]}%ab', 'ctxt' => false ),
+ [ 'id' => '"¤#=FJQ"<>¤r £}[]}%ab', 'ctxt' => false ],
'legacy'
- ),
- array(
+ ],
+ [
'1437e4-"¤#=FJQ"<>¤r_£}[]}%ab',
- array( 'id' => '"¤#=FJQ"<>¤r £}[]}%ab', 'ctxt' => false ),
+ [ 'id' => '"¤#=FJQ"<>¤r £}[]}%ab', 'ctxt' => false ],
'simple'
- ),
+ ],
- );
+ ];
}
public function testHashing() {
- $item1 = array(
+ $item1 = [
'id' => 'a',
'str' => 'b',
'ctxt' => false,
- );
+ ];
- $item2 = array(
+ $item2 = [
'id' => 'a',
'str' => 'b',
'ctxt' => '',
- );
+ ];
$this->assertNotEquals(
GettextFFS::generateKeyFromItem( $item1, 'legacy' ),
@@ -113,8 +113,8 @@ class GettextFFSTest extends MediaWikiTestCase {
$key = 'key';
$m = new FatMessage( 'key', 'definition' );
$m->setTranslation( 'translation' );
- $trans = array();
- $pot = array();
+ $trans = [];
+ $pot = [];
$pluralCount = 0;
$results = <<<GETTEXT
@@ -155,4 +155,102 @@ GETTEXT;
trim( $method->invoke( $ffs, $key, $m, $trans, $pot, $pluralCount ) )
);
}
+
+ /**
+ * @dataProvider provideShouldOverwrite
+ */
+ public function testShouldOverwrite( $a, $b, $expected, $comment ) {
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new GettextFFS( $group );
+ $actual = $ffs->shouldOverwrite( $a, $b );
+ $this->assertEquals( $expected, $actual, $comment );
+ }
+
+ public function provideShouldOverwrite() {
+ $cases = [];
+
+ $cases[] = [
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-09 07:24:07+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: azb\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr ""
+GETTEXT
+ ,
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-06 07:07:03+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: azb\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr ""
+GETTEXT
+ ,
+ false,
+ "Only date has changed"
+ ];
+
+ $cases[] = [
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-09 07:24:07+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: azb\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr ""
+GETTEXT
+ ,
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-06 07:07:03+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: fi\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr "Tietoja kartasta"
+GETTEXT
+ ,
+ true,
+ "Content has changed"
+ ];
+
+ return $cases;
+ }
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/ffs/IniFFSTest.php b/www/wiki/extensions/Translate/tests/phpunit/ffs/IniFFSTest.php
index 05250b20..ac9cd96b 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/ffs/IniFFSTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/ffs/IniFFSTest.php
@@ -4,25 +4,25 @@
* files, which are sometimes used for translations.
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @file
*/
class IniFFSTest extends MediaWikiTestCase {
- protected $groupConfiguration = array(
- 'BASIC' => array(
+ protected $groupConfiguration = [
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
- ),
- 'FILES' => array(
+ ],
+ 'FILES' => [
'class' => 'IniFFS',
'sourcePattern' => 'ignored',
- ),
- );
+ ],
+ ];
public function testParsing() {
$file = file_get_contents( __DIR__ . '/../data/IniFFSTest1.ini' );
@@ -36,17 +36,17 @@ class IniFFSTest extends MediaWikiTestCase {
$this->assertTrue( IniFFS::isValid( $file ) );
$parsed = $ffs->readFromVariable( $file );
- $expected = array(
+ $expected = [
'hello' => 'Hello',
'world' => 'World!',
'all' => 'all = all',
'foo.bar' => 'bar',
'quote' => "We're having fun?",
- );
- $expected = array(
+ ];
+ $expected = [
'MESSAGES' => $expected,
- 'AUTHORS' => array( 'The king of very small kingdom' )
- );
+ 'AUTHORS' => [ 'The king of very small kingdom' ]
+ ];
$this->assertEquals( $expected, $parsed );
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/ffs/JavaFFSTest.php b/www/wiki/extensions/Translate/tests/phpunit/ffs/JavaFFSTest.php
index f6e7d4e7..17657079 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/ffs/JavaFFSTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/ffs/JavaFFSTest.php
@@ -10,18 +10,18 @@
class JavaFFSTest extends MediaWikiTestCase {
- protected $groupConfiguration = array(
- 'BASIC' => array(
+ protected $groupConfiguration = [
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
- ),
- 'FILES' => array(
+ ],
+ 'FILES' => [
'class' => 'JavaFFS',
- ),
- );
+ ],
+ ];
public function testParsing() {
$file =
@@ -45,15 +45,15 @@ PROPERTIES;
$group = MessageGroupBase::factory( $this->groupConfiguration );
$ffs = new JavaFFS( $group );
$parsed = $ffs->readFromVariable( $file );
- $expected = array(
+ $expected = [
'website' => '<nowiki>http://en.wikipedia.org/</nowiki>',
'language' => 'English',
'message' => 'Welcome to Wikipedia!',
'key with spaces' => 'Value that can be looked up with "key with spaces".',
// We expect this one to be mangled for storage
'key-with-=7Bcurlies=7D' => 'Value that can be looked up with "key-with-{curlies}".',
- );
- $expected = array( 'MESSAGES' => $expected, 'AUTHORS' => array() );
+ ];
+ $expected = [ 'MESSAGES' => $expected, 'AUTHORS' => [] ];
$this->assertEquals( $expected, $parsed );
}
@@ -71,21 +71,21 @@ PROPERTIES;
}
public function rowValuesProvider() {
- return array(
- array( 'key', '=', 'value', 'simple row' ),
- array( 'key', ':', 'value', 'row with different sep' ),
- array( 'key', '=', 'val=ue', 'row with sep inside value' ),
- array( 'k=ey', '=', 'value', 'row with sep inside key' ),
- array( '!key', '=', 'value', 'row with ! at the beginning of key' ),
- array( 'k!ey', '=', 'value', 'row with ! inside key' ),
- array( '#key', '=', 'value', 'row with # at the beginning of key' ),
- array( 'k#ey', '=', 'value', 'row with # inside key' ),
- array( 'k{ey}', '=', 'value', 'row with { and } inside key' ),
- array( 'k\\tey', '=', 'value\\', 'row with escapes' ),
- array( '01234', '=', '13.34', 'row with numbers' ),
- array( '\\n\\tкая', '=', 'кая', 'row with annoying characteres' ),
- array( '=', '=', '', 'row with empty value' ),
- array( '#k e\\=y#', '=', '=v!\\=alue\\ \\\\', 'complex row' ),
- );
+ return [
+ [ 'key', '=', 'value', 'simple row' ],
+ [ 'key', ':', 'value', 'row with different sep' ],
+ [ 'key', '=', 'val=ue', 'row with sep inside value' ],
+ [ 'k=ey', '=', 'value', 'row with sep inside key' ],
+ [ '!key', '=', 'value', 'row with ! at the beginning of key' ],
+ [ 'k!ey', '=', 'value', 'row with ! inside key' ],
+ [ '#key', '=', 'value', 'row with # at the beginning of key' ],
+ [ 'k#ey', '=', 'value', 'row with # inside key' ],
+ [ 'k{ey}', '=', 'value', 'row with { and } inside key' ],
+ [ 'k\\tey', '=', 'value\\', 'row with escapes' ],
+ [ '01234', '=', '13.34', 'row with numbers' ],
+ [ '\\n\\tкая', '=', 'кая', 'row with annoying characteres' ],
+ [ '=', '=', '', 'row with empty value' ],
+ [ '#k e\\=y#', '=', '=v!\\=alue\\ \\\\', 'complex row' ],
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/ffs/JsonFFSTest.php b/www/wiki/extensions/Translate/tests/phpunit/ffs/JsonFFSTest.php
index 0431fe49..12d05194 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/ffs/JsonFFSTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/ffs/JsonFFSTest.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,20 +15,20 @@ class JsonFFSTest extends MediaWikiTestCase {
public function setUp() {
parent::setUp();
- $this->groupConfiguration = array(
- 'BASIC' => array(
+ $this->groupConfiguration = [
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
- ),
- 'FILES' => array(
+ ],
+ 'FILES' => [
'class' => 'JsonFFS',
'sourcePattern' => __DIR__ . '/../data/jsontest_%CODE%.json',
'targetPattern' => 'jsontest_%CODE%.json',
- ),
- );
+ ],
+ ];
}
protected $groupConfiguration;
@@ -43,14 +43,14 @@ class JsonFFSTest extends MediaWikiTestCase {
$group = MessageGroupBase::factory( $this->groupConfiguration );
$ffs = new JsonFFS( $group );
$parsed = $ffs->readFromVariable( $file );
- $expected = array(
+ $expected = [
'MESSAGES' => $messages,
'AUTHORS' => $authors,
- 'METADATA' => array(),
- );
+ 'METADATA' => [],
+ ];
$this->assertEquals( $expected, $parsed );
- if ( $messages === array() ) {
+ if ( $messages === [] ) {
$this->assertFalse( JsonFFS::isValid( $file ) );
} else {
$this->assertTrue( JsonFFS::isValid( $file ) );
@@ -58,7 +58,7 @@ class JsonFFSTest extends MediaWikiTestCase {
}
public function jsonProvider() {
- $values = array();
+ $values = [];
$file1 =
<<<JSON
@@ -69,15 +69,15 @@ class JsonFFSTest extends MediaWikiTestCase {
}
JSON;
- $values[] = array(
- array(
+ $values[] = [
+ [
'one' => 'jeden',
'two' => 'dwa',
'three' => 'trzy',
- ),
- array(),
+ ],
+ [],
$file1,
- );
+ ];
$file2 =
<<<JSON
@@ -89,11 +89,11 @@ JSON;
}
JSON;
- $values[] = array(
- array( 'word' => 'слово' ),
- array( 'Niklas', 'Amir' ),
+ $values[] = [
+ [ 'word' => 'слово' ],
+ [ 'Niklas', 'Amir' ],
$file2,
- );
+ ];
$file3 =
<<<JSON
@@ -101,11 +101,11 @@ JSON;
Json!>@£0 file
JSON;
- $values[] = array(
- array(),
- array(),
+ $values[] = [
+ [],
+ [],
$file3,
- );
+ ];
return $values;
}
@@ -121,7 +121,7 @@ JSON;
$parsed = $ffs->readFromVariable( $data );
$this->assertEquals(
- array( 'Nike the bunny' ),
+ [ 'Nike the bunny' ],
$parsed['AUTHORS'],
'Authors are exported'
);
diff --git a/www/wiki/extensions/Translate/tests/phpunit/ffs/MediaWikiExtensionsTest.php b/www/wiki/extensions/Translate/tests/phpunit/ffs/MediaWikiExtensionsTest.php
new file mode 100644
index 00000000..f0a27a2d
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/ffs/MediaWikiExtensionsTest.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Test for parsing the special definition file for mediawiki-extensions
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class MediaWikiExtensionsTest extends PHPUnit\Framework\TestCase {
+ /**
+ * @requires function yaml_parse
+ * @covers PremadeMediawikiExtensionGroups
+ */
+ public function testParsing() {
+ $defs = __DIR__ . '/../data/mediawiki-extensions.txt';
+ $path = '%GROUPROOT%/mediawiki-extensions/extensions';
+ $foo = new PremadeMediawikiExtensionGroups( $defs, $path );
+ $list = $deps = $autoload = [];
+ $foo->register( $list, $deps, $autoload );
+
+ $this->assertEquals( 1, count( $deps ), 'A dependency to definition file was added' );
+ $this->assertEquals( 5, count( $list ), 'Right number of groups were created' );
+
+ $this->assertArrayHasKey( 'ext-wikimediamessages', $list );
+ $expected = TranslateYaml::load( __DIR__ . '/../data/MediaWikiExtensionTest-conf2.yaml' );
+ $this->assertEquals( $expected, $list['ext-wikimediamessages']->getConfiguration() );
+
+ $this->assertArrayHasKey( 'ext-examplejsonextension', $list );
+ $expected = TranslateYaml::load( __DIR__ . '/../data/MediaWikiExtensionTest-conf3.yaml' );
+ $this->assertEquals( $expected, $list['ext-examplejsonextension']->getConfiguration() );
+
+ $this->assertArrayHasKey( 'ext-exampleextension2', $list );
+ $expected = TranslateYaml::load( __DIR__ . '/../data/MediaWikiExtensionTest-conf4.yaml' );
+ $this->assertEquals( $expected, $list['ext-exampleextension2']->getConfiguration() );
+
+ $this->assertArrayHasKey( 'ext-languagesmodified', $list );
+ $languages = $list['ext-languagesmodified']->getTranslatableLanguages();
+ $this->assertArrayHasKey( 'foo', $languages, 'Whitelisted language is available' );
+ $this->assertArrayNotHasKey( 'bar', $languages, 'Blacklisted language is not available' );
+ $this->assertArrayHasKey( 'de', $languages, 'Default language is available' );
+
+ $this->assertArrayHasKey( 'ext-languagesset', $list );
+ $languages = $list['ext-languagesset']->getTranslatableLanguages();
+ $this->assertArrayHasKey( 'foo', $languages, 'Set language is available' );
+ $this->assertArrayNotHasKey( 'de', $languages, 'Unset language is not available' );
+ }
+}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/ffs/XliffFFSTest.php b/www/wiki/extensions/Translate/tests/phpunit/ffs/XliffFFSTest.php
index 8d18a422..96055c17 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/ffs/XliffFFSTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/ffs/XliffFFSTest.php
@@ -1,26 +1,24 @@
<?php
/**
- * Tests for XliffFFS
- *
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
class XliffFFSTest extends MediaWikiTestCase {
- protected $groupConfiguration = array(
- 'BASIC' => array(
+ protected $groupConfiguration = [
+ 'BASIC' => [
'class' => 'FileBasedMessageGroup',
'id' => 'test-id',
'label' => 'Test Label',
'namespace' => 'NS_MEDIAWIKI',
'description' => 'Test description',
- ),
- 'FILES' => array(
+ ],
+ 'FILES' => [
'class' => 'XliffFFS',
'sourcePattern' => '',
- ),
- );
+ ],
+ ];
public function testParsing() {
/** @var FileBasedMessageGroup $group */
@@ -29,21 +27,21 @@ class XliffFFSTest extends MediaWikiTestCase {
$file = file_get_contents( __DIR__ . '/../data/minimal.xlf' );
$parsed = $ffs->readFromVariable( $file, 'target' );
- $expected = array(
+ $expected = [
'1' => 'Hei maailma',
'2' => TRANSLATE_FUZZY . 'Fuzzy translation',
'3' => 'Tämä on <g id="1" ctype="bold">paksu</g>.',
- );
- $expected = array( 'MESSAGES' => $expected );
+ ];
+ $expected = [ 'MESSAGES' => $expected ];
$this->assertEquals( $expected, $parsed );
$parsed = $ffs->readFromVariable( $file, 'source' );
- $expected = array(
+ $expected = [
'1' => 'Hello world',
'2' => 'Fuzzy message',
'3' => 'This is <g id="1" ctype="bold">bold</g>.',
- );
- $expected = array( 'MESSAGES' => $expected );
+ ];
+ $expected = [ 'MESSAGES' => $expected ];
$this->assertEquals( $expected, $parsed );
}
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/insertables/CombinedInsertablesSuggesterTest.php b/www/wiki/extensions/Translate/tests/phpunit/insertables/CombinedInsertablesSuggesterTest.php
new file mode 100644
index 00000000..3a6ec8b6
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/insertables/CombinedInsertablesSuggesterTest.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * @file
+ * @author Geoffrey Mon
+ * @license GPL-2.0-or-later
+ */
+class CombinedInsertablesSuggesterTest extends MediaWikiTestCase {
+
+ /**
+ * @dataProvider getInsertablesProvider
+ */
+ public function testGetInsertables( $suggesters, $input, $expected ) {
+ $suggester = new CombinedInsertablesSuggester( $suggesters );
+ $this->assertArrayEquals( $expected, $suggester->getInsertables( $input ) );
+ }
+
+ public function getInsertablesProvider() {
+ return [
+ // Test basic combination of multiple InsertablesSuggesters
+ [
+ [
+ new TestingInsertablesSuggester(),
+ new NumericalParameterInsertablesSuggester(),
+ ],
+ 'test $1 foo $2 bar $3spam eggs',
+ [
+ new Insertable( 'Test', 'Test', '' ),
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$3', '$3', '' ),
+ ]
+ ],
+ // Test removal of duplicate suggestions
+ [
+ [
+ new NumericalParameterInsertablesSuggester(),
+ new NumericalParameterInsertablesSuggester(),
+ ],
+ 'test $1 duplicates $2 $3',
+ [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$3', '$3', '' ),
+ ]
+ ],
+ // Test removal of duplicate suggestions
+ [
+ [
+ new TestingDuplicateInsertablesSuggester(),
+ new NumericalParameterInsertablesSuggester(),
+ ],
+ 'test $1 duplicates $2 $3',
+ [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$3', '$3', '' ),
+ new Insertable( 'Test', 'Test', '' ),
+ new Insertable( '', 'Test', 'Test' ),
+ ]
+ ],
+ // Test no InsertablesSuggesters
+ [
+ [],
+ 'test $1 duplicates $2 $3',
+ []
+ ],
+ ];
+ }
+}
+
+class TestingInsertablesSuggester implements InsertablesSuggester {
+ public function getInsertables( $text ) {
+ return [ new Insertable( 'Test', 'Test', '' ) ];
+ }
+}
+
+class TestingDuplicateInsertablesSuggester implements InsertablesSuggester {
+ public function getInsertables( $text ) {
+ return [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( 'Test', 'Test', '' ),
+ new Insertable( 'Test', 'Test', '' ),
+ new Insertable( '', 'Test', 'Test' ),
+ ];
+ }
+}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/insertables/MediaWikiInsertablesSuggesterTest.php b/www/wiki/extensions/Translate/tests/phpunit/insertables/MediaWikiInsertablesSuggesterTest.php
index 549bb461..d49206f7 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/insertables/MediaWikiInsertablesSuggesterTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/insertables/MediaWikiInsertablesSuggesterTest.php
@@ -1,13 +1,11 @@
<?php
/**
- * Tests for class MediaWikiInsertablesSuggester
- *
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-class MediaWikiInsertablesSuggesterTest extends MediaWikiTestCase {
+class MediaWikiInsertablesSuggesterTest extends PHPUnit\Framework\TestCase {
/**
* @dataProvider getInsertablesProvider
@@ -18,21 +16,21 @@ class MediaWikiInsertablesSuggesterTest extends MediaWikiTestCase {
}
public function getInsertablesProvider() {
- return array(
- array( 'Hi $1', array(
+ return [
+ [ 'Hi $1', [
new Insertable( '$1', '$1', '' )
- ) ),
- array( 'Hello $1user', array(
+ ] ],
+ [ 'Hello $1user', [
new Insertable( '$1user', '$1user', '' ),
- ) ),
- array( '{{GENDER:$1|he|she}}', array(
+ ] ],
+ [ '{{GENDER:$1|he|she}}', [
new Insertable( '$1', '$1', '' ),
new Insertable( 'GENDER:$1', '{{GENDER:$1|', '}}' ),
- ) ),
+ ] ],
// Parameterless gender
- array( '{{GENDER:|he|she}}', array(
+ [ '{{GENDER:|he|she}}', [
new Insertable( 'GENDER:', '{{GENDER:|', '}}' ),
- ) ),
- );
+ ] ],
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/insertables/NumericalParameterInsertablesSuggesterTest.php b/www/wiki/extensions/Translate/tests/phpunit/insertables/NumericalParameterInsertablesSuggesterTest.php
new file mode 100644
index 00000000..d2a8f4b6
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/insertables/NumericalParameterInsertablesSuggesterTest.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * @file
+ * @author Geoffrey Mon
+ * @license GPL-2.0-or-later
+ */
+class NumericalParameterInsertablesSuggesterTest extends PHPUnit\Framework\TestCase {
+
+ /**
+ * @dataProvider getInsertablesProvider
+ */
+ public function testGetInsertables( $input, $expected ) {
+ $suggester = new MediaWikiInsertablesSuggester();
+ $this->assertEquals( $expected, $suggester->getInsertables( $input ) );
+ }
+
+ public function getInsertablesProvider() {
+ return [
+ [ '$1 $2 $3', [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$3', '$3', '' ),
+ ] ],
+ [ 'test $1 foo $2 bar $3spam eggs', [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$3', '$3', '' ),
+ ] ],
+ [ '$1 or $2, $15!', [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$15', '$15', '' ),
+ ] ],
+ ];
+ }
+}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/insertables/TranslatablePageInsertablesSuggesterTest.php b/www/wiki/extensions/Translate/tests/phpunit/insertables/TranslatablePageInsertablesSuggesterTest.php
index d0fb3f2a..7d3e6198 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/insertables/TranslatablePageInsertablesSuggesterTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/insertables/TranslatablePageInsertablesSuggesterTest.php
@@ -1,13 +1,11 @@
<?php
/**
- * Tests for class TranslatablePageInsertablesSuggester
- *
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-class TranslatablePageInsertablesSuggesterTest extends MediaWikiInsertablesSuggesterTest {
+class TranslatablePageInsertablesSuggesterTest extends PHPUnit\Framework\TestCase {
/**
* @dataProvider getInsertablesProvider
*/
@@ -17,23 +15,23 @@ class TranslatablePageInsertablesSuggesterTest extends MediaWikiInsertablesSugge
}
public function getInsertablesProvider() {
- return array(
- array(
+ return [
+ [
'Hi $1, I am $myname $myLastName.',
- array(
+ [
new Insertable( '$1', '$1', '' ),
new Insertable( '$myname', '$myname', '' ),
new Insertable( '$myLastName', '$myLastName', '' ),
- )
- ),
- array(
+ ]
+ ],
+ [
'Insertables can $have-hyphens, $number9 and $under_scores',
- array(
+ [
new Insertable( '$have-hyphens', '$have-hyphens', '' ),
new Insertable( '$number9', '$number9', '' ),
new Insertable( '$under_scores', '$under_scores', '' ),
- )
- ),
- );
+ ]
+ ],
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/pagetranslation/Inline.ptsource b/www/wiki/extensions/Translate/tests/phpunit/pagetranslation/Inline.ptsource
new file mode 100644
index 00000000..78c4146e
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/pagetranslation/Inline.ptsource
@@ -0,0 +1 @@
+We had a nice <translate><!--T:-1--> day</translate> today.
diff --git a/www/wiki/extensions/Translate/tests/phpunit/pagetranslation/Whitespace.ptsource b/www/wiki/extensions/Translate/tests/phpunit/pagetranslation/Whitespace.ptsource
new file mode 100644
index 00000000..e6773415
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/pagetranslation/Whitespace.ptsource
@@ -0,0 +1,19 @@
+There is a two new lines after this line.
+
+<translate>
+
+<!--T:-1-->
+There is a two new lines before and after this line.
+
+</translate>
+
+There is a two new lines before and after this line also.
+
+
+There is three spaces trailing on this line: <translate>
+
+ <!--T:-1-->
+This line is prefixed with a space, with two trailing spaces </translate>
+
+<translate><!--T:-1--> line1</translate>
+<translate><!--T:-1--> line2</translate>
diff --git a/www/wiki/extensions/Translate/tests/phpunit/tag/PageTranslationHooksTest.php b/www/wiki/extensions/Translate/tests/phpunit/tag/PageTranslationHooksTest.php
new file mode 100644
index 00000000..5aca5862
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/tag/PageTranslationHooksTest.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * Test for various code using hooks.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * @group Database
+ * @group medium
+ */
+class PageTranslationHooksTest extends MediaWikiTestCase {
+ protected function setUp() {
+ parent::setUp();
+
+ global $wgHooks;
+ $this->setMwGlobals( [
+ 'wgHooks' => [],
+ 'wgEnablePageTranslation' => true,
+ 'wgTranslateTranslationServices' => [],
+ ] );
+ TranslateHooks::setupTranslate();
+ $wgHooks['TranslatePostInitGroups'] = [ 'MessageGroups::getTranslatablePages' ];
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) );
+ $mg->recache();
+
+ MessageIndex::setInstance( new HashMessageIndex() );
+ MessageIndex::singleton()->rebuild();
+ }
+
+ public function testRenderTagPage() {
+ global $wgParser;
+
+ // Setup objects
+ $superUser = $this->getTestSysop()->getUser();
+ $translatablePageTitle = Title::newFromText( 'Vuosaari' );
+ $page = WikiPage::factory( $translatablePageTitle );
+ $text = '<translate>pupu</translate>';
+ $content = ContentHandler::makeContent( $text, $translatablePageTitle );
+ $translatablePage = TranslatablePage::newFromTitle( $translatablePageTitle );
+ $parser = $wgParser->getFreshParser();
+ $options = ParserOptions::newFromUser( $superUser );
+ $messageGroups = MessageGroups::singleton();
+
+ // Create the page
+ $editStatus = $page->doEditContent( $content, __METHOD__, 0, false, $superUser );
+ $messageGroups->recache();
+
+ // Check that we don't interfere with non-translatable pages at all
+ $parserOutput = $parser->parse( $text, $translatablePageTitle, $options );
+ $actual = $parserOutput->getExtensionData( 'translate-translation-page' );
+ $expected = null;
+ $this->assertSame( $expected, $actual, 'Extension data is not set on unmarked source page' );
+
+ // Mark the page for translation
+ $latestRevisionId = $editStatus->value['revision']->getId();
+ $translatablePage->addMarkedTag( $latestRevisionId );
+ $messageGroups->recache();
+ $translationPageTitle = Title::newFromText( 'Vuosaari/fi' );
+ TranslateRenderJob::newJob( $translationPageTitle )->run();
+
+ // Check that we don't add data to translatable pages
+ $parserOutput = $parser->parse( $text, $translatablePageTitle, $options );
+ $actual = $parserOutput->getExtensionData( 'translate-translation-page' );
+ $expected = null;
+ $this->assertSame( $expected, $actual, 'Extension data is not set on marked source page' );
+
+ // Check that our code works for translation pages
+ $parserOutput = $parser->parse( 'fi-pupu', $translationPageTitle, $options );
+ $actual = $parserOutput->getExtensionData( 'translate-translation-page' );
+ $expected = [
+ 'sourcepagetitle' => $translatablePageTitle,
+ 'languagecode' => 'fi',
+ 'messagegroupid' => 'page-Vuosaari',
+ ];
+ $this->assertTrue( is_array( $actual ), 'Extension data is set on marked page' );
+ $this->assertSame(
+ 'Vuosaari',
+ $actual[ 'sourcepagetitle' ]->getPrefixedText(),
+ 'Source page title is correct'
+ );
+ $this->assertSame(
+ 'fi',
+ $actual[ 'languagecode' ],
+ 'Language code is correct'
+ );
+ $this->assertSame(
+ 'page-Vuosaari',
+ $actual[ 'messagegroupid' ],
+ 'Message group id is correct'
+ );
+ }
+}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php b/www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php
index 9a55d4d1..d3bb308b 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php
@@ -1,13 +1,13 @@
<?php
/**
- * Unit tests.
- *
* @author Niklas Laxström
* @file
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-class ArrayFlattenerTest extends MediaWikiTestCase {
+class ArrayFlattenerTest extends PHPUnit\Framework\TestCase {
+ use PHPUnit4And6Compat;
+
/**
* @dataProvider provideTestFlatten
*/
@@ -26,19 +26,225 @@ class ArrayFlattenerTest extends MediaWikiTestCase {
$this->assertEquals( $expected, $output );
}
+ /**
+ * @dataProvider provideTestCLDRPlurals
+ */
+ public function testFlattenCLDRPlurals( $sep, $input, $expected ) {
+ $flattener = new ArrayFlattener( $sep, true );
+ $output = $flattener->flatten( $input );
+ $this->assertEquals( $expected, $output );
+ }
+
+ /**
+ * @dataProvider provideTestCLDRPlurals
+ */
+ public function testUnflattenCLDRPlurals( $sep, $expected, $input ) {
+ $flattener = new ArrayFlattener( $sep, true );
+ $output = $flattener->unflatten( $input );
+ $this->assertEquals( $expected, $output );
+ }
+
+ /**
+ * @dataProvider provideTestMixedCLDRPlurals
+ */
+ public function testFlattenMixedCLDRPlurals( $input ) {
+ $flattener = new ArrayFlattener( '.', true );
+ $this->setExpectedException(
+ MWException::class,
+ 'Reserved plural keywords mixed with other keys'
+ );
+ $flattener->flatten( $input );
+ }
+
public static function provideTestFlatten() {
- $cases = array();
- $cases[] = array(
+ $cases = [];
+ $cases[] = [
'.',
- array( 'a' => 1 ),
- array( 'a' => 1 ),
- );
+ [ 'a' => 1 ],
+ [ 'a' => 1 ],
+ ];
- $cases[] = array(
+ $cases[] = [
'.',
- array( 'a' => array( 'b' => array( 'c' => 1, 'd' => 2 ) ) ),
- array( 'a.b.c' => 1, 'a.b.d' => 2 ),
+ [ 'a' => [ 'b' => [ 'c' => 1, 'd' => 2 ] ] ],
+ [ 'a.b.c' => 1, 'a.b.d' => 2 ],
+ ];
+
+ // By default, CLDR plural keywords should be treated like any other key
+ $cases[] = [
+ '/',
+ [ 'number' => [ 'one' => '1', 'other' => '999' ] ],
+ [ 'number/one' => '1', 'number/other' => '999' ]
+ ];
+
+ return $cases;
+ }
+
+ public static function provideTestCLDRPlurals() {
+ $cases = [];
+
+ // We include some non-plural data to ensure it is processed correctly
+ $cases[] = [
+ '/',
+ [
+ 'cat' => 'An amount of cats',
+ 'mice' => [
+ 'Frankie',
+ 'Benjy'
+ ],
+ 'dog or dogs' => [
+ 'one' => 'One dog',
+ 'two' => 'Two doggies',
+ 'other' => 'Some dogs'
+ ]
+ ],
+ [
+ 'cat' => 'An amount of cats',
+ 'mice/0' => 'Frankie',
+ 'mice/1' => 'Benjy',
+ 'dog or dogs' => '{{PLURAL|one=One dog|two=Two doggies|Some dogs}}'
+ ],
+ ];
+
+ $cases[] = [
+ '/',
+ [
+ 'dog or dogs' => [
+ 'zero' => 'No dogs',
+ 'one' => 'One dog',
+ 'two' => 'A couple doggies',
+ 'few' => 'A few dogs',
+ 'many' => '%1 dogs',
+ 'other' => 'Some dogs'
+ ]
+ ],
+ [
+ 'dog or dogs' => '{{PLURAL|zero=No dogs|one=One dog|two=A couple doggies|' .
+ 'few=A few dogs|many=%1 dogs|Some dogs}}'
+ ],
+ ];
+
+ $cases[] = [
+ '/',
+ [
+ 'math is hard' => [
+ 'one' => 'a=400',
+ 'other' => 'a=999'
+ ]
+ ],
+ [ 'math is hard' => '{{PLURAL|one=a=400|a=999}}' ],
+ ];
+
+ return $cases;
+ }
+
+ // Separate provider because the input throws an exception
+ public static function provideTestMixedCLDRPlurals() {
+ $cases = [];
+ $cases[] = [
+ [
+ 'dog or dogs' => [
+ 'one' => 'One dog',
+ 'two' => 'Two doggies',
+ 'other' => 'Some dogs',
+ 'Pluto' => 'A specific dog'
+ ]
+ ]
+ ];
+
+ $cases[] = [
+ [
+ 'dog or dogs' => [
+ 'Pluto' => 'A specific dog',
+ 'one' => 'One dog',
+ 'two' => 'Two doggies',
+ 'other' => 'Some dogs',
+ ]
+ ]
+ ];
+ return $cases;
+ }
+
+ /**
+ * @dataProvider provideMatchingValues
+ */
+ public function testCompareTrue( $input1, $input2 ) {
+ $flattener = new ArrayFlattener( '.', true );
+
+ $this->assertTrue(
+ $flattener->compareContent( $input1, $input2, $flattener )
);
+ }
+
+ /**
+ * @dataProvider provideNonMatchingValues
+ */
+ public function testCompareFalse( $input1, $input2 ) {
+ $flattener = new ArrayFlattener( '.', true );
+
+ $this->assertfalse(
+ $flattener->compareContent( $input1, $input2, $flattener )
+ );
+ }
+
+ public static function provideMatchingValues() {
+ $cases = [];
+
+ // We include some non-plural data to ensure it is processed correctly
+ $cases[] = [
+ 'a',
+ 'a'
+ ];
+
+ $cases[] = [
+ '{{PLURAL|one=cat|cats}}',
+ '{{PLURAL|one=cat|cats}}',
+ ];
+
+ $cases[] = [
+ 'Give me {{PLURAL|one=a cat|cats}}',
+ '{{PLURAL|one=Give me a cat|Give me cats}}',
+ ];
+
+ // Order should not matter
+ $cases[] = [
+ '{{PLURAL|one=Give me a cat|Give me cats}}',
+ 'Give me {{PLURAL|one=a cat|cats}}',
+ ];
+
+ // Multiple inlines
+ $cases[] = [
+ 'Test {{PLURAL|one=one|other}} and {{PLURAL|one=one|other}} and {{PLURAL|one=one|other}}!',
+ '{{PLURAL|one=Test one and one and one|Test other and other and other}}!',
+ ];
+
+ // Lots of keys
+ $cases[] = [
+ 'Is {{PLURAL|zero=zero|one=one|two=two|few=few|many=many|other}}',
+ '{{PLURAL|zero=Is zero|one=Is one|two=Is two|few=Is few|many=Is many|Is other}}',
+ ];
+
+ return $cases;
+ }
+
+ public static function provideNonMatchingValues() {
+ $cases = [];
+
+ $cases[] = [
+ 'a',
+ 'b'
+ ];
+
+ $cases[] = [
+ '{{PLURAL|one=cat|cats}}',
+ '{{PLURAL|one=dog|dogs}}',
+ ];
+
+ // Different set of keys
+ $cases[] = [
+ 'Is {{PLURAL|zero=zero|one=one|two=two|few=few|other}}',
+ '{{PLURAL|zero=Is zero|two=Is two|few=Is few|many=Is many|Is other}}',
+ ];
return $cases;
}
diff --git a/www/wiki/extensions/Translate/tests/phpunit/utils/MessageGroupStatsTest.php b/www/wiki/extensions/Translate/tests/phpunit/utils/MessageGroupStatsTest.php
new file mode 100644
index 00000000..801ca0da
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/utils/MessageGroupStatsTest.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * @author Niklas Laxström
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+class MessageGroupStatsTest extends PHPUnit\Framework\TestCase {
+ public function testGetDatabaseIdForGroupId() {
+ $shortId = 'abab';
+ $longId = str_repeat( 'ab', 100 );
+
+ $this->assertLessThanOrEqual(
+ 100,
+ strlen( MessageGroupStats::getDatabaseIdForGroupId( $shortId ) ),
+ 'Short id is <= 100 bytes long'
+ );
+
+ $this->assertLessThanOrEqual(
+ 100,
+ strlen( MessageGroupStats::getDatabaseIdForGroupId( $longId ) ),
+ 'Long id is <= 100 bytes long'
+ );
+
+ $longId1 = str_repeat( 'ab', 100 ) . '1';
+ $longId2 = str_repeat( 'ab', 100 ) . '2';
+
+ $this->assertNotEquals(
+ MessageGroupStats::getDatabaseIdForGroupId( $longId1 ),
+ MessageGroupStats::getDatabaseIdForGroupId( $longId2 ),
+ 'Two long ids with the same prefix do not collide'
+ );
+ }
+}
diff --git a/www/wiki/extensions/Translate/tests/qunit/.eslintrc.json b/www/wiki/extensions/Translate/tests/qunit/.eslintrc.json
new file mode 100644
index 00000000..348a1b7f
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/qunit/.eslintrc.json
@@ -0,0 +1,6 @@
+{
+ "extends": [
+ "wikimedia/qunit",
+ "../../.eslintrc.json"
+ ]
+}
diff --git a/www/wiki/extensions/Translate/tests/qunit/ext.translate.parsers.test.js b/www/wiki/extensions/Translate/tests/qunit/ext.translate.parsers.test.js
index 4c1231ad..cc86ed1f 100644
--- a/www/wiki/extensions/Translate/tests/qunit/ext.translate.parsers.test.js
+++ b/www/wiki/extensions/Translate/tests/qunit/ext.translate.parsers.test.js
@@ -1,33 +1,33 @@
/*!
* Tests for ext.translate.parsers.js.
*
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
QUnit.module( 'ext.translate.parsers', QUnit.newMwEnvironment() );
- QUnit.test( '-- External links', 3, function ( assert ) {
+ QUnit.test( '-- External links', function ( assert ) {
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/www/wiki/extensions/Translate/tests/qunit/ext.translate.special.pagemigration.test.js b/www/wiki/extensions/Translate/tests/qunit/ext.translate.special.pagemigration.test.js
index 724202aa..f2218ba2 100644
--- a/www/wiki/extensions/Translate/tests/qunit/ext.translate.special.pagemigration.test.js
+++ b/www/wiki/extensions/Translate/tests/qunit/ext.translate.special.pagemigration.test.js
@@ -1,10 +1,10 @@
/*!
* Tests for ext.translate.special.pagemigration.js.
*
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-( function ( $, mw ) {
+( function () {
'use strict';
QUnit.module( 'ext.translate.special.pagemigration', QUnit.newMwEnvironment( {
@@ -13,16 +13,15 @@
}
} ) );
- QUnit.asyncTest( '-- Source units', function ( assert ) {
- var data = '{ "query": { "messagecollection": [ { "key": "key_",' +
+ QUnit.test( '-- Source units', function ( assert ) {
+ var done, data = '{ "query": { "messagecollection": [ { "key": "key_",' +
' "definition": "definition_", "title": "title_" }, { "key": "key_1",' +
' "definition": "definition_1", "title": "title_1" } ] } }';
- QUnit.expect( 1 );
-
+ done = assert.async();
mw.translate.getSourceUnits( 'Help:Special pages' ).done( function ( sourceUnits ) {
- assert.strictEqual( 1, sourceUnits.length, 'Source units retrieved' );
- QUnit.start();
+ assert.strictEqual( sourceUnits.length, 1, 'Source units retrieved' );
+ done();
} );
this.server.respond( function ( request ) {
@@ -30,14 +29,13 @@
} );
} );
- QUnit.asyncTest( '-- Page does not exist', function ( assert ) {
- var data = '{ "query": { "pages": { "-1": { "missing": "" } } } }';
-
- QUnit.expect( 1 );
+ QUnit.test( '-- Page does not exist', function ( assert ) {
+ var done, data = '{ "query": { "pages": { "-1": { "missing": "" } } } }';
+ done = assert.async();
mw.translate.getFuzzyTimestamp( 'ugagagagagaga/uga' ).fail( function ( timestamp ) {
- assert.strictEqual( undefined, timestamp, 'Page does not exist' );
- QUnit.start();
+ assert.strictEqual( timestamp, undefined, 'Page does not exist' );
+ done();
} );
this.server.respond( function ( request ) {
@@ -45,15 +43,14 @@
} );
} );
- QUnit.asyncTest( '-- Fuzzy timestamp', function ( assert ) {
- var data = '{ "query": { "pages": { "19563": {"revisions": ' +
+ QUnit.test( '-- Fuzzy timestamp', function ( assert ) {
+ var done, data = '{ "query": { "pages": { "19563": {"revisions": ' +
'[ {"timestamp": "2014-02-18T20:59:58Z" }, { "timestamp": "t2" } ] } } } }';
- QUnit.expect( 1 );
-
+ 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' );
- QUnit.start();
+ assert.strictEqual( timestamp, '2014-02-18T20:59:57.000Z', 'Fuzzy timestamp retrieved' );
+ done();
} );
this.server.respond( function ( request ) {
@@ -61,15 +58,15 @@
} );
} );
- QUnit.asyncTest( '-- Split translation page', function ( assert ) {
- var data = '{ "query": { "pages": { "19563": { "revisions": ' +
+ QUnit.test( '-- Split translation page', function ( assert ) {
+ var done, data = '{ "query": { "pages": { "19563": { "revisions": ' +
'[ { "*": "unit1\\n\\nunit2\\n\\nunit3" } ] } } } }';
- QUnit.expect( 1 );
+ 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' );
- QUnit.start();
+ assert.strictEqual( translationUnits.length, 3, 'Translation page split into units' );
+ done();
} );
this.server.respond( function ( request ) {
@@ -81,11 +78,9 @@
var sourceUnits, translationUnits1, result1,
translationUnits2, result2;
- QUnit.expect( 2 );
-
- sourceUnits = [ { identifier: '1',definition: 'abc' }, { identifier: '2',definition: '==123==' },
- { identifier: '3',definition: 'pqr' }, { identifier: '4',definition: 'xyz' },
- { identifier: '5',definition: 'mno' }, { identifier: '6',definition: '==456==' } ];
+ sourceUnits = [ { identifier: '1', definition: 'abc' }, { identifier: '2', definition: '==123==' },
+ { identifier: '3', definition: 'pqr' }, { identifier: '4', definition: 'xyz' },
+ { identifier: '5', definition: 'mno' }, { identifier: '6', definition: '==456==' } ];
translationUnits1 = [ '==123==', 'pqr', '==456==' ];
@@ -96,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/www/wiki/extensions/Translate/translationaids/CurrentTranslationAid.php b/www/wiki/extensions/Translate/translationaids/CurrentTranslationAid.php
index 1d9cd289..df1c38d2 100644
--- a/www/wiki/extensions/Translate/translationaids/CurrentTranslationAid.php
+++ b/www/wiki/extensions/Translate/translationaids/CurrentTranslationAid.php
@@ -4,8 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -25,14 +24,14 @@ class CurrentTranslationAid extends TranslationAid {
$title->getNamespace()
);
- Hooks::run( 'TranslatePrefillTranslation', array( &$translation, $this->handle ) );
+ Hooks::run( 'TranslatePrefillTranslation', [ &$translation, $this->handle ] );
$fuzzy = MessageHandle::hasFuzzyString( $translation ) || $this->handle->isFuzzy();
$translation = str_replace( TRANSLATE_FUZZY, '', $translation );
- return array(
+ return [
'language' => $this->handle->getCode(),
'fuzzy' => $fuzzy,
'value' => $translation,
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/translationaids/DocumentationAid.php b/www/wiki/extensions/Translate/translationaids/DocumentationAid.php
index 4eeb4478..f19c03ba 100644
--- a/www/wiki/extensions/Translate/translationaids/DocumentationAid.php
+++ b/www/wiki/extensions/Translate/translationaids/DocumentationAid.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -26,10 +26,12 @@ class DocumentationAid extends TranslationAid {
$info = TranslateUtils::getMessageContent( $page, $wgTranslateDocumentationLanguageCode, $ns );
- return array(
+ return [
'language' => $wgContLang->getCode(),
'value' => $info,
- 'html' => $this->context->getOutput()->parse( $info ),
- );
+ 'html' => TranslateUtils::parseAsInterface(
+ $this->context->getOutput(), $info
+ ),
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/translationaids/GettextDocumentationAid.php b/www/wiki/extensions/Translate/translationaids/GettextDocumentationAid.php
index 3716dc0e..b7cd68cf 100644
--- a/www/wiki/extensions/Translate/translationaids/GettextDocumentationAid.php
+++ b/www/wiki/extensions/Translate/translationaids/GettextDocumentationAid.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,7 +16,6 @@
*/
class GettextDocumentationAid extends TranslationAid {
public function getData() {
-
// We need to get the primary group to get the correct file
// So $group can be different from $this->group
$group = $this->handle->getGroup();
@@ -60,11 +59,11 @@ class GettextDocumentationAid extends TranslationAid {
}
}
- return array(
+ return [
'language' => $wgContLang->getCode(),
// @todo Provide raw data when possible
// 'value' => $help,
'html' => $this->context->getOutput()->parse( $out ),
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/translationaids/InOtherLanguagesAid.php b/www/wiki/extensions/Translate/translationaids/InOtherLanguagesAid.php
index f10d7d30..41570860 100644
--- a/www/wiki/extensions/Translate/translationaids/InOtherLanguagesAid.php
+++ b/www/wiki/extensions/Translate/translationaids/InOtherLanguagesAid.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,12 +16,12 @@
*/
class InOtherLanguagesAid extends TranslationAid {
public function getData() {
- $suggestions = array(
+ $suggestions = [
'**' => 'suggestion',
- );
+ ];
// Fuzzy translations are not included in these
- $translations = $this->getTranslations();
+ $translations = $this->dataProvider->getGoodTranslations();
$code = $this->handle->getCode();
$sourceLanguage = $this->handle->getGroup()->getSourceLanguage();
@@ -35,10 +35,10 @@ class InOtherLanguagesAid extends TranslationAid {
continue;
}
- $suggestions[] = array(
+ $suggestions[] = [
'language' => $fbcode,
'value' => $translations[$fbcode],
- );
+ ];
}
return $suggestions;
@@ -67,7 +67,7 @@ class InOtherLanguagesAid extends TranslationAid {
}
// Global configuration settings
- $fallbacks = array();
+ $fallbacks = [];
if ( isset( $wgTranslateLanguageFallbacks[$code] ) ) {
$fallbacks = (array)$wgTranslateLanguageFallbacks[$code];
}
diff --git a/www/wiki/extensions/Translate/translationaids/InsertablesAid.php b/www/wiki/extensions/Translate/translationaids/InsertablesAid.php
index 3751ac33..0bd964f5 100644
--- a/www/wiki/extensions/Translate/translationaids/InsertablesAid.php
+++ b/www/wiki/extensions/Translate/translationaids/InsertablesAid.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,7 +16,6 @@
*/
class InsertablesAid extends TranslationAid {
public function getData() {
-
// We need to get the primary group to get the correct file
// So $group can be different from $this->group
$group = $this->handle->getGroup();
@@ -35,17 +34,17 @@ class InsertablesAid extends TranslationAid {
throw new TranslationHelperException( 'Group does not have a suggester' );
}
- $insertables = $suggester->getInsertables( $this->getDefinition() );
- $blob = array();
+ $insertables = $suggester->getInsertables( $this->dataProvider->getDefinition() );
+ $blob = [];
foreach ( $insertables as $insertable ) {
$displayText = $insertable->getDisplayText();
// The keys are used for de-duplication
- $blob[$displayText] = array(
+ $blob[$displayText] = [
'display' => $displayText,
'pre' => $insertable->getPreText(),
'post' => $insertable->getPostText(),
- );
+ ];
}
$blob = array_values( $blob );
diff --git a/www/wiki/extensions/Translate/translationaids/MachineTranslationAid.php b/www/wiki/extensions/Translate/translationaids/MachineTranslationAid.php
index f8b9aeca..fa14a13b 100644
--- a/www/wiki/extensions/Translate/translationaids/MachineTranslationAid.php
+++ b/www/wiki/extensions/Translate/translationaids/MachineTranslationAid.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,55 +16,72 @@
*/
class MachineTranslationAid extends QueryAggregatorAwareTranslationAid {
public function populateQueries() {
- $definition = $this->getDefinition();
- $translations = $this->getTranslations();
+ $definition = $this->dataProvider->getDefinition();
+ $translations = $this->dataProvider->getGoodTranslations();
$from = $this->group->getSourceLanguage();
$to = $this->handle->getCode();
+ if ( trim( $definition ) === '' ) {
+ return;
+ }
+
foreach ( $this->getWebServices( 'mt' ) as $service ) {
if ( $service->checkTranslationServiceFailure() ) {
continue;
}
- if ( $service->isSupportedLanguagePair( $from, $to ) ) {
- $this->storeQuery( $service, $from, $to, $definition );
- continue;
- }
-
- // Loop of the the translations we have to see which can be used as source
- // @todo: Support setting priority of languages like Yandex used to have
- foreach ( $translations as $from => $text ) {
- if ( !$service->isSupportedLanguagePair( $from, $to ) ) {
+ try {
+ if ( $service->isSupportedLanguagePair( $from, $to ) ) {
+ $this->storeQuery( $service, $from, $to, $definition );
continue;
}
- $this->storeQuery( $service, $from, $to, $text );
- break;
+ // Search for translations which we can use as a source for MT
+ // @todo: Support setting priority of languages like Yandex used to have
+ foreach ( $translations as $from => $text ) {
+ if ( !$service->isSupportedLanguagePair( $from, $to ) ) {
+ continue;
+ }
+
+ $this->storeQuery( $service, $from, $to, $text );
+ break;
+ }
+ } catch ( TranslationWebServiceConfigurationException $e ) {
+ throw new TranslationHelperException( $service->getName() . ': ' . $e->getMessage() );
}
}
}
public function getData() {
- $suggestions = array( '**' => 'suggestion' );
+ $suggestions = [ '**' => 'suggestion' ];
foreach ( $this->getQueryData() as $queryData ) {
$suggestions[] = $this->formatSuggestion( $queryData );
}
- return $suggestions;
+ return array_filter( $suggestions );
}
+ /**
+ * @param array $queryData
+ * @return array|null
+ */
protected function formatSuggestion( array $queryData ) {
$service = $queryData['service'];
$response = $queryData['response'];
$sourceLanguage = $queryData['language'];
$sourceText = $queryData['text'];
- return array(
- 'target' => $service->getResultData( $response ),
+ $result = $service->getResultData( $response );
+ if ( $result === null ) {
+ return null;
+ }
+
+ return [
+ 'target' => $result,
'service' => $service->getName(),
'source_language' => $sourceLanguage,
'source' => $sourceText,
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/translationaids/MessageDefinitionAid.php b/www/wiki/extensions/Translate/translationaids/MessageDefinitionAid.php
index 0cb536cf..257435c5 100644
--- a/www/wiki/extensions/Translate/translationaids/MessageDefinitionAid.php
+++ b/www/wiki/extensions/Translate/translationaids/MessageDefinitionAid.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -19,9 +19,9 @@ class MessageDefinitionAid extends TranslationAid {
public function getData() {
$language = $this->group->getSourceLanguage();
- return array(
- 'value' => $this->getDefinition(),
+ return [
+ 'value' => $this->dataProvider->getDefinition(),
'language' => $language,
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/translationaids/QueryAggregatorAwareTranslationAid.php b/www/wiki/extensions/Translate/translationaids/QueryAggregatorAwareTranslationAid.php
index d3b4cf82..11358315 100644
--- a/www/wiki/extensions/Translate/translationaids/QueryAggregatorAwareTranslationAid.php
+++ b/www/wiki/extensions/Translate/translationaids/QueryAggregatorAwareTranslationAid.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -17,7 +17,7 @@ abstract class QueryAggregatorAwareTranslationAid
extends TranslationAid
implements QueryAggregatorAware
{
- private $queries = array();
+ private $queries = [];
private $aggregator;
// Interface: QueryAggregatorAware
@@ -35,12 +35,12 @@ abstract class QueryAggregatorAwareTranslationAid
protected function storeQuery( TranslationWebService $service, $from, $to, $text ) {
$queries = $service->getQueries( $text, $from, $to );
foreach ( $queries as $query ) {
- $this->queries[] = array(
+ $this->queries[] = [
'id' => $this->aggregator->addQuery( $query ),
'language' => $from,
'text' => $text,
'service' => $service,
- );
+ ];
}
}
@@ -68,7 +68,7 @@ abstract class QueryAggregatorAwareTranslationAid
protected function getWebServices( $type ) {
global $wgTranslateTranslationServices;
- $services = array();
+ $services = [];
foreach ( $wgTranslateTranslationServices as $name => $config ) {
$service = TranslationWebService::factory( $name, $config );
if ( !$service || $service->getType() !== $type ) {
diff --git a/www/wiki/extensions/Translate/translationaids/SupportAid.php b/www/wiki/extensions/Translate/translationaids/SupportAid.php
index 8b8e0653..b4a65c12 100644
--- a/www/wiki/extensions/Translate/translationaids/SupportAid.php
+++ b/www/wiki/extensions/Translate/translationaids/SupportAid.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,15 +16,15 @@
*/
class SupportAid extends TranslationAid {
public function getData() {
- return array(
- 'url' => SupportAid::getSupportUrl( $this->handle->getTitle() ),
- );
+ return [
+ 'url' => self::getSupportUrl( $this->handle->getTitle() ),
+ ];
}
/**
* Target URL for a link provided by a support button/aid.
*
- * @param $title Title Title object for the translation message.
+ * @param Title $title Title object for the translation message.
* @since 2015.09
* @return string
* @throws TranslationHelperException
@@ -43,7 +43,7 @@ class SupportAid extends TranslationAid {
}
// Preprocess params
- $params = array();
+ $params = [];
if ( isset( $config['params'] ) ) {
foreach ( $config['params'] as $key => $value ) {
$params[$key] = str_replace( '%MESSAGE%', $title->getPrefixedText(), $value );
diff --git a/www/wiki/extensions/Translate/translationaids/TTMServerAid.php b/www/wiki/extensions/Translate/translationaids/TTMServerAid.php
index 5a48e005..6f4f69a5 100644
--- a/www/wiki/extensions/Translate/translationaids/TTMServerAid.php
+++ b/www/wiki/extensions/Translate/translationaids/TTMServerAid.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,7 +15,7 @@
*/
class TTMServerAid extends QueryAggregatorAwareTranslationAid {
public function populateQueries() {
- $text = $this->getDefinition();
+ $text = $this->dataProvider->getDefinition();
$from = $this->group->getSourceLanguage();
$to = $this->handle->getCode();
@@ -25,12 +25,16 @@ class TTMServerAid extends QueryAggregatorAwareTranslationAid {
}
public function getData() {
- $suggestions = array();
+ $suggestions = [];
- $text = $this->getDefinition();
+ $text = $this->dataProvider->getDefinition();
$from = $this->group->getSourceLanguage();
$to = $this->handle->getCode();
+ if ( trim( $text ) === '' ) {
+ return $suggestions;
+ }
+
// "Local" queries using a client can't be run in parallel with web services
global $wgTranslateTranslationServices;
foreach ( $wgTranslateTranslationServices as $name => $config ) {
@@ -80,13 +84,18 @@ class TTMServerAid extends QueryAggregatorAwareTranslationAid {
$sourceLanguage = $queryData['language'];
$sourceText = $queryData['text'];
+ // getResultData returns a null on failure instead of throwing an exception
$sugs = $service->getResultData( $response );
+ if ( $sugs === null ) {
+ return [];
+ }
+
foreach ( $sugs as &$sug ) {
- $sug += array(
+ $sug += [
'service' => $service->getName(),
'source_language' => $sourceLanguage,
'source' => $sourceText,
- );
+ ];
}
return $sugs;
}
diff --git a/www/wiki/extensions/Translate/translationaids/TranslationAid.php b/www/wiki/extensions/Translate/translationaids/TranslationAid.php
index 9c0f26a9..a8068a34 100644
--- a/www/wiki/extensions/Translate/translationaids/TranslationAid.php
+++ b/www/wiki/extensions/Translate/translationaids/TranslationAid.php
@@ -4,15 +4,13 @@
*
* @file
* @author Niklas Laxström
- * @copyright Copyright © 2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
* Multipurpose class for translation aids:
* - interface for translation aid classes
* - listing of available translation aids
- * - some utility functions for translation aid classes
*
* @defgroup TranslationAids Translation Aids
* @since 2013-01-01
@@ -33,12 +31,21 @@ abstract class TranslationAid {
*/
protected $context;
- public function __construct( MessageGroup $group, MessageHandle $handle,
- IContextSource $context
+ /**
+ * @var TranslationAidDataProvider
+ */
+ protected $dataProvider;
+
+ public function __construct(
+ MessageGroup $group,
+ MessageHandle $handle,
+ IContextSource $context,
+ TranslationAidDataProvider $dataProvider
) {
$this->group = $group;
$this->handle = $handle;
$this->context = $context;
+ $this->dataProvider = $dataProvider;
}
/**
@@ -50,91 +57,20 @@ abstract class TranslationAid {
* to 'suggestion' and then list of arrays, each containing fields for the
* information of the suggestions. See InOtherLanguagesAid for example.
*
- * @throw TranslationHelperException Used to signal unexpected errors to aid
+ * @throws TranslationHelperException Used to signal unexpected errors to aid
* debugging
* @return array
*/
abstract public function getData();
/**
- * Get the message definition. Cached for performance.
- *
- * @return string
- */
- public function getDefinition() {
- static $cache = array();
-
- $key = $this->handle->getTitle()->getPrefixedText();
-
- if ( array_key_exists( $key, $cache ) ) {
- return $cache[$key];
- }
-
- if ( method_exists( $this->group, 'getMessageContent' ) ) {
- $cache[$key] = $this->group->getMessageContent( $this->handle );
- } else {
- $cache[$key] = $this->group->getMessage(
- $this->handle->getKey(),
- $this->group->getSourceLanguage()
- );
- }
-
- return $cache[$key];
- }
-
- /**
- * @return Content
- */
- protected function getDefinitionContent() {
- $text = $this->getDefinition();
-
- return ContentHandler::makeContent( $text, $this->handle->getTitle() );
- }
-
- /**
- * Get the translations in all languages. Cached for performance.
- * Fuzzy translation are not included.
- *
- * @return array Language code => Translation
- */
- public function getTranslations() {
- static $cache = array();
-
- $key = $this->handle->getTitle()->getPrefixedText();
-
- if ( array_key_exists( $key, $cache ) ) {
- return $cache[$key];
- }
-
- $data = ApiQueryMessageTranslations::getTranslations( $this->handle );
- $namespace = $this->handle->getTitle()->getNamespace();
-
- $cache[$key] = array();
-
- foreach ( $data as $page => $info ) {
- $tTitle = Title::makeTitle( $namespace, $page );
- $tHandle = new MessageHandle( $tTitle );
-
- $fuzzy = MessageHandle::hasFuzzyString( $info[0] ) || $tHandle->isFuzzy();
- if ( $fuzzy ) {
- continue;
- }
-
- $code = $tHandle->getCode();
- $cache[$key][$code] = $info[0];
- }
-
- return $cache[$key];
- }
-
- /**
* List of available message types mapped to the classes
* implementing them.
*
* @return array
*/
public static function getTypes() {
- $types = array(
+ $types = [
'definition' => 'MessageDefinitionAid',
'translation' => 'CurrentTranslationAid',
'inotherlanguages' => 'InOtherLanguagesAid',
@@ -145,7 +81,7 @@ abstract class TranslationAid {
'support' => 'SupportAid',
'gettext' => 'GettextDocumentationAid',
'insertables' => 'InsertablesAid',
- );
+ ];
return $types;
}
diff --git a/www/wiki/extensions/Translate/translationaids/TranslationAidDataProvider.php b/www/wiki/extensions/Translate/translationaids/TranslationAidDataProvider.php
new file mode 100644
index 00000000..2f6672ef
--- /dev/null
+++ b/www/wiki/extensions/Translate/translationaids/TranslationAidDataProvider.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * Translation aid code.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * @since 2018.01
+ */
+class TranslationAidDataProvider {
+ private $handle;
+ private $group;
+
+ private $definition;
+ private $translations;
+
+ public function __construct( MessageHandle $handle ) {
+ $this->handle = $handle;
+ $this->group = $handle->getGroup();
+ }
+
+ /**
+ * Get the message definition. Cached for performance.
+ *
+ * @return string
+ */
+ public function getDefinition() {
+ if ( $this->definition !== null ) {
+ return $this->definition;
+ }
+
+ // Optional performance optimization
+ if ( method_exists( $this->group, 'getMessageContent' ) ) {
+ $this->definition = $this->group->getMessageContent( $this->handle );
+ } else {
+ $this->definition = $this->group->getMessage(
+ $this->handle->getKey(),
+ $this->group->getSourceLanguage()
+ );
+ }
+
+ return $this->definition;
+ }
+
+ /**
+ * @return Content
+ */
+ public function getDefinitionContent() {
+ return ContentHandler::makeContent( $this->getDefinition(), $this->handle->getTitle() );
+ }
+
+ /**
+ * Get the translations in all languages. Cached for performance.
+ * Fuzzy translation are not included.
+ *
+ * @return array Language code => Translation
+ */
+ public function getGoodTranslations() {
+ if ( $this->translations !== null ) {
+ return $this->translations;
+ }
+
+ $data = self::loadTranslationData( wfGetDB( DB_REPLICA ), $this->handle );
+ $translations = [];
+ $prefixLength = strlen( $this->handle->getTitleForBase()->getDBKey() . '/' );
+
+ foreach ( $data as $page => $translation ) {
+ // Could use MessageHandle here, but that queries the message index.
+ // Instead we can get away with simple string manipulation.
+ $code = substr( $page, $prefixLength );
+ if ( !Language::isKnownLanguageTag( $code ) ) {
+ continue;
+ }
+
+ $translations[ $code ] = $translation;
+ }
+
+ $this->translations = $translations;
+
+ return $translations;
+ }
+
+ private static function loadTranslationData( IDatabase $db, MessageHandle $handle ) {
+ if ( method_exists( 'Revision', 'getQueryInfo' ) ) {
+ $queryInfo = Revision::getQueryInfo( [ 'page', 'text' ] );
+ $tables = $queryInfo[ 'tables' ];
+ $fields = $queryInfo[ 'fields' ];
+ $conds = [];
+ $options = [];
+ $joins = $queryInfo[ 'joins' ];
+ } else {
+ // BC for <= MW 1.31
+ $tables = [ 'page', 'text', 'revision' ];
+ $fields = array_merge(
+ Revision::selectFields(),
+ Revision::selectPageFields(),
+ Revision::selectTextFields()
+ );
+ $conds = [];
+ $options = [];
+ $joins = [
+ 'page' => Revision::pageJoinCond(),
+ 'text' => [ 'INNER JOIN', [ 'rev_text_id=old_id' ] ]
+ ];
+ }
+
+ // The list of pages we want to select, and their latest versions
+ $conds['page_namespace'] = $handle->getTitle()->getNamespace();
+ $base = $handle->getKey();
+ $conds[] = 'page_title ' . $db->buildLike( "$base/", $db->anyString() );
+ $conds[] = 'rev_id=page_latest';
+
+ // For fuzzy tags we also need:
+ $tables[] = 'revtag';
+ $conds[ 'rt_type' ] = null;
+ $joins[ 'revtag' ] = [
+ 'LEFT JOIN',
+ [ 'page_id=rt_page', 'page_latest=rt_revision', 'rt_type' => 'fuzzy' ]
+ ];
+
+ $rows = $db->select( $tables, $fields, $conds, __METHOD__, $options, $joins );
+
+ $pages = [];
+ foreach ( $rows as $row ) {
+ $pages[$row->page_title] = Revision::getRevisionText( $row );
+ }
+
+ return $pages;
+ }
+}
diff --git a/www/wiki/extensions/Translate/translationaids/UnsupportedTranslationAid.php b/www/wiki/extensions/Translate/translationaids/UnsupportedTranslationAid.php
index 6c92c531..af118e73 100644
--- a/www/wiki/extensions/Translate/translationaids/UnsupportedTranslationAid.php
+++ b/www/wiki/extensions/Translate/translationaids/UnsupportedTranslationAid.php
@@ -5,7 +5,7 @@
* @file
* @author Harry Burt
* @copyright Copyright © 2013, Harry Burt
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
diff --git a/www/wiki/extensions/Translate/translationaids/UpdatedDefinitionAid.php b/www/wiki/extensions/Translate/translationaids/UpdatedDefinitionAid.php
index 088ff9f6..42ece6b6 100644
--- a/www/wiki/extensions/Translate/translationaids/UpdatedDefinitionAid.php
+++ b/www/wiki/extensions/Translate/translationaids/UpdatedDefinitionAid.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -18,13 +18,13 @@
class UpdatedDefinitionAid extends TranslationAid {
public function getData() {
$db = TranslateUtils::getSafeReadDB();
- $conds = array(
+ $conds = [
'rt_page' => $this->handle->getTitle()->getArticleID(),
'rt_type' => RevTag::getType( 'tp:transver' ),
- );
- $options = array(
+ ];
+ $options = [
'ORDER BY' => 'rt_revision DESC',
- );
+ ];
$translationRevision = $db->selectField( 'revtag', 'rt_value', $conds, __METHOD__, $options );
if ( $translationRevision === false ) {
@@ -47,7 +47,7 @@ class UpdatedDefinitionAid extends TranslationAid {
}
$oldContent = $oldrev->getContent();
- $newContent = $this->getDefinitionContent();
+ $newContent = $this->dataProvider->getDefinitionContent();
if ( !$oldContent ) {
throw new TranslationHelperException( 'Old definition version does not exist anymore' );
@@ -62,9 +62,7 @@ class UpdatedDefinitionAid extends TranslationAid {
}
$diff = new DifferenceEngine( $this->context );
- if ( method_exists( 'DifferenceEngine', 'setTextLanguage' ) ) {
- $diff->setTextLanguage( $this->group->getSourceLanguage() );
- }
+ $diff->setTextLanguage( wfGetLangObj( $this->group->getSourceLanguage() ) );
$diff->setContent( $oldContent, $newContent );
$diff->setReducedLineNumbers();
$diff->showDiffStyle();
@@ -74,13 +72,13 @@ class UpdatedDefinitionAid extends TranslationAid {
$this->context->msg( 'tpt-diff-new' )->escaped()
);
- return array(
+ return [
'value_old' => $oldContent->getNativeData(),
'value_new' => $newContent->getNativeData(),
'revisionid_old' => $oldrev->getId(),
'revisionid_new' => $definitionTitle->getLatestRevID(),
'language' => $this->group->getSourceLanguage(),
'html' => $html,
- );
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/ttmserver/CrossLanguageTranslationSearchQuery.php b/www/wiki/extensions/Translate/ttmserver/CrossLanguageTranslationSearchQuery.php
index ae49f7cc..4b047918 100644
--- a/www/wiki/extensions/Translate/ttmserver/CrossLanguageTranslationSearchQuery.php
+++ b/www/wiki/extensions/Translate/ttmserver/CrossLanguageTranslationSearchQuery.php
@@ -16,7 +16,7 @@ class CrossLanguageTranslationSearchQuery {
/** @var int */
protected $total = 0;
- protected $hl = array( '', '' );
+ protected $hl = [ '', '' ];
public function __construct( array $params, SearchableTTMServer $server ) {
$this->params = $params;
@@ -24,51 +24,65 @@ class CrossLanguageTranslationSearchQuery {
}
public function getDocuments() {
- $documents = array();
- $total = $start = 0;
- $queryString = $this->params['query'];
+ $documents = [];
$offset = $this->params['offset'];
$limit = $this->params['limit'];
- $size = 1000;
$options = $this->params;
- $options['limit'] = $size;
$options['language'] = $this->params['sourcelanguage'];
- do {
- $options['offset'] = $start;
- $this->resultset = $this->server->search( $queryString, $options, $this->hl );
-
- list( $results, $offsets ) = $this->extractMessages(
- $this->resultset,
- $offset,
- $limit
- );
- $offset = $offsets['start'] + $offsets['left'] - $offsets['total'];
- $limit = $limit - $offsets['left'];
- $total = $total + $offsets['total'];
+ // Use a bigger limit that what was requested, since we are likely to throw away many
+ // results in the local filtering step at extractMessages
+ $options['limit'] = $limit * 10;
+ // TODO: the real offset should be communicated to the frontend. It currently assumes
+ // next offset is current offset + limit and previous one is current offset - limit.
+ // It might be difficult to fix scrolling results backwards. For now we handle offset
+ // locally.
+ $options['offset'] = 0;
+
+ $search = $this->server->createSearch( $this->params['query'], $options, $this->hl );
+ $scroll = $search->scroll( '5s' );
+
+ // Used for aggregations. Only the first scroll response has them.
+ $this->resultset = null;
+
+ foreach ( $scroll as $resultSet ) {
+ if ( !$this->resultset ) {
+ $this->resultset = $resultSet;
+ $this->total = $resultSet->getTotalHits();
+ }
+ $results = $this->extractMessages( $resultSet->getDocuments() );
$documents = array_merge( $documents, $results );
- $start = $start + $size;
- } while (
- $offsets['start'] + $offsets['left'] >= $offsets['total'] &&
- $this->resultset->getTotalHits() > $start
- );
- $this->total = $total;
+
+ $count = count( $documents );
+
+ if ( $count >= $offset + $limit ) {
+ break;
+ }
+ }
+
+ // clear was introduced in Elastica 5.3.1, but Elastica extension uses 5.3.0
+ if ( is_callable( [ $scroll, 'clear' ] ) ) {
+ $scroll->clear();
+ }
+ $documents = array_slice( $documents, $offset, $limit );
return $documents;
}
- /*
- * Extract messages from the resultset and build message definitions.
+ /**
+ * Extract messages from the documents and build message definitions.
* Create a message collection from the definitions in the target language.
* Filter the message collection to get filtered messages.
* Slice messages according to limit and offset given.
+ * @param \Elastica\Document[] $documents
+ * @return array[]
*/
- protected function extractMessages( $resultset, $offset, $limit ) {
- $messages = $documents = $ret = array();
+ protected function extractMessages( $documents ) {
+ $messages = $ret = [];
$language = $this->params['language'];
- foreach ( $resultset->getResults() as $document ) {
+ foreach ( $documents as $document ) {
$data = $document->getData();
if ( !$this->server->isLocalSuggestion( $data ) ) {
@@ -99,43 +113,35 @@ class CrossLanguageTranslationSearchQuery {
$collection->filter( $filter, false );
}
- $total = count( $collection );
- $offset = $collection->slice( $offset, $limit );
- $left = count( $collection );
-
- $offsets = array(
- 'start' => $offset[2],
- 'left' => $left,
- 'total' => $total,
- );
-
if ( $filter === 'translated' || $filter === 'fuzzy' ) {
$collection->loadTranslations();
}
foreach ( $collection->keys() as $mkey => $title ) {
- $documents[$mkey]['content'] = $messages[$mkey];
+ $result = [];
+ $result['content'] = $messages[$mkey];
if ( $filter === 'translated' || $filter === 'fuzzy' ) {
- $documents[$mkey]['content'] = $collection[$mkey]->translation();
+ $result['content'] = $collection[$mkey]->translation();
}
$handle = new MessageHandle( $title );
- $documents[$mkey]['localid'] = $handle->getTitleForBase()->getPrefixedText();
- $documents[$mkey]['language'] = $language;
- $ret[] = $documents[$mkey];
+ $result['localid'] = $handle->getTitleForBase()->getPrefixedText();
+ $result['language'] = $language;
+
+ $ret[] = $result;
}
- return array( $ret, $offsets );
+ return $ret;
}
/**
* @return array
*/
public function getAvailableFilters() {
- return array(
+ return [
'translated',
'fuzzy',
'untranslated'
- );
+ ];
}
public function getTotalHits() {
diff --git a/www/wiki/extensions/Translate/ttmserver/DatabaseTTMServer.php b/www/wiki/extensions/Translate/ttmserver/DatabaseTTMServer.php
index 3d6d885c..70c99b64 100644
--- a/www/wiki/extensions/Translate/ttmserver/DatabaseTTMServer.php
+++ b/www/wiki/extensions/Translate/ttmserver/DatabaseTTMServer.php
@@ -5,10 +5,12 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @ingroup TTMServer
*/
+use Wikimedia\Rdbms\DBQueryError;
+
/**
* Mysql based backend.
* @ingroup TTMServer
@@ -18,10 +20,10 @@ class DatabaseTTMServer extends TTMServer implements WritableTTMServer, Readable
protected $sids;
/**
- * @param $mode int DB_SLAVE|DB_MASTER
- * @return DatabaseBase
+ * @param int $mode DB_REPLICA|DB_MASTER
+ * @return \Wikimedia\Rdbms\IDatabase
*/
- protected function getDB( $mode = DB_SLAVE ) {
+ protected function getDB( $mode = DB_REPLICA ) {
return wfGetDB( $mode, 'ttmserver', $this->config['database'] );
}
@@ -54,10 +56,10 @@ class DatabaseTTMServer extends TTMServer implements WritableTTMServer, Readable
* get suggestions which do not match the original definition any
* longer. The old translations are still kept until purged by
* rerunning the bootstrap script. */
- $conds = array(
+ $conds = [
'tms_context' => $context->getPrefixedText(),
'tms_text' => $definition,
- );
+ ];
$sid = $dbw->selectField( 'translate_tms', 'tms_sid', $conds, __METHOD__ );
if ( $sid === false ) {
@@ -65,17 +67,17 @@ class DatabaseTTMServer extends TTMServer implements WritableTTMServer, Readable
}
// Delete old translations for this message if any. Could also use replace
- $deleteConds = array(
+ $deleteConds = [
'tmt_sid' => $sid,
'tmt_lang' => $targetLanguage,
- );
+ ];
$dbw->delete( 'translate_tmt', $deleteConds, __METHOD__ );
// Insert the new translation
if ( $targetText !== null ) {
- $row = $deleteConds + array(
+ $row = $deleteConds + [
'tmt_text' => $targetText,
- );
+ ];
$dbw->insert( 'translate_tmt', $row, __METHOD__ );
}
@@ -84,12 +86,12 @@ class DatabaseTTMServer extends TTMServer implements WritableTTMServer, Readable
}
protected function insertSource( Title $context, $sourceLanguage, $text ) {
- $row = array(
+ $row = [
'tms_lang' => $sourceLanguage,
'tms_len' => mb_strlen( $text ),
'tms_text' => $text,
'tms_context' => $context->getPrefixedText(),
- );
+ ];
$dbw = $this->getDB( DB_MASTER );
$dbw->insert( 'translate_tms', $row, __METHOD__ );
@@ -97,10 +99,10 @@ class DatabaseTTMServer extends TTMServer implements WritableTTMServer, Readable
$fulltext = $this->filterForFulltext( $sourceLanguage, $text );
if ( count( $fulltext ) ) {
- $row = array(
+ $row = [
'tmf_sid' => $sid,
'tmf_text' => implode( ' ', $fulltext ),
- );
+ ];
$dbw->insert( 'translate_tmf', $row, __METHOD__ );
}
@@ -123,8 +125,7 @@ class DatabaseTTMServer extends TTMServer implements WritableTTMServer, Readable
$text = $lang->lc( $text );
$segments = preg_split( '/\s+/', $text, -1, PREG_SPLIT_NO_EMPTY );
if ( count( $segments ) < 4 ) {
-
- return array();
+ return [];
}
foreach ( $segments as $i => $segment ) {
@@ -156,7 +157,7 @@ class DatabaseTTMServer extends TTMServer implements WritableTTMServer, Readable
}
public function beginBatch() {
- $this->sids = array();
+ $this->sids = [];
}
public function batchInsertDefinitions( array $batch ) {
@@ -170,14 +171,14 @@ class DatabaseTTMServer extends TTMServer implements WritableTTMServer, Readable
}
public function batchInsertTranslations( array $batch ) {
- $rows = array();
+ $rows = [];
foreach ( $batch as $key => $data ) {
list( , $language, $text ) = $data;
- $rows[] = array(
+ $rows[] = [
'tmt_sid' => $this->sids[$key],
'tmt_lang' => $language,
'tmt_text' => $text,
- );
+ ];
}
$dbw = $this->getDB( DB_MASTER );
@@ -214,16 +215,16 @@ class DatabaseTTMServer extends TTMServer implements WritableTTMServer, Readable
$max = floor( $len / $this->config['cutoff'] );
// We could use fulltext index to narrow the results further
- $dbr = $this->getDB( DB_SLAVE );
- $tables = array( 'translate_tmt', 'translate_tms' );
- $fields = array( 'tms_context', 'tms_text', 'tmt_lang', 'tmt_text' );
+ $dbr = $this->getDB( DB_REPLICA );
+ $tables = [ 'translate_tmt', 'translate_tms' ];
+ $fields = [ 'tms_context', 'tms_text', 'tmt_lang', 'tmt_text' ];
- $conds = array(
+ $conds = [
'tms_lang' => $sourceLanguage,
'tmt_lang' => $targetLanguage,
"tms_len BETWEEN $min AND $max",
'tms_sid = tmt_sid',
- );
+ ];
$fulltext = $this->filterForFulltext( $sourceLanguage, $text );
if ( $fulltext ) {
@@ -242,7 +243,7 @@ class DatabaseTTMServer extends TTMServer implements WritableTTMServer, Readable
$timeLimit = microtime( true ) + 5;
$lenA = mb_strlen( $text );
- $results = array();
+ $results = [];
foreach ( $res as $row ) {
if ( microtime( true ) > $timeLimit ) {
// Having no suggestions is better than preventing translation
@@ -264,14 +265,14 @@ class DatabaseTTMServer extends TTMServer implements WritableTTMServer, Readable
$quality = 1 - ( $dist * 0.9 / $len );
if ( $quality >= $this->config['cutoff'] ) {
- $results[] = array(
+ $results[] = [
'source' => $row->tms_text,
'target' => $row->tmt_text,
'context' => $row->tms_context,
'location' => $row->tms_context . '/' . $targetLanguage,
'quality' => $quality,
- 'wiki' => isset( $row->tms_wiki ) ? $row->tms_wiki : wfWikiID(),
- );
+ 'wiki' => $row->tms_wiki ?? wfWikiID(),
+ ];
}
}
$results = TTMServer::sortSuggestions( $results );
diff --git a/www/wiki/extensions/Translate/ttmserver/ElasticSearchTTMServer.php b/www/wiki/extensions/Translate/ttmserver/ElasticSearchTTMServer.php
index 8886d079..0835d518 100644
--- a/www/wiki/extensions/Translate/ttmserver/ElasticSearchTTMServer.php
+++ b/www/wiki/extensions/Translate/ttmserver/ElasticSearchTTMServer.php
@@ -4,10 +4,12 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @ingroup TTMServer
*/
+use MediaWiki\Logger\LoggerFactory;
+
/**
* TTMServer backed based on ElasticSearch. Depends on Elastica.
* @since 2014.04
@@ -18,6 +20,38 @@ class ElasticSearchTTMServer
implements ReadableTTMServer, WritableTTMServer, SearchableTTMserver
{
/**
+ * @const int number of documents that will be loaded and deleted in a
+ * single operation
+ */
+ const BULK_DELETE_CHUNK_SIZE = 100;
+
+ /**
+ * @const int in case a write operation fails during a batch process
+ * this constant controls the number of times we will retry the same
+ * operation.
+ */
+ const BULK_INDEX_RETRY_ATTEMPTS = 5;
+
+ /**
+ * @const int time (seconds) to wait for the index to ready before
+ * starting to index. Since we wait for index status it can be relatively
+ * long especially if some nodes are restarted.
+ */
+ const WAIT_UNTIL_READY_TIMEOUT = 3600;
+
+ /**
+ * Flag in the frozen index that indicates that all indices
+ * are frozen (useful only when this service shares the cluster with
+ * CirrusSearch)
+ */
+ const ALL_INDEXES_FROZEN_NAME = 'freeze_everything';
+
+ /**
+ * Type used in the frozen index
+ */
+ const FROZEN_TYPE = 'frozen';
+
+ /**
* @var \Elastica\Client
*/
protected $client;
@@ -49,6 +83,11 @@ class ElasticSearchTTMServer
}
protected function doQuery( $sourceLanguage, $targetLanguage, $text ) {
+ if ( !$this->useWikimediaExtraPlugin() ) {
+ // ElasticTTM is currently not compatible with elasticsearch 2.x/5.x
+ // It needs FuzzyLikeThis ported via the wmf extra plugin
+ throw new \RuntimeException( 'The wikimedia extra plugin is mandatory.' );
+ }
/* Two query system:
* 1) Find all strings in source language that match text
* 2) Do another query for translations for those strings
@@ -57,52 +96,33 @@ class ElasticSearchTTMServer
$oldTimeout = $connection->getTimeout();
$connection->setTimeout( 10 );
- $fuzzyQuery = new \Elastica\Query\FuzzyLikeThis();
+ $fuzzyQuery = new FuzzyLikeThis();
$fuzzyQuery->setLikeText( $text );
- $fuzzyQuery->addFields( array( 'content' ) );
+ $fuzzyQuery->addFields( [ 'content' ] );
$boostQuery = new \Elastica\Query\FunctionScore();
- if ( $this->useWikimediaExtraPlugin() ) {
- $boostQuery->addFunction(
- 'levenshtein_distance_score',
- array(
- 'text' => $text,
- 'field' => 'content'
- )
- );
- } else {
- $groovyScript =
-<<<GROOVY
-import org.apache.lucene.search.spell.*
-new LevensteinDistance().getDistance(srctxt, _source['content'])
-GROOVY;
- $script = new \Elastica\Script(
- $groovyScript,
- array( 'srctxt' => $text ),
- \Elastica\Script::LANG_GROOVY
- );
- $boostQuery->addScriptScoreFunction( $script );
- }
+ $boostQuery->addFunction(
+ 'levenshtein_distance_score',
+ [
+ 'text' => $text,
+ 'field' => 'content'
+ ]
+ );
$boostQuery->setBoostMode( \Elastica\Query\FunctionScore::BOOST_MODE_REPLACE );
// Wrap the fuzzy query so it can be used as a filter.
// This is slightly faster, as ES can throw away the scores by this query.
- $fuzzyFilter = new \Elastica\Filter\Query();
- $fuzzyFilter->setQuery( $fuzzyQuery );
- $boostQuery->setFilter( $fuzzyFilter );
+ $bool = new \Elastica\Query\BoolQuery();
+ $bool->addFilter( $fuzzyQuery );
+ $bool->addMust( $boostQuery );
- // Use filtered query to wrap function score and language filter
- $filteredQuery = new \Elastica\Query\Filtered();
-
- $languageFilter = new \Elastica\Filter\Term();
+ $languageFilter = new \Elastica\Query\Term();
$languageFilter->setTerm( 'language', $sourceLanguage );
-
- $filteredQuery->setFilter( $languageFilter );
- $filteredQuery->setQuery( $boostQuery );
+ $bool->addFilter( $languageFilter );
// The whole query
$query = new \Elastica\Query();
- $query->setQuery( $filteredQuery );
+ $query->setQuery( $bool );
// The interface usually displays three best candidates. These might
// come from more than three source things, if the translations are
@@ -117,16 +137,17 @@ GROOVY;
$query->setFrom( 0 );
$query->setSize( $sizeFirst );
- $query->setParam( '_source', array( 'content' ) );
- $cutoff = isset( $this->config['cutoff'] ) ? $this->config['cutoff'] : 0.65;
+ $query->setParam( '_source', [ 'content' ] );
+ $cutoff = $this->config['cutoff'] ?? 0.65;
$query->setParam( 'min_score', $cutoff );
- $query->setSort( array( '_score', '_uid' ) );
+ $query->setSort( [ '_score', '_uid' ] );
- // This query is doing two unrelated things:
- // 1) Collect the message contents and scores so that they can
- // be accessed later for the translations we found.
- // 2) Build the query string for the query that fetches the translations.
- $contents = $scores = $terms = array();
+ /* This query is doing two unrelated things:
+ * 1) Collect the message contents and scores so that they can
+ * be accessed later for the translations we found.
+ * 2) Build the query string for the query that fetches the translations.
+ */
+ $contents = $scores = $terms = [];
do {
$resultset = $this->getType()->search( $query );
@@ -167,17 +188,17 @@ GROOVY;
// Break if we already got all hits
} while ( $resultset->getTotalHits() > count( $contents ) );
- $suggestions = array();
+ $suggestions = [];
// Skip second query if first query found nothing. Keeping only one return
// statement in this method to avoid forgetting to reset connection timeout
- if ( $terms !== array() ) {
+ if ( $terms !== [] ) {
$idQuery = new \Elastica\Query\Terms();
$idQuery->setTerms( '_id', $terms );
$query = new \Elastica\Query( $idQuery );
$query->setSize( 25 );
- $query->setParam( '_source', array( 'wiki', 'uri', 'content', 'localid' ) );
+ $query->setParam( '_source', [ 'wiki', 'uri', 'content', 'localid' ] );
$resultset = $this->getType()->search( $query );
foreach ( $resultset->getResults() as $result ) {
@@ -186,7 +207,7 @@ GROOVY;
// Construct the matching source id
$sourceId = preg_replace( '~/[^/]+$~', '', $result->getId() );
- $suggestions[] = array(
+ $suggestions[] = [
'source' => $contents[$sourceId],
'target' => $data['content'],
'context' => $data['localid'],
@@ -194,10 +215,10 @@ GROOVY;
'wiki' => $data['wiki'],
'location' => $data['localid'] . '/' . $targetLanguage,
'uri' => $data['uri'],
- );
+ ];
}
- // Ensure reults are in quality order
+ // Ensure results are in quality order
uasort( $suggestions, function ( $a, $b ) {
if ( $a['quality'] === $b['quality'] ) {
return 0;
@@ -214,6 +235,14 @@ GROOVY;
/* Write functions */
+ /**
+ * Add / update translations.
+ *
+ * @param MessageHandle $handle
+ * @param ?string $targetText
+ * @throws \RuntimeException
+ * @return bool
+ */
public function update( MessageHandle $handle, $targetText ) {
if ( !$handle->isValid() || $handle->getCode() === '' ) {
return false;
@@ -234,14 +263,11 @@ GROOVY;
// Do not delete definitions, because the translations are attached to that
if ( $handle->getCode() !== $sourceLanguage ) {
$localid = $handle->getTitleForBase()->getPrefixedText();
-
- $boolQuery = new \Elastica\Query\BoolQuery();
- $boolQuery->addMust( new Elastica\Query\Term( array( 'wiki' => wfWikiID() ) ) );
- $boolQuery->addMust( new Elastica\Query\Term( array( 'language' => $handle->getCode() ) ) );
- $boolQuery->addMust( new Elastica\Query\Term( array( 'localid' => $localid ) ) );
-
- $query = new \Elastica\Query( $boolQuery );
- $this->getType()->deleteByQuery( $query );
+ $this->deleteByQuery( $this->getType(), Elastica\Query::create(
+ ( new \Elastica\Query\BoolQuery() )
+ ->addFilter( new Elastica\Query\Term( [ 'wiki' => wfWikiID() ] ) )
+ ->addFilter( new Elastica\Query\Term( [ 'language' => $handle->getCode() ] ) )
+ ->addFilter( new Elastica\Query\Term( [ 'localid' => $localid ] ) ) ) );
}
// If translation was made fuzzy, we do not need to add anything
@@ -251,23 +277,19 @@ GROOVY;
$revId = $handle->getTitleForLanguage( $sourceLanguage )->getLatestRevID();
$doc = $this->createDocument( $handle, $targetText, $revId );
+ $fname = __METHOD__;
- $retries = 5;
- while ( $retries-- > 0 ) {
- try {
+ MWElasticUtils::withRetry( self::BULK_INDEX_RETRY_ATTEMPTS,
+ function () use ( $doc ) {
$this->getType()->addDocument( $doc );
- break;
- } catch ( \Elastica\Exception\ExceptionInterface $e ) {
- if ( $retries === 0 ) {
- throw $e;
- } else {
- $c = get_class( $e );
- $msg = $e->getMessage();
- error_log( __METHOD__ . ": update failed ($c: $msg); retrying." );
- sleep( 10 );
- }
+ },
+ function ( $e, $errors ) use ( $fname ) {
+ $c = get_class( $e );
+ $msg = $e->getMessage();
+ error_log( $fname . ": update failed ($c: $msg); retrying." );
+ sleep( 10 );
}
- }
+ );
return true;
}
@@ -285,14 +307,14 @@ GROOVY;
$wiki = wfWikiID();
$globalid = "$wiki-$localid-$revId/$language";
- $data = array(
+ $data = [
'wiki' => $wiki,
'uri' => $handle->getTitle()->getCanonicalURL(),
'localid' => $localid,
'language' => $language,
'content' => $text,
'group' => $handle->getGroupIds(),
- );
+ ];
return new \Elastica\Document( $globalid, $data );
}
@@ -302,36 +324,45 @@ GROOVY;
* @param bool $rebuild Deletes index first if already exists
*/
public function createIndex( $rebuild ) {
+ $indexSettings = [
+ 'number_of_shards' => $this->getShardCount(),
+ 'analysis' => [
+ 'filter' => [
+ 'prefix_filter' => [
+ 'type' => 'edge_ngram',
+ 'min_gram' => 2,
+ 'max_gram' => 20
+ ]
+ ],
+ 'analyzer' => [
+ 'prefix' => [
+ 'type' => 'custom',
+ 'tokenizer' => 'standard',
+ 'filter' => [ 'standard', 'lowercase', 'prefix_filter' ]
+ ],
+ 'casesensitive' => [
+ 'tokenizer' => 'standard',
+ 'filter' => [ 'standard' ]
+ ]
+ ]
+ ]
+ ];
+ $replicas = $this->getReplicaCount();
+ if ( strpos( $replicas, '-' ) === false ) {
+ $indexSettings['number_of_replicas'] = $replicas;
+ } else {
+ $indexSettings['auto_expand_replicas'] = $replicas;
+ }
+
$type = $this->getType();
- $type->getIndex()->create(
- array(
- 'number_of_shards' => $this->getShardCount(),
- 'number_of_replicas' => $this->getReplicaCount(),
- 'analysis' => array(
- 'filter' => array(
- 'prefix_filter' => array(
- 'type' => 'edge_ngram',
- 'min_gram'=> 2,
- 'max_gram'=> 20
- )
- ),
- 'analyzer' => array(
- 'prefix' => array(
- 'type' => 'custom',
- 'tokenizer' => 'standard',
- 'filter' => array( 'standard', 'lowercase', 'prefix_filter' )
- ),
- 'casesensitive' => array(
- 'tokenizer' => 'standard',
- 'filter' => array( 'standard' )
- )
- )
- )
- ),
- $rebuild
- );
+ $type->getIndex()->create( $indexSettings, $rebuild );
}
+ /**
+ * Begin the bootstrap process.
+ *
+ * @throws \RuntimeException
+ */
public function beginBootstrap() {
$type = $this->getType();
if ( $this->updateMapping ) {
@@ -342,44 +373,40 @@ GROOVY;
}
$settings = $type->getIndex()->getSettings();
- $settings->setRefreshInterval( -1 );
+ $settings->setRefreshInterval( '-1' );
- $term = new Elastica\Query\Term();
- $term->setTerm( 'wiki', wfWikiID() );
- $query = new \Elastica\Query( $term );
- $type->deleteByQuery( $query );
+ $this->deleteByQuery( $this->getType(), \Elastica\Query::create(
+ ( new Elastica\Query\Term() )->setTerm( 'wiki', wfWikiID() ) ) );
$mapping = new \Elastica\Type\Mapping();
$mapping->setType( $type );
- $mapping->setProperties( array(
- 'wiki' => array( 'type' => 'string', 'index' => 'not_analyzed' ),
- 'localid' => array( 'type' => 'string', 'index' => 'not_analyzed' ),
- 'uri' => array( 'type' => 'string', 'index' => 'not_analyzed' ),
- 'language' => array( 'type' => 'string', 'index' => 'not_analyzed' ),
- 'group' => array( 'type' => 'string', 'index' => 'not_analyzed' ),
- 'content' => array(
- 'type' => 'string',
- 'fields' => array(
- 'content' => array(
- 'type' => 'string',
- 'index' => 'analyzed',
+ $mapping->setProperties( [
+ 'wiki' => [ 'type' => 'keyword' ],
+ 'localid' => [ 'type' => 'keyword' ],
+ 'uri' => [ 'type' => 'keyword' ],
+ 'language' => [ 'type' => 'keyword' ],
+ 'group' => [ 'type' => 'keyword' ],
+ 'content' => [
+ 'type' => 'text',
+ 'fields' => [
+ 'content' => [
+ 'type' => 'text',
'term_vector' => 'yes'
- ),
- 'prefix_complete' => array(
- 'type' => 'string',
- 'index_analyzer' => 'prefix',
+ ],
+ 'prefix_complete' => [
+ 'type' => 'text',
+ 'analyzer' => 'prefix',
'search_analyzer' => 'standard',
'term_vector' => 'yes'
- ),
- 'case_sensitive' => array(
- 'type' => 'string',
- 'index' => 'analyzed',
+ ],
+ 'case_sensitive' => [
+ 'type' => 'text',
'analyzer' => 'casesensitive',
'term_vector' => 'yes'
- )
- )
- ),
- ) );
+ ]
+ ]
+ ],
+ ] );
$mapping->send();
$this->waitUntilReady();
@@ -400,29 +427,24 @@ GROOVY;
}
public function batchInsertTranslations( array $batch ) {
- $docs = array();
+ $docs = [];
foreach ( $batch as $data ) {
list( $handle, $sourceLanguage, $text ) = $data;
$revId = $handle->getTitleForLanguage( $sourceLanguage )->getLatestRevID();
$docs[] = $this->createDocument( $handle, $text, $revId );
}
- $retries = 5;
- while ( $retries-- > 0 ) {
- try {
+ MWElasticUtils::withRetry( self::BULK_INDEX_RETRY_ATTEMPTS,
+ function () use ( $docs ) {
$this->getType()->addDocuments( $docs );
- break;
- } catch ( \Elastica\Exception\ExceptionInterface $e ) {
- if ( $retries === 0 ) {
- throw $e;
- } else {
- $c = get_class( $e );
- $msg = $e->getMessage();
- $this->logOutput( "Batch failed ($c: $msg), trying again in 10 seconds" );
- sleep( 10 );
- }
+ },
+ function ( $e, $errors ) {
+ $c = get_class( $e );
+ $msg = $e->getMessage();
+ $this->logOutput( "Batch failed ($c: $msg), trying again in 10 seconds" );
+ sleep( 10 );
}
- }
+ );
}
public function endBatch() {
@@ -432,8 +454,8 @@ GROOVY;
public function endBootstrap() {
$index = $this->getType()->getIndex();
$index->refresh();
- $index->optimize();
- $index->getSettings()->setRefreshInterval( 5 );
+ $index->forcemerge();
+ $index->getSettings()->setRefreshInterval( '5s' );
}
public function getClient() {
@@ -451,52 +473,108 @@ GROOVY;
* @return true if the backend is configured with the wikimedia extra plugin
*/
public function useWikimediaExtraPlugin() {
- return isset ( $this->config['use_wikimedia_extra'] ) && $this->config['use_wikimedia_extra'];
+ return isset( $this->config['use_wikimedia_extra'] ) && $this->config['use_wikimedia_extra'];
}
- public function getType() {
+ /**
+ * @return string
+ */
+ private function getIndexName() {
if ( isset( $this->config['index'] ) ) {
- $index = $this->config['index'];
+ return $this->config['index'];
} else {
- $index = 'ttmserver';
+ return 'ttmserver';
}
- return $this->getClient()->getIndex( $index )->getType( 'message' );
+ }
+
+ public function getType() {
+ return $this->getClient()
+ ->getIndex( $this->getIndexName() )
+ ->getType( 'message' );
}
protected function getShardCount() {
- return isset( $this->config['shards'] ) ? $this->config['shards'] : 5;
+ return $this->config['shards'] ?? 1;
}
protected function getReplicaCount() {
- return isset( $this->config['replicas'] ) ? $this->config['replicas'] : 0;
+ return $this->config['replicas'] ?? '0-2';
}
- protected function waitUntilReady() {
- $expectedActive = $this->getShardCount() * ( 1 + $this->getReplicaCount() );
- $indexName = $this->getType()->getIndex()->getName();
+ /**
+ * Get index health
+ * TODO: Remove this code in the future as we drop support for
+ * older versions of the Elastica extension.
+ *
+ * @param string $indexName
+ * @return array the index health status
+ */
+ protected function getIndexHealth( $indexName ) {
$path = "_cluster/health/$indexName";
+ $response = $this->getClient()->request( $path );
+ if ( $response->hasError() ) {
+ throw new \Exception( "Error while fetching index health status: " . $response->getError() );
+ }
+ return $response->getData();
+ }
- while ( true ) {
- $response = $this->getClient()->request( $path );
- if ( $response->hasError() ) {
- $this->logOutput( 'Error fetching index health. Retrying.' );
- $this->logOutput( 'Message: ' + $response->getError() );
- } else {
- $health = $response->getData();
- $active = $health['active_shards'];
- $this->logOutput(
- "active:$active/$expectedActive ".
- "relocating:{$health['relocating_shards']} " .
- "initializing:{$health['initializing_shards']} ".
- "unassigned:{$health['unassigned_shards']}"
- );
+ /**
+ * Wait for the index to go green
+ *
+ * NOTE: This method has been copied and adjusted from
+ * CirrusSearch/includes/Maintenance/ConfigUtils.php. Ideally we'd
+ * like to make these utility methods available in the Elastica
+ * extension, but this one requires some refactoring in cirrus first.
+ * TODO: Remove this code in the future as we drop support for
+ * older versions of the Elastica extension.
+ *
+ * @param string $indexName
+ * @param int $timeout
+ * @return bool true if the index is green false otherwise.
+ */
+ protected function waitForGreen( $indexName, $timeout ) {
+ $startTime = time();
+ while ( ( $startTime + $timeout ) > time() ) {
+ try {
+ $response = $this->getIndexHealth( $indexName );
+ $status = isset( $response['status'] ) ? $response['status'] : 'unknown';
+ if ( $status === 'green' ) {
+ $this->logOutput( "\tGreen!" );
+ return true;
+ }
+ $this->logOutput( "\tIndex is $status retrying..." );
+ sleep( 5 );
+ } catch ( \Exception $e ) {
+ $this->logOutput( "Error while waiting for green ({$e->getMessage()}), retrying..." );
}
+ }
+ return false;
+ }
- if ( $active === $expectedActive ) {
- break;
+ protected function waitUntilReady() {
+ if ( method_exists( 'MWElasticUtils', 'waitForGreen' ) ) {
+ $statuses = MWElasticUtils::waitForGreen(
+ $this->getClient(),
+ $this->getIndexName(),
+ self::WAIT_UNTIL_READY_TIMEOUT );
+ $this->logOutput( "Waiting for the index to go green..." );
+ foreach ( $statuses as $message ) {
+ $this->logOutput( $message );
+ }
+
+ if ( !$statuses->getReturn() ) {
+ die( "Timeout! Please check server logs for {$this->getIndexName()}." );
}
- sleep( 10 );
+ return;
+ }
+
+ // TODO: This code can be removed in the future as we drop support for
+ // older versions of the Elastica extension.
+ $indexName = $this->getType()->getIndex()->getName();
+ $this->logOutput( "Waiting for the index to go green..." );
+ if ( !$this->waitForGreen( $indexName, self::WAIT_UNTIL_READY_TIMEOUT ) ) {
+ die( "Timeout! Please check server logs for {$this->getIndex()->getName()}." );
}
}
@@ -519,9 +597,14 @@ GROOVY;
$this->updateMapping = true;
}
- // Parse query string and build the search query
+ /**
+ * Parse query string and build the search query
+ * @param string $queryString
+ * @param array $opts
+ * @return array
+ */
protected function parseQueryString( $queryString, array $opts ) {
- $fields = $highlights = array();
+ $fields = $highlights = [];
$terms = preg_split( '/\s+/', $queryString );
$match = $opts['match'];
$case = $opts['case'];
@@ -560,9 +643,9 @@ GROOVY;
}
// Fields for highlighting
- $highlights[$analyzer] = array(
+ $highlights[$analyzer] = [
'number_of_fragments' => 0
- );
+ ];
// Allow searching by exact message title (page name with
// language subpage).
@@ -582,27 +665,33 @@ GROOVY;
}
}
- return array( $searchQuery, $highlights );
+ return [ $searchQuery, $highlights ];
}
- // Search interface
- public function search( $queryString, $opts, $highlight ) {
+ /**
+ * Search interface
+ * @param string $queryString
+ * @param array $opts
+ * @param array $highlight
+ * @return \Elastica\Search
+ */
+ public function createSearch( $queryString, $opts, $highlight ) {
$query = new \Elastica\Query();
list( $searchQuery, $highlights ) = $this->parseQueryString( $queryString, $opts );
$query->setQuery( $searchQuery );
- $language = new \Elastica\Facet\Terms( 'language' );
+ $language = new \Elastica\Aggregation\Terms( 'language' );
$language->setField( 'language' );
$language->setSize( 500 );
- $query->addFacet( $language );
+ $query->addAggregation( $language );
- $group = new \Elastica\Facet\Terms( 'group' );
+ $group = new \Elastica\Aggregation\Terms( 'group' );
$group->setField( 'group' );
// Would like to prioritize the top level groups and not show subgroups
// if the top group has only few hits, but that doesn't seem to be possile.
$group->setSize( 500 );
- $query->addFacet( $group );
+ $query->addAggregation( $group );
$query->setSize( $opts['limit'] );
$query->setFrom( $opts['offset'] );
@@ -611,53 +700,70 @@ GROOVY;
// multiple must clauses are executed by converting each filter into a bit
// field then anding them together. The latter is normally faster if either
// of the subfilters are reused. May not make a difference in this context.
- $filters = new \Elastica\Filter\BoolFilter();
+ $filters = new \Elastica\Query\BoolQuery();
$language = $opts['language'];
if ( $language !== '' ) {
- $languageFilter = new \Elastica\Filter\Term();
+ $languageFilter = new \Elastica\Query\Term();
$languageFilter->setTerm( 'language', $language );
- $filters->addMust( $languageFilter );
+ $filters->addFilter( $languageFilter );
}
$group = $opts['group'];
if ( $group !== '' ) {
- $groupFilter = new \Elastica\Filter\Term();
+ $groupFilter = new \Elastica\Query\Term();
$groupFilter->setTerm( 'group', $group );
- $filters->addMust( $groupFilter );
+ $filters->addFilter( $groupFilter );
}
// Check that we have at least one filter to avoid invalid query errors.
if ( $language !== '' || $group !== '' ) {
+ // TODO: This seems wrong, but perhaps for aggregation purposes?
+ // should make $search a must clause and use the bool query
+ // as main.
$query->setPostFilter( $filters );
}
list( $pre, $post ) = $highlight;
- $query->setHighlight( array(
+ $query->setHighlight( [
// The value must be an object
- 'pre_tags' => array( $pre ),
- 'post_tags' => array( $post ),
+ 'pre_tags' => [ $pre ],
+ 'post_tags' => [ $post ],
'fields' => $highlights,
- ) );
+ ] );
+
+ return $this->getType()->getIndex()->createSearch( $query );
+ }
+
+ /**
+ * Search interface
+ * @param string $queryString
+ * @param array $opts
+ * @param array $highlight
+ * @throws TTMServerException
+ * @return \Elastica\ResultSet
+ */
+ public function search( $queryString, $opts, $highlight ) {
+ $search = $this->createSearch( $queryString, $opts, $highlight );
try {
- return $this->getType()->getIndex()->search( $query );
+ return $search->search();
} catch ( \Elastica\Exception\ExceptionInterface $e ) {
throw new TTMServerException( $e->getMessage() );
}
}
public function getFacets( $resultset ) {
- $facets = $resultset->getFacets();
+ $aggs = $resultset->getAggregations();
- $ret = array(
- 'language' => array(),
- 'group' => array()
- );
+ $ret = [
+ 'language' => [],
+ 'group' => []
+ ];
- foreach ( $facets as $type => $facetInfo ) {
- foreach ( $facetInfo['terms'] as $facetRow ) {
- $ret[$type][$facetRow['term']] = $facetRow['count'];
+ foreach ( $aggs as $type => $info ) {
+ foreach ( $info['buckets'] as $row ) {
+ $ret[$type][$row['key']] = $row['doc_count'];
}
}
@@ -669,7 +775,7 @@ GROOVY;
}
public function getDocuments( $resultset ) {
- $ret = array();
+ $ret = [];
foreach ( $resultset->getResults() as $document ) {
$data = $document->getData();
$hl = $document->getHighlights();
@@ -685,4 +791,100 @@ GROOVY;
return $ret;
}
+
+ /**
+ * Delete docs by query by using the scroll API.
+ * TODO: Elastica\Index::deleteByQuery() ? was removed
+ * in 2.x and returned in 5.x.
+ *
+ * @param \Elastica\Type $type the source index
+ * @param \Elastica\Query $query the query
+ * @throws \RuntimeException
+ */
+ private function deleteByQuery( \Elastica\Type $type, \Elastica\Query $query ) {
+ if ( method_exists( 'MWElasticUtils', 'deleteByQuery' ) ) {
+ try {
+ MWElasticUtils::deleteByQuery( $type->getIndex(), $query, /* $allowConflicts = */ true );
+ } catch ( \Exception $e ) {
+ LoggerFactory::getInstance( 'ElasticSearchTTMServer' )->error(
+ 'Problem encountered during deletion.',
+ [ 'exception' => $e ]
+ );
+
+ throw new \RuntimeException( "Problem encountered during deletion.\n" . $e );
+ }
+ return;
+ }
+ // TODO: This code can be removed in the future as we drop support for
+ // older versions of the Elastica extension.
+ $retryAttempts = self::BULK_INDEX_RETRY_ATTEMPTS;
+ $search = new \Elastica\Search( $this->getClient() );
+ $search->setQuery( $query );
+ $search->addType( $type );
+ $search->addIndex( $type->getIndex() );
+ $scroll = new \Elastica\Scroll( $search, '15m' );
+
+ foreach ( $scroll as $results ) {
+ $ids = [];
+ foreach ( $results as $result ) {
+ $ids[] = $result->getId();
+ }
+
+ if ( $ids === [] ) {
+ continue;
+ }
+
+ MWElasticUtils::withRetry( $retryAttempts,
+ function () use ( $ids, $type ) {
+ $type->deleteIds( $ids );
+ }
+ );
+ }
+ }
+
+ /**
+ * @return bool
+ */
+ public function isFrozen() {
+ if ( method_exists( 'MWElasticUtils', 'isFrozen' ) ) {
+ try {
+ return MWElasticUtils::isFrozen( $this->getClient() );
+ } catch ( \Exception $e ) {
+ LoggerFactory::getInstance( 'ElasticSearchTTMServer' )->warning(
+ 'Problem encountered while checking the frozen index.',
+ [ 'exception' => $e ]
+ );
+ return false;
+ }
+ }
+
+ // TODO: This code can be removed in the future as we drop support for
+ // older versions of the Elastica extension.
+ if ( !isset( $this->config['frozen_index'] ) ) {
+ return false;
+ }
+ $frozenIndex = $this->config['frozen_index'];
+ $indices = [ static::ALL_INDEXES_FROZEN_NAME, $this->getIndexName() ];
+ $ids = ( new \Elastica\Query\Ids() )
+ ->setIds( $indices );
+
+ try {
+ $resp = $this->getClient()
+ ->getIndex( $frozenIndex )
+ ->getType( static::FROZEN_TYPE )
+ ->search( \Elastica\Query::create( $ids ) );
+
+ if ( $resp->count() === 0 ) {
+ return false;
+ } else {
+ return true;
+ }
+ } catch ( \Exception $e ) {
+ LoggerFactory::getInstance( 'ElasticSearchTTMServer' )->warning(
+ 'Problem encountered while checking the frozen index.',
+ [ 'exception' => $e ]
+ );
+ return false;
+ }
+ }
}
diff --git a/www/wiki/extensions/Translate/ttmserver/FakeTTMServer.php b/www/wiki/extensions/Translate/ttmserver/FakeTTMServer.php
index 15f8d377..16715592 100644
--- a/www/wiki/extensions/Translate/ttmserver/FakeTTMServer.php
+++ b/www/wiki/extensions/Translate/ttmserver/FakeTTMServer.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @ingroup TTMServer
*/
@@ -18,7 +18,7 @@
*/
class FakeTTMServer implements ReadableTTMServer, WritableTTMServer {
public function query( $sourceLanguage, $targetLanguage, $text ) {
- return array();
+ return [];
}
public function isLocalSuggestion( array $suggestion ) {
@@ -49,4 +49,12 @@ class FakeTTMServer implements ReadableTTMServer, WritableTTMServer {
public function endBootstrap() {
}
+
+ public function getMirrors() {
+ return [];
+ }
+
+ public function isFrozen() {
+ return false;
+ }
}
diff --git a/www/wiki/extensions/Translate/ttmserver/FuzzyLikeThis.php b/www/wiki/extensions/Translate/ttmserver/FuzzyLikeThis.php
new file mode 100644
index 00000000..143b3222
--- /dev/null
+++ b/www/wiki/extensions/Translate/ttmserver/FuzzyLikeThis.php
@@ -0,0 +1,222 @@
+<?php
+/**
+ * NOTE: the following class has been copied from elastica 2.3.1 :
+ * https://github.com/ruflin/Elastica/blob/2.3.1/lib/Elastica/Query/FuzzyLikeThis.php
+ * (few modifications have been made to comply with phpcs rules used by this extension)
+ * It is intended to be used as a temporary workaround with the wmf extra
+ * elasticsearch plugin with elasticsearch 2.x.
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2014 Nicolas Ruflin
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * (c.f. https://github.com/ruflin/Elastica/blob/2.3.1/LICENSE.txt)
+ *
+ * @file
+ * @license MIT
+ * @ingroup TTMServer
+ */
+
+/**
+ * Fuzzy Like This query.
+ *
+ * @author Raul Martinez, Jr <juneym@gmail.com>
+ *
+ * @link https://www.elastic.co/guide/en/elasticsearch/reference/1.7/query-dsl-flt-query.html
+ *
+ * @since 2016.05
+ * @ingroup TTMServer
+ */
+class FuzzyLikeThis extends \Elastica\Query\AbstractQuery {
+ // phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore
+ /**
+ * Field names.
+ *
+ * @var array Field names
+ */
+ protected $_fields = [];
+
+ /**
+ * Like text.
+ *
+ * @var string Like text
+ */
+ protected $_likeText = '';
+
+ /**
+ * Ignore term frequency.
+ *
+ * @var bool ignore term frequency
+ */
+ protected $_ignoreTF = false;
+
+ /**
+ * Max query terms value.
+ *
+ * @var int Max query terms value
+ */
+ protected $_maxQueryTerms = 25;
+
+ /**
+ * fuzziness.
+ *
+ * @var int fuzziness
+ */
+ protected $_fuzziness = 2;
+
+ /**
+ * Prefix Length.
+ *
+ * @var int Prefix Length
+ */
+ protected $_prefixLength = 0;
+
+ /**
+ * Analyzer.
+ *
+ * @var string Analyzer
+ */
+ protected $_analyzer;
+ // phpcs:enable
+
+ /**
+ * Adds field to flt query.
+ *
+ * @param array $fields Field names
+ *
+ * @return $this
+ */
+ public function addFields( array $fields ) {
+ $this->_fields = $fields;
+
+ return $this;
+ }
+
+ /**
+ * Set the "like_text" value.
+ *
+ * @param string $text
+ *
+ * @return $this
+ */
+ public function setLikeText( $text ) {
+ $text = trim( $text );
+ $this->_likeText = $text;
+
+ return $this;
+ }
+
+ /**
+ * Set the "ignore_tf" value (ignore term frequency).
+ *
+ * @param bool $ignoreTF
+ *
+ * @return $this
+ */
+ public function setIgnoreTF( $ignoreTF ) {
+ $this->_ignoreTF = (bool)$ignoreTF;
+
+ return $this;
+ }
+
+ /**
+ * Set the minimum similarity.
+ *
+ * @param int $value
+ *
+ * @return $this
+ */
+ public function setFuzziness( $value ) {
+ $value = (int)$value;
+ $this->_fuzziness = $value;
+
+ return $this;
+ }
+
+ /**
+ * Set Prefix Length.
+ *
+ * @param int $value Prefix length
+ *
+ * @return $this
+ */
+ public function setPrefixLength( $value ) {
+ $this->_prefixLength = (int)$value;
+
+ return $this;
+ }
+
+ /**
+ * Set max_query_terms.
+ *
+ * @param int $value Max query terms value
+ *
+ * @return $this
+ */
+ public function setMaxQueryTerms( $value ) {
+ $this->_maxQueryTerms = (int)$value;
+
+ return $this;
+ }
+
+ /**
+ * Set analyzer.
+ *
+ * @param string $text Analyzer text
+ *
+ * @return $this
+ */
+ public function setAnalyzer( $text ) {
+ $text = trim( $text );
+ $this->_analyzer = $text;
+
+ return $this;
+ }
+
+ /**
+ * Converts fuzzy like this query to array.
+ *
+ * @return array Query array
+ *
+ * @see \Elastica\Query\AbstractQuery::toArray()
+ */
+ public function toArray() {
+ if ( !empty( $this->_fields ) ) {
+ $args['fields'] = $this->_fields;
+ }
+
+ if ( !empty( $this->_analyzer ) ) {
+ $args['analyzer'] = $this->_analyzer;
+ }
+
+ $args['fuzziness'] = ( $this->_fuzziness > 0 ) ? $this->_fuzziness : 0;
+
+ $args['like_text'] = $this->_likeText;
+ $args['prefix_length'] = $this->_prefixLength;
+ $args['ignore_tf'] = $this->_ignoreTF;
+ $args['max_query_terms'] = $this->_maxQueryTerms;
+
+ $data = parent::toArray();
+ $args = array_merge( $args, $data['fuzzy_like_this'] );
+
+ return [ 'fuzzy_like_this' => $args ];
+ }
+}
diff --git a/www/wiki/extensions/Translate/ttmserver/Interfaces.php b/www/wiki/extensions/Translate/ttmserver/Interfaces.php
index 3cce0c1a..1f8cb20e 100644
--- a/www/wiki/extensions/Translate/ttmserver/Interfaces.php
+++ b/www/wiki/extensions/Translate/ttmserver/Interfaces.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @ingroup TTMServer
*/
@@ -18,9 +18,9 @@ interface ReadableTTMServer {
/**
* Fetches all relevant suggestions for given text.
*
- * @param $sourceLanguage String: language code for the provide text
- * @param $targetLanguage String: language code for the suggestions
- * @param $text String: the text for which to search suggestions
+ * @param string $sourceLanguage language code for the provide text
+ * @param string $targetLanguage language code for the suggestions
+ * @param string $text the text for which to search suggestions
* @return array List: unordered suggestions, which each has fields:
* - source: String: the original text of the suggestion
* - target: String: the suggestion
@@ -98,6 +98,24 @@ interface WritableTTMServer {
* Do any cleanup, optimizing etc.
*/
public function endBootstrap();
+
+ /**
+ * Get the list of services to duplicate writes to make them "mirrors"
+ * of this service.
+ *
+ * @since 2017.04
+ * @return string[]
+ */
+ public function getMirrors();
+
+ /**
+ * Check if the service is frozen, attempting to write to
+ * a frozen service may lead to errors or unexpected behaviors.
+ *
+ * @since 2017.04
+ * @return bool true if the service is frozen
+ */
+ public function isFrozen();
}
/**
@@ -117,18 +135,19 @@ interface SearchableTTMServer {
public function search( $queryString, $opts, $highlight );
/**
- * ...
+ * @param stdClass $resultset
+ * @return array[]
*/
public function getFacets( $resultset );
/**
- * @param $resultset
+ * @param stdClass $resultset
* @return int
*/
public function getTotalHits( $resultset );
/**
- * @param $resultset
+ * @param stdClass $resultset
* @return array[]
*/
public function getDocuments( $resultset );
diff --git a/www/wiki/extensions/Translate/ttmserver/RemoteTTMServer.php b/www/wiki/extensions/Translate/ttmserver/RemoteTTMServer.php
index 4225b2c8..402ad5ac 100644
--- a/www/wiki/extensions/Translate/ttmserver/RemoteTTMServer.php
+++ b/www/wiki/extensions/Translate/ttmserver/RemoteTTMServer.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @ingroup TTMServer
*/
@@ -19,7 +19,7 @@
class RemoteTTMServer extends TTMServer implements ReadableTTMServer {
public function query( $sourceLanguage, $targetLanguage, $text ) {
// @todo Implement some day perhaps?
- return array();
+ return [];
}
public function isLocalSuggestion( array $suggestion ) {
diff --git a/www/wiki/extensions/Translate/ttmserver/SolrTTMServer.php b/www/wiki/extensions/Translate/ttmserver/SolrTTMServer.php
index 33c0fec4..375d544f 100644
--- a/www/wiki/extensions/Translate/ttmserver/SolrTTMServer.php
+++ b/www/wiki/extensions/Translate/ttmserver/SolrTTMServer.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @ingroup TTMServer
*/
@@ -69,11 +69,11 @@ class SolrTTMServer
// For now impose a length limit on query string to avoid doing
// very slow queries. Magic number.
if ( strlen( $text ) > 789 ) {
- return array();
+ return [];
}
$query = $this->client->createSelect();
- $query->setFields( array( 'globalid', 'content', 'score' ) );
+ $query->setFields( [ 'globalid', 'content', 'score' ] );
/* The interface usually displays three best candidates. These might
* come from more than three matches, if the translation is the same.
@@ -92,12 +92,12 @@ class SolrTTMServer
/* Note how we need to escape twice here, first the string for strdist
* and then the strdist call itself for the query. And of course every-
* thing will be URL encoded once sent over the line. */
- $query->setQuery( '_val_:%P1%', array( $dist ) );
+ $query->setQuery( '_val_:%P1%', [ $dist ] );
/* Filter queries are supposed to be efficient as they are separately
* cached, but I haven't done any benchmarks. */
$query->createFilterQuery( 'lang' )
- ->setQuery( 'language:%P1%', array( $sourceLanguage ) );
+ ->setQuery( 'language:%P1%', [ $sourceLanguage ] );
$resultset = $this->client->select( $query );
@@ -109,7 +109,7 @@ class SolrTTMServer
* This code is a bit uglier than I'd like it to be, since there
* there is no field that globally identifies a message (message
* definition and translations). */
- $contents = $scores = array();
+ $contents = $scores = [];
$queryString = '';
foreach ( $resultset as $doc ) {
$sourceId = preg_replace( '~/[^/]+$~', '', $doc->globalid );
@@ -122,7 +122,7 @@ class SolrTTMServer
// Second query to fetch available translations
$fetchQuery = $this->client->createSelect();
- $fetchQuery->setFields( array( 'wiki', 'uri', 'content', 'messageid', 'globalid' ) );
+ $fetchQuery->setFields( [ 'wiki', 'uri', 'content', 'messageid', 'globalid' ] );
// This come in random order, so have to fetch all and sort
$fetchQuery->setRows( 25 );
$fetchQuery->setQuery( $queryString );
@@ -131,7 +131,7 @@ class SolrTTMServer
$translations = $this->client->select( $fetchQuery );
- $suggestions = array();
+ $suggestions = [];
foreach ( $translations as $doc ) {
/* Construct the matching source id */
$sourceId = preg_replace( '~/[^/]+$~', '', $doc->globalid );
@@ -144,7 +144,7 @@ class SolrTTMServer
continue;
}
- $suggestions[] = array(
+ $suggestions[] = [
'source' => $contents[$sourceId],
'target' => $doc->content,
'context' => $doc->messageid,
@@ -152,7 +152,7 @@ class SolrTTMServer
'wiki' => $doc->wiki,
'location' => $doc->messageid . '/' . $targetLanguage,
'uri' => $doc->uri,
- );
+ ];
}
/* Like mentioned above, we get results in random order. Sort them
@@ -199,11 +199,11 @@ class SolrTTMServer
if ( $doDelete ) {
$base = Title::makeTitle( $title->getNamespace(), $handle->getKey() );
- $conds = array(
+ $conds = [
'wiki' => wfWikiID(),
'language' => $handle->getCode(),
'messageid' => $base->getPrefixedText(),
- );
+ ];
foreach ( $conds as $key => &$value ) {
$value = "$key:" . $update->getHelper()->escapePhrase( $value );
}
@@ -349,7 +349,14 @@ class SolrTTMServer
}
}
- // Search interface
+ /**
+ * Search interface
+ * @param string $queryString
+ * @param array $opts
+ * @param array $highlight
+ * @return array
+ * @throws TTMServerException
+ */
public function search( $queryString, $opts, $highlight ) {
$client = $this->getSolarium();
@@ -372,14 +379,14 @@ class SolrTTMServer
$languageFilter = $opts['language'];
if ( $languageFilter !== '' ) {
$query->createFilterQuery( 'languageFilter' )
- ->setQuery( 'language:%P1%', array( $languageFilter ) )
+ ->setQuery( 'language:%P1%', [ $languageFilter ] )
->addTag( 'filter' );
}
$groupFilter = $opts['group'];
if ( $groupFilter !== '' ) {
$query->createFilterQuery( 'groupFilter' )
- ->setQuery( 'group:%P1%', array( $groupFilter ) )
+ ->setQuery( 'group:%P1%', [ $groupFilter ] )
->addTag( 'filter' );
}
@@ -399,15 +406,15 @@ class SolrTTMServer
try {
return $client->select( $query );
} catch ( Solarium_Client_HttpException $e ) {
- throw new TTMServer( $e->getMessage() );
+ throw new TTMServerException( $e->getMessage() );
}
}
public function getFacets( $resultset ) {
- return array(
+ return [
'language' => iterator_to_array( $resultset->getFacetSet()->getFacet( 'language' ) ),
'group' => iterator_to_array( $resultset->getFacetSet()->getFacet( 'group' ) ),
- );
+ ];
}
public function getTotalHits( $resultset ) {
@@ -416,7 +423,7 @@ class SolrTTMServer
public function getDocuments( $resultset ) {
$highlighting = $resultset->getHighlighting();
- $ret = array();
+ $ret = [];
foreach ( $resultset as $document ) {
$fields = iterator_to_array( $document );
// Compatibility mapping
@@ -424,7 +431,7 @@ class SolrTTMServer
$hdoc = $highlighting->getResult( $document->globalid );
$text = $hdoc->getField( 'text' );
- if ( $text === array() ) {
+ if ( $text === [] ) {
$text = $document->text;
} else {
$text = $text[0];
diff --git a/www/wiki/extensions/Translate/ttmserver/TTMServer.php b/www/wiki/extensions/Translate/ttmserver/TTMServer.php
index 5033505d..2a7f0900 100644
--- a/www/wiki/extensions/Translate/ttmserver/TTMServer.php
+++ b/www/wiki/extensions/Translate/ttmserver/TTMServer.php
@@ -4,8 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @defgroup TTMServer The Translate extension translation memory interface
*/
@@ -16,13 +15,22 @@
* @ingroup TTMServer
*/
class TTMServer {
+ /** @var array */
protected $config;
- protected function __construct( $config ) {
+ /**
+ * @param array $config
+ */
+ protected function __construct( array $config ) {
$this->config = $config;
}
- public static function factory( $config ) {
+ /**
+ * @param array $config
+ * @return TTMServer|null
+ * @throws MWException
+ */
+ public static function factory( array $config ) {
if ( isset( $config['class'] ) ) {
$class = $config['class'];
@@ -39,19 +47,20 @@ class TTMServer {
}
}
- throw new MWEXception( 'TTMServer with no type' );
+ throw new MWException( 'TTMServer with no type' );
}
/**
* Returns the primary server instance, useful for chaining.
- * Primary one is defined as config with key TTMServer
- * in $wgTranslateTranslationServices.
+ * Primary instance is defined by $wgTranslateTranslationDefaultService
+ * which is a key to $wgTranslateTranslationServices.
* @return WritableTTMServer
*/
public static function primary() {
- global $wgTranslateTranslationServices;
- if ( isset( $wgTranslateTranslationServices['TTMServer'] ) ) {
- $obj = self::factory( $wgTranslateTranslationServices['TTMServer'] );
+ global $wgTranslateTranslationServices,
+ $wgTranslateTranslationDefaultService;
+ if ( isset( $wgTranslateTranslationServices[$wgTranslateTranslationDefaultService] ) ) {
+ $obj = self::factory( $wgTranslateTranslationServices[$wgTranslateTranslationDefaultService] );
if ( $obj instanceof WritableTTMServer ) {
return $obj;
}
@@ -60,14 +69,23 @@ class TTMServer {
return new FakeTTMServer();
}
+ /**
+ * @param array[] $suggestions
+ * @return array[]
+ */
public static function sortSuggestions( array $suggestions ) {
- usort( $suggestions, array( __CLASS__, 'qualitySort' ) );
+ usort( $suggestions, [ __CLASS__, 'qualitySort' ] );
return $suggestions;
}
+ /**
+ * @param array $a
+ * @param array $b
+ * @return int
+ */
protected static function qualitySort( $a, $b ) {
- list( $c, $d ) = array( $a['quality'], $b['quality'] );
+ list( $c, $d ) = [ $a['quality'], $b['quality'] ];
if ( $c === $d ) {
return 0;
}
@@ -108,7 +126,7 @@ class TTMServer {
$prevRow = range( 0, $length2 );
for ( $i = 0; $i < $length1; $i++ ) {
- $currentRow = array();
+ $currentRow = [];
$currentRow[0] = $i + 1;
$c1 = mb_substr( $str1, $i, 1 );
for ( $j = 0; $j < $length2; $j++ ) {
@@ -124,31 +142,66 @@ class TTMServer {
return $prevRow[$length2];
}
- /// Hook: ArticleDeleteComplete
+ /**
+ * Hook: ArticleDeleteComplete
+ * @param WikiPage $wikipage
+ */
public static function onDelete( WikiPage $wikipage ) {
$handle = new MessageHandle( $wikipage->getTitle() );
- TTMServer::primary()->update( $handle, null );
-
- return true;
+ $job = TTMServerMessageUpdateJob::newJob( $handle, 'delete' );
+ JobQueueGroup::singleton()->push( $job );
}
- /// Called from TranslateEditAddons::onSave
- public static function onChange( MessageHandle $handle, $text, $fuzzy ) {
- if ( $fuzzy ) {
- $text = null;
- }
- TTMServer::primary()->update( $handle, $text );
+ /**
+ * Called from TranslateEditAddons::onSave
+ * @param MessageHandle $handle
+ */
+ public static function onChange( MessageHandle $handle ) {
+ $job = TTMServerMessageUpdateJob::newJob( $handle, 'refresh' );
+ JobQueueGroup::singleton()->push( $job );
}
- public static function onGroupChange( MessageHandle $handle, $old, $new ) {
- if ( $old === array() ) {
+ /**
+ * @param MessageHandle $handle
+ * @param array $old
+ */
+ public static function onGroupChange( MessageHandle $handle, $old ) {
+ if ( $old === [] ) {
// Don't bother for newly added messages
- return true;
+ return;
}
- $job = TTMServerMessageUpdateJob::newJob( $handle );
+ $job = TTMServerMessageUpdateJob::newJob( $handle, 'rebuild' );
JobQueueGroup::singleton()->push( $job );
+ }
- return true;
+ /**
+ * @return string[]
+ */
+ public function getMirrors() {
+ global $wgTranslateTranslationServices;
+ if ( isset( $this->config['mirrors'] ) ) {
+ $mirrors = [];
+ foreach ( $this->config['mirrors'] as $name ) {
+ if ( !is_string( $name ) ) {
+ throw new TTMServerException( "Invalid configuration set in " .
+ "mirrors, expected an array of strings" );
+ }
+ if ( !isset( $wgTranslateTranslationServices[$name] ) ) {
+ throw new TTMServerException( "Invalid configuration in " .
+ "mirrors, unknown service $name" );
+ }
+ $mirrors[$name] = true;
+ }
+ return array_keys( $mirrors );
+ }
+ return [];
+ }
+
+ /**
+ * @return bool
+ */
+ public function isFrozen() {
+ return false;
}
}
diff --git a/www/wiki/extensions/Translate/ttmserver/TTMServerMessageUpdateJob.php b/www/wiki/extensions/Translate/ttmserver/TTMServerMessageUpdateJob.php
index 9f10e734..7a6a91d7 100644
--- a/www/wiki/extensions/Translate/ttmserver/TTMServerMessageUpdateJob.php
+++ b/www/wiki/extensions/Translate/ttmserver/TTMServerMessageUpdateJob.php
@@ -4,22 +4,58 @@
*
* @file
* @author Niklas Laxström
- * @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
+use MediaWiki\Logger\LoggerFactory;
+
/**
* Job for updating translation memory.
*
+ * job params:
+ * - command: the command to run, defaults to 'rebuild'
+ * - service: the service to write to, if set to null the job will write
+ * to the default (primary) service and its replicas.
+ * - errorCount: number of errors encountered while trying to perform the write
+ * on this service
+ *
+ * This job handles retries itself and return false in allowRetries to disable
+ * JobQueue's internal retry service.
+ *
+ * If mirroring is activated on the primary service then the first job
+ * will try to write to all services, it will resend a new job to
+ * every single service that failed and will increment errorCount.
+ * When too many errors occur on single service the job is dropped.
+ *
* @ingroup JobQueue
*/
class TTMServerMessageUpdateJob extends Job {
/**
+ * Number of *retries* allowed, 4 means we attempt
+ * to run the job 5 times (1 initial attempt + 4 retries).
+ */
+ const MAX_ERROR_RETRY = 4;
+
+ /**
+ * Constant used by backoffDelay().
+ * With 7 the cumulative delay between the first and last attempt is
+ * between 8 and 33 minutes.
+ */
+ const WRITE_BACKOFF_EXPONENT = 7;
+
+ /**
+ * The maximum amount of time jobs delayed due to frozen services can remain
+ * in the job queue.
+ */
+ const DROP_DELAYED_JOBS_AFTER = 86400; // 60 * 60 * 24 * 1;
+
+ /**
* @param MessageHandle $handle
- * @return TTMServerMessageUpdateJob
+ * @param string $command
+ * @return self
*/
- public static function newJob( MessageHandle $handle ) {
- $job = new self( $handle->getTitle() );
+ public static function newJob( MessageHandle $handle, $command ) {
+ $job = new self( $handle->getTitle(), [ 'command' => $command ] );
return $job;
}
@@ -27,24 +63,285 @@ class TTMServerMessageUpdateJob extends Job {
/**
* @param Title $title
* @param array $params
- * @param int $id
*/
- public function __construct( $title, $params = array(), $id = 0 ) {
- parent::__construct( __CLASS__, $title, $params, $id );
+ public function __construct( $title, $params = [] ) {
+ parent::__construct(
+ __CLASS__,
+ $title,
+ $params + [
+ 'command' => 'rebuild',
+ 'service' => null,
+ 'errorCount' => 0,
+ 'createdAt' => time(),
+ 'retryCount' => 0,
+ ]
+ );
}
/**
* Fetch all the translations and update them.
+ * @return bool
*/
public function run() {
- $handle = new MessageHandle( $this->title );
+ global $wgTranslateTranslationServices,
+ $wgTranslateTranslationDefaultService;
+
+ $service = $this->params['service'];
+ $writeToMirrors = false;
+
+ if ( $service === null ) {
+ $service = $wgTranslateTranslationDefaultService;
+ $writeToMirrors = true;
+ }
+
+ if ( !isset( $wgTranslateTranslationServices[$service] ) ) {
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->warning(
+ 'Received update job for a an unknown service {service}.',
+ [ 'service' => $service ]
+ );
+ return true;
+ }
+
+ $services = [ $service ];
+ if ( $writeToMirrors ) {
+ $config = $wgTranslateTranslationServices[$service];
+ $server = TTMServer::factory( $config );
+ $services = array_unique(
+ array_merge( $services, $server->getMirrors() )
+ );
+ }
+
+ foreach ( $services as $service ) {
+ $this->runCommandWithRetry( $service );
+ }
+ return true;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function allowRetries() {
+ return false;
+ }
+
+ /**
+ * Run the update on the specified service name.
+ *
+ * @param string $serviceName the service name
+ */
+ private function runCommandWithRetry( $serviceName ) {
+ global $wgTranslateTranslationServices;
+
+ if ( !isset( $wgTranslateTranslationServices[$serviceName] ) ) {
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->warning(
+ 'Cannot write to {service}: service is unknown.',
+ [ 'service' => $serviceName ]
+ );
+ return;
+ }
+ $ttmserver = TTMServer::factory( $wgTranslateTranslationServices[$serviceName] );
+
+ if ( $serviceName === null || !( $ttmserver instanceof WritableTTMServer ) ) {
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->warning(
+ 'Received update job for a service that does not implement ' .
+ 'WritableTTMServer, please check config for {service}.',
+ [ 'service' => $serviceName ]
+ );
+ return;
+ }
+
+ try {
+ if ( $ttmserver->isFrozen() ) {
+ $this->requeueRetry( $serviceName );
+ } else {
+ $this->runCommand( $ttmserver );
+ }
+ } catch ( \Exception $e ) {
+ $this->requeueError( $serviceName, $e );
+ }
+ }
+
+ /**
+ * @param string $serviceName the service in error
+ * @param Exception $e the error
+ */
+ private function requeueError( $serviceName, $e ) {
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->warning(
+ 'Exception thrown while running {command} on ' .
+ 'service {service}: {errorMessage}',
+ [
+ 'command' => $this->params['command'],
+ 'service' => $serviceName,
+ 'errorMessage' => $e->getMessage(),
+ 'exception' => $e,
+ ]
+ );
+ if ( $this->params['errorCount'] >= self::MAX_ERROR_RETRY ) {
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->warning(
+ 'Dropping failing job {command} for service {service} ' .
+ 'after repeated failure',
+ [
+ 'command' => $this->params['command'],
+ 'service' => $serviceName,
+ ]
+ );
+ return;
+ }
+
+ $delay = self::backoffDelay( $this->params['errorCount'] );
+ $job = clone $this;
+ $job->params['errorCount']++;
+ $job->params['service'] = $serviceName;
+ $job->setDelay( $delay );
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->info(
+ 'Update job reported failure on service {service}. ' .
+ 'Requeueing job with delay of {delay}.',
+ [
+ 'service' => $serviceName,
+ 'delay' => $delay
+ ]
+ );
+ $this->resend( $job );
+ }
+
+ /**
+ * Re-queue job that is frozen, or drop the job if it has
+ * been frozen for too long.
+ *
+ * @param string $serviceName
+ */
+ private function requeueRetry( $serviceName ) {
+ $diff = time() - $this->params['createdAt'];
+ $dropTimeout = self::DROP_DELAYED_JOBS_AFTER;
+ if ( $diff > $dropTimeout ) {
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->warning(
+ 'Dropping delayed job {command} for service {service} ' .
+ 'after waiting {diff}s',
+ [
+ 'command' => $this->params['command'],
+ 'service' => $serviceName,
+ 'diff' => $diff,
+ ]
+ );
+ } else {
+ $delay = self::backoffDelay( $this->params['retryCount'] );
+ $job = clone $this;
+ $job->params['retryCount']++;
+ $job->params['service'] = $serviceName;
+ $job->setDelay( $delay );
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->debug(
+ 'Service {service} reported frozen. ' .
+ 'Requeueing job with delay of {delay}s',
+ [
+ 'service' => $serviceName,
+ 'delay' => $delay
+ ]
+ );
+ $this->resend( $job );
+ }
+ }
+
+ /**
+ * Extracted for testing purpose
+ * @param self $job
+ */
+ protected function resend( self $job ) {
+ JobQueueGroup::singleton()->push( $job );
+ }
+
+ private function runCommand( WritableTTMServer $ttmserver ) {
+ $handle = $this->getHandle();
+ $command = $this->params['command'];
+
+ if ( $command === 'delete' ) {
+ $this->updateItem( $ttmserver, $handle, null, false );
+ } elseif ( $command === 'rebuild' ) {
+ $this->updateMessage( $ttmserver, $handle );
+ } elseif ( $command === 'refresh' ) {
+ $this->updateTranslation( $ttmserver, $handle );
+ }
+ }
+
+ /**
+ * Extracted for testing purpose
+ *
+ * @return MessageHandle
+ */
+ protected function getHandle() {
+ return new MessageHandle( $this->title );
+ }
+
+ /**
+ * Extracted for testing purpose
+ *
+ * @param MessageHandle $handle
+ * @return string
+ */
+ protected function getTranslation( MessageHandle $handle ) {
+ return TranslateUtils::getMessageContent(
+ $handle->getKey(),
+ $handle->getCode(),
+ $handle->getTitle()->getNamespace()
+ );
+ }
+
+ private function updateMessage( WritableTTMServer $ttmserver, MessageHandle $handle ) {
+ // Base page update, e.g. group change. Update everything.
$translations = ApiQueryMessageTranslations::getTranslations( $handle );
foreach ( $translations as $page => $data ) {
$tTitle = Title::makeTitle( $this->title->getNamespace(), $page );
$tHandle = new MessageHandle( $tTitle );
- TTMServer::onChange( $tHandle, $data[0], $tHandle->isFuzzy() );
+ $this->updateItem( $ttmserver, $tHandle, $data[0], $tHandle->isFuzzy() );
}
+ }
- return true;
+ private function updateTranslation( WritableTTMServer $ttmserver, MessageHandle $handle ) {
+ // Update only this translation
+ $translation = $this->getTranslation( $handle );
+ $this->updateItem( $ttmserver, $handle, $translation, $handle->isFuzzy() );
+ }
+
+ private function updateItem( WritableTTMServer $ttmserver, MessageHandle $handle, $text, $fuzzy ) {
+ if ( $fuzzy ) {
+ $text = null;
+ }
+ $ttmserver->update( $handle, $text );
+ }
+
+ /**
+ * Set a delay for this job. Note that this might not be possible, the JobQueue
+ * implementation handling this job doesn't support it (JobQueueDB) but is possible
+ * for the high performance JobQueueRedis. Note also that delays are minimums -
+ * at least JobQueueRedis makes no effort to remove the delay as soon as possible
+ * after it has expired. By default it only checks every five minutes or so.
+ * Note yet again that if another delay has been set that is longer then this one
+ * then the _longer_ delay stays.
+ *
+ * @param int $delay seconds to delay this job if possible
+ */
+ public function setDelay( $delay ) {
+ $jobQueue = JobQueueGroup::singleton()->get( $this->getType() );
+ if ( !$delay || !$jobQueue->delayedJobsEnabled() ) {
+ return;
+ }
+ $oldTime = $this->getReleaseTimestamp();
+ $newTime = time() + $delay;
+ if ( $oldTime !== null && $oldTime >= $newTime ) {
+ return;
+ }
+ $this->params[ 'jobReleaseTimestamp' ] = $newTime;
+ }
+
+ /**
+ * @param int $retryCount The number of times the job has errored out.
+ * @return int Number of seconds to delay. With the default minimum exponent
+ * of 6 the possible return values are 64, 128, 256, 512 and 1024 giving a
+ * maximum delay of 17 minutes.
+ */
+ public static function backoffDelay( $retryCount ) {
+ return ceil( pow(
+ 2,
+ static::WRITE_BACKOFF_EXPONENT + rand( 0, min( $retryCount, 4 ) )
+ ) );
}
}
diff --git a/www/wiki/extensions/Translate/utils/ArrayFlattener.php b/www/wiki/extensions/Translate/utils/ArrayFlattener.php
index 8845ef1c..c5e61769 100644
--- a/www/wiki/extensions/Translate/utils/ArrayFlattener.php
+++ b/www/wiki/extensions/Translate/utils/ArrayFlattener.php
@@ -1,28 +1,43 @@
<?php
/**
- * Support for JSON message file format.
+ * Flattens message arrays for further processing. Supports parsing CLDR
+ * plural messages and converting them into MediaWiki's {{PLURAL}} syntax
+ * in a single message.
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @author Erik Moeller
+ * @license GPL-2.0-or-later
* @since 2016.01
*/
class ArrayFlattener {
protected $sep;
+ protected $parseCLDRPlurals;
- public function __construct( $sep = '.' ) {
+ // For CLDR pluralization rules
+ protected static $pluralWords = [
+ 'zero' => 1,
+ 'one' => 1,
+ 'many' => 1,
+ 'few' => 1,
+ 'other' => 1,
+ 'two' => 1
+ ];
+
+ public function __construct( $sep = '.', $parseCLDRPlurals = false ) {
$this->sep = $sep;
+ $this->parseCLDRPlurals = $parseCLDRPlurals;
}
/**
* Flattens multidimensional array.
*
- * @param array $unflat It's an array.
+ * @param array $unflat Array of messages
* @return array
*/
public function flatten( array $unflat ) {
- $flat = array();
+ $flat = [];
foreach ( $unflat as $key => $value ) {
if ( !is_array( $value ) ) {
@@ -30,14 +45,21 @@ class ArrayFlattener {
continue;
}
- // Placeholder for special plural processing
+ $plurals = false;
+ if ( $this->parseCLDRPlurals ) {
+ $plurals = $this->flattenCLDRPlurals( $value );
+ }
- $temp = array();
- foreach ( $value as $subKey => $subValue ) {
- $newKey = "$key{$this->sep}$subKey";
- $temp[$newKey] = $subValue;
+ if ( $this->parseCLDRPlurals && $plurals ) {
+ $flat[$key] = $plurals;
+ } else {
+ $temp = [];
+ foreach ( $value as $subKey => $subValue ) {
+ $newKey = "$key{$this->sep}$subKey";
+ $temp[$newKey] = $subValue;
+ }
+ $flat += $this->flatten( $temp );
}
- $flat += $this->flatten( $temp );
// Can as well keep only one copy around.
unset( $unflat[$key] );
@@ -47,13 +69,82 @@ class ArrayFlattener {
}
/**
+ * Flattens arrays that contain CLDR plural keywords into single values using
+ * MediaWiki's plural syntax.
+ *
+ * @param array $messages Array of messages
+ *
+ * @throws MWException
+ * @return bool|string
+ */
+ public function flattenCLDRPlurals( $messages ) {
+ $pluralKeys = false;
+ $nonPluralKeys = false;
+ foreach ( $messages as $key => $value ) {
+ if ( is_array( $value ) ) {
+ // Plurals can only happen in the lowest level of the structure
+ return false;
+ }
+
+ // Check if we find any reserved plural keyword
+ if ( isset( self::$pluralWords[$key] ) ) {
+ $pluralKeys = true;
+ } else {
+ $nonPluralKeys = true;
+ }
+ }
+
+ // No plural keys at all, we can skip
+ if ( !$pluralKeys ) {
+ return false;
+ }
+
+ // Mixed plural keys with other keys, should not happen
+ if ( $nonPluralKeys ) {
+ $keys = implode( ', ', array_keys( $messages ) );
+ throw new MWException( "Reserved plural keywords mixed with other keys: $keys." );
+ }
+
+ $pls = '{{PLURAL';
+ foreach ( $messages as $key => $value ) {
+ if ( $key === 'other' ) {
+ continue;
+ }
+
+ $pls .= "|$key=$value";
+ }
+
+ // Put the "other" alternative last, without other= prefix.
+ $other = isset( $messages['other'] ) ? '|' . $messages['other'] : '';
+ $pls .= "$other}}";
+
+ return $pls;
+ }
+
+ /**
* Performs the reverse operation of flatten.
*
- * @param array $flat It's an array
+ * @param array $flat Array of messages
* @return array
*/
public function unflatten( $flat ) {
- $unflat = array();
+ $unflat = [];
+
+ if ( $this->parseCLDRPlurals ) {
+ $unflattenedPlurals = [];
+ foreach ( $flat as $key => $value ) {
+ $plurals = false;
+ if ( !is_array( $value ) ) {
+ $plurals = $this->unflattenCLDRPlurals( $key, $value );
+ }
+ if ( $plurals ) {
+ $unflattenedPlurals += $plurals;
+ } else {
+ $unflattenedPlurals[$key] = $value;
+ }
+ }
+ $flat = $unflattenedPlurals;
+ }
foreach ( $flat as $key => $value ) {
$path = explode( $this->sep, $key );
@@ -67,7 +158,7 @@ class ArrayFlattener {
/// Extract the level and make sure it exists.
$level = array_shift( $path );
if ( !isset( $pointer[$level] ) ) {
- $pointer[$level] = array();
+ $pointer[$level] = [];
}
/// Update the pointer to the new reference.
@@ -86,4 +177,121 @@ class ArrayFlattener {
return $unflat;
}
+
+ /**
+ * Converts the MediaWiki plural syntax to array of CLDR style plurals
+ *
+ * @param string $key Message key prefix
+ * @param string $message The plural string
+ *
+ * @return bool|array
+ */
+ public function unflattenCLDRPlurals( $key, $message ) {
+ // Quick escape.
+ if ( strpos( $message, '{{PLURAL' ) === false ) {
+ return false;
+ }
+
+ /*
+ * Replace all variables with placeholders. Possible source of bugs
+ * if other characters that given below are used.
+ */
+ $regex = '~\{[a-zA-Z_-]+}~';
+ $placeholders = [];
+ $match = [];
+
+ while ( preg_match( $regex, $message, $match ) ) {
+ $uniqkey = TranslateUtils::getPlaceholder();
+ $placeholders[$uniqkey] = $match[0];
+ $search = preg_quote( $match[0], '~' );
+ $message = preg_replace( "~$search~", $uniqkey, $message );
+ }
+
+ // Then replace (possible multiple) plural instances into placeholders.
+ $regex = '~\{\{PLURAL\|(.*?)}}~s';
+ $matches = [];
+ $match = [];
+
+ while ( preg_match( $regex, $message, $match ) ) {
+ $uniqkey = TranslateUtils::getPlaceholder();
+ $matches[$uniqkey] = $match;
+ $message = preg_replace( $regex, $uniqkey, $message, 1 );
+ }
+
+ // No plurals, should not happen.
+ if ( !count( $matches ) ) {
+ return false;
+ }
+
+ // The final array of alternative plurals forms.
+ $alts = [];
+
+ /*
+ * Then loop trough each plural block and replacing the placeholders
+ * to construct the alternatives. Produces invalid output if there is
+ * multiple plural bocks which don't have the same set of keys.
+ */
+ $pluralChoice = implode( '|', array_keys( self::$pluralWords ) );
+ $regex = "~($pluralChoice)\s*=\s*(.+)~s";
+ foreach ( $matches as $ph => $plu ) {
+ $forms = explode( '|', $plu[1] );
+
+ foreach ( $forms as $form ) {
+ if ( $form === '' ) {
+ continue;
+ }
+
+ $match = [];
+ if ( preg_match( $regex, $form, $match ) ) {
+ $formWord = "$key{$this->sep}{$match[1]}";
+ $value = $match[2];
+ } else {
+ $formWord = "$key{$this->sep}other";
+ $value = $form;
+ }
+
+ if ( !isset( $alts[$formWord] ) ) {
+ $alts[$formWord] = $message;
+ }
+
+ $string = $alts[$formWord];
+ $alts[$formWord] = str_replace( $ph, $value, $string );
+ }
+ }
+
+ // Replace other variables.
+ foreach ( $alts as &$value ) {
+ $value = str_replace( array_keys( $placeholders ), array_values( $placeholders ), $value );
+ }
+
+ if ( !isset( $alts["$key{$this->sep}other"] ) ) {
+ wfWarn( "Other not set for key $key" );
+ }
+
+ return $alts;
+ }
+
+ /**
+ * Compares two strings for equal content, taking PLURAL expansion into account.
+ *
+ * @param string $a
+ * @param string $b
+ * @return bool Whether two strings are equal
+ */
+ public function compareContent( $a, $b ) {
+ if ( !$this->parseCLDRPlurals ) {
+ return $a === $b;
+ }
+
+ $a2 = $this->unflattenCLDRPlurals( 'prefix', $a );
+ $b2 = $this->unflattenCLDRPlurals( 'prefix', $b );
+
+ // Fall back to regular comparison if parsing fails.
+ if ( $a2 === false || $b2 === false ) {
+ return $a === $b;
+ }
+
+ // Require key-value pairs to match, but ignore order and types (all should be strings).
+ return $a2 == $b2;
+ }
}
diff --git a/www/wiki/extensions/Translate/utils/ExternalMessageSourceStateComparator.php b/www/wiki/extensions/Translate/utils/ExternalMessageSourceStateComparator.php
index 56de79de..02407fd8 100644
--- a/www/wiki/extensions/Translate/utils/ExternalMessageSourceStateComparator.php
+++ b/www/wiki/extensions/Translate/utils/ExternalMessageSourceStateComparator.php
@@ -4,14 +4,14 @@
* Finds external changes for file based message groups.
*
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @since 2013.12
*/
class ExternalMessageSourceStateComparator {
/** Process all languages supported by the message group */
const ALL_LANGUAGES = 'all languages';
- protected $changes = array();
+ protected $changes = [];
/**
* Finds changes in external sources compared to wiki state.
@@ -33,9 +33,11 @@ class ExternalMessageSourceStateComparator {
* @return array array[language code][change type] = change.
*/
public function processGroup( FileBasedMessageGroup $group, $languages ) {
- $this->changes = array();
+ $this->changes = [];
+ $processAll = false;
if ( $languages === self::ALL_LANGUAGES ) {
+ $processAll = true;
$languages = $group->getTranslatableLanguages();
// This means all languages
@@ -48,10 +50,13 @@ class ExternalMessageSourceStateComparator {
throw new MWException( 'Invalid input given for $languages' );
}
- // Process the source language before others
+ // Process the source language before others. Source language might not
+ // be included in $group->getTranslatableLanguages(). The expected
+ // behavior is that source language is always processed when given
+ // self::ALL_LANGUAGES.
$sourceLanguage = $group->getSourceLanguage();
$index = array_search( $sourceLanguage, $languages );
- if ( $index !== false ) {
+ if ( $processAll || $index !== false ) {
unset( $languages[$index] );
$this->processLanguage( $group, $sourceLanguage );
}
@@ -104,9 +109,9 @@ class ExternalMessageSourceStateComparator {
) {
/* This throws a warning if message definitions are not yet
* cached and will read the file for definitions. */
- wfSuppressWarnings();
+ Wikimedia\suppressWarnings();
$wiki = $group->initCollection( $code );
- wfRestoreWarnings();
+ Wikimedia\restoreWarnings();
$wiki->filter( 'hastranslation', false );
$wiki->loadTranslations();
$wikiKeys = $wiki->getMessageKeys();
@@ -123,7 +128,6 @@ class ExternalMessageSourceStateComparator {
// Does not exist
if ( $file === false ) {
-
return;
}
@@ -149,6 +153,7 @@ class ExternalMessageSourceStateComparator {
$wikiMessage = $wiki[$key];
$wikiContent = $wikiMessage->translation();
+ // @todo: Fuzzy checking can also be moved to $ffs->isContentEqual();
// If FFS doesn't support it, ignore fuzziness as difference
$wikiContent = str_replace( TRANSLATE_FUZZY, '', $wikiContent );
@@ -157,7 +162,7 @@ class ExternalMessageSourceStateComparator {
$wikiContent = TRANSLATE_FUZZY . $wikiContent;
}
- if ( self::compareContent( $sourceContent, $wikiContent ) ) {
+ if ( $ffs->isContentEqual( $sourceContent, $wikiContent ) ) {
// File and wiki stage agree, nothing to do
continue;
}
@@ -173,8 +178,8 @@ class ExternalMessageSourceStateComparator {
* Hence we check that source === cache && cache !== wiki
* and if so we skip this string. */
if (
- !self::compareContent( $wikiContent, $cacheContent ) &&
- self::compareContent( $sourceContent, $cacheContent )
+ !$ffs->isContentEqual( $wikiContent, $cacheContent ) &&
+ $ffs->isContentEqual( $sourceContent, $cacheContent )
) {
continue;
}
@@ -207,26 +212,12 @@ class ExternalMessageSourceStateComparator {
$this->addChange( 'deletion', $code, $key, null );
}
}
-
}
protected function addChange( $type, $language, $key, $content ) {
- $this->changes[$language][$type][] = array(
+ $this->changes[$language][$type][] = [
'key' => $key,
'content' => $content,
- );
- }
-
- /**
- * Compares two strings.
- * @todo Ignore changes in different way inlined plurals.
- * @todo Handle fuzzy state changes if FFS supports it.
- *
- * @param string $a
- * @param string $b
- * @return bool Whether two strings are equal
- */
- protected static function compareContent( $a, $b ) {
- return $a === $b;
+ ];
}
}
diff --git a/www/wiki/extensions/Translate/utils/ExternalMessageSourceStateImporter.php b/www/wiki/extensions/Translate/utils/ExternalMessageSourceStateImporter.php
index ba346a98..495c3fd7 100644
--- a/www/wiki/extensions/Translate/utils/ExternalMessageSourceStateImporter.php
+++ b/www/wiki/extensions/Translate/utils/ExternalMessageSourceStateImporter.php
@@ -4,15 +4,15 @@
* Finds external changes for file based message groups.
*
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @since 2016.02
*/
class ExternalMessageSourceStateImporter {
public function importSafe( $changeData ) {
- $processed = array();
- $skipped = array();
- $jobs = array();
+ $processed = [];
+ $skipped = [];
+ $jobs = [];
$jobs[] = MessageIndexRebuildJob::newJob();
foreach ( $changeData as $groupId => $changesForGroup ) {
@@ -65,11 +65,11 @@ class ExternalMessageSourceStateImporter {
MessageChangeStorage::writeChanges( $changeData, $file );
JobQueueGroup::singleton()->push( $jobs );
- return array(
+ return [
'processed' => $processed,
'skipped' => $skipped,
'name' => $name,
- );
+ ];
}
protected static function isSafe( array $changesForLanguage ) {
diff --git a/www/wiki/extensions/Translate/utils/Font.php b/www/wiki/extensions/Translate/utils/Font.php
index 02925721..37fa4ac7 100644
--- a/www/wiki/extensions/Translate/utils/Font.php
+++ b/www/wiki/extensions/Translate/utils/Font.php
@@ -4,8 +4,7 @@
*
* @author Niklas Laxström
* @author Harry Burt
- * @copyright Copyright © 2008-2013, Niklas Laxström
- * @license Public Domain
+ * @license Unlicense
* @file
*/
@@ -19,7 +18,7 @@
class FCFontFinder {
/**
* Searches for suitable font in the system.
- * @param $code \string Language code.
+ * @param string $code Language code.
* @return bool|string Full path to the font file, false on failure
*/
public static function findFile( $code ) {
@@ -33,7 +32,7 @@ class FCFontFinder {
/**
* Searches for suitable font family in the system.
- * @param $code \string Language code.
+ * @param string $code Language code.
* @return bool|string Name of font family, false on failure
*/
public static function findFamily( $code ) {
@@ -79,7 +78,7 @@ class FCFontFinder {
}
$pattern = '/^(.*?): "(.*)" "(.*)"$/';
- $matches = array();
+ $matches = [];
if ( !preg_match( $pattern, $suggestion, $matches ) ) {
wfDebugLog( 'fcfont', "fc-match: return format not understood: $suggestion" );
@@ -119,11 +118,11 @@ class FCFontFinder {
wfDebugLog( 'fcfont', "fc-list got $count candidates; using $chosen" );
- $data = array(
+ $data = [
'family' => $family,
'type' => $type,
'file' => $chosen,
- );
+ ];
$cache->set( $cachekey, $data, $timeout );
diff --git a/www/wiki/extensions/Translate/utils/FuzzyBot.php b/www/wiki/extensions/Translate/utils/FuzzyBot.php
index e9992117..093e39e1 100644
--- a/www/wiki/extensions/Translate/utils/FuzzyBot.php
+++ b/www/wiki/extensions/Translate/utils/FuzzyBot.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -14,12 +14,7 @@
*/
class FuzzyBot {
public static function getUser() {
- $bot = User::newFromName( self::getName() );
- if ( $bot->isAnon() ) {
- $bot->addToDatabase();
- }
-
- return $bot;
+ return User::newSystemUser( self::getName(), [ 'steal' => true ] );
}
public static function getName() {
diff --git a/www/wiki/extensions/Translate/utils/HTMLJsSelectToInputField.php b/www/wiki/extensions/Translate/utils/HTMLJsSelectToInputField.php
index 1f53af6a..57f4443c 100644
--- a/www/wiki/extensions/Translate/utils/HTMLJsSelectToInputField.php
+++ b/www/wiki/extensions/Translate/utils/HTMLJsSelectToInputField.php
@@ -4,7 +4,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2010 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -12,10 +12,10 @@
*/
class HTMLJsSelectToInputField extends HTMLTextField {
/**
- * @param $value
+ * @param string $value
* @return string
*/
- function getInputHTML( $value ) {
+ public function getInputHTML( $value ) {
$input = parent::getInputHTML( $value );
if ( isset( $this->mParams['select'] ) ) {
@@ -30,7 +30,7 @@ class HTMLJsSelectToInputField extends HTMLTextField {
}
/**
- * @param $value
+ * @param string $value
* @return array
*/
protected function tidy( $value ) {
@@ -41,11 +41,11 @@ class HTMLJsSelectToInputField extends HTMLTextField {
}
/**
- * @param $value
- * @param $alldata
- * @return bool|String
+ * @param string $value
+ * @param array $alldata
+ * @return bool|string
*/
- function validate( $value, $alldata ) {
+ public function validate( $value, $alldata ) {
$p = parent::validate( $value, $alldata );
if ( $p !== true ) {
@@ -73,11 +73,11 @@ class HTMLJsSelectToInputField extends HTMLTextField {
}
/**
- * @param $value
- * @param $alldata
+ * @param string $value
+ * @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/www/wiki/extensions/Translate/utils/JsSelectToInput.php b/www/wiki/extensions/Translate/utils/JsSelectToInput.php
index 3016f92b..24f30bc1 100644
--- a/www/wiki/extensions/Translate/utils/JsSelectToInput.php
+++ b/www/wiki/extensions/Translate/utils/JsSelectToInput.php
@@ -4,7 +4,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2010 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -34,14 +34,8 @@ class JsSelectToInput {
}
/**
- * Set the source id of the selector
- * @param string $id
+ * @return string
*/
- public function setSourceId( $id ) {
- $this->sourceId = $id;
- }
-
- /// @return string
public function getSourceId() {
return $this->sourceId;
}
@@ -69,7 +63,9 @@ class JsSelectToInput {
$this->msg = $message;
}
- /// @return string Message key.
+ /**
+ * @return string Message key.
+ */
public function getMessage() {
return $this->msg;
}
@@ -80,14 +76,10 @@ class JsSelectToInput {
* @return string Html code.
*/
public function getHtmlAndPrepareJS() {
- if ( $this->sourceId === false ) {
- if ( is_callable( array( $this->select, 'getAttribute' ) ) ) {
- $this->sourceId = $this->select->getAttribute['id'];
- }
-
- if ( !$this->sourceId ) {
- throw new MWException( 'ID needs to be specified for the selector' );
- }
+ $this->sourceId = $this->select->getAttribute( 'id' );
+
+ if ( !is_string( $this->sourceId ) ) {
+ throw new MWException( 'ID needs to be specified for the selector' );
}
self::injectJs();
@@ -105,16 +97,18 @@ class JsSelectToInput {
* @return string
*/
protected function getButton( $msg, $source, $target ) {
- $html = Xml::element( 'input', array(
+ $html = Xml::element( 'input', [
'type' => 'button',
'value' => wfMessage( $msg )->text(),
- 'onclick' => Xml::encodeJsCall( 'appendFromSelect', array( $source, $target ) )
- ) );
+ 'onclick' => Xml::encodeJsCall( 'appendFromSelect', [ $source, $target ] )
+ ] );
return $html;
}
- /// Inject needed JavaScript in the page.
+ /**
+ * Inject needed JavaScript in the page.
+ */
public static function injectJs() {
static $done = false;
if ( $done ) {
diff --git a/www/wiki/extensions/Translate/utils/MemProfile.php b/www/wiki/extensions/Translate/utils/MemProfile.php
index cc2aac35..7ebc3423 100644
--- a/www/wiki/extensions/Translate/utils/MemProfile.php
+++ b/www/wiki/extensions/Translate/utils/MemProfile.php
@@ -8,17 +8,17 @@ if ( !defined( 'MEDIAWIKI' ) ) {
* @file
* @author Niklas Laxström
* @copyright Copyright © 2008, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/// Memory usage at checkpoints
-$wgMemUse = array();
+$wgMemUse = [];
/// Tracks the deepness of the stack
$wgMemStack = 0;
/**
* Call to start memory counting for a block.
- * @param $a \string Block name.
+ * @param string $a Block name.
*/
function wfMemIn( $a ) {
global $wgLang, $wgMemUse, $wgMemStack;
@@ -26,7 +26,7 @@ function wfMemIn( $a ) {
$mem = memory_get_usage();
$memR = memory_get_usage();
- $wgMemUse[$a][] = array( $mem, $memR );
+ $wgMemUse[$a][] = [ $mem, $memR ];
$memF = $wgLang->formatNum( $mem );
$memRF = $wgLang->formatNum( $memR );
@@ -38,7 +38,7 @@ function wfMemIn( $a ) {
/**
* Call to start stop counting for a block. Difference from start is shown.
- * @param $a \string Block name.
+ * @param string $a Block name.
*/
function wfMemOut( $a ) {
global $wgLang, $wgMemUse, $wgMemStack;
diff --git a/www/wiki/extensions/Translate/utils/MessageChangeStorage.php b/www/wiki/extensions/Translate/utils/MessageChangeStorage.php
index e32cc857..5c23a3a6 100644
--- a/www/wiki/extensions/Translate/utils/MessageChangeStorage.php
+++ b/www/wiki/extensions/Translate/utils/MessageChangeStorage.php
@@ -3,7 +3,7 @@
* Handles storage of message change files.
*
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
* @since 2016.02
* @file
*/
diff --git a/www/wiki/extensions/Translate/utils/MessageGroupCache.php b/www/wiki/extensions/Translate/utils/MessageGroupCache.php
index d3080e4d..f0b9c4bd 100644
--- a/www/wiki/extensions/Translate/utils/MessageGroupCache.php
+++ b/www/wiki/extensions/Translate/utils/MessageGroupCache.php
@@ -4,7 +4,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2009-2013 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -26,7 +26,7 @@ class MessageGroupCache {
protected $group;
/**
- * @var CdbReader
+ * @var \Cdb\Reader
*/
protected $cache;
@@ -116,7 +116,7 @@ class MessageGroupCache {
$this->close(); // Close the reader instance just to be sure
$messages = $this->group->load( $this->code );
- if ( $messages === array() ) {
+ if ( $messages === [] ) {
if ( $this->exists() ) {
// Delete stale cache files
unlink( $this->getCacheFileName() );
@@ -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 ) );
@@ -149,7 +149,7 @@ class MessageGroupCache {
* Checks whether the cache still reflects the source file.
* It uses multiple conditions to speed up the checking from file
* modification timestamps to hashing.
- * @param int $reason
+ * @param int &$reason
* @return bool Whether the cache is up to date.
*/
public function isValid( &$reason ) {
@@ -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/www/wiki/extensions/Translate/utils/MessageGroupStates.php b/www/wiki/extensions/Translate/utils/MessageGroupStates.php
index 1838381c..de20f6c8 100644
--- a/www/wiki/extensions/Translate/utils/MessageGroupStates.php
+++ b/www/wiki/extensions/Translate/utils/MessageGroupStates.php
@@ -6,7 +6,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2012-2013 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -34,7 +34,7 @@ class MessageGroupStates {
if ( isset( $conf[self::CONDKEY] ) ) {
return $conf[self::CONDKEY];
} else {
- return array();
+ return [];
}
}
}
diff --git a/www/wiki/extensions/Translate/utils/MessageGroupStatesUpdaterJob.php b/www/wiki/extensions/Translate/utils/MessageGroupStatesUpdaterJob.php
index a788bb54..c40bc4ec 100644
--- a/www/wiki/extensions/Translate/utils/MessageGroupStatesUpdaterJob.php
+++ b/www/wiki/extensions/Translate/utils/MessageGroupStatesUpdaterJob.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -17,9 +17,8 @@ class MessageGroupStatesUpdaterJob extends Job {
/**
* @param Title $title
* @param array $params
- * @param int $id
*/
- public function __construct( $title, $params = array() ) {
+ public function __construct( $title, $params = [] ) {
parent::__construct( __CLASS__, $title, $params );
$this->removeDuplicates = true;
}
@@ -27,6 +26,8 @@ class MessageGroupStatesUpdaterJob extends Job {
/**
* Hook: TranslateEventTranslationReview
* and also on translation changes
+ * @param MessageHandle $handle
+ * @return true
*/
public static function onChange( MessageHandle $handle ) {
$job = self::newJob( $handle->getTitle() );
@@ -36,8 +37,8 @@ class MessageGroupStatesUpdaterJob extends Job {
}
/**
- * @param $title
- * @return MessageGroupStatesUpdaterJob
+ * @param Title $title
+ * @return self
*/
public static function newJob( $title ) {
$job = new self( $title );
@@ -68,7 +69,7 @@ class MessageGroupStatesUpdaterJob extends Job {
}
public static function getGroupsWithTransitions( MessageHandle $handle ) {
- $listeners = array();
+ $listeners = [];
foreach ( $handle->getGroupIds() as $id ) {
$group = MessageGroups::getGroup( $id );
diff --git a/www/wiki/extensions/Translate/utils/MessageGroupStats.php b/www/wiki/extensions/Translate/utils/MessageGroupStats.php
index a0128521..950f45f8 100644
--- a/www/wiki/extensions/Translate/utils/MessageGroupStats.php
+++ b/www/wiki/extensions/Translate/utils/MessageGroupStats.php
@@ -5,10 +5,12 @@
* @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+
+ * @license GPL-2.0-or-later
*/
+use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
+
/**
* This class abstract MessageGroup statistics calculation and storing.
* You can access stats easily per language or per group.
@@ -25,31 +27,20 @@ class MessageGroupStats {
const FUZZY = 2; ///< Array index
const PROOFREAD = 3; ///< Array index
- /**
- * @var float|null
- */
- protected static $timeStart = null;
-
- /**
- * @var float|null
- */
- protected static $limit = null;
+ /// 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;
/**
* @var array[]
*/
- protected static $updates = array();
+ protected static $updates = [];
/**
- * Set the maximum time statistics are calculated.
- * If the time limit is exceeded, the missing
- * entries will be null.
- * @param $limit float time in seconds
+ * @var string[]
*/
- public static function setTimeLimit( $limit ) {
- self::$timeStart = microtime( true );
- self::$limit = $limit;
- }
+ private static $languages;
/**
* Returns empty stats array. Useful because the number of elements
@@ -58,7 +49,7 @@ class MessageGroupStats {
* @since 2012-09-21
*/
public static function getEmptyStats() {
- return array( 0, 0, 0, 0 );
+ return [ 0, 0, 0, 0 ];
}
/**
@@ -68,66 +59,82 @@ class MessageGroupStats {
* @since 2013-01-02
*/
protected static function getUnknownStats() {
- return array( null, null, null, null );
+ 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 $id string Group id
- * @param $code string Language code
+ * @param string $id Group id
+ * @param string $code Language code
+ * @param int $flags Combination of FLAG_* constants.
* @return null[]|int[]
*/
- public static function forItem( $id, $code ) {
- $res = self::selectRowsIdLang( $id, $code );
- $stats = self::extractResults( $res );
-
- /* 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. */
+ public static function forItem( $id, $code, $flags = 0 ) {
$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 );
+ $stats[$id][$code] = self::forItemInternal( $stats, $group, $code, $flags );
}
- self::queueUpdates();
+ self::queueUpdates( $flags );
return $stats[$id][$code];
}
/**
* Returns stats for all groups in given language.
- * @param $code string Language code
- * @return Array
+ * @param string $code Language code
+ * @param int $flags Combination of FLAG_* constants.
+ * @return array[]
*/
- public static function forLanguage( $code ) {
- $stats = self::forLanguageInternal( $code );
- $flattened = 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;
}
/**
* Returns stats for all languages in given group.
- * @param $id string Group id
- * @return Array
+ * @param string $id Group id
+ * @param int $flags Combination of FLAG_* constants.
+ * @return array[]
*/
- public static function forGroup( $id ) {
+ public static function forGroup( $id, $flags = 0 ) {
$group = MessageGroups::getGroup( $id );
- if ( $group === null ) {
- return array();
+ if ( !self::isValidMessageGroup( $group ) ) {
+ return [];
}
- $stats = self::forGroupInternal( $group );
- self::queueUpdates();
+ $stats = self::forGroupInternal( $group, [], $flags );
+
+ self::queueUpdates( $flags );
return $stats[$id];
}
@@ -136,42 +143,105 @@ class MessageGroupStats {
* Returns stats for all group in all languages.
* Might be slow, might use lots of memory.
* Returns two dimensional array indexed by group and language.
- * @return Array
+ * @param int $flags Combination of FLAG_* constants.
+ * @return array[]
*/
- public static function forEverything() {
+ public static function forEverything( $flags = 0 ) {
$groups = MessageGroups::singleton()->getGroups();
- $stats = array();
+ $stats = [];
foreach ( $groups as $g ) {
- $stats = self::forGroupInternal( $g, $stats );
+ $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();
- $ids = $handle->getGroupIds();
- $dbw = wfGetDB( DB_MASTER );
- $conds = array( 'tgs_group' => $ids, '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 ) {
- if ( !count( $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 );
}
- $dbw = wfGetDB( DB_MASTER );
- $conds = array( 'tgs_group' => $id );
- $dbw->delete( self::TABLE, $conds, __METHOD__ );
- wfDebugLog( 'messagegroupstats', 'Cleared ' . serialize( $conds ) );
+ }
+
+ /**
+ * 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 );
+ }
+
+ /**
+ * 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;
+ }
+ }
+
+ 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 ) {
@@ -179,7 +249,7 @@ class MessageGroupStats {
return;
}
$dbw = wfGetDB( DB_MASTER );
- $conds = array( 'tgs_lang' => $code );
+ $conds = [ 'tgs_lang' => $code ];
$dbw->delete( self::TABLE, $conds, __METHOD__ );
wfDebugLog( 'messagegroupstats', 'Cleared ' . serialize( $conds ) );
}
@@ -193,23 +263,44 @@ class MessageGroupStats {
wfDebugLog( 'messagegroupstats', 'Cleared everything :(' );
}
- protected static function extractResults( $res, array $stats = array() ) {
+ /**
+ * Use this to extract results returned from selectRowsIdLang. You must pass the
+ * message group ids you want to retrieve. Entries that do not match are not returned.
+ *
+ * @param Traversable $res Database result object
+ * @param string[] $ids List of message group ids
+ * @param array[] $stats Optional array to append results to.
+ * @return array[]
+ */
+ protected static function extractResults( $res, array $ids, array $stats = [] ) {
+ // Map the internal ids back to real ids
+ $idmap = array_combine( array_map( 'self::getDatabaseIdForGroupId', $ids ), $ids );
+
foreach ( $res as $row ) {
- $stats[$row->tgs_group][$row->tgs_lang] = self::extractNumbers( $row );
+ if ( !isset( $idmap[$row->tgs_group] ) ) {
+ // Stale entry, ignore for now
+ // TODO: Schedule for purge
+ continue;
+ }
+
+ $realId = $idmap[$row->tgs_group];
+ $stats[$realId][$row->tgs_lang] = self::extractNumbers( $row );
}
return $stats;
}
- public static function update( MessageHandle $handle, array $changes = array() ) {
+ public static function update( MessageHandle $handle, array $changes = [] ) {
+ $dbids = array_map( 'self::getDatabaseIdForGroupId', $handle->getGroupIds() );
+
$dbw = wfGetDB( DB_MASTER );
- $conds = array(
- 'tgs_group' => $handle->getGroupIds(),
+ $conds = [
+ 'tgs_group' => $dbids,
'tgs_lang' => $handle->getCode(),
- );
+ ];
- $values = array();
- foreach ( array( 'total', 'translated', 'fuzzy', 'proofread' ) as $type ) {
+ $values = [];
+ foreach ( [ 'total', 'translated', 'fuzzy', 'proofread' ] as $type ) {
if ( isset( $changes[$type] ) ) {
$values[] = "tgs_$type=tgs_$type" .
self::stringifyNumber( $changes[$type] );
@@ -221,33 +312,36 @@ class MessageGroupStats {
/**
* Returns an array of needed database fields.
- * @param $row
+ * @param stdClass $row
* @return array
*/
protected static function extractNumbers( $row ) {
- return array(
+ return [
self::TOTAL => (int)$row->tgs_total,
self::TRANSLATED => (int)$row->tgs_translated,
self::FUZZY => (int)$row->tgs_fuzzy,
self::PROOFREAD => (int)$row->tgs_proofread,
- );
+ ];
}
/**
* @param string $code Language code
* @param array[] $stats
+ * @param int $flags Combination of FLAG_* constants.
* @return array[]
*/
- protected static function forLanguageInternal( $code, array $stats = array() ) {
- $res = self::selectRowsIdLang( null, $code );
- $stats = self::extractResults( $res, $stats );
-
+ protected static function forLanguageInternal( $code, array $stats = [], $flags ) {
$groups = MessageGroups::singleton()->getGroups();
+
+ $ids = array_keys( $groups );
+ $res = self::selectRowsIdLang( null, [ $code ], $flags );
+ $stats = self::extractResults( $res, $ids, $stats );
+
foreach ( $groups as $id => $group ) {
if ( isset( $stats[$id][$code] ) ) {
continue;
}
- $stats[$id][$code] = self::forItemInternal( $stats, $group, $code );
+ $stats[$id][$code] = self::forItemInternal( $stats, $group, $code, $flags );
}
return $stats;
@@ -258,7 +352,7 @@ class MessageGroupStats {
* @return mixed
*/
protected static function expandAggregates( AggregateMessageGroup $agg ) {
- $flattened = array();
+ $flattened = [];
/** @var MessageGroup|AggregateMessageGroup $group */
foreach ( $agg->getGroups() as $group ) {
@@ -275,22 +369,22 @@ class MessageGroupStats {
/**
* @param MessageGroup $group
* @param array[] $stats
+ * @param int $flags Combination of FLAG_* constants.
* @return array[]
*/
- protected static function forGroupInternal( $group, array $stats = array() ) {
+ protected static function forGroupInternal( MessageGroup $group, array $stats = [], $flags ) {
$id = $group->getId();
- $res = self::selectRowsIdLang( $id, null );
- $stats = self::extractResults( $res, $stats );
+
+ $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;
}
- $stats[$id][$code] = self::forItemInternal( $stats, $group, $code );
+ $stats[$id][$code] = self::forItemInternal( $stats, $group, $code, $flags );
}
// This is for sorting the values added later in correct order
@@ -301,10 +395,23 @@ class MessageGroupStats {
return $stats;
}
- protected static function selectRowsIdLang( $ids = null, $codes = null ) {
- $conds = array();
+ /**
+ * Fetch rows from the database. Use extractResults to process this value.
+ *
+ * @param null|string[] $ids List of message group ids
+ * @param null|string[] $codes List of language codes
+ * @param int $flags Combination of FLAG_* constants.
+ * @return Traversable Database result object
+ */
+ protected static function selectRowsIdLang( array $ids = null, array $codes = null, $flags ) {
+ if ( $flags & self::FLAG_NO_CACHE ) {
+ return [];
+ }
+
+ $conds = [];
if ( $ids !== null ) {
- $conds['tgs_group'] = $ids;
+ $dbids = array_map( 'self::getDatabaseIdForGroupId', $ids );
+ $conds['tgs_group'] = $dbids;
}
if ( $codes !== null ) {
@@ -318,63 +425,85 @@ class MessageGroupStats {
}
/**
- * @param array[] $stats
+ * @param array[] &$stats
* @param MessageGroup $group
* @param string $code Language code
- *
+ * @param int $flags Combination of FLAG_* constants.
* @return null[]|int[]
*/
- protected static function forItemInternal( &$stats, $group, $code ) {
+ protected static function forItemInternal( &$stats, MessageGroup $group, $code, $flags ) {
$id = $group->getId();
- if ( self::$timeStart !== null && ( microtime( true ) - self::$timeStart ) > self::$limit ) {
- return $stats[$id][$code] = self::getUnknownStats();
+ if ( $flags & self::FLAG_CACHE_ONLY ) {
+ $stats[$id][$code] = self::getUnknownStats();
+ return $stats[$id][$code];
}
if ( $group instanceof AggregateMessageGroup ) {
- $aggregates = self::getEmptyStats();
-
- $expanded = self::expandAggregates( $group );
- if ( $expanded === array() ) {
- return $aggregates;
- }
- $res = self::selectRowsIdLang( array_keys( $expanded ), $code );
- $stats = self::extractResults( $res, $stats );
-
- foreach ( $expanded as $sid => $subgroup ) {
- # Discouraged groups may belong to another group, usually if there
- # is an aggregate group for all translatable pages. In that case
- # calculate and store the statistics, but don't count them as part of
- # the aggregate group, so that the numbers in Special:LanguageStats
- # add up. The statistics for discouraged groups can still be viewed
- # through Special:MessageGroupStats.
- if ( !isset( $stats[$sid][$code] ) ) {
- $stats[$sid][$code] = self::forItemInternal( $stats, $subgroup, $code );
- }
-
- $include = Hooks::run( 'Translate:MessageGroupStats:isIncluded', array( $sid, $code ) );
- if ( $include ) {
- $aggregates = self::multiAdd( $aggregates, $stats[$sid][$code] );
- }
- }
- $stats[$id][$code] = $aggregates;
+ $aggregates = self::calculateAggregageGroup( $stats, $group, $code, $flags );
} else {
$aggregates = self::calculateGroup( $group, $code );
}
+ // Cache for use in subsequent forItemInternal calls
+ $stats[$id][$code] = $aggregates;
// Don't add nulls to the database, causes annoying warnings
if ( $aggregates[self::TOTAL] === null ) {
return $aggregates;
}
- self::$updates[] = array(
- 'tgs_group' => $id,
+ self::$updates[] = [
+ 'tgs_group' => self::getDatabaseIdForGroupId( $id ),
'tgs_lang' => $code,
'tgs_total' => $aggregates[self::TOTAL],
'tgs_translated' => $aggregates[self::TRANSLATED],
'tgs_fuzzy' => $aggregates[self::FUZZY],
'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;
+ }
+
+ private static function calculateAggregageGroup( &$stats, $group, $code, $flags ) {
+ $aggregates = self::getEmptyStats();
+
+ $expanded = self::expandAggregates( $group );
+ $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 ] );
+ }
+ }
+
+ 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
+ # is an aggregate group for all translatable pages. In that case
+ # calculate and store the statistics, but don't count them as part of
+ # the aggregate group, so that the numbers in Special:LanguageStats
+ # add up. The statistics for discouraged groups can still be viewed
+ # through Special:MessageGroupStats.
+ if ( !isset( $stats[$sid][$code] ) ) {
+ $stats[$sid][$code] = self::forItemInternal( $stats, $subgroup, $code, $flags );
+ }
+
+ $include = Hooks::run( 'Translate:MessageGroupStats:isIncluded', [ $sid, $code ] );
+ if ( $include ) {
+ $aggregates = self::multiAdd( $aggregates, $stats[$sid][$code] );
+ }
+ }
return $aggregates;
}
@@ -395,16 +524,16 @@ 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
+ // Calculate if missing and store in the db
$collection = $group->initCollection( $code );
if ( $code === $wgTranslateDocumentationLanguageCode ) {
$ffs = $group->getFFS();
if ( $ffs instanceof GettextFFS ) {
$template = $ffs->read( 'en' );
- $infile = array();
+ $infile = [];
foreach ( $template['TEMPLATE'] as $key => $data ) {
if ( isset( $data['comments']['.'] ) ) {
$infile[$key] = '1';
@@ -432,17 +561,17 @@ class MessageGroupStats {
$collection->filter( 'reviewer', false );
$proofread = count( $collection );
- return array(
+ return [
self::TOTAL => $total,
self::TRANSLATED => $translated,
self::FUZZY => $fuzzy,
self::PROOFREAD => $proofread,
- );
+ ];
}
/**
* Converts input to "+2" "-4" type of string.
- * @param $number int
+ * @param int $number
* @return string
*/
protected static function stringifyNumber( $number ) {
@@ -451,47 +580,67 @@ 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;
}
- $dbw = wfGetDB( DB_MASTER );
+ $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
+ $dbw = $lb->getLazyConnectionRef( DB_MASTER ); // avoid connecting yet
$table = self::TABLE;
$updates = &self::$updates;
- self::runWithLock(
+ $updateOp = self::withLock(
$dbw,
'updates',
__METHOD__,
- function ( $dbw, $method ) use( $table, &$updates ) {
- $dbw->insert(
- $table,
- $updates,
- $method,
- array( 'IGNORE' )
- );
-
- $updates = array();
+ 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 runWithLock( $dbw, $key, $method, $callback ) {
- $dbw->onTransactionIdle( function () use ( $dbw, $key, $method, $callback ) {
- $key = 'MessageGroupStats:' . $key;
- $locked = $dbw->lock( $key, $method, 1 );
- if ( !$locked ) {
- return; // Raced out
+ protected static function withLock( IDatabase $dbw, $key, $method, $callback ) {
+ $fname = __METHOD__;
+ return function () use ( $dbw, $key, $method, $callback, $fname ) {
+ $lockName = 'MessageGroupStats:' . $key;
+ if ( !$dbw->lock( $lockName, $fname, 1 ) ) {
+ return; // raced out
}
+ $dbw->commit( $fname, 'flush' );
call_user_func( $callback, $dbw, $method );
+ $dbw->commit( $fname, 'flush' );
+
+ $dbw->unlock( $lockName, $fname );
+ };
+ }
+
+ public static function getDatabaseIdForGroupId( $id ) {
+ // The column is 100 bytes long, but we don't need to use it all
+ if ( strlen( $id ) <= 72 ) {
+ return $id;
+ }
- $dbw->unlock( $key, $method );
- } );
+ $hash = hash( 'sha256', $id, /*asHex*/false );
+ $dbid = substr( $id, 0, 50 ) . '||' . substr( $hash, 0, 20 );
+ return $dbid;
}
}
diff --git a/www/wiki/extensions/Translate/utils/MessageGroupStatsRebuildJob.php b/www/wiki/extensions/Translate/utils/MessageGroupStatsRebuildJob.php
new file mode 100644
index 00000000..d6d3b448
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/Translate/utils/MessageHandle.php b/www/wiki/extensions/Translate/utils/MessageHandle.php
index 3f6f18c8..65f95bd5 100644
--- a/www/wiki/extensions/Translate/utils/MessageHandle.php
+++ b/www/wiki/extensions/Translate/utils/MessageHandle.php
@@ -4,7 +4,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2011-2013 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -56,7 +56,7 @@ class MessageHandle {
$title = $this->getTitle();
// Check if this is a valid message first
$this->key = $title->getDBkey();
- $known = MessageIndex::singleton()->getGroupIds( $this ) !== array();
+ $known = MessageIndex::singleton()->getGroupIds( $this ) !== [];
$pos = strrpos( $this->key, '/' );
if ( $known || $pos === false ) {
@@ -68,7 +68,7 @@ class MessageHandle {
}
}
- return array( $this->key, $this->code );
+ return [ $this->key, $this->code ];
}
/**
@@ -222,7 +222,7 @@ class MessageHandle {
/**
* Check if a string contains the fuzzy string.
*
- * @param $text string Arbitrary text
+ * @param string $text Arbitrary text
* @return bool If string contains fuzzy string.
*/
public static function hasFuzzyString( $text ) {
@@ -234,20 +234,58 @@ class MessageHandle {
* @return bool If title is marked fuzzy.
*/
public function isFuzzy() {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
- $tables = array( 'page', 'revtag' );
+ $tables = [ 'page', 'revtag' ];
$field = 'rt_type';
- $conds = array(
+ $conds = [
'page_namespace' => $this->title->getNamespace(),
'page_title' => $this->title->getDBkey(),
'rt_type' => RevTag::getType( 'fuzzy' ),
'page_id=rt_page',
'page_latest=rt_revision'
- );
+ ];
$res = $dbr->selectField( $tables, $field, $conds, __METHOD__ );
return $res !== false;
}
+
+ /**
+ * This returns the key that can be used for showMessage parameter for Special:Translate
+ * for regular message groups. It is not possible to automatically determine this key
+ * from the title alone.
+ * @return string
+ * @since 2017.10
+ */
+ public function getInternalKey() {
+ global $wgContLang;
+
+ $key = $this->getKey();
+
+ if ( !MWNamespace::isCapitalized( $this->getTitle()->getNamespace() ) ) {
+ return $key;
+ }
+
+ $group = $this->getGroup();
+ $keys = [];
+ // We cannot reliably map from the database key to the internal key if
+ // capital links setting is enabled for the namespace.
+ if ( method_exists( $group, 'getKeys' ) ) {
+ $keys = $group->getKeys();
+ } else {
+ $keys = array_keys( $group->getDefinitions() );
+ }
+
+ if ( in_array( $key, $keys, true ) ) {
+ return $key;
+ }
+
+ $lcKey = $wgContLang->lcfirst( $key );
+ if ( in_array( $lcKey, $keys, true ) ) {
+ return $lcKey;
+ }
+
+ return "BUG:$key";
+ }
}
diff --git a/www/wiki/extensions/Translate/utils/MessageIndex.php b/www/wiki/extensions/Translate/utils/MessageIndex.php
index d77707ad..0015d0aa 100644
--- a/www/wiki/extensions/Translate/utils/MessageIndex.php
+++ b/www/wiki/extensions/Translate/utils/MessageIndex.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxstrom
* @copyright Copyright © 2008-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -23,6 +23,11 @@ abstract class MessageIndex {
protected static $instance;
/**
+ * @var MapCacheLRU|null
+ */
+ private static $keysCache;
+
+ /**
* @return self
*/
public static function singleton() {
@@ -58,19 +63,34 @@ abstract class MessageIndex {
$title = $handle->getTitle();
if ( !$title->inNamespaces( $wgTranslateMessageNamespaces ) ) {
- return array();
+ return [];
}
$namespace = $title->getNamespace();
$key = $handle->getKey();
$normkey = TranslateUtils::normaliseKey( $namespace, $key );
- $value = self::singleton()->get( $normkey );
- if ( $value !== null ) {
- return (array)$value;
- } else {
- return array();
+ $cache = self::getCache();
+ $value = $cache->get( $normkey );
+ if ( $value === null ) {
+ $value = self::singleton()->get( $normkey );
+ $value = $value !== null
+ ? (array)$value
+ : [];
+ $cache->set( $normkey, $value );
}
+
+ return $value;
+ }
+
+ /**
+ * @return MapCacheLRU
+ */
+ private static function getCache() {
+ if ( self::$keysCache === null ) {
+ self::$keysCache = new MapCacheLRU( 30 );
+ }
+ return self::$keysCache;
}
/**
@@ -100,9 +120,20 @@ abstract class MessageIndex {
}
}
- /// @return array
+ /**
+ * @param bool $forRebuild
+ * @return array
+ */
abstract public function retrieve( $forRebuild = false );
+ /**
+ * @since 2018.01
+ * @return string[]
+ */
+ public function getKeys() {
+ return array_keys( $this->retrieve() );
+ }
+
abstract protected function store( array $array, array $diff );
protected function lock() {
@@ -121,7 +152,7 @@ abstract class MessageIndex {
wfWarn( $msg );
$recursion--;
- return array();
+ return [];
}
$recursion++;
@@ -131,15 +162,19 @@ abstract class MessageIndex {
throw new Exception( __CLASS__ . ': unable to acquire lock' );
}
- $new = $old = array();
+ self::getCache()->clear();
+
+ $new = $old = [];
$old = $this->retrieve( 'rebuild' );
- $postponed = array();
+ $postponed = [];
/**
* @var MessageGroup $g
*/
foreach ( $groups as $g ) {
if ( !$g->exists() ) {
+ $id = $g->getId();
+ wfWarn( __METHOD__ . ": group '$id' is registered but does not exist" );
continue;
}
@@ -195,26 +230,26 @@ abstract class MessageIndex {
* @return array
*/
public static function getArrayDiff( array $old, array $new ) {
- $values = array();
+ $values = [];
$record = function ( $groups ) use ( &$values ) {
foreach ( $groups as $group ) {
$values[$group] = true;
}
};
- $keys = array(
- 'add' => array(),
- 'del' => array(),
- 'mod' => array(),
- );
+ $keys = [
+ 'add' => [],
+ 'del' => [],
+ 'mod' => [],
+ ];
foreach ( $new as $key => $groups ) {
if ( !isset( $old[$key] ) ) {
- $keys['add'][$key] = array( array(), (array)$groups );
+ $keys['add'][$key] = [ [], (array)$groups ];
$record( (array)$groups );
// Using != here on purpose to ignore the order of items
} elseif ( $groups != $old[$key] ) {
- $keys['mod'][$key] = array( (array)$old[$key], (array)$groups );
+ $keys['mod'][$key] = [ (array)$old[$key], (array)$groups ];
$record( array_diff( (array)$old[$key], (array)$groups ) );
$record( array_diff( (array)$groups, (array)$old[$key] ) );
}
@@ -222,16 +257,16 @@ abstract class MessageIndex {
foreach ( $old as $key => $groups ) {
if ( !isset( $new[$key] ) ) {
- $keys['del'][$key] = array( (array)$groups, array() );
- $record( (array)$groups, array() );
+ $keys['del'][$key] = [ (array)$groups, [] ];
+ $record( (array)$groups, [] );
}
// We already checked for diffs above
}
- return array(
+ return [
'keys' => $keys,
'values' => array_keys( $values ),
- );
+ ];
}
/**
@@ -247,15 +282,15 @@ abstract class MessageIndex {
list( $ns, $pagename ) = explode( ':', $key, 2 );
$title = Title::makeTitle( $ns, $pagename );
$handle = new MessageHandle( $title );
- list ( $oldGroups, $newGroups ) = $data;
+ list( $oldGroups, $newGroups ) = $data;
Hooks::run( 'TranslateEventMessageMembershipChange',
- array( $handle, $oldGroups, $newGroups ) );
+ [ $handle, $oldGroups, $newGroups ] );
}
}
}
/**
- * @param array $hugearray
+ * @param array &$hugearray
* @param MessageGroup $g
* @param bool $ignore
*/
@@ -296,7 +331,7 @@ abstract class MessageIndex {
// references instead. References are hard!
$value = & $hugearray[$key];
unset( $hugearray[$key] );
- $hugearray[$key] = array( &$value, &$id );
+ $hugearray[$key] = [ &$value, &$id ];
}
} else {
$hugearray[$key] = & $id;
@@ -305,9 +340,13 @@ abstract class MessageIndex {
unset( $id ); // Disconnect the previous references to this $id
}
- /* These are probably slower than serialize and unserialize,
+ /**
+ * These are probably slower than serialize and unserialize,
* but they are more space efficient because we only need
- * strings and arrays. */
+ * strings and arrays.
+ * @param mixed $data
+ * @return mixed
+ */
protected function serialize( $data ) {
if ( is_array( $data ) ) {
return implode( '|', $data );
@@ -408,11 +447,20 @@ class DatabaseMessageIndex extends MessageIndex {
}
protected function unlock() {
+ $fname = __METHOD__;
$dbw = wfGetDB( DB_MASTER );
// Unlock once the rows are actually unlocked to avoid deadlocks
- $dbw->onTransactionIdle( function () use ( $dbw ) {
- $dbw->unlock( 'translate-messageindex', __METHOD__ );
- } );
+ if ( !$dbw->trxLevel() ) {
+ $dbw->unlock( 'translate-messageindex', $fname );
+ } elseif ( method_exists( $dbw, 'onTransactionResolution' ) ) { // 1.28
+ $dbw->onTransactionResolution( function () use ( $dbw, $fname ) {
+ $dbw->unlock( 'translate-messageindex', $fname );
+ } );
+ } else {
+ $dbw->onTransactionIdle( function () use ( $dbw, $fname ) {
+ $dbw->unlock( 'translate-messageindex', $fname );
+ } );
+ }
return true;
}
@@ -426,9 +474,9 @@ class DatabaseMessageIndex extends MessageIndex {
return $this->index;
}
- $dbr = wfGetDB( $forRebuild ? DB_MASTER : DB_SLAVE );
- $res = $dbr->select( 'translate_messageindex', '*', array(), __METHOD__ );
- $this->index = array();
+ $dbr = wfGetDB( $forRebuild ? DB_MASTER : DB_REPLICA );
+ $res = $dbr->select( 'translate_messageindex', '*', [], __METHOD__ );
+ $this->index = [];
foreach ( $res as $row ) {
$this->index[$row->tmi_key] = $this->unserialize( $row->tmi_value );
}
@@ -437,11 +485,11 @@ class DatabaseMessageIndex extends MessageIndex {
}
protected function get( $key ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$value = $dbr->selectField(
'translate_messageindex',
'tmi_value',
- array( 'tmi_key' => $key ),
+ [ 'tmi_key' => $key ],
__METHOD__
);
@@ -455,30 +503,30 @@ class DatabaseMessageIndex extends MessageIndex {
}
protected function store( array $array, array $diff ) {
- $updates = array();
+ $updates = [];
- foreach ( array( $diff['add'], $diff['mod'] ) as $changes ) {
+ foreach ( [ $diff['add'], $diff['mod'] ] as $changes ) {
foreach ( $changes as $key => $data ) {
list( $old, $new ) = $data;
- $updates[] = array(
+ $updates[] = [
'tmi_key' => $key,
'tmi_value' => $this->serialize( $new ),
- );
+ ];
}
}
- $index = array( 'tmi_key' );
+ $index = [ 'tmi_key' ];
$deletions = array_keys( $diff['del'] );
$dbw = wfGetDB( DB_MASTER );
$dbw->startAtomic( __METHOD__ );
- if ( $updates !== array() ) {
- $dbw->replace( 'translate_messageindex', array( $index ), $updates, __METHOD__ );
+ if ( $updates !== [] ) {
+ $dbw->replace( 'translate_messageindex', [ $index ], $updates, __METHOD__ );
}
- if ( $deletions !== array() ) {
- $dbw->delete( 'translate_messageindex', array( 'tmi_key' => $deletions ), __METHOD__ );
+ if ( $deletions !== [] ) {
+ $dbw->delete( 'translate_messageindex', [ 'tmi_key' => $deletions ], __METHOD__ );
}
$dbw->endAtomic( __METHOD__ );
@@ -556,7 +604,7 @@ class CDBMessageIndex extends MessageIndex {
protected $index;
/**
- * @var CdbReader|null
+ * @var \Cdb\Reader|null
*/
protected $reader;
@@ -576,15 +624,28 @@ class CDBMessageIndex extends MessageIndex {
return $this->index;
}
- $keys = (array)$this->unserialize( $reader->get( '#keys' ) );
- $this->index = array();
- foreach ( $keys as $key ) {
+ $this->index = [];
+ foreach ( $this->getKeys() as $key ) {
$this->index[$key] = $this->unserialize( $reader->get( $key ) );
}
return $this->index;
}
+ public function getKeys() {
+ $reader = $this->getReader();
+ $keys = [];
+ while ( true ) {
+ $key = $keys === [] ? $reader->firstkey() : $reader->nextkey();
+ if ( $key === false ) {
+ break;
+ }
+ $keys[] = $key;
+ }
+
+ return $keys;
+ }
+
protected function get( $key ) {
$reader = $this->getReader();
// We might have the full cache loaded
@@ -611,8 +672,6 @@ class CDBMessageIndex extends MessageIndex {
$file = TranslateUtils::cacheFile( $this->filename );
$cache = \Cdb\Writer::open( $file );
- $keys = array_keys( $array );
- $cache->set( '#keys', $this->serialize( $keys ) );
foreach ( $array as $key => $value ) {
$value = $this->serialize( $value );
@@ -632,11 +691,12 @@ class CDBMessageIndex extends MessageIndex {
$file = TranslateUtils::cacheFile( $this->filename );
if ( !file_exists( $file ) ) {
// Create an empty index to allow rebuild
- $this->store( array(), array() );
+ $this->store( [], [] );
$this->index = $this->rebuild();
}
- return $this->reader = \Cdb\Reader::open( $file );
+ $this->reader = \Cdb\Reader::open( $file );
+ return $this->reader;
}
}
@@ -651,7 +711,7 @@ class HashMessageIndex extends MessageIndex {
/**
* @var array
*/
- protected $index = array();
+ protected $index = [];
/**
* @param bool $forRebuild
diff --git a/www/wiki/extensions/Translate/utils/MessageIndexRebuildJob.php b/www/wiki/extensions/Translate/utils/MessageIndexRebuildJob.php
index c1ecb0b7..2b66205f 100644
--- a/www/wiki/extensions/Translate/utils/MessageIndexRebuildJob.php
+++ b/www/wiki/extensions/Translate/utils/MessageIndexRebuildJob.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2011-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,7 +16,7 @@
class MessageIndexRebuildJob extends Job {
/**
- * @return MessageIndexRebuildJob
+ * @return self
*/
public static function newJob() {
$job = new self( Title::newMainPage() );
@@ -27,10 +27,9 @@ class MessageIndexRebuildJob extends Job {
/**
* @param Title $title
* @param array $params
- * @param int $id
*/
- public function __construct( $title, $params = array(), $id = 0 ) {
- parent::__construct( __CLASS__, $title, $params, $id );
+ public function __construct( $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
}
public function run() {
@@ -45,7 +44,7 @@ class MessageIndexRebuildJob extends Job {
* in installations with errant job queue processing.
* @override
*/
- public function insert() {
+ public function insertIntoJobQueue() {
global $wgTranslateDelayedMessageIndexRebuild;
if ( $wgTranslateDelayedMessageIndexRebuild ) {
JobQueueGroup::singleton()->push( $this );
diff --git a/www/wiki/extensions/Translate/utils/MessageUpdateJob.php b/www/wiki/extensions/Translate/utils/MessageUpdateJob.php
index 4d7cb550..fe6b1cdd 100644
--- a/www/wiki/extensions/Translate/utils/MessageUpdateJob.php
+++ b/www/wiki/extensions/Translate/utils/MessageUpdateJob.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2008-2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,10 +15,10 @@
*/
class MessageUpdateJob extends Job {
public static function newJob( Title $target, $content, $fuzzy = false ) {
- $params = array(
+ $params = [
'content' => $content,
'fuzzy' => $fuzzy,
- );
+ ];
$job = new self( $target, $params );
return $job;
@@ -27,11 +27,9 @@ class MessageUpdateJob extends Job {
/**
* @param Title $title
* @param array $params
- * @param int $id
*/
- public function __construct( $title, $params = array(), $id = 0 ) {
- parent::__construct( __CLASS__, $title, $params, $id );
- $this->params = $params;
+ public function __construct( $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
}
public function run() {
@@ -58,38 +56,38 @@ class MessageUpdateJob extends Job {
$languages = array_keys( $languages );
$dbw = wfGetDB( DB_MASTER );
- $fields = array( 'page_id', 'page_latest' );
- $conds = array( 'page_namespace' => $title->getNamespace() );
+ $fields = [ 'page_id', 'page_latest' ];
+ $conds = [ 'page_namespace' => $title->getNamespace() ];
- $pages = array();
+ $pages = [];
foreach ( $languages as $code ) {
$otherTitle = Title::makeTitleSafe( $title->getNamespace(), "$key/$code" );
$pages[$otherTitle->getDBkey()] = true;
}
unset( $pages[$title->getDBkey()] );
- if ( count( $pages ) === 0 ) {
+ if ( $pages === [] ) {
return true;
}
$conds['page_title'] = array_keys( $pages );
$res = $dbw->select( 'page', $fields, $conds, __METHOD__ );
- $inserts = array();
+ $inserts = [];
foreach ( $res as $row ) {
- $inserts[] = array(
+ $inserts[] = [
'rt_type' => RevTag::getType( 'fuzzy' ),
'rt_page' => $row->page_id,
'rt_revision' => $row->page_latest,
- );
+ ];
}
- if ( $inserts === array() ) {
+ if ( $inserts === [] ) {
return true;
}
$dbw->replace(
'revtag',
- array( array( 'rt_type', 'rt_page', 'rt_revision' ) ),
+ [ [ 'rt_type', 'rt_page', 'rt_revision' ] ],
$inserts,
__METHOD__
);
diff --git a/www/wiki/extensions/Translate/utils/MessageWebImporter.php b/www/wiki/extensions/Translate/utils/MessageWebImporter.php
index cd344048..fb874dc5 100644
--- a/www/wiki/extensions/Translate/utils/MessageWebImporter.php
+++ b/www/wiki/extensions/Translate/utils/MessageWebImporter.php
@@ -7,7 +7,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2009-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -42,6 +42,11 @@ class MessageWebImporter {
*/
protected $processingTime = 43;
+ /**
+ * @param Title|null $title
+ * @param MessageGroup|string|null $group
+ * @param string $code
+ */
public function __construct( Title $title = null, $group = null, $code = 'en' ) {
$this->setTitle( $title );
$this->setGroup( $group );
@@ -57,6 +62,9 @@ class MessageWebImporter {
return $this->title;
}
+ /**
+ * @param Title $title
+ */
public function setTitle( Title $title ) {
$this->title = $title;
}
@@ -65,9 +73,12 @@ class MessageWebImporter {
* @return User
*/
public function getUser() {
- return $this->user ? $this->user : RequestContext::getMain()->getUser();
+ return $this->user ?: RequestContext::getMain()->getUser();
}
+ /**
+ * @param User $user
+ */
public function setUser( User $user ) {
$this->user = $user;
}
@@ -91,10 +102,16 @@ class MessageWebImporter {
}
}
+ /**
+ * @return string
+ */
public function getCode() {
return $this->code;
}
+ /**
+ * @param string $code
+ */
public function setCode( $code = 'en' ) {
$this->code = $code;
}
@@ -110,14 +127,13 @@ class MessageWebImporter {
* @return string
*/
protected function doHeader() {
- $formParams = array(
+ $formParams = [
'method' => 'post',
'action' => $this->getAction(),
'class' => 'mw-translate-manage'
- );
+ ];
- return
- Xml::openElement( 'form', $formParams ) .
+ return Xml::openElement( 'form', $formParams ) .
Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
Html::hidden( 'token', $this->getUser()->getEditToken() ) .
Html::hidden( 'process', 1 );
@@ -136,15 +152,9 @@ class MessageWebImporter {
protected function allowProcess() {
$request = RequestContext::getMain()->getRequest();
- if ( $request->wasPosted() &&
- $request->getBool( 'process', false ) &&
- $this->getUser()->matchEditToken( $request->getVal( 'token' ) )
- ) {
-
- return true;
- }
-
- return false;
+ return $request->wasPosted()
+ && $request->getBool( 'process', false )
+ && $this->getUser()->matchEditToken( $request->getVal( 'token' ) );
}
/**
@@ -152,10 +162,10 @@ class MessageWebImporter {
*/
protected function getActions() {
if ( $this->code === 'en' ) {
- return array( 'import', 'fuzzy', 'ignore' );
- } else {
- return array( 'import', 'conflict', 'ignore' );
+ return [ 'import', 'fuzzy', 'ignore' ];
}
+
+ return [ 'import', 'conflict', 'ignore' ];
}
/**
@@ -196,7 +206,7 @@ class MessageWebImporter {
$alldone = $process;
// Determine changes for each message.
- $changed = array();
+ $changed = [];
foreach ( $messages as $key => $value ) {
$fuzzy = $old = null;
@@ -215,7 +225,7 @@ class MessageWebImporter {
// We found a new translation for this message of the
// current group: import it.
$action = 'import';
- $message = self::doAction(
+ self::doAction(
$action,
$group,
$key,
@@ -244,7 +254,7 @@ class MessageWebImporter {
->getVal( self::escapeNameForPHP( "action-$type-$key" ) );
if ( $process ) {
- if ( !count( $changed ) ) {
+ if ( $changed === [] ) {
// Initialise the HTML list showing the changes performed
$changed[] = '<ul>';
}
@@ -268,7 +278,7 @@ class MessageWebImporter {
// We have all the necessary information on this changed
// translation: actually process the message
- $message = self::doAction(
+ $messageKeyAndParams = self::doAction(
$action,
$group,
$key,
@@ -277,9 +287,9 @@ class MessageWebImporter {
);
// Show what we just did, adding to the list of changes
- $key = array_shift( $message );
- $params = $message;
- $message = $context->msg( $key, $params )->parse();
+ $msgKey = array_shift( $messageKeyAndParams );
+ $params = $messageKeyAndParams;
+ $message = $context->msg( $msgKey, $params )->parse();
$changed[] = "<li>$message</li>";
// Stop processing further messages if too much time
@@ -303,7 +313,7 @@ class MessageWebImporter {
$actions = $this->getActions();
$defaction = $this->getDefaultAction( $fuzzy, $action );
- $act = array();
+ $act = [];
// Give grep a chance to find the usages:
// translate-manage-action-import, translate-manage-action-conflict,
@@ -316,9 +326,9 @@ class MessageWebImporter {
}
$param = '<code class="mw-tmi-diff">' . htmlspecialchars( $key ) . '</code>';
- $name = $context->msg( 'translate-manage-import-diff', $param,
- implode( ' ', $act )
- )->text();
+ $name = $context->msg( 'translate-manage-import-diff' )
+ ->rawParams( $param, implode( ' ', $act ) )
+ ->escaped();
$changed[] = self::makeSectionElement( $name, $type, $text );
}
@@ -338,12 +348,12 @@ class MessageWebImporter {
}
}
- if ( $process || ( !count( $changed ) && $code !== 'en' ) ) {
- if ( !count( $changed ) ) {
+ if ( $process || ( $changed === [] && $code !== 'en' ) ) {
+ if ( $changed === [] ) {
$this->out->addWikiMsg( 'translate-manage-nochanges-other' );
}
- if ( !count( $changed ) || strpos( $changed[count( $changed ) - 1], '<li>' ) !== 0 ) {
+ if ( $changed === [] || strpos( end( $changed ), '<li>' ) !== 0 ) {
$changed[] = '<ul>';
}
@@ -352,7 +362,7 @@ class MessageWebImporter {
$this->out->addHTML( implode( "\n", $changed ) );
} else {
// END
- if ( count( $changed ) ) {
+ if ( $changed !== [] ) {
if ( $code === 'en' ) {
$this->out->addWikiMsg( 'translate-manage-intro-en' );
} else {
@@ -384,7 +394,7 @@ class MessageWebImporter {
* @param string $code Language code
* @param string $message Contents for the $key/code combination
* @param string $comment Edit summary (default: empty) - see Article::doEdit
- * @param User $user User that will make the edit (default: null - RequestContext user).
+ * @param User|null $user User that will make the edit (default: null - RequestContext user).
* See Article::doEdit.
* @param int $editFlags Integer bitfield: see Article::doEdit
* @throws MWException
@@ -407,7 +417,7 @@ class MessageWebImporter {
return self::doImport( $title, $message, $comment, $user, $editFlags );
} elseif ( $action === 'ignore' ) {
- return array( 'translate-manage-import-ignore', $key );
+ return [ 'translate-manage-import-ignore', $key ];
} elseif ( $action === 'fuzzy' && $code !== 'en' &&
$code !== $wgTranslateDocumentationLanguageCode
) {
@@ -428,10 +438,10 @@ class MessageWebImporter {
/**
* @throws MWException
* @param Title $title
- * @param $message
- * @param $summary
- * @param User $user
- * @param $editFlags
+ * @param string $message
+ * @param string $summary
+ * @param User|null $user
+ * @param int $editFlags
* @return array
*/
public static function doImport( $title, $message, $summary, $user = null, $editFlags = 0 ) {
@@ -441,21 +451,21 @@ class MessageWebImporter {
$success = $status->isOK();
if ( $success ) {
- return array( 'translate-manage-import-ok',
+ return [ 'translate-manage-import-ok',
wfEscapeWikiText( $title->getPrefixedText() )
- );
- } else {
- $text = "Failed to import new version of page {$title->getPrefixedText()}\n";
- $text .= "{$status->getWikiText()}";
- throw new MWException( $text );
+ ];
}
+
+ $text = "Failed to import new version of page {$title->getPrefixedText()}\n";
+ $text .= "{$status->getWikiText()}";
+ throw new MWException( $text );
}
/**
* @param Title $title
- * @param $message
- * @param $comment
- * @param $user
+ * @param string $message
+ * @param string $comment
+ * @param User $user
* @param int $editFlags
* @return array|String
*/
@@ -472,16 +482,16 @@ class MessageWebImporter {
$handle = new MessageHandle( $title );
$titleText = $handle->getKey();
- $conds = array(
+ $conds = [
'page_namespace' => $title->getNamespace(),
'page_latest=rev_id',
'rev_text_id=old_id',
'page_title' . $dbw->buildLike( "$titleText/", $dbw->anyString() ),
- );
+ ];
$rows = $dbw->select(
- array( 'page', 'revision', 'text' ),
- array( 'page_title', 'page_namespace', 'old_text', 'old_flags' ),
+ [ 'page', 'revision', 'text' ],
+ [ 'page_title', 'page_namespace', 'old_text', 'old_flags' ],
$conds,
__METHOD__
);
@@ -492,7 +502,7 @@ class MessageWebImporter {
}
// Process all rows.
- $changed = array();
+ $changed = [];
foreach ( $rows as $row ) {
global $wgTranslateDocumentationLanguageCode;
@@ -526,7 +536,7 @@ class MessageWebImporter {
$text .= '* ' . $context->msg( $key, $c )->plain() . "\n";
}
- return array( 'translate-manage-import-fuzzy', "\n" . $text );
+ return [ 'translate-manage-import-fuzzy', "\n" . $text ];
}
/**
@@ -550,13 +560,13 @@ class MessageWebImporter {
* @param string $legend Legend as raw html.
* @param string $type Contents of type class.
* @param string $content Contents as raw html.
- * @param Language $lang The language in which the text is written.
+ * @param Language|null $lang The language in which the text is written.
* @return string Section element as html.
*/
public static function makeSectionElement( $legend, $type, $content, $lang = null ) {
- $containerParams = array( 'class' => "mw-tpt-sp-section mw-tpt-sp-section-type-{$type}" );
- $legendParams = array( 'class' => 'mw-tpt-sp-legend' );
- $contentParams = array( 'class' => 'mw-tpt-sp-content' );
+ $containerParams = [ 'class' => "mw-tpt-sp-section mw-tpt-sp-section-type-{$type}" ];
+ $legendParams = [ 'class' => 'mw-tpt-sp-legend' ];
+ $contentParams = [ 'class' => 'mw-tpt-sp-content' ];
if ( $lang ) {
$contentParams['dir'] = $lang->getDir();
$contentParams['lang'] = $lang->getCode();
@@ -590,7 +600,7 @@ class MessageWebImporter {
* @return string
*/
public static function escapeNameForPHP( $name ) {
- $replacements = array(
+ $replacements = [
'(' => '(OP)',
' ' => '(SP)',
"\t" => '(TAB)',
@@ -599,7 +609,7 @@ class MessageWebImporter {
"\"" => '(DQ)',
'%' => '(PC)',
'&' => '(AMP)',
- );
+ ];
/* How nice of you PHP. No way to split array into keys and values in one
* function or have str_replace which takes one array? */
diff --git a/www/wiki/extensions/Translate/utils/RcFilter.php b/www/wiki/extensions/Translate/utils/RcFilter.php
index dd2d7f82..7c2334f2 100644
--- a/www/wiki/extensions/Translate/utils/RcFilter.php
+++ b/www/wiki/extensions/Translate/utils/RcFilter.php
@@ -6,7 +6,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2010, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -20,20 +20,20 @@ class TranslateRcFilter {
*
* Appends SQL filter conditions into $conds.
* @param string $pageName
- * @param array $tables
- * @param array $fields
- * @param array $conds
- * @param array $query_options
- * @param array $join_conds
+ * @param array &$tables
+ * @param array &$fields
+ * @param array &$conds
+ * @param array &$query_options
+ * @param array &$join_conds
* @param FormOptions $opts
* @return bool true
*/
- public static function translationFilter( $pageName, &$tables, &$fields, &$conds, &$query_options,
- &$join_conds, FormOptions $opts
+ public static function translationFilter( $pageName, &$tables, &$fields, &$conds,
+ &$query_options, &$join_conds, FormOptions $opts
) {
- global $wgTranslateMessageNamespaces, $wgTranslateRcFilterDefault;
+ global $wgTranslateRcFilterDefault;
- if ( $pageName !== 'Recentchanges' ) {
+ if ( $pageName !== 'Recentchanges' || self::isStructuredFilterUiEnabled() ) {
return true;
}
@@ -42,14 +42,9 @@ class TranslateRcFilter {
$opts->add( 'translations', $wgTranslateRcFilterDefault );
$opts->setValue( 'translations', $translations );
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
- $namespaces = array();
-
- foreach ( $wgTranslateMessageNamespaces as $index ) {
- $namespaces[] = $index;
- $namespaces[] = $index + 1; // Talk too
- }
+ $namespaces = self::getTranslateNamespaces();
if ( $translations === 'only' ) {
$conds[] = 'rc_namespace IN (' . $dbr->makeList( $namespaces ) . ')';
@@ -64,16 +59,32 @@ class TranslateRcFilter {
return true;
}
+ private static function getTranslateNamespaces() {
+ global $wgTranslateMessageNamespaces;
+ $namespaces = [];
+
+ foreach ( $wgTranslateMessageNamespaces as $index ) {
+ $namespaces[] = $index;
+ $namespaces[] = $index + 1; // Include Talk namespaces
+ }
+
+ return $namespaces;
+ }
+
/**
* Hooks SpecialRecentChangesPanel. See the hook documentation for
* documentation of the function parameters.
*
* Adds a HTMl selector into $items
- * @param $items
+ * @param array &$items
* @param FormOptions $opts
* @return bool true
*/
public static function translationFilterForm( &$items, $opts ) {
+ if ( self::isStructuredFilterUiEnabled() ) {
+ return true;
+ }
+
$opts->consumeValue( 'translations' );
$default = $opts->getValue( 'translations' );
@@ -93,8 +104,150 @@ class TranslateRcFilter {
);
$select->addOption( wfMessage( 'translate-rc-translation-filter-site' )->text(), 'site' );
- $items['translations'] = array( $label, $select->getHTML() );
+ $items['translations'] = [ $label, $select->getHTML() ];
+
+ return true;
+ }
+
+ private static function isStructuredFilterUiEnabled() {
+ $context = RequestContext::getMain();
+
+ // This assumes usage only on RC page
+ $page = new SpecialRecentChanges();
+ $page->setContext( $context );
+
+ // isStructuredFilterUiEnabled used to be a protected method in older versions :(
+ return is_callable( [ $page, 'isStructuredFilterUiEnabled' ] ) &&
+ $page->isStructuredFilterUiEnabled();
+ }
+
+ /**
+ * Hooks ChangesListSpecialPageStructuredFilters. See the hook documentation for
+ * documentation of the function parameters.
+ *
+ * Adds translations filters to structured UI
+ * @param ChangesListSpecialPage $special
+ * @return bool true
+ */
+ public static function onChangesListSpecialPageStructuredFilters(
+ ChangesListSpecialPage $special
+ ) {
+ global $wgTranslateRcFilterDefault;
+ $defaultFilter = $wgTranslateRcFilterDefault !== 'noaction' ?
+ $wgTranslateRcFilterDefault :
+ ChangesListStringOptionsFilterGroup::NONE;
+
+ $translationsGroup = new ChangesListStringOptionsFilterGroup(
+ [
+ 'name' => 'translations',
+ 'title' => 'translate-rcfilters-translations',
+ 'priority' => -7,
+ 'default' => $defaultFilter,
+ 'isFullCoverage' => true,
+ 'filters' => [
+ [
+ 'name' => 'only',
+ 'label' => 'translate-rcfilters-translations-only-label',
+ 'description' => 'translate-rcfilters-translations-only-desc',
+ 'cssClassSuffix' => 'only',
+ 'isRowApplicableCallable' => function ( $ctx, $rc ) {
+ $namespaces = self::getTranslateNamespaces();
+
+ return in_array( $rc->getAttribute( 'rc_namespace' ), $namespaces ) &&
+ strpos( $rc->getAttribute( 'rc_title' ), '/' ) !== false;
+ }
+ ],
+ [
+ 'name' => 'site',
+ 'label' => 'translate-rcfilters-translations-site-label',
+ 'description' => 'translate-rcfilters-translations-site-desc',
+ 'cssClassSuffix' => 'site',
+ 'isRowApplicableCallable' => function ( $ctx, $rc ) {
+ $namespaces = self::getTranslateNamespaces();
+
+ return in_array( $rc->getAttribute( 'rc_namespace' ), $namespaces ) &&
+ strpos( $rc->getAttribute( 'rc_title' ), '/' ) === false;
+ }
+ ],
+ [
+ 'name' => 'filter',
+ 'label' => 'translate-rcfilters-translations-filter-label',
+ 'description' => 'translate-rcfilters-translations-filter-desc',
+ 'cssClassSuffix' => 'filter',
+ 'isRowApplicableCallable' => function ( $ctx, $rc ) {
+ $namespaces = self::getTranslateNamespaces();
+
+ return !in_array( $rc->getAttribute( 'rc_namespace' ), $namespaces );
+ }
+ ],
+ ],
+ 'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables,
+ &$fields, &$conds, &$query_options, &$join_conds, $selectedValues
+ ) {
+ $fields[] = 'rc_title';
+ $fields[] = 'rc_namespace';
+
+ $namespaces = self::getTranslateNamespaces();
+ $inNamespaceCond = 'rc_namespace IN (' .
+ $dbr->makeList( $namespaces ) . ')';
+ $notInNamespaceCond = 'rc_namespace NOT IN (' .
+ $dbr->makeList( $namespaces ) . ')';
+
+ $onlyCond = $dbr->makeList( [
+ $inNamespaceCond,
+ 'rc_title ' .
+ $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() )
+ ], LIST_AND );
+ $siteCond = $dbr->makeList( [
+ $inNamespaceCond,
+ 'rc_title NOT' .
+ $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() )
+ ], LIST_AND );
+
+ if ( count( $selectedValues ) === 3 ) {
+ // no filters
+ return;
+ }
+
+ if ( $selectedValues === [ 'filter', 'only' ] ) {
+ $conds[] = $dbr->makeList( [
+ $notInNamespaceCond,
+ $onlyCond
+ ], LIST_OR );
+ return;
+ }
+
+ if ( $selectedValues === [ 'filter', 'site' ] ) {
+ $conds[] = $dbr->makeList( [
+ $notInNamespaceCond,
+ $siteCond
+ ], LIST_OR );
+ return;
+ }
+
+ if ( $selectedValues === [ 'only', 'site' ] ) {
+ $conds[] = $inNamespaceCond;
+ return;
+ }
+
+ if ( $selectedValues === [ 'filter' ] ) {
+ $conds[] = $notInNamespaceCond;
+ return;
+ }
+
+ if ( $selectedValues === [ 'only' ] ) {
+ $conds[] = $onlyCond;
+ return;
+ }
+
+ if ( $selectedValues === [ 'site' ] ) {
+ $conds[] = $siteCond;
+ }
+ }
+ ]
+ );
+ $special->registerFilterGroup( $translationsGroup );
return true;
}
}
diff --git a/www/wiki/extensions/Translate/utils/ResourceLoader.php b/www/wiki/extensions/Translate/utils/ResourceLoader.php
index 9c9e1716..1a8e5c29 100644
--- a/www/wiki/extensions/Translate/utils/ResourceLoader.php
+++ b/www/wiki/extensions/Translate/utils/ResourceLoader.php
@@ -4,7 +4,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2010 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -13,9 +13,9 @@
class PHPVariableLoader {
/**
* Returns a global variable from PHP file by executing the file.
- * @param $_filename \string Path to the file.
- * @param $_variable \string Name of the variable.
- * @return \mixed The variable contents or null.
+ * @param string $_filename Path to the file.
+ * @param string $_variable Name of the variable.
+ * @return mixed The variable contents or null.
*/
public static function loadVariableFromPHPFile( $_filename, $_variable ) {
if ( !file_exists( $_filename ) ) {
@@ -23,7 +23,7 @@ class PHPVariableLoader {
} else {
require $_filename;
- return isset( $$_variable ) ? $$_variable : null;
+ return $$_variable ?? null;
}
}
}
diff --git a/www/wiki/extensions/Translate/utils/RevTag.php b/www/wiki/extensions/Translate/utils/RevTag.php
index b9d24bf5..40d5b5b5 100644
--- a/www/wiki/extensions/Translate/utils/RevTag.php
+++ b/www/wiki/extensions/Translate/utils/RevTag.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -22,7 +22,7 @@ class RevTag {
/**
* Converts rt_type field back to the tag name.
- * @param $tag int rt_type value
+ * @param int $tag rt_type value
* @return string
*/
public static function typeToTag( $tag ) {
diff --git a/www/wiki/extensions/Translate/utils/StatsBar.php b/www/wiki/extensions/Translate/utils/StatsBar.php
index 93f57b8d..df2801a2 100644
--- a/www/wiki/extensions/Translate/utils/StatsBar.php
+++ b/www/wiki/extensions/Translate/utils/StatsBar.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -76,29 +76,29 @@ class StatsBar {
$wuntranslated = round( 100 - $wproofread - $wtranslated - $wfuzzy, 2 );
}
- return Html::rawElement( 'div', array(
+ return Html::rawElement( 'div', [
'class' => 'tux-statsbar',
'data-total' => $total,
'data-group' => $this->group,
'data-language' => $this->language,
- ),
- Html::element( 'span', array(
+ ],
+ Html::element( 'span', [
'class' => 'tux-proofread',
'style' => "width: $wproofread%",
'data-proofread' => $proofread,
- ) ) . Html::element( 'span', array(
+ ] ) . Html::element( 'span', [
'class' => 'tux-translated',
'style' => "width: $wtranslated%",
'data-translated' => $translated,
- ) ) . Html::element( 'span', array(
+ ] ) . Html::element( 'span', [
'class' => 'tux-fuzzy',
'style' => "width: $wfuzzy%",
'data-fuzzy' => $fuzzy,
- ) ) . Html::element( 'span', array(
+ ] ) . Html::element( 'span', [
'class' => 'tux-untranslated',
'style' => "width: $wuntranslated%",
'data-untranslated' => $untranslated,
- ) )
+ ] )
);
}
}
diff --git a/www/wiki/extensions/Translate/utils/StatsTable.php b/www/wiki/extensions/Translate/utils/StatsTable.php
index 284508a9..0e9bc937 100644
--- a/www/wiki/extensions/Translate/utils/StatsTable.php
+++ b/www/wiki/extensions/Translate/utils/StatsTable.php
@@ -1,23 +1,17 @@
<?php
/**
- * Contains logic for special page Special:LanguageStats.
- *
* @file
* @author Siebrand Mazeland
* @author Niklas Laxström
* @copyright Copyright © 2008-2013 Siebrand Mazeland, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
- * 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 {
@@ -39,7 +33,7 @@ class StatsTable {
/**
* @var Message[]
*/
- protected $extraColumns = array();
+ protected $extraColumns = [];
public function __construct() {
$this->lang = RequestContext::getMain()->getLanguage();
@@ -49,13 +43,13 @@ class StatsTable {
/**
* Statistics table element (heading or regular cell)
*
- * @param $in \string Element contents.
- * @param $bgcolor \string Backround color in ABABAB format.
- * @param $sort \string Value used for sorting.
- * @return \string Html td element.
+ * @param string $in Element contents.
+ * @param string $bgcolor Backround color in ABABAB format.
+ * @param string $sort Value used for sorting.
+ * @return string Html td element.
*/
public function element( $in, $bgcolor = '', $sort = '' ) {
- $attributes = array();
+ $attributes = [];
if ( $sort ) {
$attributes['data-sort-value'] = $sort;
@@ -63,7 +57,6 @@ class StatsTable {
if ( $bgcolor ) {
$attributes['style'] = 'background-color: #' . $bgcolor;
- $attributes['class'] = 'hover-color';
}
$element = Html::element( 'td', $attributes, $in );
@@ -71,34 +64,28 @@ class StatsTable {
return $element;
}
- public function getBackgroundColor( $subset, $total, $fuzzy = false ) {
- wfSuppressWarnings();
- $v = round( 255 * $subset / $total );
- wfRestoreWarnings();
-
+ 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 = 'FF';
- $green = sprintf( '%02X', 2 * $v );
- } else {
- // Yellow to Green
- $red = sprintf( '%02X', 2 * ( 255 - $v ) );
- $green = 'FF';
- }
- $blue = '00';
+ // 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 $red . $green . $blue;
+ return $colors[ $index ];
}
/**
@@ -117,11 +104,10 @@ class StatsTable {
/**
* @param Message $msg
- *
* @return string HTML
*/
public function createColumnHeader( Message $msg ) {
- return Html::element( 'th', array(), $msg->text() );
+ return Html::element( 'th', [], $msg->text() );
}
public function addExtraColumn( Message $column ) {
@@ -132,12 +118,13 @@ class StatsTable {
* @return Message[]
*/
public function getOtherColumnHeaders() {
- return array_merge( array(
+ return array_merge( [
wfMessage( 'translate-total' ),
wfMessage( 'translate-untranslated' ),
wfMessage( 'translate-percentage-complete' ),
+ wfMessage( 'translate-percentage-proofread' ),
wfMessage( 'translate-percentage-fuzzy' ),
- ), $this->extraColumns );
+ ], $this->extraColumns );
}
/**
@@ -147,7 +134,7 @@ class StatsTable {
// Create table header
$out = Html::openElement(
'table',
- array( 'class' => 'statstable wikitable mw-sp-translate-table' )
+ [ 'class' => 'statstable' ]
);
$out .= "\n\t" . Html::openElement( 'thead' );
@@ -172,7 +159,7 @@ class StatsTable {
*/
public function makeTotalRow( Message $message, $stats ) {
$out = "\t" . Html::openElement( 'tr' );
- $out .= "\n\t\t" . Html::element( 'td', array(), $message->text() );
+ $out .= "\n\t\t" . Html::element( 'td', [], $message->text() );
$out .= $this->makeNumberColumns( $stats );
$out .= "\n\t" . Xml::closeElement( 'tr' ) . "\n";
@@ -188,9 +175,10 @@ 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', array( 'data-sort-value' => -1 ), '...' );
+ $na = "\n\t\t" . Html::element( 'td', [ 'data-sort-value' => -1 ], '...' );
$nap = "\n\t\t" . $this->element( '...', 'AFAFAF', -1 );
$out = $na . $na . $nap . $nap;
@@ -198,27 +186,33 @@ class StatsTable {
}
$out = "\n\t\t" . Html::element( 'td',
- array( 'data-sort-value' => $total ),
+ [ 'data-sort-value' => $total ],
$this->lang->formatNum( $total ) );
$out .= "\n\t\t" . Html::element( 'td',
- array( 'data-sort-value' => $total - $translated ),
+ [ 'data-sort-value' => $total - $translated ],
$this->lang->formatNum( $total - $translated ) );
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;
@@ -226,8 +220,8 @@ class StatsTable {
/**
* Makes a nice print from plain float.
- * @param $num float
- * @param $to string floor or ceil
+ * @param number $num
+ * @param string $to floor or ceil
* @return string Plain text
*/
public function formatPercentage( $num, $to = 'floor' ) {
@@ -239,7 +233,7 @@ class StatsTable {
/**
* Gets the name of group with some extra formatting.
- * @param $group MessageGroup
+ * @param MessageGroup $group
* @return string Html
*/
public function getGroupLabel( MessageGroup $group ) {
@@ -247,7 +241,7 @@ class StatsTable {
// Bold for meta groups.
if ( $group->isMeta() ) {
- $groupLabel = Html::rawElement( 'b', array(), $groupLabel );
+ $groupLabel = Html::rawElement( 'b', [], $groupLabel );
}
return $groupLabel;
@@ -255,20 +249,18 @@ class StatsTable {
/**
* Gets the name of group linked to translation tool.
- * @param $group MessageGroup
- * @param $code string Language code
- * @param $params array Any extra query parameters.
+ * @param MessageGroup $group
+ * @param string $code Language code
+ * @param array $params Any extra query parameters.
* @return string Html
*/
public function makeGroupLink( MessageGroup $group, $code, $params ) {
- $queryParameters = $params + array(
+ $queryParameters = $params + [
'group' => $group->getId(),
'language' => $code
- );
+ ];
- $attributes = array(
- 'title' => $this->getGroupDescription( $group )
- );
+ $attributes = [];
$translateGroupLink = Linker::link(
$this->translate, $this->getGroupLabel( $group ), $attributes, $queryParameters
@@ -278,43 +270,10 @@ class StatsTable {
}
/**
- * Gets the description of a group. This is a bit slow thing to do for
- * thousand+ groups, so some caching is involved.
- * @param $group MessageGroup
- * @return string Plain text
- */
- public function getGroupDescription( MessageGroup $group ) {
- $code = $this->lang->getCode();
-
- $cache = wfGetCache( CACHE_ANYTHING );
- $key = wfMemcKey( "translate-groupdesc-$code-" . $group->getId() );
- $desc = $cache->get( $key );
-
- if ( is_string( $desc ) ) {
- return $desc;
- }
-
- $realFunction = array( 'MessageCache', 'singleton' );
-
- if ( is_callable( $realFunction ) ) {
- $mc = MessageCache::singleton();
- } else {
- global $wgMessageCache;
-
- $mc = $wgMessageCache;
- }
-
- $desc = $mc->transform( $group->getDescription(), true, $this->lang );
- $cache->set( $key, $desc );
-
- return $desc;
- }
-
- /**
* Check whether translations in given group in given language
* has been disabled.
- * @param $groupId string Message group id
- * @param $code string Language code
+ * @param string $groupId Message group id
+ * @param string $code Language code
* @return bool
*/
public function isBlacklisted( $groupId, $code ) {
@@ -322,11 +281,11 @@ class StatsTable {
$blacklisted = null;
- $checks = array(
+ $checks = [
$groupId,
strtok( $groupId, '-' ),
'*'
- );
+ ];
foreach ( $checks as $check ) {
if ( isset( $wgTranslateBlacklist[$check] ) && isset( $wgTranslateBlacklist[$check][$code] ) ) {
@@ -344,7 +303,7 @@ class StatsTable {
$blacklisted = true;
}
- $include = Hooks::run( 'Translate:MessageGroupStats:isIncluded', array( $groupId, $code ) );
+ $include = Hooks::run( 'Translate:MessageGroupStats:isIncluded', [ $groupId, $code ] );
if ( !$include ) {
$blacklisted = true;
}
@@ -355,17 +314,17 @@ class StatsTable {
/**
* Used to circumvent ugly tooltips when newlines are used in the
* message content ("x\ny" becomes "x y").
- * @param $text
+ * @param string $text
* @return string
*/
public static function formatTooltip( $text ) {
$wordSeparator = wfMessage( 'word-separator' )->text();
- $text = strtr( $text, array(
+ $text = strtr( $text, [
"\n" => $wordSeparator,
"\r" => $wordSeparator,
"\t" => $wordSeparator,
- ) );
+ ] );
return $text;
}
diff --git a/www/wiki/extensions/Translate/utils/ToolBox.php b/www/wiki/extensions/Translate/utils/ToolBox.php
index abfbf4ce..7efc2980 100644
--- a/www/wiki/extensions/Translate/utils/ToolBox.php
+++ b/www/wiki/extensions/Translate/utils/ToolBox.php
@@ -6,7 +6,7 @@
* @author Siebrand Mazeland
* @author Niklas Laxström
* @copyright Copyright © 2008-2010, Siebrand Mazeland, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -18,22 +18,25 @@ class TranslateToolbox {
* available translations for a message. Only shown when it
* actually is a translatable/translated message.
*
- * @param $quickTemplate QuickTemplate
+ * @param BaseTemplate $baseTemplate The base skin template
+ * @param array &$toolbox An array of toolbox items
*
* @return bool
*/
- public static function toolboxAllTranslations( &$quickTemplate ) {
- $title = $quickTemplate->getSkin()->getTitle();
+ public static function toolboxAllTranslations( $baseTemplate, &$toolbox ) {
+ $title = $baseTemplate->getSkin()->getTitle();
$handle = new MessageHandle( $title );
if ( $handle->isValid() ) {
$message = $title->getNsText() . ':' . $handle->getKey();
- $desc = wfMessage( 'translate-sidebar-alltrans' )->escaped();
- $url = htmlspecialchars( SpecialPage::getTitleFor( 'Translations' )
- ->getLocalURL( array( 'message' => $message ) ) );
+ $url = SpecialPage::getTitleFor( 'Translations' )
+ ->getLocalURL( [ 'message' => $message ] );
// Add the actual toolbox entry.
- // Add newlines and tabs for nicer HTML output.
- echo "\n\t\t\t\t<li id=\"t-alltrans\"><a href=\"$url\">$desc</a></li>\n";
+ $toolbox[ 'alltrans' ] = [
+ 'href' => $url,
+ 'id' => 't-alltrans',
+ 'msg' => 'translate-sidebar-alltrans',
+ ];
}
return true;
diff --git a/www/wiki/extensions/Translate/utils/TranslateLogFormatter.php b/www/wiki/extensions/Translate/utils/TranslateLogFormatter.php
index c809f97b..2925f2cb 100644
--- a/www/wiki/extensions/Translate/utils/TranslateLogFormatter.php
+++ b/www/wiki/extensions/Translate/utils/TranslateLogFormatter.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2013, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -21,7 +21,7 @@ class TranslateLogFormatter extends LogFormatter {
if ( $type === 'translationreview/message' ) {
$targetPage = $this->makePageLink(
$this->entry->getTarget(),
- array( 'oldid' => $params[3] )
+ [ 'oldid' => $params[3] ]
);
$params[2] = Message::rawParam( $targetPage );
@@ -39,7 +39,7 @@ class TranslateLogFormatter extends LogFormatter {
$targetPage = $this->makePageLinkWithText(
$this->entry->getTarget(),
$params[4],
- array( 'language' => $language )
+ [ 'language' => $language ]
);
$params[2] = Message::rawParam( $targetPage );
@@ -64,10 +64,10 @@ class TranslateLogFormatter extends LogFormatter {
}
protected function makePageLinkWithText(
- Title $title = null, $text, array $parameters = array()
+ Title $title = null, $text, array $parameters = []
) {
if ( !$this->plaintext ) {
- $link = Linker::link( $title, htmlspecialchars( $text ), array(), $parameters );
+ $link = Linker::link( $title, htmlspecialchars( $text ), [], $parameters );
} else {
$target = '***';
if ( $title instanceof Title ) {
diff --git a/www/wiki/extensions/Translate/utils/TranslateMetadata.php b/www/wiki/extensions/Translate/utils/TranslateMetadata.php
index 9d3c8b9e..4294ca30 100644
--- a/www/wiki/extensions/Translate/utils/TranslateMetadata.php
+++ b/www/wiki/extensions/Translate/utils/TranslateMetadata.php
@@ -7,65 +7,74 @@
* @author Niklas Laxström
* @author Santhosh Thottingal
* @copyright Copyright © 2012-2013, Niklas Laxström, Santhosh Thottingal
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
class TranslateMetadata {
- protected static $cache;
+ /** @var array Map of (group => key => value) */
+ private static $cache = [];
/**
- * Get a metadata value for the given group and key.
- * @param $group string The group name
- * @param $key string Metadata key
- * @return String
+ * @param string[] $groups List of translate groups
*/
- public static function get( $group, $key ) {
- if ( self::$cache === null ) {
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( 'translate_metadata', '*', array(), __METHOD__ );
- foreach ( $res as $row ) {
- self::$cache[$row->tmd_group][$row->tmd_key] = $row->tmd_value;
- }
+ public static function preloadGroups( array $groups ) {
+ $missing = array_diff( $groups, array_keys( self::$cache ) );
+ if ( !$missing ) {
+ return;
}
- if ( isset( self::$cache[$group][$key] ) ) {
- return self::$cache[$group][$key];
+ self::$cache += array_fill_keys( $missing, null ); // cache negatives
+
+ $dbr = TranslateUtils::getSafeReadDB();
+ $conds = count( $groups ) <= 500 ? [ 'tmd_group' => $missing ] : [];
+ $res = $dbr->select( 'translate_metadata', '*', $conds, __METHOD__ );
+ foreach ( $res as $row ) {
+ self::$cache[$row->tmd_group][$row->tmd_key] = $row->tmd_value;
}
+ }
- return false;
+ /**
+ * Get a metadata value for the given group and key.
+ * @param string $group The group name
+ * @param string $key Metadata key
+ * @return string|bool
+ */
+ public static function get( $group, $key ) {
+ self::preloadGroups( [ $group ] );
+
+ return self::$cache[$group][$key] ?? false;
}
/**
* Set a metadata value for the given group and metadata key. Updates the
* value if already existing.
- * @param $group string The group id
- * @param $key string Metadata key
- * @param $value string Metadata value
+ * @param string $group The group id
+ * @param string $key Metadata key
+ * @param string $value Metadata value
*/
public static function set( $group, $key, $value ) {
$dbw = wfGetDB( DB_MASTER );
- $data = array( 'tmd_group' => $group, 'tmd_key' => $key, 'tmd_value' => $value );
+ $data = [ 'tmd_group' => $group, 'tmd_key' => $key, 'tmd_value' => $value ];
if ( $value === false ) {
unset( $data['tmd_value'] );
$dbw->delete( 'translate_metadata', $data );
+ unset( self::$cache[$group][$key] );
} else {
$dbw->replace(
'translate_metadata',
- array( array( 'tmd_group', 'tmd_key' ) ),
+ [ [ 'tmd_group', 'tmd_key' ] ],
$data,
__METHOD__
);
+ self::$cache[$group][$key] = $value;
}
-
- self::$cache = null;
}
/**
* Wrapper for getting subgroups.
* @param string $groupId
- * @return array|String
+ * @return string[]|bool
* @since 2012-05-09
- * return array|false
*/
public static function getSubgroups( $groupId ) {
$groups = self::get( $groupId, 'subgroups' );
@@ -104,7 +113,8 @@ class TranslateMetadata {
*/
public static function deleteGroup( $groupId ) {
$dbw = wfGetDB( DB_MASTER );
- $conds = array( 'tmd_group' => $groupId );
+ $conds = [ 'tmd_group' => $groupId ];
$dbw->delete( 'translate_metadata', $conds );
+ self::$cache[$groupId] = null;
}
}
diff --git a/www/wiki/extensions/Translate/utils/TranslateSandbox.php b/www/wiki/extensions/Translate/utils/TranslateSandbox.php
index 988ccc9f..999c4a3e 100644
--- a/www/wiki/extensions/Translate/utils/TranslateSandbox.php
+++ b/www/wiki/extensions/Translate/utils/TranslateSandbox.php
@@ -4,15 +4,23 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
+use MediaWiki\Auth\AuthManager;
+use MediaWiki\Auth\AuthenticationRequest;
+use MediaWiki\Auth\AuthenticationResponse;
+
/**
- * Utility class for the sandbox feature of Translate.
+ * Utility class for the sandbox feature of Translate. Do not try this yourself. This code makes a
+ * lot of assumptions about what happens to the user account.
*/
class TranslateSandbox {
+ public static $userToCreate = null;
+
/**
* Adds a new user without doing much validation.
+ *
* @param string $name User name.
* @param string $email Email address.
* @param string $password User provided password.
@@ -21,25 +29,51 @@ class TranslateSandbox {
*/
public static function addUser( $name, $email, $password ) {
$user = User::newFromName( $name, 'creatable' );
+
if ( !$user instanceof User ) {
throw new MWException( 'Invalid user name' );
}
- $user->setEmail( $email );
- $status = $user->addToDatabase();
-
- if ( !$status->isOK() ) {
- throw new MWException( $status->getWikiText() );
+ $data = [
+ 'username' => $user->getName(),
+ 'password' => $password,
+ 'retype' => $password,
+ 'email' => $email,
+ 'realname' => '',
+ ];
+
+ self::$userToCreate = $user;
+ $reqs = AuthManager::singleton()->getAuthenticationRequests( AuthManager::ACTION_CREATE );
+ $reqs = AuthenticationRequest::loadRequestsFromSubmission( $reqs, $data );
+ $res = AuthManager::singleton()->beginAccountCreation( $user, $reqs, 'null:' );
+ self::$userToCreate = null;
+
+ switch ( $res->status ) {
+ case AuthenticationResponse::PASS:
+ break;
+ case AuthenticationResponse::FAIL:
+ // Unless things are misconfigured, this will handle errors such as username taken,
+ // invalid user name or too short password. The WebAPI is prechecking these to
+ // provide nicer error messages.
+ $reason = $res->message->inLanguage( 'en' )->useDatabase( false )->text();
+ throw new MWException( "Account creation failed: $reason" );
+ default:
+ // Just in case it was a Secondary that failed
+ $user->clearInstanceCache( 'name' );
+ if ( $user->getId() ) {
+ self::deleteUser( $user, 'force' );
+ }
+ throw new MWException(
+ 'AuthManager does not support such simplified account creation'
+ );
}
- $user->setPassword( $password );
- $user->saveSettings();
+ // User now has an id, but we must clear the cache to see it. Without this the group
+ // addition below would not be saved in the database.
+ $user->clearInstanceCache( 'name' );
- // Need to have an id first
// group-translate-sandboxed group-translate-sandboxed-member
$user->addGroup( 'translate-sandboxed' );
- $user->clearInstanceCache( 'name' );
- $user->sendConfirmationMail();
return $user;
}
@@ -53,6 +87,7 @@ class TranslateSandbox {
*/
public static function deleteUser( User $user, $force = '' ) {
$uid = $user->getId();
+ $username = $user->getName();
if ( $force !== 'force' && !self::isSandboxed( $user ) ) {
throw new MWException( 'Not a sandboxed user' );
@@ -60,8 +95,24 @@ class TranslateSandbox {
// Delete from database
$dbw = wfGetDB( DB_MASTER );
- $dbw->delete( 'user', array( 'user_id' => $uid ), __METHOD__ );
- $dbw->delete( 'user_groups', array( 'ug_user' => $uid ), __METHOD__ );
+ $dbw->delete( 'user', [ 'user_id' => $uid ], __METHOD__ );
+ $dbw->delete( 'user_groups', [ 'ug_user' => $uid ], __METHOD__ );
+ $dbw->delete( 'user_properties', [ 'up_user' => $uid ], __METHOD__ );
+
+ if ( class_exists( ActorMigration::class ) ) {
+ $m = ActorMigration::newMigration();
+
+ // Assume no joins are needed for logging or recentchanges
+ $dbw->delete( 'logging', $m->getWhere( $dbw, 'log_user', $user )['conds'], __METHOD__ );
+ $dbw->delete( 'recentchanges', $m->getWhere( $dbw, 'rc_user', $user )['conds'], __METHOD__ );
+ } else {
+ $dbw->delete( 'logging', [ 'log_user' => $uid ], __METHOD__ );
+ $dbw->delete(
+ 'recentchanges',
+ [ 'rc_user' => $uid, 'rc_user_text' => $username ],
+ __METHOD__
+ );
+ }
// If someone tries to access still object still, they will get anon user
// data.
@@ -88,14 +139,25 @@ class TranslateSandbox {
*/
public static function getUsers() {
$dbw = TranslateUtils::getSafeReadDB();
- $tables = array( 'user', 'user_groups' );
- $fields = User::selectFields();
- $conds = array(
+ if ( is_callable( [ User::class, 'getQueryInfo' ] ) ) {
+ $userQuery = User::getQueryInfo();
+ } else {
+ $userQuery = [
+ 'tables' => [ 'user' ],
+ 'fields' => User::selectFields(),
+ 'joins' => [],
+ ];
+ }
+ $tables = array_merge( $userQuery['tables'], [ 'user_groups' ] );
+ $fields = $userQuery['fields'];
+ $conds = [
'ug_group' => 'translate-sandboxed',
- 'ug_user = user_id',
- );
+ ];
+ $joins = [
+ 'user_groups' => [ 'JOIN', 'ug_user = user_id' ],
+ ] + $userQuery['joins'];
- $res = $dbw->select( $tables, $fields, $conds, __METHOD__ );
+ $res = $dbw->select( $tables, $fields, $conds, __METHOD__, [], $joins );
return UserArray::newFromResult( $res );
}
@@ -169,15 +231,15 @@ class TranslateSandbox {
$sender->getName()
)->inLanguage( $targetLang )->text();
- $params = array(
+ $params = [
'user' => $target->getId(),
- 'to' => new MailAddress( $target ),
- 'from' => new MailAddress( $sender ),
+ 'to' => MailAddress::newFromUser( $target ),
+ 'from' => MailAddress::newFromUser( $sender ),
'replyto' => new MailAddress( $wgNoReplyAddress ),
'subj' => $subject,
'body' => $body,
'emailType' => $type,
- );
+ ];
JobQueueGroup::singleton()->push( TranslateSandboxEmailJob::newJob( $params ) );
}
@@ -196,7 +258,12 @@ class TranslateSandbox {
return false;
}
- /// Hook: UserGetRights
+ /**
+ * Hook: UserGetRights
+ * @param User $user
+ * @param array &$rights
+ * @return true
+ */
public static function enforcePermissions( User $user, array &$rights ) {
global $wgTranslateUseSandbox;
@@ -209,7 +276,7 @@ class TranslateSandbox {
}
// right-translate-sandboxaction action-translate-sandboxaction
- $rights = array(
+ $rights = [
'editmyoptions',
'editmyprivateinfo',
'read',
@@ -217,16 +284,23 @@ class TranslateSandbox {
'translate-sandboxaction',
'viewmyprivateinfo',
'writeapi',
- );
+ ];
// Do not let other hooks add more actions
return false;
}
+ /// Hook: UserGetRights
+ public static function allowAccountCreation( $user, &$rights ) {
+ if ( self::$userToCreate && $user->equals( self::$userToCreate ) ) {
+ $rights[] = 'createaccount';
+ }
+ }
+
/// Hook: onGetPreferences
public static function onGetPreferences( $user, &$preferences ) {
$preferences['translate-sandbox'] = $preferences['translate-sandbox-reminders'] =
- array( 'type' => 'api' );
+ [ 'type' => 'api' ];
return true;
}
@@ -234,19 +308,27 @@ class TranslateSandbox {
/**
* Whitelisting for certain API modules. See also enforcePermissions.
* Hook: ApiCheckCanExecute
+ * @param ApiBase $module
+ * @param User $user
+ * @param string &$message
+ * @return bool
*/
public static function onApiCheckCanExecute( ApiBase $module, User $user, &$message ) {
- $whitelist = array(
+ $whitelist = [
// Obviously this is needed to get out of the sandbox
'ApiTranslationStash',
// Used by UniversalLanguageSelector for example
'ApiOptions'
- );
+ ];
- if ( TranslateSandbox::isSandboxed( $user ) ) {
+ if ( self::isSandboxed( $user ) ) {
$class = get_class( $module );
if ( $module->isWriteMode() && !in_array( $class, $whitelist, true ) ) {
- $message = 'writerequired';
+ $message = ApiMessage::create( 'apierror-writeapidenied' );
+ if ( $message->getApiCode() === 'apierror-writeapidenied' ) {
+ // Backwards compatibility for pre-1.29 MediaWiki
+ $message = 'writerequired';
+ }
return false;
}
}
diff --git a/www/wiki/extensions/Translate/utils/TranslateSandboxEmailJob.php b/www/wiki/extensions/Translate/utils/TranslateSandboxEmailJob.php
index b2532579..955e7156 100644
--- a/www/wiki/extensions/Translate/utils/TranslateSandboxEmailJob.php
+++ b/www/wiki/extensions/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 );
@@ -12,22 +12,18 @@ class TranslateSandboxEmailJob extends Job {
/**
* @param Title $title
* @param array $params
- * @param int $id
*/
- public function __construct( $title, $params, $id = 0 ) {
- parent::__construct( __CLASS__, $title, $params, $id );
+ public function __construct( $title, $params ) {
+ parent::__construct( __CLASS__, $title, $params );
}
public function run() {
- global $wgVersion;
$status = UserMailer::send(
$this->params['to'],
$this->params['from'],
$this->params['subj'],
$this->params['body'],
- version_compare( $wgVersion, '1.26.0', '<' )
- ? $this->params['replyto']
- : array( 'replyTo' => $this->params['replyto'] )
+ [ 'replyTo' => $this->params['replyto'] ]
);
$isOK = $status->isOK();
@@ -36,7 +32,7 @@ class TranslateSandboxEmailJob extends Job {
$user = User::newFromId( $this->params['user'] );
$reminders = $user->getOption( 'translate-sandbox-reminders' );
- $reminders = $reminders ? explode( '|', $reminders ) : array();
+ $reminders = $reminders ? explode( '|', $reminders ) : [];
$reminders[] = wfTimestamp();
$user->setOption( 'translate-sandbox-reminders', implode( '|', $reminders ) );
diff --git a/www/wiki/extensions/Translate/utils/TranslateYaml.php b/www/wiki/extensions/Translate/utils/TranslateYaml.php
index 96b275be..699676a9 100644
--- a/www/wiki/extensions/Translate/utils/TranslateYaml.php
+++ b/www/wiki/extensions/Translate/utils/TranslateYaml.php
@@ -6,7 +6,7 @@
* @author Ævar Arnfjörð Bjarmason
* @author Niklas Laxström
* @copyright Copyright © 2009-2013, Niklas Laxström, Ævar Arnfjörð Bjarmason
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -15,27 +15,7 @@
*/
class TranslateYaml {
/**
- * @deprecated in 2014.01
- */
- public static function parseGroupFile( $filename ) {
- $data = file_get_contents( $filename );
- wfDeprecated( 'Use MessageGroupConfigurationParser' );
- $parser = new MessageGroupConfigurationParser();
-
- return $parser->getHopefullyValidConfigurations( $data );
- }
-
- /**
- * @deprecated in 2014.01
- */
- public static function mergeTemplate( $base, $specific ) {
- wfDeprecated( 'Use MessageGroupConfigurationParser' );
-
- return MessageGroupConfigurationParser::mergeTemplate( $base, $specific );
- }
-
- /**
- * @param $text string
+ * @param string $text
* @return array
* @throws MWException
*/
@@ -44,19 +24,23 @@ class TranslateYaml {
switch ( $wgTranslateYamlLibrary ) {
case 'phpyaml':
- $ret = yaml_parse( $text );
+ // Harden: do not support unserializing objects.
+ // Method 1: PHP ini setting (not supported by HHVM)
+ // Method 2: Callback handler for !php/object
+ $previousValue = ini_set( 'yaml.decode_php', false );
+ $ignored = 0;
+ $callback = function ( $value ) {
+ return $value;
+ };
+ $ret = yaml_parse( $text, 0, $ignored, [ '!php/object' => $callback ] );
+ ini_set( 'yaml.decode_php', $previousValue );
if ( $ret === false ) {
// Convert failures to exceptions
throw new InvalidArgumentException( 'Invalid Yaml string' );
}
return $ret;
-
case 'spyc':
- // Load the bundled version if not otherwise available
- if ( !class_exists( 'Spyc' ) ) {
- require_once __DIR__ . '/../libs/spyc/spyc.php';
- }
$yaml = spyc_load( $text );
return self::fixSpycSpaces( $yaml );
@@ -70,7 +54,7 @@ class TranslateYaml {
}
/**
- * @param $yaml array
+ * @param array &$yaml
* @return array
*/
public static function fixSyckBooleans( &$yaml ) {
@@ -86,7 +70,7 @@ class TranslateYaml {
}
/**
- * @param $yaml array
+ * @param array &$yaml
* @return array
*/
public static function fixSpycSpaces( &$yaml ) {
@@ -112,11 +96,8 @@ class TranslateYaml {
switch ( $wgTranslateYamlLibrary ) {
case 'phpyaml':
- return yaml_emit( $text, YAML_UTF8_ENCODING );
-
+ return self::phpyamlDump( $text );
case 'spyc':
- require_once __DIR__ . '/../libs/spyc/spyc.php';
-
return Spyc::YAMLDump( $text );
case 'syck':
return self::syckDump( $text );
@@ -125,6 +106,28 @@ class TranslateYaml {
}
}
+ protected static function phpyamlDump( $data ) {
+ if ( !is_array( $data ) ) {
+ return yaml_emit( $data, YAML_UTF8_ENCODING );
+ }
+
+ // Fix decimal-less floats strings such as "2."
+ // https://bugs.php.net/bug.php?id=76309
+ $random = MWCryptRand::generateHex( 8 );
+ // Ensure our random does not look like a number
+ $random = "X$random";
+ $mangler = function ( &$item ) use ( $random ) {
+ if ( preg_match( '/^[0-9]+\.$/', $item ) ) {
+ $item = "$random$item$random";
+ }
+ };
+
+ array_walk_recursive( $data, $mangler );
+ $yaml = yaml_emit( $data, YAML_UTF8_ENCODING );
+ $yaml = str_replace( $random, '"', $yaml );
+ return $yaml;
+ }
+
protected static function syckLoad( $data ) {
# Make temporary file
$td = wfTempDir();
diff --git a/www/wiki/extensions/Translate/utils/TranslationHelpers.php b/www/wiki/extensions/Translate/utils/TranslationHelpers.php
index f871bcfc..1551a1a8 100644
--- a/www/wiki/extensions/Translate/utils/TranslationHelpers.php
+++ b/www/wiki/extensions/Translate/utils/TranslationHelpers.php
@@ -5,7 +5,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -19,6 +19,12 @@ class TranslationHelpers {
* @since 2012-01-04
*/
protected $handle;
+
+ /**
+ * @var TranslationAidDataProvider
+ */
+ private $dataProvider;
+
/**
* The group object of the message (or null if there isn't any)
* @var MessageGroup
@@ -26,13 +32,11 @@ class TranslationHelpers {
protected $group;
/**
- * The current translation as a string.
- */
- protected $translation;
- /**
- * The message definition as a string.
+ * The current translation.
+ * @var string
*/
- protected $definition;
+ private $translation;
+
/**
* HTML id to the text area that contains the translation. Used to insert
* suggestion directly into the text area, for example.
@@ -49,6 +53,7 @@ class TranslationHelpers {
*/
public function __construct( Title $title, $groupId ) {
$this->handle = new MessageHandle( $title );
+ $this->dataProvider = new TranslationAidDataProvider( $this->handle );
$this->group = $this->getMessageGroup( $this->handle, $groupId );
}
@@ -82,7 +87,7 @@ class TranslationHelpers {
/**
* Sets the HTML id of the text area that contains the translation.
- * @param $id String
+ * @param String $id
*/
public function setTextareaId( $id ) {
$this->textareaId = $id;
@@ -90,7 +95,7 @@ class TranslationHelpers {
/**
* Enable or disable extra help for editing.
- * @param $mode Boolean
+ * @param bool $mode
*/
public function setEditMode( $mode = true ) {
$this->editMode = $mode;
@@ -101,22 +106,16 @@ class TranslationHelpers {
* @return String
*/
public function getDefinition() {
- if ( $this->definition !== null ) {
- return $this->definition;
- }
-
$this->mustBeKnownMessage();
- if ( method_exists( $this->group, 'getMessageContent' ) ) {
- $this->definition = $this->group->getMessageContent( $this->handle );
- } else {
- $this->definition = $this->group->getMessage(
- $this->handle->getKey(),
- $this->group->getSourceLanguage()
- );
- }
+ $obj = new MessageDefinitionAid(
+ $this->group,
+ $this->handle,
+ RequestContext::getMain(),
+ $this->dataProvider
+ );
- return $this->definition;
+ return $obj->getData()['value'];
}
/**
@@ -126,7 +125,12 @@ class TranslationHelpers {
*/
public function getTranslation() {
if ( $this->translation === null ) {
- $obj = new CurrentTranslationAid( $this->group, $this->handle, RequestContext::getMain() );
+ $obj = new CurrentTranslationAid(
+ $this->group,
+ $this->handle,
+ RequestContext::getMain(),
+ $this->dataProvider
+ );
$aid = $obj->getData();
$this->translation = $aid['value'];
@@ -149,6 +153,7 @@ class TranslationHelpers {
/**
* Gets the linguistically correct language code for translation
+ * @return string
*/
public function getTargetLanguage() {
global $wgLanguageCode, $wgTranslateDocumentationLanguageCode;
@@ -169,21 +174,13 @@ class TranslationHelpers {
* Returns block element HTML snippet that contains the translation aids.
* Not all boxes are shown all the time depending on whether they have
* any information to show and on configuration variables.
- * @param $suggestions string
- * @return String. Block level HTML snippet or empty string.
+ * @return String Block level HTML snippet or empty string.
*/
- public function getBoxes( $suggestions = 'sync' ) {
+ public function getBoxes() {
// Box filter
$all = $this->getBoxNames();
- if ( $suggestions === 'checks' ) {
- $request = RequestContext::getMain()->getRequest();
- $this->translation = $request->getText( 'translation' );
-
- return (string)$this->callBox( 'check', $all['check'] );
- }
-
- $boxes = array();
+ $boxes = [];
foreach ( $all as $type => $cb ) {
$box = $this->callBox( $type, $cb );
if ( $box ) {
@@ -191,12 +188,12 @@ class TranslationHelpers {
}
}
- Hooks::run( 'TranslateGetBoxes', array( $this->group, $this->handle, &$boxes ) );
+ Hooks::run( 'TranslateGetBoxes', [ $this->group, $this->handle, &$boxes ] );
if ( count( $boxes ) ) {
return Html::rawElement(
'div',
- array( 'class' => 'mw-sp-translate-edit-fields' ),
+ [ 'class' => 'mw-sp-translate-edit-fields' ],
implode( "\n\n", $boxes )
);
} else {
@@ -213,7 +210,7 @@ class TranslationHelpers {
* @param array $params
* @return mixed
*/
- public function callBox( $type, $cb, array $params = array() ) {
+ public function callBox( $type, $cb, array $params = [] ) {
try {
return call_user_func_array( $cb, $params );
} catch ( TranslationHelperException $e ) {
@@ -225,14 +222,12 @@ class TranslationHelpers {
* @return array
*/
public function getBoxNames() {
- return array(
- 'other-languages' => array( $this, 'getOtherLanguagesBox' ),
- 'translation-diff' => array( $this, 'getPageDiff' ),
- 'separator' => array( $this, 'getSeparatorBox' ),
- 'documentation' => array( $this, 'getDocumentationBox' ),
- 'definition' => array( $this, 'getDefinitionBox' ),
- 'check' => array( $this, 'getCheckBox' ),
- );
+ return [
+ 'other-languages' => [ $this, 'getOtherLanguagesBox' ],
+ 'separator' => [ $this, 'getSeparatorBox' ],
+ 'documentation' => [ $this, 'getDocumentationBox' ],
+ 'definition' => [ $this, 'getDefinitionBox' ],
+ ];
}
public function getDefinitionBox() {
@@ -242,17 +237,17 @@ class TranslationHelpers {
$title = Linker::link(
SpecialPage::getTitleFor( 'Translate' ),
htmlspecialchars( $this->group->getLabel() ),
- array(),
- array(
+ [],
+ [
'group' => $this->group->getId(),
'language' => $this->handle->getCode()
- )
+ ]
);
$label =
- wfMessage( 'translate-edit-definition' )->text() .
- wfMessage( 'word-separator' )->text() .
- wfMessage( 'parentheses', $title )->text();
+ wfMessage( 'translate-edit-definition' )->escaped() .
+ wfMessage( 'word-separator' )->escaped() .
+ wfMessage( 'parentheses' )->rawParams( $title )->escaped();
// Source language object
$sl = Language::factory( $this->group->getSourceLanguage() );
@@ -260,17 +255,17 @@ class TranslationHelpers {
$dialogID = $this->dialogID();
$id = Sanitizer::escapeId( "def-$dialogID" );
$msg = $this->adder( $id, $sl ) . "\n" . Html::rawElement( 'div',
- array(
+ [
'class' => 'mw-translate-edit-deftext',
'dir' => $sl->getDir(),
'lang' => $sl->getHtmlCode(),
- ),
+ ],
TranslateUtils::convertWhiteSpaceToHTML( $en )
);
$msg .= $this->wrapInsert( $id, $en );
- $class = array( 'class' => 'mw-sp-translate-edit-definition mw-translate-edit-definition' );
+ $class = [ 'class' => 'mw-sp-translate-edit-definition mw-translate-edit-definition' ];
return TranslateUtils::fieldset( $label, $msg, $class );
}
@@ -280,92 +275,22 @@ class TranslationHelpers {
if ( $en === null ) {
return null;
}
- $label = wfMessage( 'translate-edit-translation' )->text();
- $class = array( 'class' => 'mw-translate-edit-translation' );
+ $label = wfMessage( 'translate-edit-translation' )->escaped();
+ $class = [ 'class' => 'mw-translate-edit-translation' ];
$msg = Html::rawElement( 'span',
- array( 'class' => 'mw-translate-edit-translationtext' ),
+ [ 'class' => 'mw-translate-edit-translationtext' ],
TranslateUtils::convertWhiteSpaceToHTML( $en )
);
return TranslateUtils::fieldset( $label, $msg, $class );
}
- public function getCheckBox() {
- $this->mustBeKnownMessage();
-
- global $wgTranslateDocumentationLanguageCode;
-
- $context = RequestContext::getMain();
- $title = $context->getOutput()->getTitle();
- list( $alias, ) = SpecialPageFactory::resolveAlias( $title->getText() );
-
- $tux = SpecialTranslate::isBeta( $context->getRequest() )
- && $title->isSpecialPage()
- && ( $alias === 'Translate' );
-
- $formattedChecks = $tux ?
- FormatJson::encode( array() ) :
- Html::element( 'div', array( 'class' => 'mw-translate-messagechecks' ) );
-
- $page = $this->handle->getKey();
- $translation = $this->getTranslation();
- $code = $this->handle->getCode();
- $en = $this->getDefinition();
-
- if ( (string)$translation === '' ) {
- return $formattedChecks;
- }
-
- if ( $code === $wgTranslateDocumentationLanguageCode ) {
- return $formattedChecks;
- }
-
- // We need to get the primary group of the message. It may differ from
- // the supplied group (aggregate groups, dynamic groups).
- $checker = $this->handle->getGroup()->getChecker();
- if ( !$checker ) {
- return $formattedChecks;
- }
-
- $message = new FatMessage( $page, $en );
- // Take the contents from edit field as a translation
- $message->setTranslation( $translation );
-
- $checks = $checker->checkMessage( $message, $code );
- if ( !count( $checks ) ) {
- return $formattedChecks;
- }
-
- $checkMessages = array();
-
- foreach ( $checks as $checkParams ) {
- $key = array_shift( $checkParams );
- $checkMessages[] = $context->msg( $key, $checkParams )->parse();
- }
-
- if ( $tux ) {
- $formattedChecks = FormatJson::encode( $checkMessages );
- } else {
- $formattedChecks = Html::rawElement(
- 'div',
- array( 'class' => 'mw-translate-messagechecks' ),
- TranslateUtils::fieldset(
- $context->msg( 'translate-edit-warnings' )->escaped(),
- implode( '<hr />', $checkMessages ),
- array( 'class' => 'mw-sp-translate-edit-warnings' )
- )
- );
- }
-
- return $formattedChecks;
- }
-
public function getOtherLanguagesBox() {
$code = $this->handle->getCode();
$page = $this->handle->getKey();
$ns = $this->handle->getTitle()->getNamespace();
- $boxes = array();
+ $boxes = [];
foreach ( self::getFallbacks( $code ) as $fbcode ) {
$text = TranslateUtils::getMessageContent( $page, $fbcode, $ns );
if ( $text === null ) {
@@ -378,20 +303,21 @@ class TranslationHelpers {
$context->msg( 'word-separator' )->text() .
$context->msg( 'parentheses', $fbLanguage->getHtmlCode() )->text();
- $target = Title::makeTitleSafe( $ns, "$page/$fbcode" );
+ $target = $this->handle->getTitleForLanguage( $fbcode );
+
if ( $target ) {
- $label = self::ajaxEditLink( $target, htmlspecialchars( $label ) );
+ $label = self::ajaxEditLink( $target, $label );
}
$dialogID = $this->dialogID();
$id = Sanitizer::escapeId( "other-$fbcode-$dialogID" );
- $params = array( 'class' => 'mw-translate-edit-item' );
+ $params = [ 'class' => 'mw-translate-edit-item' ];
$display = TranslateUtils::convertWhiteSpaceToHTML( $text );
- $display = Html::rawElement( 'div', array(
+ $display = Html::rawElement( 'div', [
'lang' => $fbLanguage->getHtmlCode(),
- 'dir' => $fbLanguage->getDir() ),
+ 'dir' => $fbLanguage->getDir() ],
$display
);
@@ -403,7 +329,7 @@ class TranslationHelpers {
}
if ( count( $boxes ) ) {
- $sep = Html::element( 'hr', array( 'class' => 'mw-translate-sep' ) );
+ $sep = Html::element( 'hr', [ 'class' => 'mw-translate-sep' ] );
return TranslateUtils::fieldset(
wfMessage(
@@ -411,7 +337,7 @@ class TranslationHelpers {
$page
)->escaped(),
implode( "$sep\n", $boxes ),
- array( 'class' => 'mw-sp-translate-edit-inother' )
+ [ 'class' => 'mw-sp-translate-edit-inother' ]
);
}
@@ -419,7 +345,7 @@ class TranslationHelpers {
}
public function getSeparatorBox() {
- return Html::element( 'div', array( 'class' => 'mw-translate-edit-extra' ) );
+ return Html::element( 'div', [ 'class' => 'mw-translate-edit-extra' ] );
}
public function getDocumentationBox() {
@@ -433,119 +359,55 @@ class TranslationHelpers {
$page = $this->handle->getKey();
$ns = $this->handle->getTitle()->getNamespace();
- $title = Title::makeTitle( $ns, $page . '/' . $wgTranslateDocumentationLanguageCode );
+ $title = $this->handle->getTitleForLanguage( $wgTranslateDocumentationLanguageCode );
$edit = self::ajaxEditLink(
$title,
- $context->msg( 'translate-edit-contribute' )->escaped()
+ $context->msg( 'translate-edit-contribute' )->text()
);
$info = TranslateUtils::getMessageContent( $page, $wgTranslateDocumentationLanguageCode, $ns );
$class = 'mw-sp-translate-edit-info';
// The information is most likely in English
- $divAttribs = array( 'dir' => 'ltr', 'lang' => 'en', 'class' => 'mw-content-ltr' );
+ $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
- $divAttribs = array( 'dir' => $lang->getDir(), 'lang' => $lang->getHtmlCode() );
+ $divAttribs = [ 'dir' => $lang->getDir(), 'lang' => $lang->getHtmlCode() ];
}
$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(),
- Html::rawElement( 'div', $divAttribs, $contents ), array( 'class' => $class )
- );
- }
-
- protected function getPageDiff() {
- $this->mustBeKnownMessage();
-
- $title = $this->handle->getTitle();
- $key = $this->handle->getKey();
-
- if ( !$title->exists() ) {
- return null;
- }
-
- $definitionTitle = Title::makeTitleSafe( $title->getNamespace(), "$key/en" );
- if ( !$definitionTitle || !$definitionTitle->exists() ) {
- return null;
- }
-
- $db = TranslateUtils::getSafeReadDB();
- $conds = array(
- 'rt_page' => $title->getArticleID(),
- 'rt_type' => RevTag::getType( 'tp:transver' ),
- );
- $options = array(
- 'ORDER BY' => 'rt_revision DESC',
- );
-
- $latestRevision = $definitionTitle->getLatestRevID();
-
- $translationRevision = $db->selectField( 'revtag', 'rt_value', $conds, __METHOD__, $options );
- if ( $translationRevision === false ) {
- return null;
- }
-
- // Using newFromId instead of newFromTitle, because the page might have been renamed
- $oldrev = Revision::newFromId( $translationRevision );
- if ( !$oldrev ) {
- // And someone might still have deleted it
- return null;
- }
-
- $oldtext = ContentHandler::getContentText( $oldrev->getContent() );
- $newContent = Revision::newFromTitle( $definitionTitle, $latestRevision )->getContent();
- $newtext = ContentHandler::getContentText( $newContent );
-
- if ( $oldtext === $newtext ) {
- return null;
- }
-
- $diff = new DifferenceEngine;
- if ( method_exists( 'DifferenceEngine', 'setTextLanguage' ) ) {
- $diff->setTextLanguage( $this->group->getSourceLanguage() );
- }
-
- $oldContent = ContentHandler::makeContent( $oldtext, $diff->getTitle() );
- $newContent = ContentHandler::makeContent( $newtext, $diff->getTitle() );
-
- $diff->setContent( $oldContent, $newContent );
- $diff->setReducedLineNumbers();
- $diff->showDiffStyle();
-
- return $diff->getDiff(
- wfMessage( 'tpt-diff-old' )->escaped(),
- wfMessage( 'tpt-diff-new' )->escaped()
+ Html::rawElement( 'div', $divAttribs, $contents ), [ 'class' => $class ]
);
}
/**
- * @param $label string
+ * @param string $label
* @return string
*/
protected static function legend( $label ) {
# Float it to the opposite direction
- return Html::rawElement( 'div', array( 'class' => 'mw-translate-legend' ), $label );
+ return Html::rawElement( 'div', [ 'class' => 'mw-translate-legend' ], $label );
}
/**
* @return string
*/
protected static function clear() {
- return Html::element( 'div', array( 'style' => 'clear:both;' ) );
+ return Html::element( 'div', [ 'style' => 'clear:both;' ] );
}
/**
- * @param $code string
+ * @param string $code
* @return array
*/
protected static function getFallbacks( $code ) {
@@ -566,7 +428,7 @@ class TranslationHelpers {
}
// Global configuration settings
- $fallbacks = array();
+ $fallbacks = [];
if ( isset( $wgTranslateLanguageFallbacks[$code] ) ) {
$fallbacks = (array)$wgTranslateLanguageFallbacks[$code];
}
@@ -599,47 +461,46 @@ class TranslationHelpers {
$target = self::jQueryPathId( $this->getTextareaId() );
$source = self::jQueryPathId( $source );
$dir = $lang->getDir();
- $params = array(
+ $params = [
'onclick' => "jQuery($target).val(jQuery($source).text()).focus(); return false;",
'href' => '#',
'title' => wfMessage( 'translate-use-suggestion' )->text(),
'class' => 'mw-translate-adder mw-translate-adder-' . $dir,
- );
+ ];
return Html::element( 'a', $params, '↓' );
}
/**
- * @param $id string|int
- * @param $text string
+ * @param string|int $id
+ * @param string $text
* @return string
*/
public function wrapInsert( $id, $text ) {
- return Html::element( 'pre', array( 'id' => $id, 'style' => 'display: none;' ), $text );
+ return Html::element( 'pre', [ 'id' => $id, 'style' => 'display: none;' ], $text );
}
/**
* Ajax-enabled message editing link.
- * @param $target Title: Title of the target message.
- * @param $text String: Link text for Linker::link()
+ * @param Title $target Title of the target message.
+ * @param string $text Link text for Linker::link()
* @return string HTML link
*/
- public static function ajaxEditLink( $target, $text ) {
+ public static function ajaxEditLink( Title $target, $text ) {
$handle = new MessageHandle( $target );
- $groupId = MessageIndex::getPrimaryGroupId( $handle );
-
- $params = array();
- $params['action'] = 'edit';
- $params['loadgroup'] = $groupId;
-
- $jsEdit = TranslationEditPage::jsEdit( $target, $groupId, 'dialog' );
+ $uri = TranslateUtils::getEditorUrl( $handle );
+ $link = Html::element(
+ 'a',
+ [ 'href' => $uri ],
+ $text
+ );
- return Linker::link( $target, $text, $jsEdit, $params );
+ return $link;
}
/**
* Escapes $id such that it can be used in jQuery selector.
- * @param $id string
+ * @param string $id
* @return string
*/
public static function jQueryPathId( $id ) {
@@ -649,9 +510,7 @@ class TranslationHelpers {
}
public static function addModules( OutputPage $out ) {
- $modules = array( 'ext.translate.quickedit' );
- Hooks::run( 'TranslateBeforeAddModules', array( &$modules ) );
- $out->addModules( $modules );
+ $out->addModuleStyles( 'ext.translate.quickedit' );
// Might be needed, but ajax doesn't load it
// Globals :(
diff --git a/www/wiki/extensions/Translate/utils/TranslationStats.php b/www/wiki/extensions/Translate/utils/TranslationStats.php
index 0a918f47..8ec59075 100644
--- a/www/wiki/extensions/Translate/utils/TranslationStats.php
+++ b/www/wiki/extensions/Translate/utils/TranslationStats.php
@@ -6,7 +6,7 @@
* @author Niklas Laxström
* @author Siebrand Mazeland
* @copyright Copyright © 2010-2013, Niklas Laxström, Siebrand Mazeland
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -19,19 +19,19 @@ class TranslationStats {
* Returns translated percentage for message group in given
* languages
*
- * @param $group \string Unique key identifying the group
- * @param $languages \array List of language codes
- * @param bool|int $threshold \int Minimum required percentage translated to
+ * @param string $group Unique key identifying the group
+ * @param string[] $languages List of language codes
+ * @param bool|int $threshold Minimum required percentage translated to
* return. Other given language codes will not be returned.
- * @param $simple \bool Return only codes or code/pecentage pairs
+ * @param bool $simple Return only codes or code/pecentage pairs
*
- * @return \array Array of key value pairs code (string)/percentage
+ * @return (float|string)[] Array of key value pairs code (string)/percentage
* (float) or array of codes, depending on $simple
*/
public static function getPercentageTranslated( $group, $languages, $threshold = false,
$simple = false
) {
- $stats = array();
+ $stats = [];
$g = MessageGroups::singleton()->getGroup( $group );
diff --git a/www/wiki/extensions/Translate/utils/TuxMessageTable.php b/www/wiki/extensions/Translate/utils/TuxMessageTable.php
index d3b68a1f..41d52a8a 100644
--- a/www/wiki/extensions/Translate/utils/TuxMessageTable.php
+++ b/www/wiki/extensions/Translate/utils/TuxMessageTable.php
@@ -7,26 +7,30 @@ class TuxMessageTable extends ContextSource {
public function __construct( IContextSource $context, MessageGroup $group, $language ) {
$this->setContext( $context );
$this->group = $group;
- $this->language = $language;
+ if ( Language::isKnownLanguageTag( $language ) ) {
+ $this->language = $language;
+ } else {
+ $this->language = $context->getLanguage()->getCode();
+ }
}
public function fullTable() {
- $modules = array( 'ext.translate.editor' );
- Hooks::run( 'TranslateBeforeAddModules', array( &$modules ) );
+ $modules = [];
+ Hooks::run( 'TranslateBeforeAddModules', [ &$modules ] );
$this->getOutput()->addModules( $modules );
$sourceLang = Language::factory( $this->group->getSourceLanguage() );
$targetLang = Language::factory( $this->language );
$batchSize = 100;
- $list = Html::element( 'div', array(
+ $list = Html::element( 'div', [
'class' => 'row tux-messagelist',
'data-grouptype' => get_class( $this->group ),
'data-sourcelangcode' => $sourceLang->getCode(),
'data-sourcelangdir' => $sourceLang->getDir(),
'data-targetlangcode' => $targetLang->getCode(),
'data-targetlangdir' => $targetLang->getDir(),
- ) );
+ ] );
$groupId = htmlspecialchars( $this->group->getId() );
$msg = $this->msg( 'tux-messagetable-loading-messages' )
@@ -36,8 +40,7 @@ class TuxMessageTable extends ContextSource {
$loader = <<<HTML
<div class="tux-messagetable-loader hide" data-messagegroup="$groupId" data-pagesize="$batchSize">
<span class="tux-loading-indicator"></span>
- <div class="tux-messagetable-loader-count"></div>
- <div class="tux-messagetable-loader-more">$msg</div>
+ <div class="tux-messagetable-loader-info">$msg</div>
</div>
HTML;
@@ -57,9 +60,9 @@ HTML;
<button class="toggle button tux-editor-clear-translated hide">$clearTranslated</button>
</div>
<div class="six columns tux-view-switcher text-center">
- <button class="toggle button down translate-mode-button">$modeTranslate
- </button><button class="toggle button down page-mode-button">$modePage
- </button><button class="toggle button hide proofread-mode-button">$modeProofread
+ <button class="toggle down translate-mode-button">$modeTranslate
+ </button><button class="toggle down page-mode-button">$modePage
+ </button><button class="toggle hide proofread-mode-button">$modeProofread
</button>
</div>
</div>
diff --git a/www/wiki/extensions/Translate/utils/UserToggles.php b/www/wiki/extensions/Translate/utils/UserToggles.php
index 97551934..b3205598 100644
--- a/www/wiki/extensions/Translate/utils/UserToggles.php
+++ b/www/wiki/extensions/Translate/utils/UserToggles.php
@@ -6,7 +6,7 @@
* @author Siebrand Mazeland
* @author Niklas Laxström
* @copyright Copyright © 2008-2010 Siebrand Mazeland, Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -17,38 +17,30 @@ class TranslatePreferences {
* Add 'translate-pref-nonewsletter' preference.
* This is most probably specific to translatewiki.net. Can be enabled
* with $wgTranslateNewsletterPreference.
- *
- * @param $user User
- * @param $preferences array
- * @return bool true
+ * @param User $user
+ * @param array &$preferences
+ * @return bool
*/
- public static function onGetPreferences( $user, &$preferences ) {
+ public static function onGetPreferences( User $user, array &$preferences ) {
global $wgTranslateNewsletterPreference;
if ( !$wgTranslateNewsletterPreference ) {
return true;
}
- global $wgEnableEmail, $wgEnotifRevealEditorAddress;
+ global $wgEnableEmail;
// Only show if email is enabled and user has a confirmed email address.
if ( $wgEnableEmail && $user->isEmailConfirmed() ) {
// 'translate-pref-nonewsletter' is used as opt-out for
// users with a confirmed email address
- $prefs = array(
- 'translate-nonewsletter' => array(
- 'type' => 'toggle',
- 'section' => 'personal/email',
- 'label-message' => 'translate-pref-nonewsletter'
- )
- );
+ $preferences['translate-nonewsletter'] = [
+ 'type' => 'toggle',
+ 'section' => 'personal/email',
+ 'label-message' => 'translate-pref-nonewsletter'
+ ];
- // Add setting after 'enotifrevealaddr'.
- $preferences = wfArrayInsertAfter( $preferences, $prefs,
- $wgEnotifRevealEditorAddress ? 'enotifrevealaddr' : 'enotifminoredits' );
}
-
- return true;
}
/**
@@ -56,7 +48,7 @@ class TranslatePreferences {
* These are the languages also shown when translating.
*
* @param User $user
- * @param array $preferences
+ * @param array &$preferences
* @return bool true
*/
public static function translationAssistLanguages( User $user, &$preferences ) {
@@ -67,7 +59,7 @@ class TranslatePreferences {
// Get available languages.
$languages = Language::fetchLanguageNames();
- $preferences['translate-editlangs'] = array(
+ $preferences['translate-editlangs'] = [
'class' => 'HTMLJsSelectToInputField',
// prefs-translate
'section' => 'editing/translate',
@@ -76,7 +68,7 @@ class TranslatePreferences {
'select' => $select,
'valid-values' => array_keys( $languages ),
'name' => 'translate-editlangs',
- );
+ ];
return true;
}
@@ -86,7 +78,7 @@ class TranslatePreferences {
* @return JsSelectToInput
*/
protected static function languageSelector() {
- if ( is_callable( array( 'LanguageNames', 'getNames' ) ) ) {
+ if ( is_callable( [ 'LanguageNames', 'getNames' ] ) ) {
$lang = RequestContext::getMain()->getLanguage();
$languages = LanguageNames::getNames( $lang->getCode(),
LanguageNames::FALLBACK_NORMAL
@@ -103,7 +95,6 @@ class TranslatePreferences {
}
$jsSelect = new JsSelectToInput( $selector );
- $jsSelect->setSourceId( 'mw-language-selector' );
return $jsSelect;
}
diff --git a/www/wiki/extensions/Translate/webservices/ApertiumWebService.php b/www/wiki/extensions/Translate/webservices/ApertiumWebService.php
index c813af89..d333621b 100644
--- a/www/wiki/extensions/Translate/webservices/ApertiumWebService.php
+++ b/www/wiki/extensions/Translate/webservices/ApertiumWebService.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -19,14 +19,14 @@ class ApertiumWebService extends TranslationWebService {
}
protected function mapCode( $code ) {
- return str_replace( '-', '_', wfBCP47( $code ) );
+ return str_replace( '-', '_', LanguageCode::bcp47( $code ) );
}
protected function doPairs() {
- $pairs = array();
+ $pairs = [];
$json = Http::get(
$this->config['pairs'],
- array( 'timeout' => $this->config['timeout'] ),
+ [ 'timeout' => $this->config['timeout'] ],
__METHOD__
);
$response = FormatJson::decode( $json );
@@ -47,21 +47,21 @@ class ApertiumWebService extends TranslationWebService {
protected function getQuery( $text, $from, $to ) {
if ( !isset( $this->config['key'] ) ) {
- throw new TranslationWebServiceException( 'API key is not set' );
+ throw new TranslationWebServiceConfigurationException( 'API key is not set' );
}
$text = trim( $text );
$text = $this->wrapUntranslatable( $text );
- $params = array(
+ $params = [
'q' => $text,
'langpair' => "$from|$to",
- 'x-application' => 'Translate ' . TRANSLATE_VERSION . ')',
- );
+ 'x-application' => 'MediaWiki Translate extension ' . TRANSLATE_VERSION,
+ ];
return TranslationQuery::factory( $this->config['url'] )
->timeout( $this->config['timeout'] )
- ->queryParamaters( $params );
+ ->queryParameters( $params );
}
protected function parseResponse( TranslationQueryResponse $reply ) {
diff --git a/www/wiki/extensions/Translate/webservices/CaighdeanWebService.php b/www/wiki/extensions/Translate/webservices/CaighdeanWebService.php
new file mode 100644
index 00000000..cb472d93
--- /dev/null
+++ b/www/wiki/extensions/Translate/webservices/CaighdeanWebService.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Contains a class for querying external translation service.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Implements support Caighdean translator api.
+ * @see https://github.com/kscanne/caighdean/blob/master/API.md
+ * @ingroup TranslationWebService
+ * @since 2017.04
+ */
+class CaighdeanWebService extends TranslationWebService {
+ public function getType() {
+ return 'mt';
+ }
+
+ public function mapCode( $code ) {
+ return $code;
+ }
+
+ protected function doPairs() {
+ $pairs = [
+ 'gd' => [ 'ga' => true ],
+ 'gv' => [ 'ga' => true ],
+ ];
+
+ return $pairs;
+ }
+
+ protected function getQuery( $text, $from, $to ) {
+ if ( !isset( $this->config['url'] ) ) {
+ throw new TranslationWebServiceConfigurationException( '`url` not set in configuration' );
+ }
+
+ $text = trim( $text );
+ if ( $text === '' ) {
+ throw new TranslationWebServiceInvalidInputException( 'Input is empty' );
+ }
+
+ $data = wfArrayToCgi( [
+ 'foinse' => $from,
+ 'teacs' => $text,
+ ] );
+
+ // Maximum payload is 16 KiB. Based ont testing 16000 bytes is safe by leaving 224
+ // bytes for other things.
+ if ( strlen( $data ) > 16000 ) {
+ throw new TranslationWebServiceInvalidInputException( 'Input is over 16000 bytes long' );
+ }
+
+ return TranslationQuery::factory( $this->config['url'] )
+ ->timeout( $this->config['timeout'] )
+ ->postWithData( $data )
+ ->attachProcessingInstructions( $text );
+ }
+
+ protected function parseResponse( TranslationQueryResponse $reply ) {
+ $body = $reply->getBody();
+ $response = FormatJson::decode( $body );
+ if ( !is_array( $response ) ) {
+ throw new TranslationWebServiceException( 'Invalid json: ' . serialize( $body ) );
+ }
+
+ $text = '';
+ $originalText = $reply->getQuery()->getProcessingInstructions();
+ foreach ( $response as list( $sourceToken, $targetToken ) ) {
+ $separator = ' ';
+ $pos = strpos( $originalText, $sourceToken );
+ // Try to keep the effects local. If we fail to match at token, we could accidentally
+ // scan very far ahead in the text, find a false match and not find matches for all
+ // of the tokens in the between.
+ if ( $pos !== false && $pos < 50 ) {
+ // Remove the portion of text we have processed. $pos should be zero, unless
+ // we failed to match something earlier.
+ $originalText = substr( $originalText, $pos + strlen( $sourceToken ) );
+ if ( preg_match( '/^\s+/', $originalText, $match ) ) {
+ $separator = $match[ 0 ];
+ $originalText = substr( $originalText, strlen( $separator ) );
+ } else {
+ $separator = '';
+ }
+ }
+
+ $text .= $targetToken . $separator;
+ }
+
+ return $text;
+ }
+}
diff --git a/www/wiki/extensions/Translate/webservices/CxserverWebService.php b/www/wiki/extensions/Translate/webservices/CxserverWebService.php
index 8bffcb2a..6ed7189d 100644
--- a/www/wiki/extensions/Translate/webservices/CxserverWebService.php
+++ b/www/wiki/extensions/Translate/webservices/CxserverWebService.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -23,15 +23,15 @@ class CxserverWebService extends TranslationWebService {
protected function doPairs() {
if ( !isset( $this->config['host'] ) ) {
- throw new TranslationWebServiceException( 'Cxserver host not set' );
+ throw new TranslationWebServiceConfigurationException( 'Cxserver host not set' );
}
- $pairs = array();
+ $pairs = [];
$url = $this->config['host'] . '/v1/list/mt';
$json = Http::get(
$url,
- array( $this->config['timeout'] ),
+ [ $this->config['timeout'] ],
__METHOD__
);
$response = FormatJson::decode( $json, true );
@@ -52,7 +52,7 @@ class CxserverWebService extends TranslationWebService {
protected function getQuery( $text, $from, $to ) {
if ( !isset( $this->config['host'] ) ) {
- throw new TranslationWebServiceException( 'Cxserver host not set' );
+ throw new TranslationWebServiceConfigurationException( 'Cxserver host not set' );
}
$text = trim( $text );
@@ -61,7 +61,7 @@ class CxserverWebService extends TranslationWebService {
return TranslationQuery::factory( $url )
->timeout( $this->config['timeout'] )
- ->postWithData( array( 'html' => $text ) );
+ ->postWithData( wfArrayToCgi( [ 'html' => $text ] ) );
}
protected function parseResponse( TranslationQueryResponse $reply ) {
@@ -71,7 +71,10 @@ class CxserverWebService extends TranslationWebService {
throw new TranslationWebServiceException( 'Invalid json: ' . serialize( $body ) );
}
- $text = preg_replace( '~^<div>(.*)</div>$~', '\1', $response->contents );
+ $text = $response->contents;
+ if ( preg_match( '~^<div>(.*)</div>$~', $text ) ) {
+ $text = preg_replace( '~^<div>(.*)</div>$~', '\1', $text );
+ }
$text = $this->unwrapUntranslatable( $text );
return trim( $text );
diff --git a/www/wiki/extensions/Translate/webservices/MicrosoftWebService.php b/www/wiki/extensions/Translate/webservices/MicrosoftWebService.php
index 0efac0d3..221944d5 100644
--- a/www/wiki/extensions/Translate/webservices/MicrosoftWebService.php
+++ b/www/wiki/extensions/Translate/webservices/MicrosoftWebService.php
@@ -4,12 +4,13 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @author Ulrich Strauss
+ * @license GPL-2.0-or-later
*/
/**
- * Implements support for Microsoft translation api v2.
- * @see http://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
*/
@@ -19,50 +20,55 @@ class MicrosoftWebService extends TranslationWebService {
}
protected function mapCode( $code ) {
- $map = array(
- 'zh-hant' => 'zh-CHT',
- 'zh-hans' => 'zh-CHS',
- );
-
- return isset( $map[$code] ) ? $map[$code] : $code;
+ $map = [
+ 'tl' => 'fil',
+ 'zh-hant' => 'zh-Hant',
+ 'zh-hans' => 'zh-Hans',
+ 'sr-ec' => 'sr-Cyrl',
+ 'sr-el' => 'sr-Latn',
+ 'pt-br' => 'pt',
+ ];
+
+ return $map[$code] ?? $code;
}
protected function doPairs() {
if ( !isset( $this->config['key'] ) ) {
- throw new TranslationWebServiceException( 'API key is not set' );
+ throw new TranslationWebServiceConfigurationException( 'key is not set' );
}
- $options = array();
- $options['method'] = 'GET';
- $options['timeout'] = $this->config['timeout'];
+ $key = $this->config['key'];
- $params = array(
- 'appId' => $this->config['key'],
- );
+ $options = [];
+ $options['method'] = 'GET';
+ $options['timeout'] = $this->config['timeout'];
- $url = 'http://api.microsofttranslator.com/V2/Http.svc/GetLanguagesForTranslate?';
- $url .= wfArrayToCgi( $params );
+ $url = $this->config['url'] . '/languages?api-version=3.0';
$req = MWHttpRequest::factory( $url, $options );
- $status = $req->execute();
+ $req->setHeader( 'Ocp-Apim-Subscription-Key', $key );
+ $status = $req->execute();
if ( !$status->isOK() ) {
$error = $req->getContent();
// Most likely a timeout or other general error
- $exception = 'Http request failed:' . serialize( $error ) . serialize( $status );
- throw new TranslationWebServiceException( $exception );
+ throw new TranslationWebServiceException(
+ 'Http::get failed:' . serialize( $error ) . serialize( $status )
+ );
}
- $xml = simplexml_load_string( $req->getContent() );
-
- $languages = array();
- 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
+ );
}
- // Let's make a cartesian product, assuming we can translate from any
- // language to any language
- $pairs = array();
+ $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 ) {
foreach ( $languages as $to ) {
$pairs[$from][$to] = true;
@@ -74,31 +80,63 @@ class MicrosoftWebService extends TranslationWebService {
protected function getQuery( $text, $from, $to ) {
if ( !isset( $this->config['key'] ) ) {
- throw new TranslationWebServiceException( 'API key is not set' );
+ throw new TranslationWebServiceConfigurationException( 'key is not set' );
}
+ $key = $this->config['key'];
$text = trim( $text );
$text = $this->wrapUntranslatable( $text );
- $params = array(
- 'text' => $text,
+ $url = $this->config['url'] . '/translate';
+ $params = [
+ 'api-version' => '3.0',
'from' => $from,
'to' => $to,
- 'appId' => $this->config['key'],
- );
+ 'textType' => 'html',
+ ];
+ $headers = [
+ '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'] )
- ->queryParamaters( $params );
+ ->queryParameters( $params )
+ ->queryHeaders( $headers )
+ ->postWithData( $body );
}
protected function parseResponse( TranslationQueryResponse $reply ) {
$body = $reply->getBody();
- $text = preg_replace( '~<string.*>(.*)</string>~', '\\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;
}
+
+ /// Override from parent
+ protected function wrapUntranslatable( $text ) {
+ $pattern = '~%[^% ]+%|\$\d|{VAR:[^}]+}|{?{(PLURAL|GRAMMAR|GENDER):[^|]+\||%(\d\$)?[sd]~';
+ $wrap = '<span class="notranslate">\0</span>';
+ return preg_replace( $pattern, $wrap, $text );
+ }
+
+ /// Override from parent
+ protected function unwrapUntranslatable( $text ) {
+ $pattern = '~<span class="notranslate">\s*(.*?)\s*</span>~';
+ return preg_replace( $pattern, '\1', $text );
+ }
}
diff --git a/www/wiki/extensions/Translate/webservices/QueryAggregator.php b/www/wiki/extensions/Translate/webservices/QueryAggregator.php
index 404adb82..6cc6465b 100644
--- a/www/wiki/extensions/Translate/webservices/QueryAggregator.php
+++ b/www/wiki/extensions/Translate/webservices/QueryAggregator.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -14,8 +14,8 @@
* @since 2015.02
*/
class QueryAggregator {
- protected $queries = array();
- protected $responses = array();
+ protected $queries = [];
+ protected $responses = [];
protected $timeout = 0;
protected $hasRun = false;
@@ -42,17 +42,25 @@ class QueryAggregator {
throw new RuntimeException( 'Tried to get response before queries ran' );
}
- return TranslationQueryResponse::newFromMultiHttp( $this->responses[$id] );
+ return TranslationQueryResponse::newFromMultiHttp(
+ $this->responses[$id],
+ $this->queries[$id]
+ );
}
/**
* Runs all the queries.
*/
public function run() {
- $http = new MultiHttpClient( array(
+ global $wgSitename;
+
+ $version = TRANSLATE_VERSION;
+
+ $http = new MultiHttpClient( [
'reqTimeout' => $this->timeout,
- 'connTimeout' => 3
- ) );
+ 'connTimeout' => 3,
+ 'userAgent' => "MediaWiki Translate extension $version for $wgSitename"
+ ] );
$responses = $http->runMulti( $this->getMultiHttpQueries( $this->queries ) );
foreach ( $responses as $index => $response ) {
$this->responses[$index] = $response;
@@ -66,13 +74,14 @@ class QueryAggregator {
* @return array[]
*/
protected function getMultiHttpQueries( $queries ) {
- $converter = function( TranslationQuery $q ) {
- return array(
+ $converter = function ( TranslationQuery $q ) {
+ return [
'url' => $q->getUrl(),
'method' => $q->getMethod(),
'query' => $q->getQueryParameters(),
'body' => $q->getBody(),
- );
+ 'headers' => $q->getHeaders(),
+ ];
};
return array_map( $converter, $queries );
diff --git a/www/wiki/extensions/Translate/webservices/QueryAggregatorAware.php b/www/wiki/extensions/Translate/webservices/QueryAggregatorAware.php
index 7806e806..c5c0e9a5 100644
--- a/www/wiki/extensions/Translate/webservices/QueryAggregatorAware.php
+++ b/www/wiki/extensions/Translate/webservices/QueryAggregatorAware.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
diff --git a/www/wiki/extensions/Translate/webservices/RESTBaseWebService.php b/www/wiki/extensions/Translate/webservices/RESTBaseWebService.php
new file mode 100644
index 00000000..2ff80c43
--- /dev/null
+++ b/www/wiki/extensions/Translate/webservices/RESTBaseWebService.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Contains a class for querying external translation service.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Implements support for cxserver proxied through RESTBase
+ * @ingroup TranslationWebService
+ * @since 2017.10
+ */
+class RESTBaseWebService extends TranslationWebService {
+ public function getType() {
+ return 'mt';
+ }
+
+ protected function mapCode( $code ) {
+ return $code;
+ }
+
+ protected function doPairs() {
+ if ( !isset( $this->config['host'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'RESTBase host not set' );
+ }
+
+ $pairs = [];
+
+ $url = $this->config['host'] . '/rest_v1/transform/list/tool/mt/';
+ $json = Http::get(
+ $url,
+ [ $this->config['timeout'] ],
+ __METHOD__
+ );
+ $response = FormatJson::decode( $json, true );
+
+ if ( !is_array( $response ) ) {
+ $exception = 'Malformed reply from remote server: ' . $url . ' ' . (string)$json;
+ throw new TranslationWebServiceException( $exception );
+ }
+
+ foreach ( $response['Apertium'] as $source => $targets ) {
+ foreach ( $targets as $target ) {
+ $pairs[$source][$target] = true;
+ }
+ }
+
+ return $pairs;
+ }
+
+ protected function getQuery( $text, $from, $to ) {
+ if ( !isset( $this->config['host'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'RESTBase host not set' );
+ }
+
+ $text = trim( $text );
+ $text = $this->wrapUntranslatable( $text );
+ $url = $this->config['host'] . "/rest_v1/transform/html/from/$from/to/$to/Apertium";
+
+ return TranslationQuery::factory( $url )
+ ->timeout( $this->config['timeout'] )
+ ->postWithData( wfArrayToCgi( [ 'html' => $text ] ) );
+ }
+
+ protected function parseResponse( TranslationQueryResponse $reply ) {
+ $body = $reply->getBody();
+
+ $response = FormatJson::decode( $body );
+ if ( !is_object( $response ) ) {
+ throw new TranslationWebServiceException( 'Invalid json: ' . serialize( $body ) );
+ }
+
+ $text = $response->contents;
+ $text = $this->unwrapUntranslatable( $text );
+
+ return trim( $text );
+ }
+}
diff --git a/www/wiki/extensions/Translate/webservices/RemoteTTMServerWebService.php b/www/wiki/extensions/Translate/webservices/RemoteTTMServerWebService.php
index ca713d51..c54d319a 100644
--- a/www/wiki/extensions/Translate/webservices/RemoteTTMServerWebService.php
+++ b/www/wiki/extensions/Translate/webservices/RemoteTTMServerWebService.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2010-2013 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -28,13 +28,13 @@ class RemoteTTMServerWebService extends TranslationWebService {
}
protected function getQuery( $text, $from, $to ) {
- $params = array(
+ $params = [
'format' => 'json',
'action' => 'ttmserver',
'sourcelanguage' => $from,
'targetlanguage' => $to,
'text' => $text
- );
+ ];
if ( isset( $this->config['service'] ) ) {
$params['service'] = $this->config['service'];
@@ -42,7 +42,7 @@ class RemoteTTMServerWebService extends TranslationWebService {
return TranslationQuery::factory( $this->config['url'] )
->timeout( $this->config['timeout'] )
- ->queryParamaters( $params );
+ ->queryParameters( $params );
}
protected function parseResponse( TranslationQueryResponse $reply ) {
diff --git a/www/wiki/extensions/Translate/webservices/TranslationQuery.php b/www/wiki/extensions/Translate/webservices/TranslationQuery.php
index ce7135cd..3e0fbf31 100644
--- a/www/wiki/extensions/Translate/webservices/TranslationQuery.php
+++ b/www/wiki/extensions/Translate/webservices/TranslationQuery.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -16,12 +16,18 @@ class TranslationQuery {
protected $url;
protected $timeout = 0;
protected $method = 'GET';
- protected $params = array();
+ protected $params = [];
protected $body;
+ protected $headers = [];
+
+ /**
+ * @var mixed Arbitrary data that is returned with TranslationQueryResponse
+ */
+ protected $instructions;
// URL is mandatory, so using it here
public static function factory( $url ) {
- $obj = new TranslationQuery();
+ $obj = new self();
$obj->url = $url;
return $obj;
}
@@ -38,16 +44,32 @@ class TranslationQuery {
return $this;
}
- public function queryParamaters( array $params ) {
+ public function queryParameters( array $params ) {
$this->params = $params;
return $this;
}
+ public function queryHeaders( array $headers ) {
+ $this->headers = $headers;
+ return $this;
+ }
+
public function timeout( $timeout ) {
$this->timeout = $timeout;
return $this;
}
+ /**
+ * Attach arbitrary data that is necessary to process the results.
+ * @param mixed $data
+ * @return self
+ * @since 2017.04
+ */
+ public function attachProcessingInstructions( $data ) {
+ $this->instructions = $data;
+ return $this;
+ }
+
public function getTimeout() {
return $this->timeout;
}
@@ -67,4 +89,17 @@ class TranslationQuery {
public function getBody() {
return $this->body;
}
+
+ public function getHeaders() {
+ return $this->headers;
+ }
+
+ /**
+ * Get previously attached result processing instructions.
+ * @return mixed
+ * @since 2017.04
+ */
+ public function getProcessingInstructions() {
+ return $this->instructions;
+ }
}
diff --git a/www/wiki/extensions/Translate/webservices/TranslationQueryResponse.php b/www/wiki/extensions/Translate/webservices/TranslationQueryResponse.php
index 7eb90fd9..a8f9f6dd 100644
--- a/www/wiki/extensions/Translate/webservices/TranslationQueryResponse.php
+++ b/www/wiki/extensions/Translate/webservices/TranslationQueryResponse.php
@@ -4,7 +4,7 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
@@ -18,17 +18,23 @@ class TranslationQueryResponse {
protected $body;
protected $error;
+ /**
+ * @var TranslationQuery
+ */
+ protected $query;
+
protected function __construct() {
}
- public static function newFromMultiHttp( array $data ) {
+ public static function newFromMultiHttp( array $data, TranslationQuery $query ) {
$response = $data['response'];
- $obj = new TranslationQueryResponse();
- $obj->code = (int) $response['code'];
+ $obj = new self();
+ $obj->code = (int)$response['code'];
$obj->reason = $response['reason'];
$obj->headers = $response['headers'];
$obj->body = $response['body'];
$obj->error = $response['error'];
+ $obj->query = $query;
return $obj;
}
@@ -47,4 +53,13 @@ class TranslationQueryResponse {
public function getBody() {
return $this->body;
}
+
+ /**
+ * Get the TranslationQuery that was made for this request.
+ * @return TranslationQuery
+ * @since 2017.04
+ */
+ public function getQuery() {
+ return $this->query;
+ }
}
diff --git a/www/wiki/extensions/Translate/webservices/TranslationWebService.php b/www/wiki/extensions/Translate/webservices/TranslationWebService.php
index 95f14e86..a72be868 100644
--- a/www/wiki/extensions/Translate/webservices/TranslationWebService.php
+++ b/www/wiki/extensions/Translate/webservices/TranslationWebService.php
@@ -4,9 +4,13 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
+use MediaWiki\Logger\LoggerFactory;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+
/**
* Multipurpose class:
* - 1) Interface for web services.
@@ -16,7 +20,7 @@
* @since 2013-01-01
* @defgroup TranslationWebService Translation Web Services
*/
-abstract class TranslationWebService {
+abstract class TranslationWebService implements LoggerAwareInterface {
/* Public api */
/**
@@ -28,13 +32,15 @@ abstract class TranslationWebService {
* @return TranslationWebService|null
*/
public static function factory( $name, $config ) {
- $handlers = array(
+ $handlers = [
'microsoft' => 'MicrosoftWebService',
'apertium' => 'ApertiumWebService',
'yandex' => 'YandexWebService',
'remote-ttmserver' => 'RemoteTTMServerWebService',
'cxserver' => 'CxserverWebService',
- );
+ 'restbase' => 'RESTBaseWebService',
+ 'caighdean' => 'CaighdeanWebService',
+ ];
if ( !isset( $config['timeout'] ) ) {
$config['timeout'] = 3;
@@ -57,7 +63,9 @@ abstract class TranslationWebService {
if ( isset( $handlers[$config['type']] ) ) {
$class = $handlers[$config['type']];
- return new $class( $name, $config );
+ $obj = new $class( $name, $config );
+ $obj->setLogger( LoggerFactory::getInstance( 'translationservices' ) );
+ return $obj;
}
return null;
@@ -82,13 +90,20 @@ abstract class TranslationWebService {
* @param string $to Target language
* @return TranslationQuery[]
* @since 2015.12
+ * @throws TranslationWebServiceConfigurationException
*/
public function getQueries( $text, $from, $to ) {
+ $from = $this->mapCode( $from );
+ $to = $this->mapCode( $to );
+
try {
- return array( $this->getQuery( $text, $from, $to ) );
- } catch ( Exception $e ) {
+ return [ $this->getQuery( $text, $from, $to ) ];
+ } catch ( TranslationWebServiceException $e ) {
$this->reportTranslationServiceFailure( $e->getMessage() );
- return array();
+ return [];
+ } catch ( TranslationWebServiceInvalidInputException $e ) {
+ // Not much we can do about this, just ignore.
+ return [];
}
}
@@ -96,20 +111,23 @@ abstract class TranslationWebService {
* Get the web service specific response returned by QueryAggregator.
*
* @param TranslationQueryResponse $response
- * @return mixed
+ * @return mixed|null Returns null on error.
* @since 2015.12
*/
public function getResultData( TranslationQueryResponse $response ) {
if ( $response->getStatusCode() !== 200 ) {
- $this->reportTranslationServiceFailure( $response->getStatusMessage() );
- return array();
+ $this->reportTranslationServiceFailure(
+ 'STATUS: ' . $response->getStatusMessage() . "\n" .
+ 'BODY: ' . $response->getBody()
+ );
+ return null;
}
try {
return $this->parseResponse( $response );
- } catch ( Exception $e ) {
+ } catch ( TranslationWebServiceException $e ) {
$this->reportTranslationServiceFailure( $e->getMessage() );
- return array();
+ return null;
}
}
@@ -137,6 +155,8 @@ abstract class TranslationWebService {
* getSupportedLanguagePairs.
*
* @return array $list[source language][target language] = true
+ * @throws TranslationWebServiceException
+ * @throws TranslationWebServiceConfigurationException
*/
abstract protected function doPairs();
@@ -148,6 +168,9 @@ abstract class TranslationWebService {
* @param string $to Language code of the translation, as used by the service.
* @return TranslationQuery
* @since 2015.02
+ * @throws TranslationWebServiceException
+ * @throws TranslationWebServiceConfigurationException
+ * @throws TranslationWebServiceInvalidInputException
*/
abstract protected function getQuery( $text, $from, $to );
@@ -155,8 +178,9 @@ abstract class TranslationWebService {
* Get the response. See getResultData for the public method.
*
* @param TranslationQueryResponse $response
- * @return mixed
+ * @return string
* @since 2015.02
+ * @throws TranslationWebServiceException
*/
abstract protected function parseResponse( TranslationQueryResponse $response );
@@ -173,7 +197,6 @@ abstract class TranslationWebService {
protected $config;
/**
- * TranslationWebService constructor.
* @param string $service Name of the webservice
* @param array $config
*/
@@ -189,14 +212,20 @@ abstract class TranslationWebService {
* @param string $to Target language
* @return bool
* @since 2015.12
+ * @throws TranslationWebServiceConfigurationException
*/
public function isSupportedLanguagePair( $from, $to ) {
$pairs = $this->getSupportedLanguagePairs();
+ $from = $this->mapCode( $from );
+ $to = $this->mapCode( $to );
+
return isset( $pairs[$from][$to] );
}
/**
- * @see doPairs
+ * @see self::doPairs
+ * @return array
+ * @throws TranslationWebServiceConfigurationException
*/
protected function getSupportedLanguagePairs() {
$key = wfMemcKey( 'translate-tmsug-pairs-' . $this->service );
@@ -206,7 +235,7 @@ abstract class TranslationWebService {
$pairs = $this->doPairs();
} catch ( Exception $e ) {
$this->reportTranslationServiceFailure( $e->getMessage() );
- return array();
+ return [];
}
// Cache the result for a day
wfGetCache( CACHE_ANYTHING )->set( $key, $pairs, 60 * 60 * 24 );
@@ -242,6 +271,10 @@ abstract class TranslationWebService {
/* Failure handling and suspending */
+ public function setLogger( LoggerInterface $logger ) {
+ $this->logger = $logger;
+ }
+
/**
* @var int How many failures during failure period need to happen to
* consider the service being temporarily off-line.
@@ -269,7 +302,7 @@ abstract class TranslationWebService {
if ( $failed + ( 2 * $this->serviceFailurePeriod ) < wfTimestamp() ) {
if ( $count >= $this->serviceFailureCount ) {
- wfDebugLog( 'translationservices', "Translation service $service (was) restored" );
+ $this->logger->warning( "Translation service $service (was) restored" );
}
wfGetCache( CACHE_ANYTHING )->delete( $key );
@@ -292,7 +325,7 @@ abstract class TranslationWebService {
*/
protected function reportTranslationServiceFailure( $msg ) {
$service = $this->service;
- wfDebugLog( 'translationservices', "Translation service $service problem: $msg" );
+ $this->logger->warning( "Translation service $service problem: $msg" );
$key = wfMemcKey( "translate-service-$service" );
$value = wfGetCache( CACHE_ANYTHING )->get( $key );
@@ -311,9 +344,9 @@ abstract class TranslationWebService {
);
if ( $count === $this->serviceFailureCount ) {
- wfDebugLog( 'translationservices', "Translation service $service suspended" );
+ $this->logger->error( "Translation service $service suspended" );
} elseif ( $count > $this->serviceFailureCount ) {
- wfDebugLog( 'translationservices', "Translation service $service still suspended" );
+ $this->logger->warning( "Translation service $service still suspended" );
}
}
}
diff --git a/www/wiki/extensions/Translate/webservices/TranslationWebServiceConfigurationException.php b/www/wiki/extensions/Translate/webservices/TranslationWebServiceConfigurationException.php
new file mode 100644
index 00000000..509224a4
--- /dev/null
+++ b/www/wiki/extensions/Translate/webservices/TranslationWebServiceConfigurationException.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Contains code related to web service support.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Used to signal a configuration mistake in an external web service. This is in
+ * contrast to TranslationWebServiceException that signals a failure in the web
+ * service itself.
+ * @since 2017.04
+ * @ingroup TranslationWebService
+ */
+class TranslationWebServiceConfigurationException extends Exception {
+}
diff --git a/www/wiki/extensions/Translate/webservices/TranslationWebServiceException.php b/www/wiki/extensions/Translate/webservices/TranslationWebServiceException.php
index af5368ca..fa4c1240 100644
--- a/www/wiki/extensions/Translate/webservices/TranslationWebServiceException.php
+++ b/www/wiki/extensions/Translate/webservices/TranslationWebServiceException.php
@@ -5,7 +5,7 @@
* @file
* @author Niklas Laxström
* @copyright Copyright © 2010-2013 Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
diff --git a/www/wiki/extensions/Translate/webservices/TranslationWebServiceInvalidInputException.php b/www/wiki/extensions/Translate/webservices/TranslationWebServiceInvalidInputException.php
new file mode 100644
index 00000000..e8ef9d08
--- /dev/null
+++ b/www/wiki/extensions/Translate/webservices/TranslationWebServiceInvalidInputException.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Contains code related to web service support.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Used to signal that the requested input is rejected and cannot be used with
+ * an external web service. This is in contrast to a failure in the web service
+ * itself that is not in our control. Most common case for this is input that is
+ * too long.
+ * service itself.
+ * @since 2017.04
+ * @ingroup TranslationWebService
+ */
+class TranslationWebServiceInvalidInputException extends Exception {
+}
diff --git a/www/wiki/extensions/Translate/webservices/YandexWebService.php b/www/wiki/extensions/Translate/webservices/YandexWebService.php
index 4f4d2940..fbb16844 100644
--- a/www/wiki/extensions/Translate/webservices/YandexWebService.php
+++ b/www/wiki/extensions/Translate/webservices/YandexWebService.php
@@ -4,12 +4,12 @@
*
* @file
* @author Niklas Laxström
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
/**
* Implements support for Yandex translation api v1.
- * @see http://api.yandex.com/translate/
+ * @see https://tech.yandex.com/translate/
* @ingroup TranslationWebService
* @since 2013-01-01
*/
@@ -27,19 +27,19 @@ class YandexWebService extends TranslationWebService {
protected function doPairs() {
if ( !isset( $this->config['key'] ) ) {
- throw new TranslationWebServiceException( 'API key is not set' );
+ throw new TranslationWebServiceConfigurationException( 'API key is not set' );
}
- $pairs = array();
+ $pairs = [];
- $params = array(
+ $params = [
'key' => $this->config['key'],
- );
+ ];
$url = $this->config['pairs'] . '?' . wfArrayToCgi( $params );
$json = Http::get(
$url,
- array( 'timeout' => $this->config['timeout'] ),
+ [ 'timeout' => $this->config['timeout'] ],
__METHOD__
);
$response = FormatJson::decode( $json );
@@ -59,12 +59,12 @@ class YandexWebService extends TranslationWebService {
protected function getQuery( $text, $from, $to ) {
if ( !isset( $this->config['key'] ) ) {
- throw new TranslationWebServiceException( 'API key is not set' );
+ throw new TranslationWebServiceConfigurationException( 'API key is not set' );
}
- # http://api.yandex.com/translate/doc/dg/reference/translate.xml
+ # https://tech.yandex.com/translate/doc/dg/reference/translate-docpage/
if ( strlen( $text ) > 10000 ) {
- throw new TranslationWebServiceException( 'Source text too long' );
+ throw new TranslationWebServiceInvalidInputException( 'Source text too long' );
}
$text = trim( $text );
@@ -73,12 +73,12 @@ class YandexWebService extends TranslationWebService {
return TranslationQuery::factory( $this->config['url'] )
->timeout( $this->config['timeout'] )
->postWithData(
- array(
+ [
'key' => $this->config['key'],
'text' => $text,
'lang' => "$from-$to",
'format' => 'html',
- )
+ ]
);
}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/.eslintrc.json b/www/wiki/extensions/UniversalLanguageSelector/.eslintrc.json
index c47c6ae6..0db901c6 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/.eslintrc.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/.eslintrc.json
@@ -4,8 +4,14 @@
"wikimedia/client",
"wikimedia/jquery"
],
+ "env": {
+ "commonjs": true
+ },
"globals": {
"mw": false,
"OO": false
+ },
+ "rules": {
+ "no-jquery/no-global-selector": "off"
}
}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/Gruntfile.js b/www/wiki/extensions/UniversalLanguageSelector/Gruntfile.js
index 738cfaef..a3ed1f12 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/Gruntfile.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/Gruntfile.js
@@ -10,6 +10,10 @@ module.exports = function ( grunt ) {
grunt.initConfig( {
eslint: {
+ options: {
+ reportUnusedDisableDirectives: true,
+ cache: true
+ },
all: '.'
},
stylelint: {
diff --git a/www/wiki/extensions/UniversalLanguageSelector/RELEASE-NOTES b/www/wiki/extensions/UniversalLanguageSelector/RELEASE-NOTES
new file mode 100644
index 00000000..06830feb
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/RELEASE-NOTES
@@ -0,0 +1,15 @@
+== UniversalLanguageSelector 2019.04 ==
+Released at 2019-04-25.
+
+=== Noteworthy changes ===
+* Various performance fixes.
+* Maintenance and localization updates.
+
+==== Input Methods ====
+* New tilde-based layouts for several languages of Africa: Kabyle, Kabiye,
+ Kikuyu, Luganda, Lingala, Malagasy, Northern Sotho, Koyraboro Senni, Sango,
+ Sotho, Venda.
+* Added Latin Pinyin transliteration keyboard
+
+==== Fonts ====
+* Added fonts for Church Slavonic. (T156843)
diff --git a/www/wiki/extensions/UniversalLanguageSelector/composer.json b/www/wiki/extensions/UniversalLanguageSelector/composer.json
index e749dc1e..484a1822 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/composer.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/composer.json
@@ -26,7 +26,7 @@
},
"require-dev": {
"jakub-onderka/php-parallel-lint": "1.0.0",
- "mediawiki/mediawiki-codesniffer": "19.1.0",
+ "mediawiki/mediawiki-codesniffer": "24.0.0",
"jakub-onderka/php-console-highlighter": "0.3.2",
"mediawiki/minus-x": "0.3.1"
},
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/LanguageNameIndexer.php b/www/wiki/extensions/UniversalLanguageSelector/data/LanguageNameIndexer.php
index c4a970bd..c9e45750 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/data/LanguageNameIndexer.php
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/LanguageNameIndexer.php
@@ -20,7 +20,7 @@
$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
- $IP = __DIR__ . '/../../..';
+ $IP = __DIR__ . '/../../..';
}
require_once "$IP/maintenance/Maintenance.php";
@@ -156,5 +156,5 @@ PHP;
}
}
-$maintClass = 'LanguageNameIndexer';
+$maintClass = LanguageNameIndexer::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.ttf b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.ttf
new file mode 100644
index 00000000..cc09a17f
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.ttf
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.woff b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.woff
new file mode 100644
index 00000000..64b747a3
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.woff
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.woff2 b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.woff2
new file mode 100644
index 00000000..bc18ebc4
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.woff2
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/font.ini b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/font.ini
new file mode 100644
index 00000000..07bfc00a
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Fedorovsk/font.ini
@@ -0,0 +1,6 @@
+[Fedorovsk]
+languages=cu
+version=3.1
+license=OFL-1.1
+licensefile=OFL.txt
+url=https://github.com/typiconman/fonts-cu
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.ttf b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.ttf
new file mode 100644
index 00000000..74943e6c
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.ttf
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.woff b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.woff
new file mode 100644
index 00000000..a6243bf2
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.woff
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.woff2 b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.woff2
new file mode 100644
index 00000000..deff70b0
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/MenaionUnicode.woff2
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/font.ini b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/font.ini
new file mode 100644
index 00000000..bfa1de6c
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Menaion/font.ini
@@ -0,0 +1,6 @@
+[Menaion]
+languages=cu
+version=2.0
+license=OFL-1.1
+licensefile=OFL.txt
+url=https://github.com/typiconman/fonts-cu
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.ttf b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.ttf
new file mode 100644
index 00000000..220c4795
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.ttf
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.woff b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.woff
new file mode 100644
index 00000000..0cc559da
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.woff
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.woff2 b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.woff2
new file mode 100644
index 00000000..9b3405fa
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/MonomakhUnicode.woff2
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/font.ini b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/font.ini
new file mode 100644
index 00000000..4502facb
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Monomakh/font.ini
@@ -0,0 +1,6 @@
+[Monomakh]
+languages=cu
+version=2.0
+license=OFL-1.1
+licensefile=OFL.txt
+url=https://github.com/typiconman/fonts-cu
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.ttf b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.ttf
new file mode 100644
index 00000000..dc4a8001
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.ttf
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.woff b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.woff
new file mode 100644
index 00000000..d0f1376e
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.woff
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.woff2 b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.woff2
new file mode 100644
index 00000000..4547b197
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/PonomarUnicode.woff2
Binary files differ
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/font.ini b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/font.ini
new file mode 100644
index 00000000..c608c2fb
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/fontrepo/fonts/Ponomar/font.ini
@@ -0,0 +1,6 @@
+[Ponomar]
+languages=cu
+version=1.2
+license=OFL-1.1
+licensefile=OFL.txt
+url=https://github.com/typiconman/fonts-cu
diff --git a/www/wiki/extensions/UniversalLanguageSelector/data/langsamples.json b/www/wiki/extensions/UniversalLanguageSelector/data/langsamples.json
index f89a3d06..4d985354 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/data/langsamples.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/data/langsamples.json
@@ -23,6 +23,7 @@
"cdo": " 敆擴展監視單單臺中顯示所有其更改,伓啻最近其更改 1點鐘:1 hour,1 日:1 day,1禮拜:1 week,2禮拜:2 weeks,1間月日:1 month,3間月日:3 months,6間月日:6 months,1年:1 year,永遠:infinite 敆汝開始修改茲蜀頁之前,已經有其他人改變茲蜀頁去了。懸頂文本區域包括原底存在其頁面文本。汝其改變敆下底文本區域顯示。汝必須合併汝其改變遘已經存在其文本。敆汝擪「{{int:savearticle}}」以後,'''囇有'''敆懸頂文本區域其文本會保存。 無頁鏈接遘'''[[:$1]]'''。 過濾器 用戶名: 伓是 「$1」共「$2」臺中𣍐蜀樣其地方 防止開賬戶 刪除 下蜀頁 → 茲蜀萆標題共[[User:$1|$1]]保護其咯。\n原因是$2。 改變賬戶其密碼 修改茲頁 (敆新窗口打開) 關於 確定密碼 我其討論頁有變其辰候,寄電批乞我 用戶 過幼修改 汝著指定蜀萆用戶名。 這般其改變 顯示$2日以內產生其$1回改變$3 *普通封鎖原因\n** 加添假其信息\n** 塗掉頁面內容\n** 發佈不實信息\n** 亂寫文字\n** 做獃/騷擾\n** 亂開賬戶\n** 亂起用戶名 操作失敗 茲頁無修改歷史。 所有乇 尋討 相關其改變 ({{PLURAL:$1|$1字節}}) 去 茲蜀頁其會拍印其版本 總結預覽: 每頁顯示$1{{PLURAL:$1|萆結果}} 頭𡅏無 汝其設定已經乞保存了。 管理員 亞洲 密碼 茲蜀頁 添加我編輯其頁面共文件遘我其監視單 ←加舊其版本 http://www.example.com 鏈接標題 框定其等級: '''記定茲若是蜀萆預覽。'''\n汝其改變固𡅏未保存! 茲蜀段使其{{PLURAL:$1|模板}}: 綻去:𣍐使提交表單。 轉去$1。 警告:茲蜀頁敆汝編輯以前已經乞刪唻了! 覷蜀覷內容頁面 一月$1號 印度洋 確認 $1 文件鏈接 內部錯誤:$1 敆$1𡅏尋討 修改數量: 修改封鎖原因 原因: 嵌入其文件 敆嚽塊拍入汝其用戶名 永久鏈接 非洲 覷蜀覷頭頁 加入{{SITENAME}} 𣍐使趁「$1」𡅏複製文件遘「$2」。 汝也會使選擇讓其他其用戶通過汝其用戶頁面或者討論頁面懸頂其鏈接,使電子郵件來聯繫汝。其他其用戶聯繫汝其辰候,汝其電子郵件地址𣍐顯示出來。 看分類頁 封鎖茲用戶 (繼續前斗) 是",
"ckb": " تایلەندی دەتوانیت دەق و مێژووی دەستکاریی پەڕەیەکی دەستنیشان کراو یان کۆمەڵێک پەڕە کە ناو پەڕگەیەکی XML دا پێچراونەتەوە، هەناردە بکەیت.\nدەکرێت ئەمە لە ویکییەکی دیکەدا ھاوردە بکرێت بە کەڵک وەرگرتن لە ئامرازی [[Special:Import|ھاوردە کردنی پەڕە]]ی MediaWiki.\n\nبۆ هەناردە کردنی پەڕەکان، سەرناوەکانیان لە چوارچێوەی خوارەوەدا بنووسە، هەر سەرناوێک لە هێڵێکدا. و هەڵبژێرە کە پێداچوونەوەی ئێستا و ھەموو پێداچوونەوە کۆنەکانت دەوێت یان تەنھا پێداچوونەوەی ئێستا و زانیاریی سەبارەت بە دوایین دەستکاری.\n\nئەگەر تەنھا پێداچوونەوەی ئێستات دەوێت، دەتوانیت بەستەرێکیش بە کار بھێنیت، بۆ نموونە [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] بۆ پەڕەی «[[{{MediaWiki:Mainpage}}]]». ئەمە لۆگێکی دروستکردنی بەکارھێنەرە. ئەم پەڕەیە لە لیستی چاودێریت لاببە بۆشاییی ناوی پەیوەندیدار نیشان بدە/بشارەوە $1 پەڕەی $3 {{GENDER:$2|بەرگری کرد}}. بچیتە ژوورەوە نیشانکردنی دەستکاریەکانی کەسانی تر وەک پاس دراو لاپەڕەی DjVu لەدەرۆی ڕیز ئەم ماڵپەڕە ناتوانێ ئیمەیل بنێرێ. ئایا دڵنیایت دەتەوێ پێداچوونەوەی سڕاوەی پەڕگەی \"$1\" لە $2، لە $3دا ببیینی؟",
"cr": " ᓃᔥᑕᒻᐹᔅᑌᒋᓂᑲᓐ ᓃᔥᑕᒻᐹᔅᑌᒋᓂᑲᓐ",
+ "cu": "Хрⷭ҇то́съ воскре́се и҆з̾ ме́ртвыхъ, сме́ртїю сме́рть попра́въ, и҆ сꙋ́щымъ во гробѣ́хъ живо́тъ дарова́въ.",
"cy": " Dyma'r tocyn cudd i borthiant gwe eich rhestr wylio.\nBydd unrhyw un sy'n gwybod hwn yn gallu darllen eich rhestr wylio, felly peidiwch a'i roi i neb.\n[[Special:ResetTokens|Cliciwch fan hyn os oes angen ailosod y tocyn]]. gweld/adfer Tudalen defnyddiwr $1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}} Rydych wedi ceisio golygu adran nad ydy'n bod.\nEfallai bod yr adran wedi cael ei symud neu ei dileu ers i chi agor y dudalen. Rhagolwg pwnc: Cyfeiriad IP neu enw defnyddiwr: Cyfraniadau hyd at y flwyddyn (ac yn gynharach): Categori '$1' Erthyglau yn nhrefn nifer eu categorïau Gwall gweld hanes dilëedig y dudalen hon Ydw, rydw i wir am ddatgloi'r gronfa ddata. Ni ellir symud ffeil i barth arall {{PLURAL:$1||$1 diwrnod|$1 ddiwrnod|$1 diwrnod|$1 diwrnod|$1 diwrnod}} Mae cyfrinair newydd wedi'i ddanfon at gyfeiriad e-bost cofrestredig \"$1\". Mewngofnodwch eto ar ôl i chi dderbyn y cyfrinair, os gwelwch yn dda. '''Cofiwch taw rhagolwg yw hwn.''' Nid yw eich gwaith wedi ei roi ar gadw eto!",
"da": " Følgende tekst udløste vores spamfilter: $1 '''Kunne ikke ændre logsynligheden.'''\n$1 Syntaksen i signaturen er ugyldig; kontroller venligst den brugte HTML. RSS-feed for denne side Se en liste over uovervågede sider Ugyldig eller fejlbehæftet JSON $1 {{PLURAL:$1|meter|meter}} over havets overflade Om projektet, hvad du kan gøre, hvor tingene findes Kreativprogram med tendens til stor skarphedsdybde januar {{PLURAL:$1|$1 dag|$1 dage}} Kun aften Anvendes ikke længere E-mailadressen kan ikke accepteres da den tilsyneladende har et ugyldigt format. Skriv venligst en e-mailadresse med et korrekt format eller tøm feltet. mandag '''\".$1\"''' er {{PLURAL:$4|en uønsket filtype|uønskede filtyper}}. {{PLURAL:$3|Den tilladte filtype|De tilladte filtyper}} er $2. {{PLURAL:$1|Anonym bruger|Anonyme brugere}} på {{SITENAME}} Geografisk bredde $1 {{PLURAL:$1|byte|bytes}} Ja Angiv et gyldigt sidenavn som destinationsside. Fra år (og tidligere): Fjern fra overvågningsliste mar $1 med $2 Søg APEX lysstyrke",
"de": " Filter Datei speichern Gesundheit $1 und $2: Unterschied zwischen den Seiten Das Zurücksetzen von Passwörtern wurde in diesem Wiki deaktiviert. Seite nicht vorhanden Mit diesem Formular kannst du eine IP-Adresse oder einen Benutzer freigeben. Art des Mediums Diese Datei hat die Dateiprüfung nicht bestanden. RSS-Feed für „$1“ {{PLURAL:$1|vorheriger|vorherige $1}} High gain up Eine neue Markierung erstellen '''Logbuchsichtbarkeit kann nicht geändert werden:'''\n$1 Fehler bei der Anmeldung Seite Dateien hochladen {{PLURAL:$2|Diese Kategorie enthält folgende Unterkategorie:|{{PLURAL:$1|Folgende Unterkategorie ist eine von insgesamt $2 Unterkategorien in dieser Kategorie:|Es werden $1 von insgesamt $2 Unterkategorien in dieser Kategorie angezeigt:}}}} Falscher Interwiki-Link Während der HTTP-Anfrage ist ein Fehler aufgetreten: $1 $2 {{PLURAL:$4|Du hast}} $1 von {{PLURAL:$3|einem anderen Benutzer|$3 Benutzern}} ($2). Suche Zeitautomatik Navigation Seite 1 Die Datei „$1“ konnte nicht nach „$2“ umbenannt werden.",
@@ -98,6 +99,7 @@
"saz": " ꢮꢾꢒ꣄ꢒꢶ ꢔꢸꢪ꣄ꢦꢸ ꢞꢶꢱ ꢙꢹꢭꣀ ꢓꣁꢨ꣄ꢨꢶꢪ꣄-ꢓꢵꢭꢸꢔꢶꢡꣁ ꢮꢮ꣄ꢬꢸꢥꢵꢬ꣄ ꢙꢹꢥ꣄ ꢲꢾꢣꢶ ꢡꢵꢫ꣄ ꢂꢱ꣄ꢒꢶ ꢨꢾꢱ꣄ꢡꢵꢬ꣄ꢣꢶ ꢂꢒ꣄ꢜꣁꢨꢬ꣄ ꢙꢥꢮꢬꢶ ꢱꢾꢥ꣄ꢪꢵꢬ꣄ꢣꢶ ꢂꢣ꣄ꢣꢶꢥ꣄ꢥꢵꢥ꣄ ꢮꢮ꣄ꢬꢸꢥꢵꢬ꣄ ꢥꢵꢮ꣄ ꢮꢮ꣄ꢬꢸꢥꢵꢬ꣄ ꢥꢵꢮ꣄ ꢭꢶꢒ꣄ꢒꢶꢥꢶ ꢂꢱ꣄ꢒꢶ ꢪꢵꢬ꣄ ꢱꣁ ꢩꢵꢰꣁ: ꢱꢾ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢨꢸ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢱꢾꢦ꣄ꢜꢪ꣄ꢨꢬ꣄ ꢪꢿ ꢂꢱ꣄ꢒꢶ ꢦꣁꢜ꣄ꢜꢵꢥ꣄ ꢨꢸꢣꢶꢫꢵꢬ꣄ꢣꢶ ꢚꢵꢫꢶ ꢩꢵꢰꣁ: $1 ꢨꢾ ꢍꢦ꣄ ꢎꢡꢵꢬ꣄ꢣꢶ ꢪꣁꢥ꣄ꢔꢸꢭꢵꢬ꣄ꢣꢶ ꢱꢸ ꢥꢶꢪ꣄ꢦꢶ ꢪꢴꢣꣁ ꢃꢔꢱ꣄ꢜꢸ ꢭꢾꢔꢸꢡ꣄ꢡꢵꢪ꣄ ꢪꢬ꣄ꢗꢾꢫꣁ ꢥꢮ ꢲꢸꢣꣁꢕꢵꢭ꣄ ꢏꢬ꣄ꢱꢸ ꢍꢦ꣄ꢬꢭ꣄ ꢙꢹꢥ꣄ ꢂꢒ꣄ ꢥꢵꢮꢸ ꢢꢵꢪ꣄ ꢱꣁꢪꢵꢬ꣄ꢣꢶ ꢓꢵꢭꢸꢔꢶꢡꣁ-ꢓꣁꢨ꣄ꢨꢶꢪ꣄ ꢥꣁꢒ꣄ꢒꣁ ꢪꢿ ꢥꣁꢮꣁ ꢦꣁꢜ꣄ꢜꣁ ꢮꢿꢫ꣄ ꢞꢶꢱꢪ꣄ꢨꢬ꣄ ꢣꢾꢒ꣄ꢒꢵꢞꢶ/ꢚꢵꢫꢶ ꢪꢵꢬ꣄ꢗꢸ ꢱꢾꢦ꣄ ꢲꢵꢡꢒ꣄ꢰꢬ꣄ ꢪꣁ ꢪꢬ꣄ꢗꢶ ꢲꢿꢡꢸ ꢣꢾꢒ꣄ꢒꢶꢬꢶꢫꣁ ꢙꢹꢭꣀ ꢧꢶꢨ꣄ꢬꢮꢬꢶ ꢲꢶꢖ꣄ꢔꢵꢞ꣄ ꢥꢴꢥ꣄ꢥꢶ ꢚꢵꢫ꣄ ꢎ \"$1\" ꢬꢴꢷ ꢓꢳ꣄ꢳꢶ ꢃꢮ꣄ ꢂꢱ꣄ꢒꢶ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢥꢮꢪ꣄ꢨꢬ꣄ ꢱꢵ ꢃꢔ ꢣꢾꢒ꣄ꢒꢞ꣄ꢥꢒꣁ ꢮꢾꢒ꣄ꢒꢶ ꢙꢥ ꢧꢶꢦ꣄ ꢥꣁꢮꣁ ꢭꢶꢒ꣄ꢒꢶꢥꢶ ꢲꢿꢜ꣄ ꢱꢸꢒ꣄ꢬꢵꢬ꣄ꢣꢶ ꢚꢵꢫꢶ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢭꢶꢒ꣄ꢒꢶꢥꢶ ꢱꢿꢡ꣄ꢡꢾ ꢦꣁꢜ꣄ꢜꣁ ꢓꢵꢭꢸ ꢔꢶꢡꣁ",
"si": " පිටුව: සැම විටම ඇතුළු වීමේදී ආරක්ෂාකාරී ජාලයක් භාවිතා කරන්න යටපත් කිරීම ගොනු ඉතිහාසය \"$1\" පරිශීලක ගිණුම ලියාපදිංචි කර නොමැත. පුරුෂ සංස්කරණයන් සිදුකර ඇති පරිශීලකයන් පමණක් පෙන්වන්න අයැද ඇති පිටු ශීර්ෂය වලංගු නොවන UTF-8 වෙත අනුක්රමය අඩංගු වේ. විස්තීරණය කරන ලද විස්තර පෙන්වන්න උදවු පිටුව නැවත සකස් කිරීමට කිසිදු ටෝකන් පත් වේ. පරිශීලක නාමය හෝ IP ලිපිනය: අනෙකුන්ගෙන් මෙන්ම පරිපාලකයන්ගෙන්ද දත්ත යටපත් කරන්න අනෙකුත් හේතුව සටහන: හේතුවෙන් තාක්ෂණික සීමාවන් නිසා, මෙවැනි එකක් ලෙස ඉහළ විභේදනයක් GIF ගොණු රූප සිඟිති සජීවිකරණ නොවේ කිරීම . විද්‍යුත්-තැපෑල වාරණය කෙරිණි {{GENDER:$1|රොබෝවරයා}} පෙර අවවාදය නොසලකා හැර කෙසේ හෝ ගොනුව සුරකින්න මෙම පිටුව කියවන්න හඳුනා නොගත් දෝෂයක් ඇතිවිය. සබැඳි ශීර්ෂය අනන්‍යාංක $1 දරණ අයිතමය වෙනස් කිරීමෙහිදී දෝෂයක් ඇතිවී ඇත: එය දත්ත ගබඩාවෙන් අස්ථානගතවී ඇත! අනෙකුත් පරිශීලකයන්ගෙන් විද්‍යුත්-තැපෑල ලැබීම සක්‍රීය කරන්න ආරෝහණ සංශෝධනයන් ප්‍රතිෂ්ඨාපනය කරන්න වෙනස් කරන ලද ගොනු විස්තරය ඉදිරිපත් කරන්න ජූනි ප්‍රාදේශීය වේලාව: මුර-නොකෙරෙන පිටු ලැයිස්තුව නරඹන්න තහවුරුකිරීමකින් තොරව, පිටුවක් සඳහා අඩවි පූර්වාපේක්‍ෂි සංචිතය (කෑෂය) විමෝචනය කරන්න",
"sq": " Kjo faqe speciale tregon skedat e ngarkuara së fundmi. Stampa të papërdorura Burimi i medias Gjuha $1 përfshirjet Flashi nuk u ndez redakto Një kod vërtetimi ju është dërguar më parë. Nëse sapo hapët llogarinë tuaj prisni disa minuta deri sa t'iu arrijë mesazhi përpara se të kërkoni një kod të ri. Titull i pavlefshëm në vendosjen e rezultateve: $1 Kjo adresë IP është e bllokuar aktualisht.\nBllokimi i funditë është më poshtë për referencë: Ju nuk keni leje për të redaktuar këtë faqe JavaScript, sepse ai përmban cilësimet personale tjetër user's. Mundeni gjithashtu të zgjidhni të kontaktoheni nga të tjerët përmes faqeve tuaja të diskutimit ose përdoruesit pa e treguar identitetin. kohë tjetër Shënoje këtë redaktim të vogël Kjo faqe është shikuar {{PLURAL:$1|një|$1 herë}} . Jeni i/e sigurt se dëshironi të shikoni një version të grisur të skedës \"$1\" nga $2 tek $3? Zona e sensorit two-chip kolor $1 pa mbështetje të kërkimit me teskt të plotë Burimi i skedës Kodi për shtetin ku është marrë fotografia",
+ "su": "Hobbes mangaruhan sakabéh widang pangajaran moral di Inggris sarta falsafah pulitik, utamana liwat bukuna anu miboga judul \"Leviathan\".",
"sux": "",
"sv": " Version {{GENDER:$1|bekräftad användare}} Icke-kalibrerad {{GENDER:$1|byråkrat}} Skicka modifierad filbeskrivning Det är inte tillåtet att skriva över en befintlig fil. Nya sidor $1 {{PLURAL:$1|ändring|ändringar}} Ett nytt lösenord har skickats till den e-postadress som användaren \"$1\" har registrerat. När du får meddelandet, var god logga in igen. Upplösning i fokalplan x *Vanliga motiv till blockering\n** Infogar falsk information\n** Tar bort sidinnehåll\n** Länkspam till externa sajter\n** Lägger till nonsens på sidor\n** Hotfullt beteende/trakasserier\n** Missbruk av flera användarkonton\n** Oacceptabelt användarnamn Prioritet för slutare Flytta root-användarsidor HTTP-begäran avbröts. Ta bort kommentarer Fel: Redigeringen misslyckades jan Uppdateringar för den här sidan är för närvarande inaktiverade.\nData kommer i nuläget inte att uppdateras. Mall {{PLURAL:$1|Vald filversion|Valda filversioner}} av [[:$2]]: Skrivskydda denna sida '''[[Media:$1|$1]]''' har återställts till [$4 versionen från $2 kl. $3].",
"sw": " Onyesha mada '''Ilani''': Ukurasa huu ulifutwa ulipokwisha kuanza huuhariri! Maslahi ya binadamu Jambo lisilotegemewa: \"$1\"=\"$2\". URL batili: $1 Mada: (hana) Kiarabu kilichoongezwa Jina la ukurasa ni batili au linatumia kiambishi awali cha mradi mwingine.\nInaweza kuwa na herufi isiyoweza kutumiwa ndani ya majina ya kurasa. '''Kubadilisha uwezo wa kuona pitio hakufaulu:'''\n$1 Chanzo: Kuna mtu amesajili akaunti kwa kutumia anwani ya barua pepe yako kwenye {{SITENAME}} ($4) anaitwa \"$2\", yenye neno la siri \"$3\".\nInabidi uingie na kisha ubadilishe neno la siri lako sasa.\n\nUnaweza kupuuza ujumbe huu, endapo akaunti hii ilianzishwa kimakosa. Mwanzo Vichwa vya habari vijipange namba-vyenyewe hariri Jamii {{PLURAL:$1|inayofuata ina|zinazofuata zina}} kurasa au mafaili ya picha au sauti.\n[[Special:UnusedCategories|Jamii zisizotumiwa]] hazitandazwi hapa.\nTazama pia [[Special:WantedCategories|jamii zinazohitajika]]. ukubwa wa faili: $1, aina ya MIME: $2 Jamii zinazoungwa kuliko zote Mada ya ukurasa ulioombwa unaashiria ukurasa wa mazungumzi ambao hauko.",
diff --git a/www/wiki/extensions/UniversalLanguageSelector/extension.json b/www/wiki/extensions/UniversalLanguageSelector/extension.json
index ee52243f..cc0903f8 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/extension.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/extension.json
@@ -1,370 +1,393 @@
{
- "name": "UniversalLanguageSelector",
- "version": "2019-01-17",
- "author": [
- "Alolita Sharma",
- "Amir Aharoni",
- "Arun Ganesh",
- "Brandon Harris",
- "Kartik Mistry",
- "Niharika Kohli",
- "Niklas Laxström",
- "Pau Giner",
- "Santhosh Thottingal",
- "Siebrand Mazeland"
- ],
- "url": "https://www.mediawiki.org/wiki/Extension:UniversalLanguageSelector",
- "descriptionmsg": "uls-desc",
- "license-name": "GPL-2.0-or-later",
- "requires": {
- "MediaWiki": ">= 1.30.0"
- },
- "Hooks": {
- "BeforePageDisplay": "UniversalLanguageSelectorHooks::addModules",
- "EnterMobileMode": "UniversalLanguageSelectorHooks::onEnterMobileMode",
- "GetBetaFeaturePreferences": "UniversalLanguageSelectorHooks::onGetBetaFeaturePreferences",
- "GetPreferences": "UniversalLanguageSelectorHooks::onGetPreferences",
- "LocalUserCreated": "UniversalLanguageSelectorHooks::onLocalUserCreated",
- "MakeGlobalVariablesScript": "UniversalLanguageSelectorHooks::addVariables",
- "PersonalUrls": "UniversalLanguageSelectorHooks::addPersonalBarTrigger",
- "ResourceLoaderGetConfigVars": "UniversalLanguageSelectorHooks::addConfig",
- "ResourceLoaderRegisterModules": "UniversalLanguageSelectorHooks::onResourceLoaderRegisterModules",
- "ResourceLoaderTestModules": "UniversalLanguageSelectorHooks::addTestModules",
- "SkinTemplateOutputPageBeforeExec": "UniversalLanguageSelectorHooks::onSkinTemplateOutputPageBeforeExec",
- "UserGetLanguageObject": "UniversalLanguageSelectorHooks::getLanguage"
- },
- "APIModules": {
- "languagesearch": "ApiLanguageSearch",
- "ulslocalization": "ApiULSLocalization"
- },
- "MessagesDirs": {
- "UniversalLanguageSelector": [
- "i18n",
- "i18n/api"
- ]
- },
- "AutoloadClasses": {
- "ApiLanguageSearch": "api/ApiLanguageSearch.php",
- "ApiULSLocalization": "api/ApiULSLocalization.php",
- "FontRepoCompiler": "includes/FontRepoCompiler.php",
- "LanguageNameSearch": "data/LanguageNameSearch.php",
- "LanguageNameSearchData": "data/LanguageNameSearchData.php",
- "ResourceLoaderULSJsonMessageModule": "includes/ResourceLoaderULSJsonMessageModule.php",
- "ResourceLoaderULSModule": "includes/ResourceLoaderULSModule.php",
- "ULSJsonMessageLoader": "includes/ULSJsonMessageLoader.php",
- "UniversalLanguageSelectorHooks": "UniversalLanguageSelector.hooks.php"
- },
- "DefaultUserOptions": {
- "uls-preferences": "",
- "compact-language-links": true
- },
- "config": {
- "@ULSGeoService": "ULS can use a geolocation service to suggest languages based on the country the user is vising from. If set to an URL it will query that service which must return an object which has key \"country_code\" or \"country\". For example https://api.ipstack.com/check?access_key=yourkey&fields=country_code. Setting this to false will prevent built-in geolocation from being used. You can also provide your own geolocation by assigning such object to window.Geo.",
- "ULSGeoService": false,
- "@ULSEnable": "Enable language selection, compact language links, input methods and webfonts for everyone, unless the behavior is overridden by the configuration variables below. Even if false the classes and resource loader modules are registered for the use of other extensions. Language changing via cookie or setlang query parameter is not possible.",
- "ULSEnable": true,
- "@ULSEnableAnon": "Equivalent to $wgULSEnable for anonymous users only. Does not have any effect if $wgULSEnable is false.",
- "ULSEnableAnon": true,
- "@ULSAnonCanChangeLanguage": "Allow anonymous users to change language with cookie and setlang query parameter. Do not use if you are caching anonymous page views without taking cookies into account. Does not have any effect if either of $wgULSEnable or $wgULSEnableAnon is set to false. @since 2013.04",
- "ULSAnonCanChangeLanguage": true,
- "@ULSLanguageDetection": "Try to use preferred interface language for anonymous users. Do not use if you are caching anonymous page views without taking Accept-Language into account. Does not have any effect if any of $wgULSEnable, or $wgULSEnableAnon is set to false.",
- "ULSLanguageDetection": true,
- "@ULSIMEEnabled": "Enable the input methods feature for all users by default. Can be controlled by the user.",
- "ULSIMEEnabled": true,
- "@ULSWebfontsEnabled": "Enable the webfonts feature for all users by default. Can be controlled by the user. @since 2014.02",
- "ULSWebfontsEnabled": true,
- "@ULSMobileWebfontsEnabled": "Set whether webfont support is loaded within the mobile interface (via the MobileFrontend extension).",
- "ULSMobileWebfontsEnabled": false,
- "@ULSPosition": "The location and the form of the language selection trigger. The possible values are: (a) \"personal\"- as a link near the username or the log in link in the personal toolbar (default). (b) \"interlanguage\": as an icon near the header of the list of interlanguage links in the sidebar.",
- "ULSPosition": "personal",
- "@ULSEventLogging": "Whether to use EventLogging. The EventLogging extension must be installed if this option is enabled. @since 2013.06",
- "ULSEventLogging": false,
- "@ULSImeSelectors": "Array of jQuery selectors of elements on which IME should be enabled. @since 2013.11",
- "ULSImeSelectors": [
- "input:not([type])",
- "input[type=text]",
- "input[type=search]",
- "textarea",
- "[contenteditable]"
- ],
- "@ULSNoImeSelectors": "Array of jQuery selectors of elements on which IME must not be enabled. @since 2013.07",
- "ULSNoImeSelectors": [
- "#wpCaptchaWord",
- ".ve-ce-surface-paste"
- ],
- "@ULSNoWebfontsSelectors": "Array of jQuery selectors of elements on which webfonts must not be applied. By default exclude elements with .autonym because that style set font as Autonym @since 2013.09",
- "ULSNoWebfontsSelectors": [
- "#p-lang li.interlanguage-link > a"
- ],
- "@ULSFontRepositoryBasePath": "Base path of ULS font repository. If not set, will be set to 'UniversalLanguageSelector/data/fontrepo/fonts/', relative to $wgExtensionAssetsPath. @since 2013.10",
- "ULSFontRepositoryBasePath": false,
- "ULSCompactLanguageLinksBetaFeature": true,
- "@ULSCompactLanguageLinksBetaFeature": "Set compact interlanguage links as beta feature or not. If set false, compact interlanguage links will be available by default to all users.",
- "ULSCompactLinksForNewAccounts": false,
- "@ULSCompactLinksForNewAccounts": "Enable compact interlanguage links for new user accounts.",
- "ULSCompactLinksEnableAnon": false,
- "@ULSCompactLinksEnableAnon": "Enable compact interlanguage links for anonymous users."
- },
- "callback": "UniversalLanguageSelectorHooks::setVersionConstant",
- "ResourceModules": {
- "ext.uls.common": {
- "targets": [ "desktop", "mobile" ],
- "scripts": "js/ext.uls.common.js",
- "styles": "css/ext.uls.less",
- "skinStyles": {
- "monobook": "css/ext.uls-monobook.css",
- "vector": "css/ext.uls-vector.less"
- },
- "dependencies": [
- "jquery.uls.data",
- "mediawiki.api",
- "mediawiki.cookie",
- "mediawiki.storage",
- "mediawiki.user"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.compactlinks": {
- "scripts": "js/ext.uls.compactlinks.js",
- "styles": "css/ext.uls.compactlinks.less",
- "dependencies": [
- "mediawiki.jqueryMsg",
- "mediawiki.language",
- "mediawiki.ui.button",
- "ext.uls.init"
- ],
- "messages": [
- "ext-uls-compact-link-count",
- "ext-uls-compact-link-info",
- "ext-uls-compact-no-results"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.geoclient": {
- "scripts": "js/ext.uls.geoclient.js",
- "dependencies": [
- "mediawiki.cookie"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.i18n": {
- "targets": [ "desktop", "mobile" ],
- "scripts": "js/ext.uls.i18n.js",
- "dependencies": [
- "jquery.i18n",
- "mediawiki.util"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.ime": {
- "scripts": "js/ext.uls.ime.js",
- "dependencies": [
- "ext.uls.common",
- "ext.uls.preferences",
- "ext.uls.mediawiki",
- "ext.uls.messages",
- "jquery.ime",
- "mediawiki.notify"
- ],
- "messages": [
- "uls-ime-helppage"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.init": {
- "targets": [ "desktop" ],
- "dependencies": [ "ext.uls.common" ]
- },
- "ext.uls.inputsettings": {
- "scripts": "js/ext.uls.inputsettings.js",
- "styles": "css/ext.uls.inputsettings.less",
- "dependencies": [
- "ext.uls.ime",
- "ext.uls.languagesettings",
- "ext.uls.mediawiki",
- "jquery.ime",
- "mediawiki.ui.button",
- "mediawiki.ui.radio"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.interface": {
- "scripts": "js/ext.uls.interface.js",
- "styles": "css/ext.uls.interface.less",
- "dependencies": [
- "ext.uls.common",
- "mediawiki.jqueryMsg",
- "mediawiki.storage",
- "mediawiki.user",
- "ext.uls.webfonts"
- ],
- "messages": [
- "uls-plang-title-languages",
- "ext-uls-select-language-settings-icon-tooltip",
- "ext-uls-undo-language-tooltip-text",
- "ext-uls-undo-language-tooltip-text-local"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.interlanguage": {
- "styles": "css/ext.uls.interlanguage.less",
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.languagenames": {
- "class": "ResourceLoaderULSModule"
- },
- "ext.uls.languagesettings": {
- "scripts": "js/ext.uls.languagesettings.js",
- "styles": "css/ext.uls.languagesettings.less",
- "dependencies": [
- "ext.uls.messages",
- "ext.uls.preferences",
- "jquery.uls.grid",
- "mediawiki.ui.button"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.mediawiki": {
- "targets": [ "desktop", "mobile" ],
- "scripts": "js/ext.uls.mediawiki.js",
- "dependencies": [
- "ext.uls.common",
- "ext.uls.languagenames",
- "ext.uls.messages",
- "jquery.uls",
- "jquery.uls.grid",
- "mediawiki.util"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.messages": {
- "class": "ResourceLoaderULSJsonMessageModule",
- "dependencies": "ext.uls.i18n",
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.preferencespage": {
- "styles": "css/ext.uls.preferencespage.less",
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.pt": {
- "styles": "css/ext.uls.pt.less",
- "localBasePath": "resources",
- "skinStyles": {
- "monobook": "css/ext.uls.pt-monobook.less"
- },
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.webfonts": {
- "scripts": "js/ext.uls.webfonts.js",
- "dependencies": [
- "ext.uls.common",
- "ext.uls.preferences",
- "jquery.client"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.webfonts.fonts": {
- "dependencies": [
- "jquery.webfonts",
- "ext.uls.webfonts.repository"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.webfonts.mobile": {
- "scripts": "js/ext.uls.webfonts.mobile.js",
- "targets": [
- "mobile"
- ],
- "dependencies": [
- "jquery.webfonts",
- "ext.uls.webfonts.repository"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "ext.uls.webfonts.repository": {
- "scripts": "js/ext.uls.webfonts.repository.js",
- "targets": [
- "desktop",
- "mobile"
- ],
- "localBasePath": "resources",
- "remoteExtPath": "UniversalLanguageSelector/resources"
- },
- "jquery.ime": {
- "scripts": "jquery.ime/jquery.ime.js",
- "styles": "jquery.ime/css/jquery.ime.css",
- "localBasePath": "lib",
- "remoteExtPath": "UniversalLanguageSelector/lib"
- },
- "jquery.uls": {
- "targets": [ "desktop", "mobile" ],
- "scripts": [
- "jquery.uls/src/jquery.uls.core.js",
- "jquery.uls/src/jquery.uls.lcd.js",
- "jquery.uls/src/jquery.uls.languagefilter.js"
- ],
- "styles": [
- "jquery.uls/css/jquery.uls.css",
- "jquery.uls/css/jquery.uls.lcd.css"
- ],
- "dependencies": [
- "jquery.i18n",
- "jquery.uls.data",
- "jquery.uls.grid"
- ],
- "localBasePath": "lib",
- "remoteExtPath": "UniversalLanguageSelector/lib"
- },
- "jquery.uls.data": {
- "scripts": [
- "jquery.uls/src/jquery.uls.data.js",
- "jquery.uls/src/jquery.uls.data.utils.js"
- ],
- "targets": [
- "desktop",
- "mobile"
- ],
- "localBasePath": "lib",
- "remoteExtPath": "UniversalLanguageSelector/lib"
- },
- "jquery.uls.grid": {
- "targets": [ "desktop", "mobile" ],
- "styles": "jquery.uls/css/jquery.uls.grid.css",
- "localBasePath": "lib",
- "remoteExtPath": "UniversalLanguageSelector/lib"
- },
- "jquery.webfonts": {
- "scripts": "jquery.webfonts/src/jquery.webfonts.js",
- "targets": [
- "desktop",
- "mobile"
- ],
- "localBasePath": "lib",
- "remoteExtPath": "UniversalLanguageSelector/lib"
- },
- "rangy.core": {
- "scripts": "rangy/rangy-core.js",
- "localBasePath": "lib",
- "remoteExtPath": "UniversalLanguageSelector/lib"
- }
- },
- "EventLoggingSchemas": {
- "UniversalLanguageSelector": 17799034
- },
- "manifest_version": 1
-}
+ "name": "UniversalLanguageSelector",
+ "version": "2019-04-24 [https://www.mediawiki.org/wiki/MLEB MLEB 2019.04]",
+ "author": [
+ "Alolita Sharma",
+ "Amir Aharoni",
+ "Arun Ganesh",
+ "Brandon Harris",
+ "Kartik Mistry",
+ "Niharika Kohli",
+ "Niklas Laxström",
+ "Pau Giner",
+ "Santhosh Thottingal",
+ "Siebrand Mazeland"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:UniversalLanguageSelector",
+ "descriptionmsg": "uls-desc",
+ "license-name": "GPL-2.0-or-later",
+ "requires": {
+ "MediaWiki": ">= 1.30.0"
+ },
+ "Hooks": {
+ "BeforePageDisplay": "UniversalLanguageSelectorHooks::addModules",
+ "EnterMobileMode": "UniversalLanguageSelectorHooks::onEnterMobileMode",
+ "GetBetaFeaturePreferences": "UniversalLanguageSelectorHooks::onGetBetaFeaturePreferences",
+ "GetPreferences": "UniversalLanguageSelectorHooks::onGetPreferences",
+ "LocalUserCreated": "UniversalLanguageSelectorHooks::onLocalUserCreated",
+ "MakeGlobalVariablesScript": "UniversalLanguageSelectorHooks::addVariables",
+ "PersonalUrls": "UniversalLanguageSelectorHooks::addPersonalBarTrigger",
+ "ResourceLoaderGetConfigVars": "UniversalLanguageSelectorHooks::addConfig",
+ "ResourceLoaderRegisterModules": "UniversalLanguageSelectorHooks::onResourceLoaderRegisterModules",
+ "ResourceLoaderTestModules": "UniversalLanguageSelectorHooks::addTestModules",
+ "SkinTemplateOutputPageBeforeExec": "UniversalLanguageSelectorHooks::onSkinTemplateOutputPageBeforeExec",
+ "UserGetLanguageObject": "UniversalLanguageSelectorHooks::getLanguage"
+ },
+ "APIModules": {
+ "languagesearch": "ApiLanguageSearch",
+ "ulslocalization": "ApiULSLocalization"
+ },
+ "MessagesDirs": {
+ "UniversalLanguageSelector": [
+ "i18n",
+ "i18n/api"
+ ]
+ },
+ "AutoloadClasses": {
+ "ApiLanguageSearch": "includes/api/ApiLanguageSearch.php",
+ "ApiULSLocalization": "includes/api/ApiULSLocalization.php",
+ "FontRepoCompiler": "includes/FontRepoCompiler.php",
+ "LanguageNameSearch": "data/LanguageNameSearch.php",
+ "LanguageNameSearchData": "data/LanguageNameSearchData.php",
+ "ResourceLoaderULSJsonMessageModule": "includes/ResourceLoaderULSJsonMessageModule.php",
+ "ResourceLoaderULSModule": "includes/ResourceLoaderULSModule.php",
+ "ULSJsonMessageLoader": "includes/ULSJsonMessageLoader.php",
+ "UniversalLanguageSelectorHooks": "includes/UniversalLanguageSelectorHooks.php"
+ },
+ "DefaultUserOptions": {
+ "uls-preferences": "",
+ "compact-language-links": true
+ },
+ "config": {
+ "@ULSGeoService": "ULS can use a geolocation service to suggest languages based on the country the user is vising from. If set to an URL it will query that service which must return an object which has key \"country_code\" or \"country\". For example https://api.ipstack.com/check?access_key=yourkey&fields=country_code. Setting this to false will prevent built-in geolocation from being used. You can also provide your own geolocation by assigning such object to window.Geo.",
+ "ULSGeoService": false,
+ "@ULSEnable": "Enable language selection, compact language links, input methods and webfonts for everyone, unless the behavior is overridden by the configuration variables below. Even if false the classes and resource loader modules are registered for the use of other extensions. Language changing via cookie or setlang query parameter is not possible.",
+ "ULSEnable": true,
+ "@ULSEnableAnon": "Equivalent to $wgULSEnable for anonymous users only. Does not have any effect if $wgULSEnable is false.",
+ "ULSEnableAnon": true,
+ "@ULSAnonCanChangeLanguage": "Allow anonymous users to change language with cookie and setlang query parameter. Do not use if you are caching anonymous page views without taking cookies into account. Does not have any effect if either of $wgULSEnable or $wgULSEnableAnon is set to false. @since 2013.04",
+ "ULSAnonCanChangeLanguage": true,
+ "@ULSLanguageDetection": "Try to use preferred interface language for anonymous users. Do not use if you are caching anonymous page views without taking Accept-Language into account. Does not have any effect if any of $wgULSEnable, or $wgULSEnableAnon is set to false.",
+ "ULSLanguageDetection": true,
+ "@ULSIMEEnabled": "Enable the input methods feature for all users by default. Can be controlled by the user.",
+ "ULSIMEEnabled": true,
+ "@ULSWebfontsEnabled": "Enable the webfonts feature for all users by default. Can be controlled by the user. @since 2014.02",
+ "ULSWebfontsEnabled": true,
+ "@ULSMobileWebfontsEnabled": "Set whether webfont support is loaded within the mobile interface (via the MobileFrontend extension).",
+ "ULSMobileWebfontsEnabled": false,
+ "@ULSPosition": "The location and the form of the language selection trigger. The possible values are: (a) \"personal\"- as a link near the username or the log in link in the personal toolbar (default). (b) \"interlanguage\": as an icon near the header of the list of interlanguage links in the sidebar.",
+ "ULSPosition": "personal",
+ "@ULSEventLogging": "Whether to use EventLogging. The EventLogging extension must be installed if this option is enabled. @since 2013.06",
+ "ULSEventLogging": false,
+ "@ULSImeSelectors": "Array of jQuery selectors of elements on which IME should be enabled. @since 2013.11",
+ "ULSImeSelectors": [
+ "input:not([type])",
+ "input[type=text]",
+ "input[type=search]",
+ "textarea",
+ "[contenteditable]"
+ ],
+ "@ULSNoImeSelectors": "Array of jQuery selectors of elements on which IME must not be enabled. @since 2013.07",
+ "ULSNoImeSelectors": [
+ "#wpCaptchaWord",
+ ".ve-ce-surface-paste",
+ ".ve-ce-surface-readOnly [contenteditable]"
+ ],
+ "@ULSNoWebfontsSelectors": "Array of jQuery selectors of elements on which webfonts must not be applied. By default exclude elements with .autonym because that style set font as Autonym @since 2013.09",
+ "ULSNoWebfontsSelectors": [
+ "#p-lang li.interlanguage-link > a"
+ ],
+ "@ULSFontRepositoryBasePath": "Base path of ULS font repository. If not set, will be set to 'UniversalLanguageSelector/data/fontrepo/fonts/', relative to $wgExtensionAssetsPath. @since 2013.10",
+ "ULSFontRepositoryBasePath": false,
+ "ULSCompactLanguageLinksBetaFeature": true,
+ "@ULSCompactLanguageLinksBetaFeature": "Set compact interlanguage links as beta feature or not. If set false, compact interlanguage links will be available by default to all users.",
+ "ULSCompactLinksForNewAccounts": false,
+ "@ULSCompactLinksForNewAccounts": "Enable compact interlanguage links for new user accounts.",
+ "ULSCompactLinksEnableAnon": false,
+ "@ULSCompactLinksEnableAnon": "Enable compact interlanguage links for anonymous users."
+ },
+ "callback": "UniversalLanguageSelectorHooks::setVersionConstant",
+ "ResourceModules": {
+ "ext.uls.common": {
+ "targets": [
+ "desktop",
+ "mobile"
+ ],
+ "scripts": [
+ "js/ext.uls.eventlogger.js",
+ "js/ext.uls.common.js"
+ ],
+ "styles": "css/ext.uls.less",
+ "skinStyles": {
+ "monobook": "css/ext.uls-monobook.css",
+ "vector": "css/ext.uls-vector.less"
+ },
+ "dependencies": [
+ "jquery.uls.data",
+ "mediawiki.api",
+ "mediawiki.cookie",
+ "mediawiki.storage",
+ "mediawiki.user"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.compactlinks": {
+ "scripts": "js/ext.uls.compactlinks.js",
+ "styles": "css/ext.uls.compactlinks.less",
+ "dependencies": [
+ "mediawiki.jqueryMsg",
+ "mediawiki.language",
+ "mediawiki.ui.button",
+ "ext.uls.init"
+ ],
+ "messages": [
+ "ext-uls-compact-link-count",
+ "ext-uls-compact-link-info",
+ "ext-uls-compact-no-results"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.geoclient": {
+ "scripts": "js/ext.uls.geoclient.js",
+ "dependencies": [
+ "mediawiki.cookie"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.i18n": {
+ "targets": [
+ "desktop",
+ "mobile"
+ ],
+ "scripts": "js/ext.uls.i18n.js",
+ "dependencies": [
+ "jquery.i18n",
+ "mediawiki.util"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.ime": {
+ "scripts": "js/ext.uls.ime.js",
+ "dependencies": [
+ "ext.uls.common",
+ "ext.uls.preferences",
+ "ext.uls.mediawiki",
+ "ext.uls.messages",
+ "jquery.ime",
+ "mediawiki.notify"
+ ],
+ "messages": [
+ "uls-ime-helppage"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.init": {
+ "targets": [
+ "desktop"
+ ],
+ "dependencies": [
+ "ext.uls.common"
+ ]
+ },
+ "ext.uls.inputsettings": {
+ "scripts": "js/ext.uls.inputsettings.js",
+ "styles": "css/ext.uls.inputsettings.less",
+ "dependencies": [
+ "ext.uls.ime",
+ "ext.uls.languagesettings",
+ "ext.uls.mediawiki",
+ "jquery.ime",
+ "mediawiki.ui.button",
+ "mediawiki.ui.radio"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.interface": {
+ "scripts": "js/ext.uls.interface.js",
+ "styles": "css/ext.uls.interface.less",
+ "dependencies": [
+ "ext.uls.common",
+ "mediawiki.jqueryMsg",
+ "mediawiki.storage",
+ "mediawiki.user",
+ "ext.uls.webfonts"
+ ],
+ "messages": [
+ "uls-plang-title-languages",
+ "ext-uls-select-language-settings-icon-tooltip",
+ "ext-uls-undo-language-tooltip-text",
+ "ext-uls-undo-language-tooltip-text-local"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.interlanguage": {
+ "styles": "css/ext.uls.interlanguage.less",
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.languagenames": {
+ "class": "ResourceLoaderULSModule"
+ },
+ "ext.uls.languagesettings": {
+ "scripts": "js/ext.uls.languagesettings.js",
+ "styles": "css/ext.uls.languagesettings.less",
+ "dependencies": [
+ "ext.uls.messages",
+ "ext.uls.preferences",
+ "jquery.uls.grid",
+ "mediawiki.ui.button"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.mediawiki": {
+ "targets": [
+ "desktop",
+ "mobile"
+ ],
+ "scripts": "js/ext.uls.mediawiki.js",
+ "dependencies": [
+ "ext.uls.common",
+ "ext.uls.languagenames",
+ "ext.uls.messages",
+ "jquery.uls",
+ "jquery.uls.grid",
+ "mediawiki.util"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.messages": {
+ "class": "ResourceLoaderULSJsonMessageModule",
+ "dependencies": "ext.uls.i18n",
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.preferencespage": {
+ "styles": "css/ext.uls.preferencespage.less",
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.pt": {
+ "styles": "css/ext.uls.pt.less",
+ "localBasePath": "resources",
+ "skinStyles": {
+ "monobook": "css/ext.uls.pt-monobook.less"
+ },
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.webfonts": {
+ "scripts": "js/ext.uls.webfonts.js",
+ "dependencies": [
+ "ext.uls.common",
+ "ext.uls.preferences",
+ "jquery.client"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.webfonts.fonts": {
+ "dependencies": [
+ "jquery.webfonts",
+ "ext.uls.webfonts.repository"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.webfonts.mobile": {
+ "scripts": "js/ext.uls.webfonts.mobile.js",
+ "targets": [
+ "mobile"
+ ],
+ "dependencies": [
+ "jquery.webfonts",
+ "ext.uls.webfonts.repository"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "ext.uls.webfonts.repository": {
+ "scripts": "js/ext.uls.webfonts.repository.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ],
+ "localBasePath": "resources",
+ "remoteExtPath": "UniversalLanguageSelector/resources"
+ },
+ "jquery.ime": {
+ "scripts": "jquery.ime/jquery.ime.js",
+ "styles": "jquery.ime/css/jquery.ime.css",
+ "localBasePath": "lib",
+ "remoteExtPath": "UniversalLanguageSelector/lib"
+ },
+ "jquery.uls": {
+ "targets": [
+ "desktop",
+ "mobile"
+ ],
+ "scripts": [
+ "jquery.uls/src/jquery.uls.core.js",
+ "jquery.uls/src/jquery.uls.lcd.js",
+ "jquery.uls/src/jquery.uls.languagefilter.js"
+ ],
+ "styles": [
+ "jquery.uls/css/jquery.uls.css",
+ "jquery.uls/css/jquery.uls.lcd.css"
+ ],
+ "dependencies": [
+ "jquery.i18n",
+ "jquery.uls.data",
+ "jquery.uls.grid"
+ ],
+ "localBasePath": "lib",
+ "remoteExtPath": "UniversalLanguageSelector/lib"
+ },
+ "jquery.uls.data": {
+ "scripts": [
+ "jquery.uls/src/jquery.uls.data.js",
+ "jquery.uls/src/jquery.uls.data.utils.js"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ],
+ "localBasePath": "lib",
+ "remoteExtPath": "UniversalLanguageSelector/lib"
+ },
+ "jquery.uls.grid": {
+ "targets": [
+ "desktop",
+ "mobile"
+ ],
+ "styles": "jquery.uls/css/jquery.uls.grid.css",
+ "localBasePath": "lib",
+ "remoteExtPath": "UniversalLanguageSelector/lib"
+ },
+ "jquery.webfonts": {
+ "scripts": "jquery.webfonts/src/jquery.webfonts.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ],
+ "localBasePath": "lib",
+ "remoteExtPath": "UniversalLanguageSelector/lib"
+ },
+ "rangy.core": {
+ "scripts": "rangy/rangy-core.js",
+ "localBasePath": "lib",
+ "remoteExtPath": "UniversalLanguageSelector/lib"
+ }
+ },
+ "EventLoggingSchemas": {
+ "UniversalLanguageSelector": 17799034
+ },
+ "manifest_version": 1
+} \ No newline at end of file
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/api/de.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/api/de.json
index 53357063..72a10fde 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/api/de.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/api/de.json
@@ -13,6 +13,7 @@
"apihelp-languagesearch-example-2": "Sucht nach „ഫി“",
"apihelp-languagesearch-example-3": "Sucht nach „ഫി“, erlaubt einen Tippfehler",
"apihelp-ulslocalization-description": "Ruft die Lokalisierung von ULS in der vorgegebenen Sprache ab.",
+ "apihelp-ulslocalization-summary": "Ruft die Lokalisierung von ULS in der angegebenen Sprache ab.",
"apihelp-ulslocalization-param-language": "Sprachcode.",
"apihelp-ulslocalization-example-1": "Ruft die Tamil-Lokalisierung ab",
"apihelp-ulslocalization-example-2": "Ruft die Hindi-Lokalisierung ab"
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/api/diq.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/api/diq.json
index 27125e16..94d079b8 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/api/diq.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/api/diq.json
@@ -6,12 +6,14 @@
]
},
"apihelp-languagesearch-description": "Nameyê zıwani nuşteyê raştameyeyi de geyreno cı.",
+ "apihelp-languagesearch-summary": "Yew dosyaya kodi miyan de nameyê zıwanan cı geyre.",
"apihelp-languagesearch-param-search": "Rêza cıgeyrayışi.",
"apihelp-languagesearch-param-typos": "Amora cerğkerdena ratenanê xetayanê imla",
"apihelp-languagesearch-example-1": "\"Te\" de bıvin",
"apihelp-languagesearch-example-2": "\"ഫി\" de bıvin",
"apihelp-languagesearch-example-3": "Qandé „ഫി“, inlanrê mısade bıgi",
"apihelp-ulslocalization-description": "Zıwano daye ra lokalizasyonê ULSi bıgê.",
+ "apihelp-ulslocalization-summary": "Lokalizasyonê ULSi zıwananê diyayeyan de cı geyre.",
"apihelp-ulslocalization-param-language": "Kodê zıwani.",
"apihelp-ulslocalization-example-1": "Lokalizasyonê Tamili ano",
"apihelp-ulslocalization-example-2": "Lokalizasyonê Hindi ano"
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/api/fy.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/api/fy.json
index 713860fe..c0de1d0b 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/api/fy.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/api/fy.json
@@ -1,10 +1,20 @@
{
"@metadata": {
"authors": [
- "Robin van der Vliet"
+ "Robin van der Vliet",
+ "PiefPafPier"
]
},
+ "apihelp-languagesearch-description": "Taalnammen sykjen yn elts skrift.",
+ "apihelp-languagesearch-summary": "Taalnammen sykjen yn elts skrift.",
+ "apihelp-languagesearch-param-search": "Sykterm.",
+ "apihelp-languagesearch-param-typos": "Tal fan tastiene staveringsflaters yn in sykterm.",
"apihelp-languagesearch-example-1": "Sykje nei \"Te\"",
"apihelp-languagesearch-example-2": "Sykje nei \"ഫി\"",
- "apihelp-ulslocalization-param-language": "Taalkoade."
+ "apihelp-languagesearch-example-3": "Sykje nei \"ഫി\", ien typflater tasteand",
+ "apihelp-ulslocalization-description": "Krij de taaloanpassing fan ULS yn de opjûne taal.",
+ "apihelp-ulslocalization-summary": "Krij de taaloanpassing fan ULS yn de opjûne taal.",
+ "apihelp-ulslocalization-param-language": "Taalkoade.",
+ "apihelp-ulslocalization-example-1": "Krij de taaloanpassing foar it Tamylsk",
+ "apihelp-ulslocalization-example-2": "Krij de taaloanpassing foar it Hindy"
}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/bqi.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/bqi.json
new file mode 100644
index 00000000..92f0ab51
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/bqi.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mogoeilor"
+ ]
+ },
+ "uls-plang-title-languages": "زڤونٱل",
+ "ext-uls-select-language-settings-icon-tooltip": "میزونکاری زڤون",
+ "ext-uls-undo-language-tooltip-text": "زڤون سی $1 آلشت ڤابی",
+ "ext-uls-display-settings-title": "نشوݩ داڌن میزونکاریٱل",
+ "ext-uls-display-settings-language-tab": "زڤون",
+ "ext-uls-display-settings-fonts-tab": "فونتٱل",
+ "ext-uls-display-settings-title-short": "نشوݩ داڌن",
+ "ext-uls-language-settings-title": "میزونکاری زڤون",
+ "ext-uls-language-settings-apply": "ڤا کار ڤٱندن میزونکاری",
+ "ext-uls-language-settings-cancel": "ٱنجومشیڤ کردن",
+ "ext-uls-display-settings-font-settings": "میزونکاری فونت",
+ "ext-uls-display-settings-ui-language": "نشوݩ داڌن زڤون",
+ "ext-uls-display-settings-anon-label": "نشوݩ داڌن زڤون:",
+ "ext-uls-display-settings-anon-same-as-content": "$1 (چی میٛنوناْ)",
+ "ext-uls-webfonts-settings-info-link": "ڌونائیٱل بیشتر",
+ "ext-uls-webfonts-select-for": "گولاْڤورچین کردن فونت سی $1",
+ "ext-uls-webfonts-select-for-content-info": "فونت ڤاکار ڤٱسداْ سی میٛنوناْ",
+ "ext-uls-webfonts-system-font": "فونت ساموناْ",
+ "ext-uls-input-settings-title": "میزونکاری درینداْ",
+ "ext-uls-input-settings-title-short": "درینداْ",
+ "ext-uls-ime-help": "چ جۊری ڤٱنومس ڤا کار",
+ "ext-uls-disable-input-method": "ڤٱ کار ڤٱندن تٱختاْ کلیت ڤولاتی",
+ "ext-uls-input-settings-more-languages-tooltip": "زڤونٱل بیشتر",
+ "jquery-ime-other-languages": "زڤونٱل دیٱ",
+ "jquery-ime-disable-text": "ڤٱ کار ڤٱندن تٱختاْ کلیت ڤولاتی",
+ "jquery-ime-help": "هومیاری",
+ "ext-uls-input-disable-notification-undo": "ٱنجومشیڤ کردن",
+ "ext-uls-language-settings-applying": "ڤا هال و بال ڤا کار ڤٱندن....",
+ "ext-uls-compact-link-count": "{{PLURAL:$1|یکی بیشتر|$1 بیشتر}}",
+ "prefs-languages": "زڤونٱل"
+}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/da.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/da.json
index 4aa5ced3..fbe1aaa4 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/da.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/da.json
@@ -5,7 +5,8 @@
"Christian List",
"Peter Alberti",
"Cgtdk",
- "Sarrus"
+ "Sarrus",
+ "Weblars"
]
},
"uls-desc": "Giver brugeren forskellige måder at vælge et sprog og at justere indstillingerne for sproget",
@@ -43,8 +44,8 @@
"ext-uls-input-settings-ime-settings": "Indtastningsmetoder for $1",
"ext-uls-input-settings-ui-language": "Sprog, der skrives på",
"ext-uls-back-to-input-settings": "Tilbage til indtastningsindstillinger",
- "ext-uls-ime-help": "Hvordan man bruger",
- "ext-uls-disable-input-method": "Brug standardtastatur",
+ "ext-uls-ime-help": "Vejledning",
+ "ext-uls-disable-input-method": "Sprogspecifikt tastatur (standard)",
"ext-uls-input-settings-more-languages-tooltip": "Flere sprog",
"jquery-ime-other-languages": "Andre sprog",
"jquery-ime-disable-text": "Brug standardtastatur",
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/diq.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/diq.json
index 589a806a..ff1e85cb 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/diq.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/diq.json
@@ -6,14 +6,16 @@
"Mirzali",
"Kumkumuk",
"1917 Ekim Devrimi",
- "Gırd"
+ "Gırd",
+ "Orbot707"
]
},
"uls-desc": "Karberi rê seba weçinıtışê zıwani û vurnayışê eyarê zıwani ra weçinıkan peyda keno",
"uls-plang-title-languages": "Zıwani",
"ext-uls-select-language-settings-icon-tooltip": "Eyarê zıwani",
"ext-uls-undo-language-tooltip-text": "Zıwan $1 ra açarniya",
- "ext-uls-language-settings-preferences-link": "Dahana véşi zıwani",
+ "ext-uls-undo-language-tooltip-text-local": "Seba na wiki zıwan vuriyê . Zıwanê wikiya pêroyi in vurnayışi rê [[Special:GlobalPreferences|tercihanê globali]] kontrol bıkerê .",
+ "ext-uls-language-settings-preferences-link": "Zeder eyarê zıwani",
"uls-betafeature-label": "Gıreyê zıwaniyê tengkerdeyi",
"uls-betafeature-desc": " Ebe zıwananê ke şıma rê muhimê, yew verziyonê lista zıwaniyo kılmi mocneno.",
"ext-uls-display-settings-title": "Eyarê ekrani",
@@ -55,12 +57,13 @@
"ext-uls-input-disable-info": "Hacetê cıkewtışi dewre ra veciyayi.",
"ext-uls-input-settings-noime": "Semedê nê zıwani ra metodê cıkewtışi çıniyê.",
"ext-uls-input-disable-notification": "Hacetê cıkewtışi dewre ra veti",
- "ext-uls-input-disable-notification-undo": "Peyser biya",
+ "ext-uls-input-disable-notification-undo": "Peyser bıgê",
"ext-uls-input-disable-notification-info-personal": "Eyaranê zıwani şıma çı wext ke wazenê, şıma şenê hacetanê cıkewtışi ra feal kerê.",
"ext-uls-input-disable-notification-info-interlanguage": "Eyaranê zıwani şıma şenê, hacetanê ke leweyê lista zıwani derê, feal kerê.",
"ext-uls-language-settings-applying": "Dezgeyeno...",
"ext-uls-compact-link-count": "{{PLURAL:$1|vêşêr|$1 vêşêr}}",
"ext-uls-compact-link-info": "Zıwani pêro (hetê to û ê binan ra ke kamcin yeno hesab wa ey weçine)",
"prefs-languages": "Zıwani",
- "ext-uls-compact-language-links-preference": "Yew lista serkerdiye be zıwananê eleqedaran ra bıgurene."
+ "ext-uls-compact-language-links-preference": "Teyna zıwanê ke to aleqedar kenê [[$1|a lista zıwani]] bıkarne.",
+ "ext-uls-compact-no-results": "Na pel zıwano ke şıma cıgeyrenê a zıwan de mewcud niya"
}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/fy.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/fy.json
index 8bbd6e03..20459e3b 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/fy.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/fy.json
@@ -3,23 +3,64 @@
"authors": [
"Kening Aldgilles",
"Robin0van0der0vliet",
- "Robin van der Vliet"
+ "Robin van der Vliet",
+ "PiefPafPier"
]
},
+ "uls-desc": "Jout de meidogger ferskate manieren om in taal te kiezen en de taalynstellings oan te passen",
"uls-plang-title-languages": "Talen",
- "ext-uls-language-settings-preferences-link": "Mear taalynstellingen",
+ "ext-uls-select-language-settings-icon-tooltip": "Taalynstellings",
+ "ext-uls-undo-language-tooltip-text": "Taal feroare fan $1",
+ "ext-uls-undo-language-tooltip-text-local": "Taal foar dizze wiki feroare. Kontrolearje jo [[Special:GlobalPreferences|globale ynstellings]] en feroarje de taal foar alle wiki's.",
+ "ext-uls-language-settings-preferences-link": "Mear taalynstellings",
+ "uls-betafeature-label": "Kompakte taalkeppelings",
+ "uls-betafeature-desc": "Lit in bekoarte talelist sjen, mei de talen dy't foar jo relevanter binne.",
+ "ext-uls-display-settings-title": "Werjefteynstellings",
"ext-uls-display-settings-language-tab": "Taal",
- "ext-uls-language-settings-title": "Taalynstellingen",
- "ext-uls-language-settings-apply": "Ynstellingen tapasse",
+ "ext-uls-display-settings-fonts-tab": "Lettertypen",
+ "ext-uls-display-settings-title-short": "Werjefte",
+ "ext-uls-display-settings-desc": "Menutaal en lettertypen ynstelle.",
+ "ext-uls-language-settings-title": "Taalynstellings",
+ "ext-uls-language-settings-apply": "Ynstellings tapasse",
"ext-uls-language-settings-cancel": "Annulearje",
- "ext-uls-display-settings-font-settings": "Lettertype ynstellingen",
- "ext-uls-display-settings-ui-language": "Taal sjen litte",
- "ext-uls-display-settings-anon-label": "Taal sjen litte:",
+ "ext-uls-language-buttons-help": "Feroarje de taal fan menu's. Hat gjin ynfloed op de taal fan 'e ynhâld.",
+ "ext-uls-display-settings-font-settings": "Lettertypeynstellings",
+ "ext-uls-display-settings-ui-language": "Werjeftetaal",
+ "ext-uls-display-settings-anon-label": "Werjeftetaal:",
+ "ext-uls-display-settings-anon-same-as-content": "$1 (lykas de ynhâld)",
+ "ext-uls-display-settings-anon-log-in-cta": "[[Special:UserLogin|Meld jo oan]] om in oare menutaal kieze te kinnen.",
+ "ext-uls-webfonts-settings-title": "Nedige lettertypen ynlade",
+ "ext-uls-webfonts-settings-info": "Laad ûntbrekkende lettertypen automatysk yn, en meitsje it ynstellen fan jo kar mooglik.",
"ext-uls-webfonts-settings-info-link": "Mear ynformaasje",
+ "ext-uls-webfonts-select-for": "Lettertype kieze foar it $1",
+ "ext-uls-webfonts-select-for-ui-info": "Letter foar it meidoggeroerflak",
+ "ext-uls-webfonts-select-for-content-info": "Letter foar de ynhâld",
+ "ext-uls-webfonts-system-font": "Systeemlettertype",
+ "ext-uls-back-to-display-settings": "Werom nei werjefteynstellings",
+ "ext-uls-input-settings-title": "Ynfierynstellings",
"ext-uls-input-settings-title-short": "Ynfier",
+ "ext-uls-input-settings-desc": "Yn in oare taal skriuwe?",
+ "ext-uls-input-settings-ime-settings": "Ynfiermetoaden foar it $1",
+ "ext-uls-input-settings-ui-language": "Taal om yn te skriuwen",
+ "ext-uls-back-to-input-settings": "Werom nei ynfierynstellings",
+ "ext-uls-ime-help": "Hoe te brûken",
+ "ext-uls-disable-input-method": "Brûk it standerttoetseboerd",
"ext-uls-input-settings-more-languages-tooltip": "Mear talen",
"jquery-ime-other-languages": "Oare talen",
+ "jquery-ime-disable-text": "Brûk it standerttoetseboerd",
"jquery-ime-help": "Help",
- "ext-uls-input-disable-notification-undo": "Weromsette",
- "ext-uls-compact-link-count": "{{PLURAL:$1|Ien mear|$1 mear}}"
+ "ext-uls-input-disable": "Ynfiermiddels útskeakelje",
+ "ext-uls-input-enable": "Ynfiermiddels ynskeakelje",
+ "ext-uls-input-disable-info": "De ynfiermiddels binne útskeakele.",
+ "ext-uls-input-settings-noime": "Der binne gjin ynfiermetoaden beskikber foar dizze taal.",
+ "ext-uls-input-disable-notification": "Ynfiermiddels binne útskeakele",
+ "ext-uls-input-disable-notification-undo": "Ungedien meitsjen",
+ "ext-uls-input-disable-notification-info-personal": "Jo kinne de ynfiermiddels altyd ynskeakelje by de taalynstellings.",
+ "ext-uls-input-disable-notification-info-interlanguage": "Jo kinne de ynfiermiddels altyd ynskeakelje by de taalynstellings neist de talelist.",
+ "ext-uls-language-settings-applying": "Tapasse ...",
+ "ext-uls-compact-link-count": "{{PLURAL:$1|Noch ien|Noch $1}}",
+ "ext-uls-compact-link-info": "Alle talen (begjinseleksje nei de foarkarren fan jo en oaren)",
+ "prefs-languages": "Talen",
+ "ext-uls-compact-language-links-preference": "In [[$1|kompakte talelist]] brûke mei foar jo relevante talen.",
+ "ext-uls-compact-no-results": "Dizze side is net beskikber yn 'e taal dy't jo sochten."
}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/hy.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/hy.json
index a6632d70..eadb7e6a 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/hy.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/hy.json
@@ -3,7 +3,8 @@
"authors": [
"M hamlet",
"Xelgen",
- "Դավիթ Սարոյան"
+ "Դավիթ Սարոյան",
+ "23artashes"
]
},
"uls-desc": "Օգտագործողին թույլ է տալիս մի քանի եղանակաով ընտրել լեզուներ և լեզվական կարգավորումներ",
@@ -27,7 +28,7 @@
"ext-uls-display-settings-anon-same-as-content": "$1 (նույնը ինչ բովանդակությունը)",
"ext-uls-display-settings-anon-log-in-cta": "[[Special:UserLogin|Մուտք գործեք]] միջերեսի այլ լեզու ընտրելու համար։",
"ext-uls-webfonts-settings-title": "Անհրաժեշտության դեպքում ներբեռնել տառատեսակները",
- "ext-uls-webfonts-settings-info": "Ավտոմատ ներբեռնել բացակայող տառատեսակները և թույլ տար նախընտրելի տառատեսակների ընտրությունը։",
+ "ext-uls-webfonts-settings-info": "Ավտոմատ ներբեռնել բացակայող տառատեսակները և թույլ տալ նախընտրելի տառատեսակների ընտրությունը։",
"ext-uls-webfonts-settings-info-link": "Հավելյալ տեղեկություն",
"ext-uls-webfonts-select-for": "Ընտրեք $1ի տառատեսակը",
"ext-uls-webfonts-select-for-ui-info": "Միջերեսի համար օգտագործվող տառատեսակը",
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/hyw.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/hyw.json
new file mode 100644
index 00000000..28e5d8b7
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/hyw.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kareyac",
+ "Azniv Stepanian"
+ ]
+ },
+ "uls-plang-title-languages": "Լեզուներ",
+ "ext-uls-display-settings-language-tab": "Լեզու",
+ "ext-uls-display-settings-title-short": "Ցուցադրել",
+ "ext-uls-language-settings-cancel": "Չեղարկել",
+ "ext-uls-display-settings-ui-language": "Ցուցադրութեան լեզու",
+ "ext-uls-display-settings-anon-label": "Ցուցադրութեան լեզու․",
+ "ext-uls-input-settings-desc": "Տարբեր լեզուով կը գրէ՞ք։",
+ "ext-uls-input-settings-ui-language": "Գրելու համար գործածուող լեզու",
+ "ext-uls-ime-help": "Ինչպէս գործածել",
+ "jquery-ime-help": "Օգնութիւն",
+ "ext-uls-input-disable-notification-undo": "Յետարկել",
+ "ext-uls-compact-link-count": "{{PLURAL:$1|Եւս մեկը|$1 եւս}}",
+ "prefs-languages": "Լեզուներ"
+}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/is.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/is.json
index 7eac6d90..46ec2c9d 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/is.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/is.json
@@ -12,7 +12,7 @@
"ext-uls-language-settings-preferences-link": "Fleiri tungumálastillingar",
"uls-betafeature-label": "Þjappaðir tungumálatenglar",
"uls-betafeature-desc": "Nota stytta útgáfu tungumálalistans, einungis með tungumálum sem eiga betur við þig.",
- "ext-uls-display-settings-title": "Birtingarstillingar",
+ "ext-uls-display-settings-title": "Stillingar á birtingu",
"ext-uls-display-settings-language-tab": "Tungumál",
"ext-uls-display-settings-fonts-tab": "Leturgerðir",
"ext-uls-display-settings-title-short": "Birting",
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/kiu.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/kiu.json
new file mode 100644
index 00000000..b42dede5
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/kiu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mirzali"
+ ]
+ },
+ "ext-uls-language-settings-cancel": "Bıtexelne"
+}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/lv.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/lv.json
index 937a7d8e..b1770947 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/lv.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/lv.json
@@ -25,6 +25,7 @@
"ext-uls-display-settings-ui-language": "Attēlošanas valoda",
"ext-uls-display-settings-anon-label": "Attēlošanas valoda:",
"ext-uls-display-settings-anon-same-as-content": "$1 (tāda pati kā saturam)",
+ "ext-uls-display-settings-anon-log-in-cta": "[[Special:UserLogin|Pieslēdzies]], lai izvēlētos atšķirīgu valodu izvēlnēm.",
"ext-uls-webfonts-settings-title": "Lejupielādēt fontus pēc nepieciešamības",
"ext-uls-webfonts-settings-info-link": "Vairāk informācijas",
"ext-uls-webfonts-select-for-ui-info": "Saskarnei izmantotais fonts",
@@ -35,6 +36,7 @@
"ext-uls-input-settings-title-short": "Ievade",
"ext-uls-input-settings-desc": "Raksti citā valodā?",
"ext-uls-input-settings-ui-language": "Rakstīšanai izmantotā valoda",
+ "ext-uls-back-to-input-settings": "Atpakaļ uz ievades iestatījumiem",
"ext-uls-ime-help": "Kā lietot",
"ext-uls-input-settings-more-languages-tooltip": "Vairāk valodu",
"jquery-ime-other-languages": "Citas valodas",
@@ -48,5 +50,6 @@
"ext-uls-language-settings-applying": "Pielieto...",
"ext-uls-compact-link-count": "{{PLURAL:$1|Vēl $1}}",
"prefs-languages": "Valodas",
- "ext-uls-compact-language-links-preference": "Izmantot [[$1|kompakto valodu sarakstu]] ar tev atbilstošajām valodām."
+ "ext-uls-compact-language-links-preference": "Izmantot [[$1|kompakto valodu sarakstu]] ar tev atbilstošajām valodām.",
+ "ext-uls-compact-no-results": "Šī lapa nav pieejama tevis atrastajā valodā."
}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/pt-br.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/pt-br.json
index 1e4d2ae9..5dc79ca6 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/pt-br.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/pt-br.json
@@ -63,7 +63,7 @@
"ext-uls-input-disable-notification-info-personal": "Você pode habilitar as ferramentas de entrada de texto a qualquer momento a partir das configurações de idioma.",
"ext-uls-input-disable-notification-info-interlanguage": "Você pode habilitar as ferramentas de entrada de texto a qualquer momento a partir das configurações de idioma próximo da lista de idiomas.",
"ext-uls-language-settings-applying": "Aplicando…",
- "ext-uls-compact-link-count": "{{PLURAL:$1|Mais um|$1mais}}",
+ "ext-uls-compact-link-count": "Mais {{PLURAL:$1|um|$1}}",
"ext-uls-compact-link-info": "Todos os idiomas (seleção inicial de escolhas comuns por você e outros)",
"prefs-languages": "Idiomas",
"ext-uls-compact-language-links-preference": "Usar uma [[$1|lista de idiomas compactos]], com idiomas relevantes para você.",
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/th.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/th.json
index dcb00a67..03f9d7d2 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/th.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/th.json
@@ -10,8 +10,9 @@
"uls-plang-title-languages": "ภาษา",
"ext-uls-select-language-settings-icon-tooltip": "การตั้งค่าภาษา",
"ext-uls-undo-language-tooltip-text": "เปลี่ยนภาษาจาก $1 แล้ว",
+ "ext-uls-undo-language-tooltip-text-local": "เปลี่ยนภาษาสำหรับวิกินี้แล้ว ตรวจสอบ[[Special:GlobalPreferences|ค่ากำหนดทั่วโลก]]ของคุณเพื่อเปลี่ยนภาษาสำหรับวิกิทั้งหมด",
"ext-uls-language-settings-preferences-link": "การตั้งค่าภาษาเพิ่มเติม",
- "uls-betafeature-label": "ลิงก์ข้ามภาษาแบบพกพา",
+ "uls-betafeature-label": "ลิงก์ภาษาแบบพกพา",
"uls-betafeature-desc": "แสดงรายการภาษาแบบสั้น โดยแสดงเพียงภาษาที่สัมพันธ์กับคุณมากที่สุด",
"ext-uls-display-settings-title": "การตั้งค่าการแสดงผล",
"ext-uls-display-settings-language-tab": "ภาษา",
@@ -26,7 +27,7 @@
"ext-uls-display-settings-ui-language": "ภาษาที่แสดง",
"ext-uls-display-settings-anon-label": "ภาษาที่แสดง:",
"ext-uls-display-settings-anon-same-as-content": "$1 (เหมือนกับเนื้อหา)",
- "ext-uls-display-settings-anon-log-in-cta": "[[Special:UserLogin|ล็อกอิน]]เพื่อเลือกภาษาอื่นสำหรับเมนู",
+ "ext-uls-display-settings-anon-log-in-cta": "[[Special:UserLogin|เข้าสู่ระบบ]]เพื่อเลือกภาษาอื่นสำหรับเมนู",
"ext-uls-webfonts-settings-title": "ดาวน์โหลดแบบอักษรเมื่อจำเป็น",
"ext-uls-webfonts-settings-info": "ดาวน์โหลดแบบอักษรที่ขาดไปโดยอัตโนมัติและอนุญาตการเลือกแบบอักษรที่ต้องการ",
"ext-uls-webfonts-settings-info-link": "ข้อมูลเพิ่มเติม",
@@ -57,6 +58,8 @@
"ext-uls-input-disable-notification-info-interlanguage": "คุณสามารถเปิดใช้งานเครื่องมือป้อนข้อมูลได้ทุกเมื่อจากการตั้งค่าภาษาถัดจากรายการภาษา",
"ext-uls-language-settings-applying": "กำลังใช้...",
"ext-uls-compact-link-count": "{{PLURAL:$1|เพิ่มเติมอีกหนึ่งภาษา|เพิ่มเติมอีก $1 ภาษา}}",
+ "ext-uls-compact-link-info": "ภาษาทั้งหมด (ที่เลือกไว้ตั้งแต่แรกจากตัวเลือกธรรมดาโดยคุณและคนอื่นๆ)",
"prefs-languages": "ภาษา",
- "ext-uls-compact-language-links-preference": "ใช้ [[$1|รายการภาษาแบบกระชับ]] โดยมีภาษาที่เกี่ยวข้องกับคุณ"
+ "ext-uls-compact-language-links-preference": "ใช้ [[$1|รายการภาษาแบบกระชับ]] โดยมีภาษาที่เกี่ยวข้องกับคุณ",
+ "ext-uls-compact-no-results": "หน้านี้ไม่มีในภาษาที่คุณค้นหา"
}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/trv.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/trv.json
new file mode 100644
index 00000000..13ce36cb
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/trv.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iyuqciyang"
+ ]
+ },
+ "ext-uls-language-settings-cancel": "pkungat",
+ "jquery-ime-help": "pgkla",
+ "ext-uls-input-disable-notification-undo": "pkbrih"
+}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/uz.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/uz.json
index afab6979..190f6f94 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/i18n/uz.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/uz.json
@@ -3,7 +3,8 @@
"authors": [
"Akmalzhon",
"CoderSI",
- "Sociologist"
+ "Sociologist",
+ "Nataev"
]
},
"uls-plang-title-languages": "Tillar",
@@ -15,5 +16,5 @@
"ext-uls-display-settings-anon-label": "Displey tili",
"jquery-ime-other-languages": "Boshqa tillarda",
"jquery-ime-help": "Yordam",
- "ext-uls-compact-link-count": "Yana {{PLURAL:$1|bitta tilda|$1 ta tillarda}}"
+ "ext-uls-compact-link-count": "Yana {{PLURAL:$1|bitta tilda|$1 ta tilda}}"
}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/i18n/xsy.json b/www/wiki/extensions/UniversalLanguageSelector/i18n/xsy.json
new file mode 100644
index 00000000..63fdc4b5
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/i18n/xsy.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lalotahes"
+ ]
+ },
+ "ext-uls-language-settings-cancel": "kayni’",
+ "jquery-ime-help": " kapakSekla’an",
+ "ext-uls-input-disable-notification-undo": " paklobih"
+}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/includes/ResourceLoaderULSJsonMessageModule.php b/www/wiki/extensions/UniversalLanguageSelector/includes/ResourceLoaderULSJsonMessageModule.php
index 465a5785..c093f91b 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/includes/ResourceLoaderULSJsonMessageModule.php
+++ b/www/wiki/extensions/UniversalLanguageSelector/includes/ResourceLoaderULSJsonMessageModule.php
@@ -35,9 +35,6 @@ class ResourceLoaderULSJsonMessageModule extends ResourceLoaderModule {
*/
public function getDefinitionSummary( ResourceLoaderContext $context ) {
$code = $context->getLanguage();
- if ( !Language::isValidCode( $code ) ) {
- $code = 'en';
- }
$fileHashes = array_map(
[ __CLASS__, 'safeFileHash' ],
ULSJsonMessageLoader::getFilenames( $code )
@@ -58,10 +55,6 @@ class ResourceLoaderULSJsonMessageModule extends ResourceLoaderModule {
*/
public function getScript( ResourceLoaderContext $context ) {
$code = $context->getLanguage();
- if ( !Language::isValidCode( $code ) ) {
- $code = 'en';
- }
-
$params = [ $code, ULSJsonMessageLoader::getMessages( $code ) ];
return Xml::encodeJsCall( 'mw.uls.loadLocalization', $params );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/includes/UniversalLanguageSelectorHooks.php b/www/wiki/extensions/UniversalLanguageSelector/includes/UniversalLanguageSelectorHooks.php
new file mode 100644
index 00000000..ded9f6ed
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/includes/UniversalLanguageSelectorHooks.php
@@ -0,0 +1,505 @@
+<?php
+/**
+ * Hooks for UniversalLanguageSelector extension.
+ *
+ * Copyright (C) 2012-2018 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon
+ * Harris, Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland
+ * and other contributors. See CREDITS for a list.
+ *
+ * UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't
+ * have to do anything special to choose one license or the other and you don't
+ * have to notify anyone which license you are using. You are free to use
+ * UniversalLanguageSelector in commercial projects as long as the copyright
+ * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
+ *
+ * @file
+ * @ingroup Extensions
+ * @license GPL-2.0-or-later
+ * @license MIT
+ */
+
+class UniversalLanguageSelectorHooks {
+
+ /**
+ * Used when extension registration in use which skips the main php file
+ */
+ public static function setVersionConstant() {
+ define( 'ULS_VERSION', '2018-10-26' );
+ }
+
+ /**
+ * Whether ULS user toolbar (language selection and settings) is enabled.
+ *
+ * @param User $user
+ * @return bool
+ */
+ public static function isToolbarEnabled( $user ) {
+ global $wgULSEnable, $wgULSEnableAnon;
+
+ if ( !$wgULSEnable ) {
+ return false;
+ }
+ if ( !$wgULSEnableAnon && $user->isAnon() ) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Whether ULS Compact interlanguage links enabled
+ *
+ * @param User $user
+ * @return bool
+ */
+ public static function isCompactLinksEnabled( $user ) {
+ global $wgULSEnable, $wgInterwikiMagic,
+ $wgULSCompactLinksEnableAnon,
+ $wgHideInterlanguageLinks, $wgULSCompactLanguageLinksBetaFeature;
+
+ // Whether any user visible features are enabled
+ if ( !$wgULSEnable ) {
+ return false;
+ }
+
+ if ( $user->isAnon() && $wgULSCompactLinksEnableAnon ) {
+ return true;
+ }
+
+ if ( $wgULSCompactLanguageLinksBetaFeature === true &&
+ $wgInterwikiMagic === true &&
+ $wgHideInterlanguageLinks === false &&
+ ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' ) &&
+ BetaFeatures::isFeatureEnabled( $user, 'uls-compact-links' )
+ ) {
+ // Compact language links is a beta feature in this wiki. Check the user's
+ // preference.
+ return true;
+ }
+
+ if ( $wgULSCompactLanguageLinksBetaFeature === false ) {
+ // Compact language links is a default feature in this wiki.
+ // Check user preference
+ return $user->getBoolOption( 'compact-language-links' );
+ }
+
+ return false;
+ }
+
+ /**
+ * Sets user preference to enable the Compact language links if the
+ * user account is new.
+ *
+ * To be removed once no longer needed.
+ * @param User $user
+ * @param bool $autoCreate
+ */
+ public static function onLocalUserCreated( User $user, $autoCreate ) {
+ if ( RequestContext::getMain()->getConfig()->get( 'ULSCompactLinksForNewAccounts' ) ) {
+ $user->setOption( 'compact-language-links', 1 );
+ $user->saveSettings();
+ }
+ }
+
+ /**
+ * @param OutputPage $out
+ * @param Skin $skin
+ * Hook: BeforePageDisplay
+ */
+ public static function addModules( $out, $skin ) {
+ global $wgULSPosition, $wgULSGeoService;
+
+ // Soft dependency to Wikibase client. Don't enable CLL if links are managed manually.
+ $excludedLinks = $out->getProperty( 'noexternallanglinks' );
+ $override = is_array( $excludedLinks ) && in_array( '*', $excludedLinks );
+ if ( !$override && self::isCompactLinksEnabled( $out->getUser() ) ) {
+ $out->addModules( 'ext.uls.compactlinks' );
+ }
+
+ if ( is_string( $wgULSGeoService ) ) {
+ $out->addModules( 'ext.uls.geoclient' );
+ }
+
+ if ( self::isToolbarEnabled( $out->getUser() ) ) {
+ // Enable UI language selection for the user.
+ $out->addModules( 'ext.uls.interface' );
+ }
+
+ if ( $wgULSPosition === 'personal' ) {
+ $out->addModuleStyles( 'ext.uls.pt' );
+ } else {
+ $out->addModuleStyles( 'ext.uls.interlanguage' );
+ }
+
+ if ( $out->getTitle()->isSpecial( 'Preferences' ) ) {
+ $out->addModuleStyles( 'ext.uls.preferencespage' );
+ }
+ }
+
+ /**
+ * @param array &$testModules array of javascript testing modules. 'qunit' is fed
+ * using tests/qunit/QUnitTestResources.php.
+ * @param ResourceLoader $resourceLoader
+ * Hook: ResourceLoaderTestModules
+ */
+ public static function addTestModules( array &$testModules, ResourceLoader $resourceLoader ) {
+ $testModules['qunit']['ext.uls.tests'] = [
+ 'scripts' => [ 'tests/qunit/ext.uls.tests.js' ],
+ 'dependencies' => [ 'jquery.uls', 'ext.uls.init', 'ext.uls.preferences' ],
+ 'localBasePath' => dirname( __DIR__ ),
+ 'remoteExtPath' => 'UniversalLanguageSelector',
+ ];
+ }
+
+ /**
+ * Add some tabs for navigation for users who do not use Ajax interface.
+ * Hook: PersonalUrls
+ * @param array &$personal_urls
+ * @param Title &$title
+ * @param SkinTemplate $context SkinTemplate object providing context
+ */
+ public static function addPersonalBarTrigger(
+ array &$personal_urls,
+ &$title,
+ SkinTemplate $context
+ ) {
+ global $wgULSPosition;
+
+ if ( $wgULSPosition !== 'personal' ) {
+ return;
+ }
+
+ if ( !self::isToolbarEnabled( $context->getUser() ) ) {
+ return;
+ }
+
+ // The element id will be 'pt-uls'
+ $langCode = $context->getLanguage()->getCode();
+ $personal_urls = [
+ 'uls' => [
+ 'text' => Language::fetchLanguageName( $langCode ),
+ 'href' => '#',
+ 'class' => 'uls-trigger',
+ 'active' => true
+ ]
+ ] + $personal_urls;
+ }
+
+ /**
+ * @param array $preferred
+ * @return string
+ */
+ protected static function getDefaultLanguage( array $preferred ) {
+ $supported = Language::fetchLanguageNames( null, 'mwfile' );
+
+ // look for a language that is acceptable to the client
+ // and known to the wiki.
+ foreach ( $preferred as $code => $weight ) {
+ if ( isset( $supported[$code] ) ) {
+ return $code;
+ }
+ }
+
+ // Some browsers might only send codes like de-de.
+ // Try with bare code.
+ foreach ( $preferred as $code => $weight ) {
+ $parts = explode( '-', $code, 2 );
+ $code = $parts[0];
+ if ( isset( $supported[$code] ) ) {
+ return $code;
+ }
+ }
+
+ return '';
+ }
+
+ /**
+ * Hook to UserGetLanguageObject
+ * @param User $user
+ * @param string &$code
+ * @param IContextSource $context
+ */
+ public static function getLanguage( User $user, &$code, IContextSource $context ) {
+ global $wgULSAnonCanChangeLanguage, $wgULSLanguageDetection;
+
+ if ( $wgULSLanguageDetection ) {
+ // Vary any caching based on the header value. Note that
+ // we need to vary regardless of whether we end up using
+ // the header or not, so that requests without the header
+ // don't show up for people with it.
+ $context->getOutput()->addVaryHeader( 'Accept-Language' );
+ }
+
+ if ( !self::isToolbarEnabled( $user ) ) {
+ return;
+ }
+
+ $request = $context->getRequest();
+
+ $languageToSave = $request->getText( 'setlang' );
+ if ( !$languageToSave && $request->getText( 'uselang' ) ) {
+ // uselang can be used for temporary override of language preference
+ // when setlang is not provided
+ return;
+ }
+
+ // Registered users - simple
+ if ( !$user->isAnon() ) {
+ // Language change
+ if ( Language::isSupportedLanguage( $languageToSave ) ) {
+ // Apply immediately
+ $user->setOption( 'language', $languageToSave );
+ $code = $languageToSave;
+ // Promise to sync the DB on post-send
+ DeferredUpdates::addCallableUpdate( function () use ( $user ) {
+ $user->saveSettings();
+ } );
+ }
+
+ // Otherwise just use what is stored in preferences
+ return;
+ }
+
+ // If using cookie storage for anons is OK, read/write from that
+ if ( $wgULSAnonCanChangeLanguage ) {
+ // Language change
+ if ( Language::isSupportedLanguage( $languageToSave ) ) {
+ $request->response()->setCookie( 'language', $languageToSave );
+ $code = $languageToSave;
+
+ return;
+ }
+
+ // Try cookie
+ $languageToUse = $request->getCookie( 'language', null, '' );
+ if ( Language::isSupportedLanguage( $languageToUse ) ) {
+ $code = $languageToUse;
+
+ return;
+ }
+ }
+
+ // As last resort, try Accept-Language headers if allowed
+ if ( $wgULSLanguageDetection ) {
+ // We added a Vary header at the top of this function,
+ // since we're depending upon the Accept-Language header
+ $preferred = $request->getAcceptLang();
+ $default = self::getDefaultLanguage( $preferred );
+ if ( $default !== '' ) {
+ $code = $default;
+ }
+ }
+ }
+
+ /**
+ * Hook: ResourceLoaderGetConfigVars
+ * @param array &$vars
+ */
+ public static function addConfig( &$vars ) {
+ global $wgULSGeoService,
+ $wgULSIMEEnabled, $wgULSWebfontsEnabled,
+ $wgULSPosition, $wgULSNoWebfontsSelectors,
+ $wgULSAnonCanChangeLanguage,
+ $wgULSEventLogging,
+ $wgULSImeSelectors, $wgULSNoImeSelectors,
+ $wgULSFontRepositoryBasePath,
+ $wgExtensionAssetsPath,
+ $wgInterwikiSortingSortPrepend;
+
+ // Place constant stuff here (not depending on request context)
+
+ if ( is_string( $wgULSGeoService ) ) {
+ $vars['wgULSGeoService'] = $wgULSGeoService;
+ }
+
+ $vars['wgULSIMEEnabled'] = $wgULSIMEEnabled;
+ $vars['wgULSWebfontsEnabled'] = $wgULSWebfontsEnabled;
+ $vars['wgULSPosition'] = $wgULSPosition;
+ $vars['wgULSAnonCanChangeLanguage'] = $wgULSAnonCanChangeLanguage;
+ $vars['wgULSEventLogging'] = $wgULSEventLogging
+ && ExtensionRegistry::getInstance()->isLoaded( 'EventLogging' );
+ $vars['wgULSImeSelectors'] = $wgULSImeSelectors;
+ $vars['wgULSNoImeSelectors'] = $wgULSNoImeSelectors;
+ $vars['wgULSNoWebfontsSelectors'] = $wgULSNoWebfontsSelectors;
+
+ if ( is_string( $wgULSFontRepositoryBasePath ) ) {
+ $vars['wgULSFontRepositoryBasePath'] = $wgULSFontRepositoryBasePath;
+ } else {
+ $vars['wgULSFontRepositoryBasePath'] = $wgExtensionAssetsPath .
+ '/UniversalLanguageSelector/data/fontrepo/fonts/';
+ }
+
+ if ( isset( $wgInterwikiSortingSortPrepend ) && $wgInterwikiSortingSortPrepend !== [] ) {
+ $vars['wgULSCompactLinksPrepend'] = $wgInterwikiSortingSortPrepend;
+ }
+ }
+
+ /**
+ * Hook: MakeGlobalVariablesScript
+ * @param array &$vars
+ * @param OutputPage $out
+ */
+ public static function addVariables( &$vars, OutputPage $out ) {
+ global $wgULSAnonCanChangeLanguage;
+
+ // Place request context dependent stuff here
+
+ $user = $out->getUser();
+ $loggedIn = $user->isLoggedIn();
+
+ // Do not output accept languages if there is risk it will get cached across requests
+ if ( $wgULSAnonCanChangeLanguage || $loggedIn ) {
+ $vars['wgULSAcceptLanguageList'] = array_keys( $out->getRequest()->getAcceptLang() );
+ }
+
+ if ( $loggedIn && class_exists( Babel::class ) ) {
+ $userLanguageInfo = Babel::getCachedUserLanguageInfo( $user );
+
+ // This relies on the fact that Babel levels are 'N' and
+ // the digits 0 to 5 as strings, and that in reverse
+ // ASCII order they will be 'N', '5', '4', '3', '2', '1', '0'.
+ arsort( $userLanguageInfo );
+
+ $vars['wgULSBabelLanguages'] = array_keys( $userLanguageInfo );
+ }
+
+ // An optimization to avoid loading all of uls.data just to get the autonym
+ $langCode = $out->getLanguage()->getCode();
+ $vars['wgULSCurrentAutonym'] = Language::fetchLanguageName( $langCode );
+ }
+
+ public static function onGetPreferences( $user, &$preferences ) {
+ global $wgULSCompactLanguageLinksBetaFeature;
+
+ $preferences['uls-preferences'] = [
+ 'type' => 'api',
+ ];
+
+ // A link shown for accessing ULS language settings from preferences screen
+ $preferences['languagesettings'] = [
+ 'type' => 'info',
+ 'raw' => true,
+ 'section' => 'personal/i18n',
+ // We use this class to hide this from no-JS users
+ 'cssclass' => 'uls-preferences-link-wrapper',
+ 'default' => "<a id='uls-preferences-link' role='button' tabindex='0'>" .
+ wfMessage( 'ext-uls-language-settings-preferences-link' )->escaped() . "</a>",
+ ];
+
+ if ( $wgULSCompactLanguageLinksBetaFeature === false ) {
+ $preferences['compact-language-links'] = [
+ 'type' => 'check',
+ 'section' => 'rendering/languages',
+ 'label-message' => [
+ 'ext-uls-compact-language-links-preference',
+ 'mediawikiwiki:Special:MyLanguage/Universal_Language_Selector/Compact_Language_Links'
+ ]
+ ];
+ }
+ }
+
+ public static function onGetBetaFeaturePreferences( $user, &$prefs ) {
+ global $wgExtensionAssetsPath, $wgULSCompactLanguageLinksBetaFeature,
+ $wgHideInterlanguageLinks, $wgInterwikiMagic;
+
+ if ( $wgULSCompactLanguageLinksBetaFeature === true &&
+ $wgInterwikiMagic === true &&
+ $wgHideInterlanguageLinks === false
+ ) {
+ $imagesDir = "$wgExtensionAssetsPath/UniversalLanguageSelector/resources/images";
+ $prefs['uls-compact-links'] = [
+ 'label-message' => 'uls-betafeature-label',
+ 'desc-message' => 'uls-betafeature-desc',
+ 'screenshot' => [
+ 'ltr' => "$imagesDir/compact-links-ltr.svg",
+ 'rtl' => "$imagesDir/compact-links-rtl.svg",
+ ],
+ 'info-link' =>
+ 'https://www.mediawiki.org/wiki/Special:MyLanguage/' .
+ 'Universal_Language_Selector/Compact_Language_Links',
+ 'discussion-link' =>
+ 'https://www.mediawiki.org/wiki/Talk:Universal_Language_Selector/Compact_Language_Links',
+ ];
+ }
+ }
+
+ /**
+ * Hook: SkinTemplateOutputPageBeforeExec
+ * @param Skin $skin
+ * @param QuickTemplate $template
+ */
+ public static function onSkinTemplateOutputPageBeforeExec( Skin $skin,
+ QuickTemplate $template
+ ) {
+ global $wgULSPosition;
+
+ if ( $wgULSPosition !== 'interlanguage' ) {
+ return;
+ }
+
+ if ( !self::isToolbarEnabled( $skin->getUser() ) ) {
+ return;
+ }
+
+ // Set to an empty array, just to make sure that the section appears
+ if ( $template->get( 'language_urls' ) === false ) {
+ $template->set( 'language_urls', [] );
+ }
+ }
+
+ /**
+ * Add basic webfonts support to the mobile interface (via MobileFrontend extension)
+ * Hook: EnterMobileMode
+ * @param MobileContext $context
+ */
+ public static function onEnterMobileMode( $context ) {
+ global $wgULSEnable, $wgULSMobileWebfontsEnabled;
+
+ // Currently only supported in mobile Beta mode
+ if ( $wgULSEnable && $wgULSMobileWebfontsEnabled && $context->isBetaGroupMember() ) {
+ $context->getOutput()->addModules( 'ext.uls.webfonts.mobile' );
+ }
+ }
+
+ /**
+ * Conditionally register modules.
+ *
+ * @param ResourceLoader $resourceLoader
+ */
+ public static function onResourceLoaderRegisterModules( ResourceLoader $resourceLoader ) {
+ global $wgVersion;
+
+ $modules = [];
+ $modules['ext.uls.displaysettings'] = [
+ 'scripts' => 'js/ext.uls.displaysettings.js',
+ 'styles' => 'css/ext.uls.displaysettings.less',
+ 'dependencies' => [
+ 'ext.uls.languagesettings',
+ 'ext.uls.mediawiki',
+ 'ext.uls.webfonts',
+ 'mediawiki.api',
+ 'mediawiki.ui.checkbox',
+ 'mediawiki.ui.button',
+ 'mediawiki.user'
+ ],
+ 'localBasePath' => __DIR__ . '/../resources',
+ 'remoteExtPath' => 'UniversalLanguageSelector/resources'
+ ];
+ $modules['ext.uls.preferences'] = [
+ 'scripts' => 'js/ext.uls.preferences.js',
+ 'dependencies' => [
+ 'mediawiki.user',
+ 'mediawiki.api'
+ ],
+ 'localBasePath' => __DIR__ . '/../resources',
+ 'remoteExtPath' => 'UniversalLanguageSelector/resources'
+ ];
+ if ( version_compare( $wgVersion, '1.32', '<' ) ) {
+ // Support: MediaWiki 1.31 and earlier (T200168)
+ $modules['ext.uls.displaysettings']['dependencies'][] = 'mediawiki.api.parse';
+ $modules['ext.uls.preferences']['dependencies'][] = 'mediawiki.api.options';
+ }
+
+ $resourceLoader->register( $modules );
+ }
+}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/includes/api/ApiLanguageSearch.php b/www/wiki/extensions/UniversalLanguageSelector/includes/api/ApiLanguageSearch.php
new file mode 100644
index 00000000..09beef1a
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/includes/api/ApiLanguageSearch.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Language name search API
+ *
+ * Copyright (C) 2012 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris,
+ * Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other
+ * contributors. See CREDITS for a list.
+ *
+ * UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't
+ * have to do anything special to choose one license or the other and you don't
+ * have to notify anyone which license you are using. You are free to use
+ * UniversalLanguageSelector in commercial projects as long as the copyright
+ * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
+ *
+ * @file
+ * @ingroup Extensions
+ * @license GPL-2.0-or-later
+ * @license MIT
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiLanguageSearch extends ApiBase {
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $search = $params['search'];
+ $typos = $params['typos'];
+ $searches = LanguageNameSearch::search( $search, $typos, $this->getLanguage()->getCode() );
+ $result = $this->getResult();
+ $result->addValue( null, $this->getModuleName(), $searches );
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'search' => [
+ ApiBase::PARAM_REQUIRED => true
+ ],
+ 'typos' => [
+ ApiBase::PARAM_REQUIRED => false,
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_DFLT => 1
+ ],
+ ];
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function getExamplesMessages() {
+ return [
+ 'action=languagesearch&search=Te'
+ => 'apihelp-languagesearch-example-1',
+ 'action=languagesearch&search=ഫി'
+ => 'apihelp-languagesearch-example-2',
+ 'action=languagesearch&search=ഫി&typos=1'
+ => 'apihelp-languagesearch-example-3',
+ ];
+ }
+}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/includes/api/ApiULSLocalization.php b/www/wiki/extensions/UniversalLanguageSelector/includes/api/ApiULSLocalization.php
new file mode 100644
index 00000000..6d856a30
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/includes/api/ApiULSLocalization.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Localization API for ULS
+ *
+ * Copyright (C) 2013 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris,
+ * Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other
+ * contributors. See CREDITS for a list.
+ *
+ * UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't
+ * have to do anything special to choose one license or the other and you don't
+ * have to notify anyone which license you are using. You are free to use
+ * UniversalLanguageSelector in commercial projects as long as the copyright
+ * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
+ *
+ * @file
+ * @ingroup Extensions
+ * @license GPL-2.0-or-later
+ * @license MIT
+ */
+
+/**
+ * @ingroup API
+ */
+class ApiULSLocalization extends ApiBase {
+
+ public function execute() {
+ $this->getMain()->setCacheMode( 'public' );
+ $this->getMain()->setCacheMaxAge( 2419200 );
+
+ $params = $this->extractRequestParams();
+ $language = $params['language'];
+ if ( !Language::isValidCode( $language ) ) {
+ $this->dieWithError( [ 'apierror-invalidlang', 'language' ], 'invalidlanguage' );
+ }
+ $contents = ULSJsonMessageLoader::getMessages( $language );
+ // Output the file's contents raw
+ $this->getResult()->addValue( null, 'text', json_encode( $contents ) );
+ $this->getResult()->addValue( null, 'mime', 'application/json' );
+ }
+
+ public function getCustomPrinter() {
+ return new ApiFormatRaw(
+ $this->getMain(),
+ $this->getMain()->createPrinterByName( 'json' )
+ );
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'language' => [
+ ApiBase::PARAM_REQUIRED => true,
+ ApiBase::PARAM_TYPE => 'string',
+ ],
+ ];
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function getExamplesMessages() {
+ return [
+ 'action=ulslocalization&language=ta'
+ => 'apihelp-ulslocalization-example-1',
+ 'action=ulslocalization&language=hi'
+ => 'apihelp-ulslocalization-example-2',
+ ];
+ }
+
+ public function isInternal() {
+ // Try to scare people away from using this externally
+ return true;
+ }
+}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/css/jquery.ime.css b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/css/jquery.ime.css
index b14374f8..2a90bb6f 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/css/jquery.ime.css
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/css/jquery.ime.css
@@ -1,12 +1,12 @@
.imeselector {
position: absolute;
/* @embed */
- background: url('../images/ime-active.png') no-repeat left center;
+ background: url( ../images/ime-active.png ) no-repeat left center;
/* @embed */
- background-image: -webkit-linear-gradient(transparent, transparent), url('../images/ime-active.svg');
+ background-image: -webkit-linear-gradient( transparent, transparent ), url( ../images/ime-active.svg );
/* @embed */
- background-image: linear-gradient(transparent, transparent), url('../images/ime-active.svg');
- background-color: rgba(255,255,255,0.75);
+ background-image: linear-gradient( transparent, transparent ), url( ../images/ime-active.svg );
+ background-color: rgba( 255, 255, 255, 0.75 );
background-position: left 3px center;
height: 15px;
font-size: small;
@@ -22,7 +22,7 @@
.imeselector:hover {
box-shadow: 0 1px 3px 0 #565656;
border-top: none;
- background-color: rgba(255,255,255,0.85);
+ background-color: rgba( 255, 255, 255, 0.85 );
}
.imeselector a,
@@ -42,12 +42,11 @@
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid #565656;
- content: "";
+ content: '';
display: inline-block;
height: 0;
vertical-align: top;
width: 0;
-
}
span.ime-disable-link {
@@ -100,9 +99,9 @@ span.ime-disable-shortcut {
padding: 0;
border: 1px solid #a2a9b1;
border-radius: 2px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -webkit-box-shadow: 0 5px 10px rgba( 0, 0, 0, 0.2 );
+ -moz-box-shadow: 0 5px 10px rgba( 0, 0, 0, 0.2 );
+ box-shadow: 0 5px 10px rgba( 0, 0, 0, 0.2 );
text-align: left;
}
@@ -122,7 +121,7 @@ span.ime-disable-shortcut {
border-bottom: 7px solid #a2a9b1;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
- content: "";
+ content: '';
display: inline-block;
right: 9px;
position: absolute;
@@ -138,14 +137,13 @@ span.ime-disable-shortcut {
border-bottom: 6px solid #fff;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
- content: "";
+ content: '';
display: inline-block;
right: 10px;
position: absolute;
top: -6px;
}
-
.imeselector-menu.ime-right:after {
right: auto;
left: 10px;
@@ -167,11 +165,11 @@ span.ime-disable-shortcut {
.imeselector-menu .ime-checked {
/* @embed */
- background: url(../images/tick.png) no-repeat left 4px center;
+ background: url( ../images/tick.png ) no-repeat left 4px center;
/* @embed */
- background-image: -webkit-linear-gradient(transparent, transparent), url('../images/tick.svg');
+ background-image: -webkit-linear-gradient( transparent, transparent ), url( ../images/tick.svg );
/* @embed */
- background-image: linear-gradient(transparent, transparent), url('../images/tick.svg');
+ background-image: linear-gradient( transparent, transparent ), url( ../images/tick.svg );
}
.imeselector-menu .ime-help-link {
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/jquery.ime.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/jquery.ime.js
index d0133804..04b1d47b 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/jquery.ime.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/jquery.ime.js
@@ -1,13 +1,30 @@
-/*! jquery.ime - v0.2.0+20181211
+/*! jquery.ime - v0.2.0+20190329
* https://github.com/wikimedia/jquery.ime
-* Copyright (c) 2018 Santhosh Thottingal; License: (GPL-2.0+ OR MIT) */
+* Copyright (c) 2019 Santhosh Thottingal; License: (GPL-2.0+ OR MIT) */
( function ( $ ) {
'use strict';
+
var TextEntryFactory, TextEntry, FormWidgetEntry, ContentEditableEntry,
defaultInputMethod;
// rangy is defined in the rangy library
- /*global rangy */
+ /* global rangy */
+
+ function arrayKeys( obj ) {
+ return $.map( obj, function ( element, index ) {
+ return index;
+ } );
+ }
+
+ /**
+ * private function for debugging
+ * @param {jQuery} [$obj]
+ */
+ function debug( $obj ) {
+ if ( window.console && window.console.log ) {
+ window.console.log( $obj );
+ }
+ }
/**
* Just initializes an empty static object.
@@ -760,6 +777,7 @@
* jQuery plugin ime
*
* @param {Object} option
+ * @return {jQuery}
*/
$.fn.ime = function ( option ) {
return this.each( function () {
@@ -865,21 +883,6 @@
helpHandler: null, // Called for each ime option in the menu
showSelector: true
};
-
- /**
- * private function for debugging
- */
- function debug( $obj ) {
- if ( window.console && window.console.log ) {
- window.console.log( $obj );
- }
- }
-
- function arrayKeys( obj ) {
- return $.map( obj, function ( element, index ) {
- return index;
- } );
- }
}( jQuery ) );
( function ( $ ) {
@@ -899,6 +902,47 @@
this.listen();
}
+ function languageListTitle() {
+ return $( '<h3>' )
+ .addClass( 'ime-lang-title' )
+ .attr( 'data-i18n', 'jquery-ime-other-languages' )
+ .text( 'Other languages' );
+ }
+
+ function imeList() {
+ return $( '<ul>' ).addClass( 'ime-list' );
+ }
+
+ function imeListTitle() {
+ return $( '<h3>' ).addClass( 'ime-list-title autonym' );
+ }
+
+ function toggleMenuItem() {
+ return $( '<div class="ime-disable selectable-row">' ).append(
+ $( '<span>' )
+ .attr( {
+ 'class': 'ime-disable-link',
+ 'data-i18n': 'jquery-ime-disable-text'
+ } )
+ .addClass( 'ime-checked' )
+ .text( 'System input method' ),
+ $( '<span>' )
+ .addClass( 'ime-disable-shortcut' )
+ .text( 'CTRL+M' )
+ );
+ }
+
+ /**
+ * Check whether a keypress event corresponds to the shortcut key
+ *
+ * @param {event} event
+ * @return {boolean} true if the key is a shortcut key
+ */
+ function isShortcutKey( event ) {
+ // 77 - The letter M, for Ctrl-M
+ return event.ctrlKey && !event.altKey && ( event.which === 77 );
+ }
+
IMESelector.prototype = {
constructor: IMESelector,
@@ -1076,7 +1120,7 @@
e.stopPropagation();
} );
- imeselector.$element.attrchange( function ( ) {
+ imeselector.$element.attrchange( function () {
if ( imeselector.$element.is( ':hidden' ) ) {
imeselector.$imeSetting.hide();
}
@@ -1100,6 +1144,7 @@
*
* @context {HTMLElement}
* @param {jQuery.Event} e
+ * @return {boolean}
*/
keydown: function ( e ) {
var ime = $( e.target ).data( 'ime' ),
@@ -1279,8 +1324,8 @@
* @return {string} The autonym
*/
getAutonym: function ( languageCode ) {
- return $.ime.languages[ languageCode ]
- && $.ime.languages[ languageCode ].autonym;
+ return $.ime.languages[ languageCode ] &&
+ $.ime.languages[ languageCode ].autonym;
},
/**
@@ -1294,6 +1339,7 @@
/**
* Decide on initial language to select
+ * @return {string}
*/
decideLanguage: function () {
if ( $.ime.preferences.getLanguage() ) {
@@ -1500,36 +1546,6 @@
$.fn.imeselector.Constructor = IMESelector;
- function languageListTitle() {
- return $( '<h3>' )
- .addClass( 'ime-lang-title' )
- .attr( 'data-i18n', 'jquery-ime-other-languages' )
- .text( 'Other languages' );
- }
-
- function imeList() {
- return $( '<ul>' ).addClass( 'ime-list' );
- }
-
- function imeListTitle() {
- return $( '<h3>' ).addClass( 'ime-list-title autonym' );
- }
-
- function toggleMenuItem() {
- return $( '<div class="ime-disable selectable-row">' ).append(
- $( '<span>' )
- .attr( {
- 'class': 'ime-disable-link',
- 'data-i18n': 'jquery-ime-disable-text'
- } )
- .addClass( 'ime-checked' )
- .text( 'System input method' ),
- $( '<span>' )
- .addClass( 'ime-disable-shortcut' )
- .text( 'CTRL+M' )
- );
- }
-
selectorTemplate = '<div class="imeselector imeselector-toggle">' +
'<a class="ime-name imeselector-toggle" href="#"></a>' +
'<b class="ime-setting-caret imeselector-toggle"></b></div>';
@@ -1538,17 +1554,6 @@
window.WebKitMutationObserver ||
window.MozMutationObserver;
- /**
- * Check whether a keypress event corresponds to the shortcut key
- *
- * @param {event} event
- * @return {boolean} true if the key is a shortcut key
- */
- function isShortcutKey( event ) {
- // 77 - The letter M, for Ctrl-M
- return event.ctrlKey && !event.altKey && ( event.which === 77 );
- }
-
function isDOMAttrModifiedSupported() {
var p = document.createElement( 'p' ),
flag = false;
@@ -1693,15 +1698,17 @@
( function ( $ ) {
'use strict';
+ // All keys have quotes for consistency
+ /* eslint-disable quote-props */
$.extend( $.ime.sources, {
- 'am-transliteration': {
- name: 'ትራንስልተራትዖን',
- source: 'rules/am/am-transliteration.js'
- },
'ak-qx': {
name: 'QX replacement',
source: 'rules/ak/ak-qx.js'
},
+ 'am-transliteration': {
+ name: 'ትራንስልተራትዖን',
+ source: 'rules/am/am-transliteration.js'
+ },
'ar-kbd': {
name: 'لوحة المفاتيح العربية',
source: 'rules/ar/ar-kbd.js'
@@ -1822,26 +1829,30 @@
name: 'Чăвашла (AltGr)',
source: 'rules/cv/cv-cyr-altgr.js'
},
- 'cv-lat-altgr': {
- name: 'Căvašla (AltGr)',
- source: 'rules/cv/cv-lat-altgr.js'
- },
'cv-cyr-numbers': {
name: 'Чăвашла (цифрилисем)',
source: 'rules/cv/cv-cyr-numbers.js'
},
+ 'cv-lat-altgr': {
+ name: 'Căvašla (AltGr)',
+ source: 'rules/cv/cv-lat-altgr.js'
+ },
'cyrl-palochka': {
name: 'Palochka',
source: 'rules/cyrl/cyrl-palochka.js'
},
'da-normforms': {
- name: 'normalformer',
+ name: 'Brug translitteration',
source: 'rules/da/da-normforms.js'
},
'dag-alt': {
name: 'Dagbani Alt',
source: 'rules/dag/dag-alt.js'
},
+ 'de-transliteration': {
+ name: 'Deutsch Tilde',
+ source: 'rules/de/de-transliteration.js'
+ },
'din-fqsx': {
name: 'Dinka FQSX',
source: 'rules/din/din-fqsx.js'
@@ -1850,9 +1861,13 @@
name: 'इनस्क्रिप्ट २',
source: 'rules/doi/doi-inscript2.js'
},
- 'eo-transliteration': {
- name: 'transliterigo',
- source: 'rules/eo/eo-transliteration.js'
+ 'ee-tilde': {
+ name: 'Ewe Tilde',
+ source: 'rules/ee/ee-tilde.js'
+ },
+ 'el-kbd': {
+ name: 'Τυπική πληκτρολόγιο',
+ source: 'rules/el/el-kbd.js'
},
'eo-h': {
name: 'Esperanto h',
@@ -1870,6 +1885,10 @@
name: 'Esperanto q sistemo',
source: 'rules/eo/eo-q.js'
},
+ 'eo-transliteration': {
+ name: 'transliterigo',
+ source: 'rules/eo/eo-transliteration.js'
+ },
'eo-vi': {
name: 'Esperanto vi sistemo',
source: 'rules/eo/eo-vi.js'
@@ -1886,33 +1905,61 @@
name: 'Fulfulde',
source: 'rules/ff/ff-alt.js'
},
+ 'fi-transliteration': {
+ name: 'translitterointi',
+ source: 'rules/fi/fi-transliteration.js'
+ },
'fo-normforms': {
name: 'Føroyskt',
source: 'rules/fo/fo-normforms.js'
},
- 'fi-transliteration': {
- name: 'translitterointi',
- source: 'rules/fi/fi-transliteration.js'
+ 'fon-tilde': {
+ name: 'Fon Tilde',
+ source: 'rules/fon/fon-tilde.js'
},
'gaa-cqx': {
name: 'Ga - CQX replacement',
source: 'rules/gaa/gaa-cqx.js'
},
+ 'gom-inscript2': {
+ name: 'इनस्क्रिप्ट २',
+ source: 'rules/gom/gom-inscript2.js'
+ },
'got-standard': {
name: '𐌲𐌿𐍄𐌹𐍃𐌺𐌰 𐍂𐌰𐌶𐌳𐌰',
source: 'rules/got/got-standard.js'
},
- 'lud-transliteration': {
- name: 'lud',
- source: 'rules/lud/lud-transliteration.js'
+ 'gu-inscript': {
+ name: 'ઇનસ્ક્રિપ્ટ',
+ source: 'rules/gu/gu-inscript.js'
+ },
+ 'gu-inscript2': {
+ name: 'ઇનસ્ક્રિપ્ટ ૨',
+ source: 'rules/gu/gu-inscript2.js'
+ },
+ 'gu-phonetic': {
+ name: 'ફોનૅટિક',
+ source: 'rules/gu/gu-phonetic.js'
+ },
+ 'gu-transliteration': {
+ name: 'લિપ્યંતરણ',
+ source: 'rules/gu/gu-transliteration.js'
},
'ha-tilde': {
name: 'Hausa - tilde',
source: 'rules/ha/ha-tilde.js'
},
- 'hi-transliteration': {
- name: 'लिप्यंतरण',
- source: 'rules/hi/hi-transliteration.js'
+ 'he-standard-2012': {
+ name: 'עברית עם ניקוד על בסיס אנגלית',
+ source: 'rules/he/he-standard-2012.js'
+ },
+ 'he-standard-2012-extonly': {
+ name: 'עברית עם ניקוד',
+ source: 'rules/he/he-standard-2012-extonly.js'
+ },
+ 'hi-bolnagri': {
+ name: 'बोलनागरी',
+ source: 'rules/hi/hi-bolnagri.js'
},
'hi-inscript': {
name: 'इनस्क्रिप्ट',
@@ -1926,152 +1973,78 @@
name: 'फोनेटिक',
source: 'rules/hi/hi-phonetic.js'
},
- 'ig-tilde': {
- name: 'Igbo - tilde',
- source: 'rules/ig/ig-tilde.js'
- },
- 'is-normforms': {
- name: 'Venjuleg eyðublöð',
- source: 'rules/is/is-normforms.js'
+ 'hi-transliteration': {
+ name: 'लिप्यंतरण',
+ source: 'rules/hi/hi-transliteration.js'
},
'hoc-transliteration': {
name: 'Ho transliteration',
source: 'rules/hoc/hoc-transliteration.js'
},
- 'jv-transliteration': {
- name: 'Transliteration',
- source: 'rules/jv/jv-transliteration.js'
- },
- 'mai-inscript': {
- name: 'इनस्क्रिप्ट',
- source: 'rules/mai/mai-inscript.js',
- depends: 'hi-inscript'
- },
- 'mai-inscript2': {
- name: 'इनस्क्रिप्ट २',
- source: 'rules/mai/mai-inscript2.js',
- depends: 'hi-inscript2'
- },
- 'hi-bolnagri': {
- name: 'बोलनागरी',
- source: 'rules/hi/hi-bolnagri.js'
- },
- 'ml-transliteration': {
- name: 'ലിപ്യന്തരണം',
- source: 'rules/ml/ml-transliteration.js'
- },
- 'ml-inscript': {
- name: 'ഇൻസ്ക്രിപ്റ്റ്',
- source: 'rules/ml/ml-inscript.js'
- },
- 'ml-inscript2': {
- name: 'ഇൻസ്ക്രിപ്റ്റ് 2',
- source: 'rules/ml/ml-inscript2.js'
- },
- 'sv-normforms': {
- name: 'Normal forms',
- source: 'rules/sv/sv-normforms.js'
- },
- 'ta-inscript': {
- name: 'இன்ஸ்கிரிப்ட்',
- source: 'rules/ta/ta-inscript.js'
- },
- 'ta-inscript2': {
- name: 'இன்ஸ்கிரிப்ட் 2',
- source: 'rules/ta/ta-inscript2.js'
- },
- 'ta-transliteration': {
- name: 'எழுத்துப்பெயர்ப்பு',
- source: 'rules/ta/ta-transliteration.js'
- },
- 'ta-99': {
- name: 'தமிழ்99',
- source: 'rules/ta/ta-99.js'
- },
- 'ta-bamini': {
- name: 'பாமினி',
- source: 'rules/ta/ta-bamini.js'
- },
- 'th-kedmanee': {
- name: 'เกษมณี',
- source: 'rules/th/th-kedmanee.js'
- },
- 'th-pattachote': {
- name: 'ปัตตะโชติ',
- source: 'rules/th/th-pattachote.js'
- },
- 'de-transliteration': {
- name: 'Deutsch Tilde',
- source: 'rules/de/de-transliteration.js'
- },
- 'ee-tilde': {
- name: 'Ewe Tilde',
- source: 'rules/ee/ee-tilde.js'
- },
- 'el-kbd': {
- name: 'Τυπική πληκτρολόγιο',
- source: 'rules/el/el-kbd.js'
- },
- 'fon-tilde': {
- name: 'Fon Tilde',
- source: 'rules/fon/fon-tilde.js'
- },
- 'he-standard-2012': {
- name: 'עברית עם ניקוד על בסיס אנגלית',
- source: 'rules/he/he-standard-2012.js'
- },
- 'he-standard-2012-extonly': {
- name: 'עברית עם ניקוד',
- source: 'rules/he/he-standard-2012-extonly.js'
- },
'hr-kbd': {
name: 'Croatian kbd',
source: 'rules/hr/hr-kbd.js'
},
+ 'hy-emslegacy': {
+ name: 'Մայքրոսոֆթի հին արևելահայերեն',
+ source: 'rules/hy/hy-emslegacy.js'
+ },
'hy-ephonetic': {
name: 'Հնչյունային դասավորություն',
source: 'rules/hy/hy-ephonetic.js'
},
- 'hy-typewriter': {
- name: 'Գրամեքենայի դասավորություն',
- source: 'rules/hy/hy-typewriter.js'
- },
'hy-ephoneticalt': {
name: 'Հնչյունային նոր (R→Ր, F→Թ)',
source: 'rules/hy/hy-ephoneticalt.js'
},
- 'hy-emslegacy': {
- name: 'Մայքրոսոֆթի հին արևելահայերեն',
- source: 'rules/hy/hy-emslegacy.js'
+ 'hy-typewriter': {
+ name: 'Գրամեքենայի դասավորություն',
+ source: 'rules/hy/hy-typewriter.js'
},
'hy-wmslegacy': {
name: 'Մայքրոսոֆթի հին արևմտահայերեն',
source: 'rules/hy/hy-wmslegacy.js'
},
- 'gu-inscript': {
- name: 'ઇનસ્ક્રિપ્ટ',
- source: 'rules/gu/gu-inscript.js'
+ 'ig-tilde': {
+ name: 'Igbo - tilde',
+ source: 'rules/ig/ig-tilde.js'
},
- 'gu-inscript2': {
- name: 'ઇનસ્ક્રિપ્ટ ૨',
- source: 'rules/gu/gu-inscript2.js'
+ 'ipa-sil': {
+ name: 'International Phonetic Alphabet - SIL',
+ source: 'rules/fonipa/ipa-sil.js'
},
- 'gu-phonetic': {
- name: 'ફોનૅટિક',
- source: 'rules/gu/gu-phonetic.js'
+ 'ipa-x-sampa': {
+ name: 'International Phonetic Alphabet - X-SAMPA',
+ source: 'rules/fonipa/ipa-x-sampa.js'
},
- 'gu-transliteration': {
- name: 'લિપ્યંતરણ',
- source: 'rules/gu/gu-transliteration.js'
+ 'is-normforms': {
+ name: 'Venjuleg eyðublöð',
+ source: 'rules/is/is-normforms.js'
},
- 'ka-transliteration': {
- name: 'ტრანსლიტერაცია',
- source: 'rules/ka/ka-transliteration.js'
+ 'jv-transliteration': {
+ name: 'Transliteration',
+ source: 'rules/jv/jv-transliteration.js'
},
'ka-kbd': {
name: 'სტანდარტული კლავიატურის',
source: 'rules/ka/ka-kbd.js'
},
+ 'ka-transliteration': {
+ name: 'ტრანსლიტერაცია',
+ source: 'rules/ka/ka-transliteration.js'
+ },
+ 'kab-tilde': {
+ name: 'Taqbaylit Alatin tilde',
+ source: 'rules/kab/kab-tilde.js'
+ },
+ 'kbp-tilde': {
+ name: 'Kabɩyɛ tilde',
+ source: 'rules/kbp/kbp-tilde.js'
+ },
+ 'ki-tilde': {
+ name: 'Gĩkũyũ',
+ source: 'rules/ki/ki-tilde.js'
+ },
'kk-arabic': {
name: 'Kazakh Arabic transliteration',
source: 'rules/kk/kk-arabic.js'
@@ -2092,22 +2065,18 @@
name: 'ಇನ್\u200cಸ್ಕ್ರಿಪ್ಟ್ ೨',
source: 'rules/kn/kn-inscript2.js'
},
- 'kn-transliteration': {
- name: 'ಲಿಪ್ಯಂತರಣ',
- source: 'rules/kn/kn-transliteration.js'
- },
'kn-kgp': {
name: 'KGP/Nudi/KP Rao',
source: 'rules/kn/kn-kgp.js'
},
+ 'kn-transliteration': {
+ name: 'ಲಿಪ್ಯಂತರಣ',
+ source: 'rules/kn/kn-transliteration.js'
+ },
'ky-cyrl-alt': {
name: 'Кыргыз Alt',
source: 'rules/ky/ky-cyrl-alt.js'
},
- 'gom-inscript2': {
- name: 'इनस्क्रिप्ट २',
- source: 'rules/gom/gom-inscript2.js'
- },
'ks-inscript': {
name: 'इनस्क्रिप्ट',
source: 'rules/ks/ks-inscript.js'
@@ -2124,6 +2093,14 @@
name: 'Kurdî-tr',
source: 'rules/ku/ku-tr.js'
},
+ 'lg-tilde': {
+ name: 'Luganda tilde',
+ source: 'rules/lg/lg-tilde.js'
+ },
+ 'ln-tilde': {
+ name: 'Lingála tilde',
+ source: 'rules/ln/ln-tilde.js'
+ },
'lo-kbd': {
name: 'າຶກ',
source: 'rules/lo/lo-kbd.js'
@@ -2132,37 +2109,63 @@
name: 'لۊری شومالی',
source: 'rules/lrc/lrc-kbd.js'
},
+ 'lud-transliteration': {
+ name: 'lud',
+ source: 'rules/lud/lud-transliteration.js'
+ },
'lut-tulalip': {
name: 'Lushootseed Tulalip',
source: 'rules/lut/lut-tulalip.js'
},
+ 'mai-inscript': {
+ name: 'इनस्क्रिप्ट',
+ source: 'rules/mai/mai-inscript.js',
+ depends: 'hi-inscript'
+ },
+ 'mai-inscript2': {
+ name: 'इनस्क्रिप्ट २',
+ source: 'rules/mai/mai-inscript2.js',
+ depends: 'hi-inscript2'
+ },
+ 'mg-tilde': {
+ name: 'Malagasy tilde',
+ source: 'rules/mg/mg-tilde.js'
+ },
'mh': {
name: 'Kajin M̧ajeļ',
source: 'rules/mh/mh.js'
},
+ 'ml-inscript': {
+ name: 'ഇൻസ്ക്രിപ്റ്റ്',
+ source: 'rules/ml/ml-inscript.js'
+ },
+ 'ml-inscript2': {
+ name: 'ഇൻസ്ക്രിപ്റ്റ് 2',
+ source: 'rules/ml/ml-inscript2.js'
+ },
+ 'ml-transliteration': {
+ name: 'ലിപ്യന്തരണം',
+ source: 'rules/ml/ml-transliteration.js'
+ },
'mn-cyrl': {
name: 'Кирилл',
source: 'rules/mn/mn-cyrl.js'
},
- 'mn-trad': {
- name: 'ᠮᠣᠩᠭᠣᠯ ᠪᠢᠴᠢᠭ᠌',
- source: 'rules/mn/mn-trad.js'
- },
'mn-todo': {
name: 'ᡐᡆᡑᡆ ᡋᡅᡔᡅᡎ᠌',
source: 'rules/mn/mn-todo.js'
},
- 'mn-tradali': {
- name: 'Traditional Mongolian Ali-gali',
- source: 'rules/mn/mn-tradali.js'
- },
'mn-todoali': {
name: 'Todo Mongolian Ali-gali',
source: 'rules/mn/mn-todoali.js'
},
- 'phagspa': {
- name: 'PhagsPa',
- source: 'rules/mn/phagspa.js'
+ 'mn-trad': {
+ name: 'ᠮᠣᠩᠭᠣᠯ ᠪᠢᠴᠢᠭ᠌',
+ source: 'rules/mn/mn-trad.js'
+ },
+ 'mn-tradali': {
+ name: 'Traditional Mongolian Ali-gali',
+ source: 'rules/mn/mn-tradali.js'
},
'mnc': {
name: 'ᠮᠠᠨᠵᡠ',
@@ -2184,14 +2187,14 @@
name: 'मराठी इनस्क्रिप्ट २',
source: 'rules/mr/mr-inscript2.js'
},
- 'mr-transliteration': {
- name: 'अक्षरांतरण',
- source: 'rules/mr/mr-transliteration.js'
- },
'mr-phonetic': {
name: 'फोनेटिक',
source: 'rules/mr/mr-phonetic.js'
},
+ 'mr-transliteration': {
+ name: 'अक्षरांतरण',
+ source: 'rules/mr/mr-transliteration.js'
+ },
'my-mm3': {
name: 'မြန်မာ၃ လက်ကွက်',
source: 'rules/my/my-mm3.js'
@@ -2200,6 +2203,14 @@
name: 'မြန်မာဘာသာ xkb',
source: 'rules/my/my-xkb.js'
},
+ 'nb-normforms': {
+ name: 'Normal transliterasjon',
+ source: 'rules/nb/nb-normforms.js'
+ },
+ 'nb-tildeforms': {
+ name: 'Tildemerket transliterasjon',
+ source: 'rules/nb/nb-tildeforms.js'
+ },
'ne-inscript': {
name: 'इनस्क्रिप्ट',
source: 'rules/ne/ne-inscript.js'
@@ -2208,10 +2219,6 @@
name: 'इनस्क्रिप्ट २',
source: 'rules/ne/ne-inscript2.js'
},
- 'ne-transliteration': {
- name: 'ट्रांस्लितेरेशन',
- source: 'rules/ne/ne-transliteration.js'
- },
'ne-rom': {
name: 'Romanized',
source: 'rules/ne/ne-rom.js'
@@ -2220,25 +2227,17 @@
name: 'Traditional',
source: 'rules/ne/ne-trad.js'
},
- 'nb-normforms': {
- name: 'Normal transliterasjon',
- source: 'rules/nb/nb-normforms.js'
- },
- 'nb-tildeforms': {
- name: 'Tildemerket transliterasjon',
- source: 'rules/nb/nb-tildeforms.js'
+ 'ne-transliteration': {
+ name: 'ट्रांस्लितेरेशन',
+ source: 'rules/ne/ne-transliteration.js'
},
'nn-tildeforms': {
name: 'Tildemerkt transliterasjon',
source: 'rules/nb/nb-tildeforms.js'
},
- 'or-transliteration': {
- name: 'ଟ୍ରାନ୍ସଲିଟରେସନ',
- source: 'rules/or/or-transliteration.js'
- },
- 'or-OdiScript': {
- name: 'ଓଡ଼ିସ୍କ୍ରିପ୍ଟ',
- source: 'rules/or/or-OdiScript.js'
+ 'nso-tilde': {
+ name: 'Sesotho sa Leboa tilde',
+ source: 'rules/nso/nso-tilde.js'
},
'or-inscript': {
name: 'ଇନସ୍କ୍ରିପ୍ଟ',
@@ -2252,49 +2251,17 @@
name: 'ଲେଖନୀ',
source: 'rules/or/or-lekhani.js'
},
+ 'or-OdiScript': {
+ name: 'ଓଡ଼ିସ୍କ୍ରିପ୍ଟ',
+ source: 'rules/or/or-OdiScript.js'
+ },
'or-phonetic': {
name: 'ଫୋନେଟିକ',
source: 'rules/or/or-phonetic.js'
},
- 'sd-inscript2': {
- name: 'इनस्क्रिप्ट २',
- source: 'rules/sd/sd-inscript2.js'
- },
- 'sdh-kbd': {
- name: 'کوردی خوارگ',
- source: 'rules/sdh/sdh-kbd.js'
- },
- 'se-normforms': {
- name: 'Normal forms',
- source: 'rules/se/se-normforms.js'
- },
- 'sk-kbd': {
- name: 'Štandardná',
- source: 'rules/sk/sk-kbd.js'
- },
- 'sr-kbd': {
- name: 'Стандардна',
- source: 'rules/sr/sr-kbd.js'
- },
- 'te-inscript': {
- name: 'ఇన్\u200dస్క్రిప్ట్',
- source: 'rules/te/te-inscript.js'
- },
- 'te-inscript2': {
- name: 'ఇన్\u200dస్క్రిప్ట్ 2',
- source: 'rules/te/te-inscript2.js'
- },
- 'te-apple': {
- name: 'ఆపిల్',
- source: 'rules/te/te-apple.js'
- },
- 'te-modular': {
- name: 'మాడ్యులర్',
- source: 'rules/te/te-modular.js'
- },
- 'te-transliteration': {
- name: 'లిప్యంతరీకరణ',
- source: 'rules/te/te-transliteration.js'
+ 'or-transliteration': {
+ name: 'ଟ୍ରାନ୍ସଲିଟରେସନ',
+ source: 'rules/or/or-transliteration.js'
},
'pa-inscript': {
name: 'ਇਨਸਕ੍ਰਿਪਟ',
@@ -2316,14 +2283,18 @@
name: 'ਫੋਨੇਟਿਕ',
source: 'rules/pa/pa-phonetic.js'
},
- 'roa-tara-GVU': {
- name: 'Tarandine',
- source: 'rules/roa-tara/roa-tara.js',
+ 'phagspa': {
+ name: 'PhagsPa',
+ source: 'rules/mn/phagspa.js'
},
'pms': {
name: 'Piemontèis',
source: 'rules/pms/pms.js'
},
+ 'roa-tara-GVU': {
+ name: 'Tarandine',
+ source: 'rules/roa-tara/roa-tara.js'
+ },
'ru-jcuken': {
name: 'ЙЦУКЕН',
source: 'rules/ru/ru-jcuken.js'
@@ -2372,6 +2343,26 @@
name: 'sarjom baha',
source: 'rules/sat/sat-sarjom-baha.js'
},
+ 'sd-inscript2': {
+ name: 'इनस्क्रिप्ट २',
+ source: 'rules/sd/sd-inscript2.js'
+ },
+ 'sdh-kbd': {
+ name: 'کوردی خوارگ',
+ source: 'rules/sdh/sdh-kbd.js'
+ },
+ 'se-normforms': {
+ name: 'Normal forms',
+ source: 'rules/se/se-normforms.js'
+ },
+ 'ses-tilde': {
+ name: 'Koyraboro Senni tilde',
+ source: 'rules/ses/ses-tilde.js'
+ },
+ 'sg-tilde': {
+ name: 'Sängö',
+ source: 'rules/sg/sg-tilde.js'
+ },
'si-singlish': {
name: 'සිංග්ලිෂ්',
source: 'rules/si/si-singlish.js'
@@ -2380,50 +2371,110 @@
name: 'විජේසේකර',
source: 'rules/si/si-wijesekara.js'
},
- 'ti-geezim': {
- name: 'ትግርኛ',
- source: 'rules/ti/ti-geezim.js'
- },
- 'tig-geezim': {
- name: 'ትግረ',
- source: 'rules/tig/tig-geezim.js'
- },
'sjo': {
name: 'ᠰᡞᠪᡝ',
source: 'rules/sjo/sjo.js'
},
- 'ur-phonetic': {
- name: 'صوتی',
- source: 'rules/ur/ur-phonetic.js'
+ 'sk-kbd': {
+ name: 'Štandardná',
+ source: 'rules/sk/sk-kbd.js'
},
- 'ur-transliteration': {
- name: 'ٹرانسلٹریشن',
- source: 'rules/ur/ur-transliteration.js'
+ 'sr-kbd': {
+ name: 'Стандардна',
+ source: 'rules/sr/sr-kbd.js'
},
- 'ipa-sil': {
- name: 'International Phonetic Alphabet - SIL',
- source: 'rules/fonipa/ipa-sil.js'
+ 'st-tilde': {
+ name: 'Sesotho tilde',
+ source: 'rules/st/st-tilde.js'
},
- 'ipa-x-sampa': {
- name: 'International Phonetic Alphabet - X-SAMPA',
- source: 'rules/fonipa/ipa-x-sampa.js'
+ 'sv-normforms': {
+ name: 'Normal forms',
+ source: 'rules/sv/sv-normforms.js'
+ },
+ 'ta-99': {
+ name: 'தமிழ்99',
+ source: 'rules/ta/ta-99.js'
+ },
+ 'ta-bamini': {
+ name: 'பாமினி',
+ source: 'rules/ta/ta-bamini.js'
+ },
+ 'ta-inscript': {
+ name: 'இன்ஸ்கிரிப்ட்',
+ source: 'rules/ta/ta-inscript.js'
+ },
+ 'ta-inscript2': {
+ name: 'இன்ஸ்கிரிப்ட் 2',
+ source: 'rules/ta/ta-inscript2.js'
+ },
+ 'ta-transliteration': {
+ name: 'எழுத்துப்பெயர்ப்பு',
+ source: 'rules/ta/ta-transliteration.js'
+ },
+ 'te-apple': {
+ name: 'ఆపిల్',
+ source: 'rules/te/te-apple.js'
+ },
+ 'te-inscript': {
+ name: 'ఇన్\u200dస్క్రిప్ట్',
+ source: 'rules/te/te-inscript.js'
+ },
+ 'te-inscript2': {
+ name: 'ఇన్\u200dస్క్రిప్ట్ 2',
+ source: 'rules/te/te-inscript2.js'
+ },
+ 'te-modular': {
+ name: 'మాడ్యులర్',
+ source: 'rules/te/te-modular.js'
+ },
+ 'te-transliteration': {
+ name: 'లిప్యంతరీకరణ',
+ source: 'rules/te/te-transliteration.js'
+ },
+ 'th-kedmanee': {
+ name: 'เกษมณี',
+ source: 'rules/th/th-kedmanee.js'
+ },
+ 'th-pattachote': {
+ name: 'ปัตตะโชติ',
+ source: 'rules/th/th-pattachote.js'
+ },
+ 'ti-geezim': {
+ name: 'ትግርኛ',
+ source: 'rules/ti/ti-geezim.js'
+ },
+ 'tig-geezim': {
+ name: 'ትግረ',
+ source: 'rules/tig/tig-geezim.js'
},
'udm-alt': {
name: 'Удмурт ALT',
source: 'rules/udm/udm-alt.js'
},
+ 'ug-kbd': {
+ name: 'Uyghur kbd',
+ source: 'rules/ug/ug-kbd.js'
+ },
'uk-kbd': {
name: 'кбд',
source: 'rules/uk/uk-kbd.js'
},
- 'ug-kbd': {
- name: 'Uyghur kbd',
- source: 'rules/ug/ug-kbd.js'
+ 'ur-phonetic': {
+ name: 'صوتی',
+ source: 'rules/ur/ur-phonetic.js'
+ },
+ 'ur-transliteration': {
+ name: 'ٹرانسلٹریشن',
+ source: 'rules/ur/ur-transliteration.js'
},
'uz-kbd': {
name: 'Uzbek kbd',
source: 'rules/uz/uz-kbd.js'
},
+ 've-tilde': {
+ name: 'TshiVenḓa tilde',
+ source: 'rules/ve/ve-tilde.js'
+ },
'vec-GVU': {
name: 'Vèneto',
source: 'rules/vec/vec-GVU.js'
@@ -2439,8 +2490,13 @@
'yo-tilde': {
name: 'Yorùbá tilde',
source: 'rules/yo/yo-tilde.js'
+ },
+ 'zh-pinyin-transliteration': {
+ name: '拼音符号输入法',
+ source: 'rules/zh/zh-pinyin-transliteration.js'
}
} );
+ /* eslint-disable quote-props */
$.extend( $.ime.languages, {
ady: {
@@ -2519,14 +2575,14 @@
autonym: 'ብሊን',
inputmethods: [ 'byn-geezim' ]
},
- ckb: {
- autonym: 'کوردی',
- inputmethods: [ 'ckb-transliteration-arkbd', 'ckb-transliteration-fakbd', 'ckb-transliteration-lakbd' ]
- },
ce: {
autonym: 'нохчийн',
inputmethods: [ 'cyrl-palochka' ]
},
+ ckb: {
+ autonym: 'کوردی',
+ inputmethods: [ 'ckb-transliteration-arkbd', 'ckb-transliteration-fakbd', 'ckb-transliteration-lakbd' ]
+ },
cv: {
autonym: 'Чăвашла',
inputmethods: [ 'cv-cyr-altgr', 'cv-lat-altgr', 'cv-cyr-numbers' ]
@@ -2579,17 +2635,21 @@
autonym: 'Fulfulde',
inputmethods: [ 'ff-alt' ]
},
+ fi: {
+ autonym: 'Suomi',
+ inputmethods: [ 'fi-transliteration' ]
+ },
fo: {
autonym: 'Føroyskt',
inputmethods: [ 'fo-normforms' ]
},
fon: {
autonym: 'Fon',
- inputmethods: [ 'fon-tilde' ],
+ inputmethods: [ 'fon-tilde' ]
},
- fi: {
- autonym: 'Suomi',
- inputmethods: [ 'fi-transliteration' ]
+ fonipa: {
+ autonym: 'International Phonetic Alphabet',
+ inputmethods: [ 'ipa-sil', 'ipa-x-sampa' ]
},
gaa: {
autonym: 'Ga',
@@ -2607,14 +2667,6 @@
autonym: 'Igbo',
inputmethods: [ 'ig-tilde' ]
},
- lrc: {
- autonym: 'لۊری شومالی',
- inputmethods: [ 'lrc-kbd' ]
- },
- lud: {
- autonym: 'lüüdi',
- inputmethods: [ 'lud-transliteration' ]
- },
gom: {
autonym: 'गोंयची कोंकणी / Gõychi Konknni',
inputmethods: [ 'hi-transliteration', 'hi-inscript', 'gom-inscript2' ]
@@ -2631,6 +2683,10 @@
autonym: 'हिन्दी',
inputmethods: [ 'hi-transliteration', 'hi-inscript', 'hi-bolnagri', 'hi-phonetic', 'hi-inscript2' ]
},
+ hne: {
+ autonym: 'छत्तीसगढ़ी',
+ inputmethods: [ 'hi-transliteration' ]
+ },
hoc: {
autonym: '𑢹𑣉𑣉',
inputmethods: [ 'hoc-transliteration' ]
@@ -2643,10 +2699,6 @@
autonym: 'հայերեն',
inputmethods: [ 'hy-ephonetic', 'hy-typewriter', 'hy-ephoneticalt', 'hy-emslegacy', 'hy-wmslegacy' ]
},
- hne: {
- autonym: 'छत्तीसगढ़ी',
- inputmethods: [ 'hi-transliteration' ]
- },
inh: {
autonym: 'гӀалгӀай',
inputmethods: [ 'cyrl-palochka' ]
@@ -2655,10 +2707,6 @@
autonym: 'Íslenska',
inputmethods: [ 'is-normforms' ]
},
- fonipa: {
- autonym: 'International Phonetic Alphabet',
- inputmethods: [ 'ipa-sil', 'ipa-x-sampa' ]
- },
jv: {
autonym: 'ꦧꦱꦗꦮ',
inputmethods: [ 'jv-transliteration' ]
@@ -2667,10 +2715,22 @@
autonym: 'ქართული ენა',
inputmethods: [ 'ka-transliteration', 'ka-kbd' ]
},
+ kab: {
+ autonym: 'Taqbaylit / ⵜⴰⵇⴱⴰⵢⵍⵉⵜ',
+ inputmethods: [ 'kab-tilde', 'ber-tfng' ]
+ },
kbd: {
autonym: 'адыгэбзэ (къэбэрдеибзэ)',
inputmethods: [ 'cyrl-palochka' ]
},
+ kbp: {
+ autonym: 'Kabɩyɛ',
+ inputmethods: [ 'kbp-tilde' ]
+ },
+ ki: {
+ autonym: 'Gĩkũyũ',
+ inputmethods: [ 'ki-tilde' ]
+ },
kk: {
autonym: 'Қазақша',
inputmethods: [ 'kk-kbd', 'kk-arabic' ]
@@ -2691,10 +2751,6 @@
autonym: 'Кыргыз',
inputmethods: [ 'ky-cyrl-alt' ]
},
- kab: {
- autonym: 'ⵜⴰⵇⴱⴰⵢⵍⵉⵜ',
- inputmethods: [ 'ber-tfng' ]
- },
ku: {
autonym: 'Kurdî',
inputmethods: [ 'ku-h', 'ku-tr' ]
@@ -2707,10 +2763,26 @@
autonym: 'лезги',
inputmethods: [ 'cyrl-palochka' ]
},
+ lg: {
+ autonym: 'Luganda',
+ inputmethods: [ 'lg-tilde' ]
+ },
+ ln: {
+ autonym: 'Lingála',
+ inputmethods: [ 'ln-tilde' ]
+ },
lo: {
autonym: 'ລາວ',
inputmethods: [ 'lo-kbd' ]
},
+ lrc: {
+ autonym: 'لۊری شومالی',
+ inputmethods: [ 'lrc-kbd' ]
+ },
+ lud: {
+ autonym: 'lüüdi',
+ inputmethods: [ 'lud-transliteration' ]
+ },
lut: {
autonym: 'dxʷləšucid',
inputmethods: [ 'lut-tulalip' ]
@@ -2719,6 +2791,10 @@
autonym: 'मैथिली',
inputmethods: [ 'mai-inscript', 'mai-inscript2' ]
},
+ mg: {
+ autonym: 'Malagasy',
+ inputmethods: [ 'mg-tilde' ]
+ },
mh: {
autonym: 'Kajin M̧ajeļ',
inputmethods: [ 'mh' ]
@@ -2747,6 +2823,10 @@
autonym: 'မြန်မာ',
inputmethods: [ 'my-mm3', 'my-xkb' ]
},
+ nb: {
+ autonym: 'Norsk (bokmål)',
+ inputmethods: [ 'nb-normforms', 'nb-tildeforms' ]
+ },
ne: {
autonym: 'नेपाली',
inputmethods: [ 'ne-transliteration', 'ne-inscript2', 'ne-inscript', 'ne-rom', 'ne-trad' ]
@@ -2755,14 +2835,14 @@
autonym: 'नेपाल भाषा',
inputmethods: [ 'hi-transliteration', 'hi-inscript' ]
},
- nb: {
- autonym: 'Norsk (bokmål)',
- inputmethods: [ 'nb-normforms', 'nb-tildeforms' ]
- },
nn: {
autonym: 'Norsk (nynorsk)',
inputmethods: [ 'nb-normforms', 'nn-tildeforms' ]
},
+ nso: {
+ autonym: 'Sesotho sa Leboa',
+ inputmethods: [ 'nso-tilde' ]
+ },
or: {
autonym: 'ଓଡ଼ିଆ',
inputmethods: [ 'or-phonetic', 'or-transliteration', 'or-inscript', 'or-inscript2', 'or-lekhani', 'or-OdiScript' ]
@@ -2787,14 +2867,14 @@
autonym: 'русский',
inputmethods: [ 'ru-jcuken', 'ru-kbd', 'ru-phonetic', 'ru-yawerty' ]
},
- sah: {
- autonym: 'саха тыла',
- inputmethods: [ 'sah-transliteration' ]
- },
sa: {
autonym: 'संस्कृत',
inputmethods: [ 'sa-transliteration', 'sa-inscript2', 'sa-inscript', 'sa-iast' ]
},
+ sah: {
+ autonym: 'саха тыла',
+ inputmethods: [ 'sah-transliteration' ]
+ },
sat: {
autonym: 'ᱥᱟᱱᱛᱟᱞᱤ (संताली)',
inputmethods: [ 'sat-inscript2', 'sat-inscript2-ol-chiki', 'sat-sarjom-baha' ]
@@ -2811,6 +2891,14 @@
autonym: 'Davvisámegiella',
inputmethods: [ 'se-normforms' ]
},
+ ses: {
+ autonym: 'Koyraboro Senni',
+ inputmethods: [ 'ses-tilde' ]
+ },
+ sg: {
+ autonym: 'Sängö',
+ inputmethods: [ 'sg-tilde' ]
+ },
shi: {
autonym: 'ⵜⴰⵛⵍⵃⵉⵜ',
inputmethods: [ 'ber-tfng' ]
@@ -2831,6 +2919,10 @@
autonym: 'Српски / srpski',
inputmethods: [ 'sr-kbd' ]
},
+ st: {
+ autonym: 'Sesotho',
+ inputmethods: [ 'st-tilde' ]
+ },
sv: {
autonym: 'Svenska',
inputmethods: [ 'sv-normforms' ]
@@ -2891,6 +2983,10 @@
autonym: 'Oʻzbekcha',
inputmethods: [ 'uz-kbd' ]
},
+ ve: {
+ autonym: 'TshiVenḓa',
+ inputmethods: [ 've-tilde' ]
+ },
vec: {
autonym: 'Vèneto',
inputmethods: [ 'vec-GVU' ]
@@ -2902,6 +2998,10 @@
yo: {
autonym: 'Yorùbá',
inputmethods: [ 'yo-alt', 'yo-tilde' ]
+ },
+ zh: {
+ autonym: '中文',
+ inputmethods: [ 'zh-pinyin-transliteration' ]
}
} );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/bo/bo-sambhota.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/bo/bo-sambhota.js
index a7188a01..0b2a60a1 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/bo/bo-sambhota.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/bo/bo-sambhota.js
@@ -31,7 +31,7 @@
return sub;
default:
- if (alwaysStacked) {
+ if ( alwaysStacked ) {
return sub;
}
@@ -60,6 +60,7 @@
version: '1.0',
maxKeyLength: 5,
patterns: [
+ /* eslint-disable max-statements-per-line */
[ ' ', function () { reinit(); return '་'; } ],
[ '\\.', function () { reinit(); return ' '; } ],
[ ',', function () { reinit(); return '།'; } ],
@@ -139,7 +140,7 @@
[ 'h', function () { return normalOrSub( 'ཧ', 'ྷ', true ); } ],
[ 'A', function () { return normalOrSub( 'ཨ', 'ྸ' ); } ],
[ 'R', function () { return normalOrSub( 'ཪ', 'ྼ' ); } ],
- [ 'Y', 'ྻ'],
+ [ 'Y', 'ྻ' ],
[ 'ྲI', function () { reinit(); return 'ྲྀ'; } ],
[ 'ླI', function () { reinit(); return 'ླྀ'; } ],
[ 'I', function () { reinit(); return 'ྀ'; } ],
@@ -181,6 +182,7 @@
[ '7', function () { reinit(); return '༧'; } ],
[ '8', function () { reinit(); return '༨'; } ],
[ '9', function () { reinit(); return '༩'; } ]
+ /* eslint-enable max-statements-per-line */
]
};
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/byn/byn-geezim.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/byn/byn-geezim.js
index 4a61e2f0..7d30788e 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/byn/byn-geezim.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/byn/byn-geezim.js
@@ -413,8 +413,7 @@
[ '፺0', '፱፻' ], // 900
[ '፻0', '፲፻' ], // 1000
- [ '፲፻0', '፼' ], // 10,000
-
+ [ '፲፻0', '፼' ] // 10,000
]
};
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/din/din-fqsx.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/din/din-fqsx.js
index 8411aada..715a96fc 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/din/din-fqsx.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/din/din-fqsx.js
@@ -42,7 +42,7 @@
[ 's', 'ɛ' ],
[ 'X', 'Ɔ' ],
[ 'x', 'ɔ' ]
- ],
+ ]
};
$.ime.register( defs );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/eo/eo-transliteration.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/eo/eo-transliteration.js
index 0a1e4862..55023df7 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/eo/eo-transliteration.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/eo/eo-transliteration.js
@@ -1,6 +1,8 @@
( function ( $ ) {
'use strict';
+ var eoTransliteration;
+
function prepareRules() {
var rules = [],
chars;
@@ -28,7 +30,7 @@
return rules;
}
- var eoTransliteration = {
+ eoTransliteration = {
id: 'eo-transliteration',
name: 'Esperanto Transliteration',
description: 'Esperanto x-code transliteration',
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/kab/kab-tilde.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/kab/kab-tilde.js
new file mode 100644
index 00000000..381af930
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/kab/kab-tilde.js
@@ -0,0 +1,41 @@
+( function ( $ ) {
+ 'use strict';
+
+ var kabTilde = {
+ id: 'kab-tilde',
+ name: 'kab-tilde',
+ description: 'Kabyle Latin tilde keyboard',
+ date: '2018-11-30',
+ URL: 'https://github.com/wikimedia/jquery.ime',
+ author: 'Amir E. Aharoni',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ '~C', 'C\u030C' ], // C with combining caron
+ [ '~c', 'c\u030C' ], // c with combining caron
+ [ '~D', 'D\u0323' ], // D with combining dot below
+ [ '~d', 'd\u0323' ], // d with combining dot below
+ [ '~E', 'Ɛ' ],
+ [ '~e', 'ɛ' ],
+ [ '~G', 'G\u030C' ], // G with combining caron
+ [ '~g', 'g\u030C' ], // g with combining caron
+ [ '~Y', 'Ɣ' ],
+ [ '~y', 'ɣ' ],
+ [ '~H', 'H\u0323' ], // H with combining dot below
+ [ '~h', 'h\u0323' ], // h with combining dot below
+ // ~R is not provided to avoided confusion between caron and dot below
+ [ '~S', 'S\u0323' ], // S with combining dot below
+ [ '~s', 's\u0323' ], // s with combining dot below
+ [ '~T', 'T\u0323' ], // T with combining dot below
+ [ '~t', 't\u0323' ], // t with combining dot below
+ [ '~Z', 'Z\u0323' ], // Z with combining dot below
+ [ '~z', 'z\u0323' ], // z with combining dot below
+ [ '~w', 'ʷ' ],
+ [ '~v', '\u030C' ], // Combining caron
+ [ '~\\.', '\u0323' ], // Combining dot below
+ [ '~,', '\u0327' ] // Combining cedilla
+ ]
+ };
+
+ $.ime.register( kabTilde );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/kbp/kbp-tilde.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/kbp/kbp-tilde.js
new file mode 100644
index 00000000..a5deaa55
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/kbp/kbp-tilde.js
@@ -0,0 +1,35 @@
+( function ( $ ) {
+ 'use strict';
+
+ var kbpTilde = {
+ id: 'kbp-tilde',
+ name: 'Kabɩyɛ tilde',
+ description: 'Kabiye input keyboard',
+ date: '2018-12-18',
+ URL: 'https://github.com/wikimedia/jquery.ime',
+ author: 'Amir E. Aharoni',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ '~D', 'Ɖ' ],
+ [ '~d', 'ɖ' ],
+ [ '~E', 'Ɛ' ],
+ [ '~e', 'ɛ' ],
+ [ '~G', 'Ɣ' ],
+ [ '~g', 'ɣ' ],
+ [ '~I', 'Ɩ' ],
+ [ '~i', 'ɩ' ],
+ [ '~N', 'Ŋ' ],
+ [ '~n', 'ŋ' ],
+ [ '~O', 'Ɔ' ],
+ [ '~o', 'ɔ' ],
+ [ '~V', 'Ʋ' ],
+ [ '~v', 'ʋ' ],
+ [ '~/', '\u0301' ], // Combining acute
+ [ '~\\\\', '\u0300' ], // Combining grave
+ [ '~\\{', '\u0303' ] // Combining tilde
+ ]
+ };
+
+ $.ime.register( kbpTilde );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ki/ki-tilde.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ki/ki-tilde.js
new file mode 100644
index 00000000..ca600971
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ki/ki-tilde.js
@@ -0,0 +1,22 @@
+( function ( $ ) {
+ 'use strict';
+
+ var kiTilde = {
+ id: 'ki-tilde',
+ name: 'ki-tilde',
+ description: 'Kikuyu input keyboard - tilde',
+ date: '2019-01-22',
+ URL: 'https://github.com/wikimedia/jquery.ime',
+ author: 'Amir E. Aharoni',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ '~I', 'Ĩ' ],
+ [ '~i', 'ĩ' ],
+ [ '~U', 'Ũ' ],
+ [ '~u', 'ũ' ]
+ ]
+ };
+
+ $.ime.register( kiTilde );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/km/km-nidakyk.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/km/km-nidakyk.js
index 6042c273..cf591b78 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/km/km-nidakyk.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/km/km-nidakyk.js
@@ -32,6 +32,11 @@
// Make sure contextLength is large enough for
// these rules.
+ // Khmer uses a lot of U+200B, zero width space,
+ // so ignore it in this file
+
+ /* eslint-disable no-irregular-whitespace */
+
// correction for two-part dependent vowels
[ '\u17c1a', 'e', '\u17c4' ], // ​េ + ​ា -> ​ោ (o)
[ '\u17b6e', 'a', '\u17c4' ], // ​ា + ​េ -> ​ោ (o)
@@ -210,6 +215,8 @@
[ 'q', 'ៜ' ],
[ 'w', '\u17dd' ], // ​៝
+ /* eslint-enable no-irregular-whitespace */
+
// divination signs (digits)
[ '\\!', '៱' ], // shift-1
[ '@', '៲' ], // shift-2
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/lg/lg-tilde.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/lg/lg-tilde.js
new file mode 100644
index 00000000..27ae3643
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/lg/lg-tilde.js
@@ -0,0 +1,20 @@
+( function ( $ ) {
+ 'use strict';
+
+ var lgTilde = {
+ id: 'lg-tilde',
+ name: 'lg-tilde',
+ description: 'Luganda tilde keyboard',
+ date: '2019-03-28',
+ URL: 'https://github.com/wikimedia/jquery.ime',
+ author: 'Amir E. Aharoni',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ '~N', 'Ŋ' ],
+ [ '~n', 'ŋ' ]
+ ]
+ };
+
+ $.ime.register( lgTilde );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ln/ln-tilde.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ln/ln-tilde.js
new file mode 100644
index 00000000..52199f64
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ln/ln-tilde.js
@@ -0,0 +1,25 @@
+( function ( $ ) {
+ 'use strict';
+
+ var lnTilde = {
+ id: 'ln-tilde',
+ name: 'ln-tilde',
+ description: 'Lingala tilde keyboard',
+ date: '2019-03-28',
+ URL: 'https://github.com/wikimedia/jquery.ime',
+ author: 'Amir E. Aharoni',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ '~E', 'Ɛ' ],
+ [ '~e', 'ɛ' ],
+ [ '~O', 'Ɔ' ],
+ [ '~o', 'ɔ' ],
+ [ '~/', '\u0301' ], // Combining acute
+ [ '~\\^', '\u0302' ], // Combining circumflex
+ [ '~v', '\u030C' ] // Combining caron
+ ]
+ };
+
+ $.ime.register( lnTilde );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/lut/lut-tulalip.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/lut/lut-tulalip.js
index a8f89866..e56994d8 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/lut/lut-tulalip.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/lut/lut-tulalip.js
@@ -3,52 +3,52 @@
var lutTulalip = {
id: 'lut-tulalip',
- name: "Lushootseed Tulalip",
- description: "Lushootseed Keyboard with Tulalip Layout",
+ name: 'Lushootseed Tulalip',
+ description: 'Lushootseed Keyboard with Tulalip Layout',
date: '2014-03-01',
URL: 'https://github.com/jcrowgey/jquery.ime',
author: 'Joshua Crowgey, jcrowgey@u.washington.edu',
license: 'GPLv3',
version: '1.0',
patterns: [
- ['e', 'ə' ], // U+0259
- ['r', 'š' ], // U+0161
- ['o', 'ʷ' ], // U+02B7
- ['f', 'ʔ' ], // U+0294
- ['j', 'ǰ' ], // U+01F0
- [';', 'ɬ' ], // U+026C
- ['z', 'x̌' ], // U+0078 U+030C
- ['v', 'č' ], // U+010D
+ [ 'e', 'ə' ], // U+0259
+ [ 'r', 'š' ], // U+0161
+ [ 'o', 'ʷ' ], // U+02B7
+ [ 'f', 'ʔ' ], // U+0294
+ [ 'j', 'ǰ' ], // U+01F0
+ [ ';', 'ɬ' ], // U+026C
+ [ 'z', 'x̌' ], // U+0078 U+030C
+ [ 'v', 'č' ], // U+010D
// shifted
- [ 'Q', 'q̓'], // U+0071 U+0313
- [ 'W', 'w̓'], // U+0077 U+0313
- [ 'E', 'q̓ʷ'], // U+0071 U+0313 U+02B7
- [ 'R', '√'], // U+221A
- [ 'T', 't̕'], // U+0074 U+0315
- [ 'Y', 'y̓'], // U+0079 U+0313
- [ 'U', ''], // nul
- [ 'I', 'kʷ'], // U+006B U+02B7
- [ 'O', ''], // nul
- [ 'P', 'p̓'], // U+0070 U+0313
+ [ 'Q', 'q̓' ], // U+0071 U+0313
+ [ 'W', 'w̓' ], // U+0077 U+0313
+ [ 'E', 'q̓ʷ' ], // U+0071 U+0313 U+02B7
+ [ 'R', '√' ], // U+221A
+ [ 'T', 't̕' ], // U+0074 U+0315
+ [ 'Y', 'y̓' ], // U+0079 U+0313
+ [ 'U', '' ], // nul
+ [ 'I', 'kʷ' ], // U+006B U+02B7
+ [ 'O', '' ], // nul
+ [ 'P', 'p̓' ], // U+0070 U+0313
// middle row shifted
- [ 'A', 'qʷ'], //U+0071 U+02B7
- [ 'S', ''], //nul
- [ 'D', 'dᶻ'], //U+0064 U+1DBB
- [ 'F', ''], //nul
- [ 'G', 'gʷ'], //U+0067 U+02B7
- [ 'H', ''], //nul
- [ 'J', 'k̓ʷ'], //U+006B U+0313 U+02B7
- [ 'K', 'k̓'], //U+006B U+0313
- [ 'L', 'l̕'], //U+006C U+0315
- [ ':' , 'ƛ̕'], //U+019B U+0315
+ [ 'A', 'qʷ' ], // U+0071 U+02B7
+ [ 'S', '' ], // nul
+ [ 'D', 'dᶻ' ], // U+0064 U+1DBB
+ [ 'F', '' ], // nul
+ [ 'G', 'gʷ' ], // U+0067 U+02B7
+ [ 'H', '' ], // nul
+ [ 'J', 'k̓ʷ' ], // U+006B U+0313 U+02B7
+ [ 'K', 'k̓' ], // U+006B U+0313
+ [ 'L', 'l̕' ], // U+006C U+0315
+ [ ':' , 'ƛ̕' ], // U+019B U+0315
// bottom row shifted
- [ "Z", 'x̌ʷ'], //U+0078 U+030C U+02B7
- [ "X", 'xʷ'], //U+0078 U+02B7
- [ "C", 'c̓'], //U+0063 U+0313
- [ "V", 'č̓'], //U+010D U+0313
- [ "B", 'b̓'], //U+0062 U+0313
- [ "N", 'n̓'], //U+006E U+0313
- [ "M", 'm̓'] //U+006D U+0313
+ [ 'Z', 'x̌ʷ' ], // U+0078 U+030C U+02B7
+ [ 'X', 'xʷ' ], // U+0078 U+02B7
+ [ 'C', 'c̓' ], // U+0063 U+0313
+ [ 'V', 'č̓' ], // U+010D U+0313
+ [ 'B', 'b̓' ], // U+0062 U+0313
+ [ 'N', 'n̓' ], // U+006E U+0313
+ [ 'M', 'm̓' ] // U+006D U+0313
]
};
$.ime.register( lutTulalip );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mg/mg-tilde.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mg/mg-tilde.js
new file mode 100644
index 00000000..ec215dd8
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mg/mg-tilde.js
@@ -0,0 +1,25 @@
+( function ( $ ) {
+ 'use strict';
+
+ var mgTilde = {
+ id: 'mg-tilde',
+ name: 'mg-tilde',
+ description: 'Malagasy tilde keyboard',
+ date: '2019-03-28',
+ URL: 'https://github.com/wikimedia/jquery.ime',
+ author: 'Amir E. Aharoni',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ '~n', 'n̈' ],
+ [ '~N', 'N̈' ],
+ [ '~\\\\', '\u0300' ], // Combining grave
+ [ '~/', '\u0301' ], // Combining acute
+ [ '~\\^', '\u0302' ], // Combining circumflex
+ [ '~\\:', '\u0308' ], // Combining diaeresis
+ [ '~v', '\u030C' ] // Combining caron
+ ]
+ };
+
+ $.ime.register( mgTilde );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-todo.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-todo.js
index a93ff63e..e5529353 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-todo.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-todo.js
@@ -1,112 +1,112 @@
-( function ( $ ) {
- 'use strict';
-
- var todoMongolian = {
- id: 'mn-todo',
- name: 'Mongolian Todo Scripts',
- description: 'Mongolian Todo Scripts',
- date: '2014-4-22',
- URL: 'http://github.com/wikimedia/jquery.ime',
- author: 'Feilong Huang, <huangfeilong@gmail.com>',
- license: 'GPLv3',
- version: '1.0',
- patterns: [
- ['Q', '\u1800'],
- ['W', '\u1856'],
- ['E', '\u1843'],
- ['R', ''],
- ['T', ''],
- ['Y', ''],
- ['U', ''],
- ['I', ''],
- ['O', ''],
- ['P', ''],
- ['{', '〈'],
- ['}', '〉'],
- ['A', '\u1806'],
- ['S', ''],
- ['D', '᠅'],
- ['F', ''],
- ['G', '\u1858'],
- ['H', '\u1859'],
- ['J', '\u1834'],
- ['K', ''],
- ['L', '\u1840'],
- [':', '\u1804'],
- ['"', '\u180c'],
- ['Z', '\u185a'],
- ['X', ''],
- ['C', '\u1854'],
- ['V', ''],
- ['B', ''],
- ['N', '\u184a'],
- ['M', '\u185b'],
- ['<', '《'],
- ['>', '》'],
- ['\\?', '?'],
- ['_', '\u180e'],
- ['\\+', '+'],
-
- ['q', '\u184d'],
- ['w', '\u1846'],
- ['e', '\u1844'],
- ['r', '\u1837'],
- ['t', '\u1850'],
- ['y', '\u1855'],
- ['u', '\u1849'],
- ['i', '\u1845'],
- ['o', '\u1848'],
- ['p', '\u184c'],
- ['\\[', '〔'],
- ['\\]', '〕'],
- ['a', '\u1820'],
- ['s', '\u1830'],
- ['d', '\u1851'],
- ['f', '\u1838'],
- ['g', '\u184e'],
- ['h', '\u184d'],
- ['j', '\u1853'],
- ['k', '\u1857'],
- ['l', '\u182f'],
- [';', ';'],
- ['\'', '\u180b'],
- ['z', '\u185c'],
- ['x', '\u1831'],
- ['c', '\u1852'],
- ['v', '\u1847'],
- ['b', '\u184b'],
- ['n', '\u1828'],
- ['m', '\u184f'],
- [',', '\u1802'],
- ['\\.', '\u1803'],
- ['/', '.'],
- ['\\-', '\u202f'],
- ['=', '='],
-
- ['`', '\u180d'],
- ['~', '~'],
- ['1', '1'],
- ['2', '2'],
- ['3', '3'],
- ['4', '4'],
- ['5', '5'],
- ['6', '6'],
- ['7', '7'],
- ['8', '8'],
- ['9', '9'],
- ['0', '0'],
- ['!', '!'],
- ['@', '\u2048'],
- ['#', '\u2049'],
- ['\\$', '—'],
- ['%', '%'],
- ['\\^', '\u200c'],
- ['&', '\u180a'],
- ['\\*', '\u200d'],
- ['\\(', '('],
- ['\\)', ')']
- ]
- };
-
- $.ime.register( todoMongolian );
-}( jQuery ) );
+( function ( $ ) {
+ 'use strict';
+
+ var todoMongolian = {
+ id: 'mn-todo',
+ name: 'Mongolian Todo Scripts',
+ description: 'Mongolian Todo Scripts',
+ date: '2014-4-22',
+ URL: 'http://github.com/wikimedia/jquery.ime',
+ author: 'Feilong Huang, <huangfeilong@gmail.com>',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ 'Q', '\u1800' ],
+ [ 'W', '\u1856' ],
+ [ 'E', '\u1843' ],
+ [ 'R', '' ],
+ [ 'T', '' ],
+ [ 'Y', '' ],
+ [ 'U', '' ],
+ [ 'I', '' ],
+ [ 'O', '' ],
+ [ 'P', '' ],
+ [ '{', '〈' ],
+ [ '}', '〉' ],
+ [ 'A', '\u1806' ],
+ [ 'S', '' ],
+ [ 'D', '᠅' ],
+ [ 'F', '' ],
+ [ 'G', '\u1858' ],
+ [ 'H', '\u1859' ],
+ [ 'J', '\u1834' ],
+ [ 'K', '' ],
+ [ 'L', '\u1840' ],
+ [ ':', '\u1804' ],
+ [ '"', '\u180c' ],
+ [ 'Z', '\u185a' ],
+ [ 'X', '' ],
+ [ 'C', '\u1854' ],
+ [ 'V', '' ],
+ [ 'B', '' ],
+ [ 'N', '\u184a' ],
+ [ 'M', '\u185b' ],
+ [ '<', '《' ],
+ [ '>', '》' ],
+ [ '\\?', '?' ],
+ [ '_', '\u180e' ],
+ [ '\\+', '+' ],
+
+ [ 'q', '\u184d' ],
+ [ 'w', '\u1846' ],
+ [ 'e', '\u1844' ],
+ [ 'r', '\u1837' ],
+ [ 't', '\u1850' ],
+ [ 'y', '\u1855' ],
+ [ 'u', '\u1849' ],
+ [ 'i', '\u1845' ],
+ [ 'o', '\u1848' ],
+ [ 'p', '\u184c' ],
+ [ '\\[', '〔' ],
+ [ '\\]', '〕' ],
+ [ 'a', '\u1820' ],
+ [ 's', '\u1830' ],
+ [ 'd', '\u1851' ],
+ [ 'f', '\u1838' ],
+ [ 'g', '\u184e' ],
+ [ 'h', '\u184d' ],
+ [ 'j', '\u1853' ],
+ [ 'k', '\u1857' ],
+ [ 'l', '\u182f' ],
+ [ ';', ';' ],
+ [ '\'', '\u180b' ],
+ [ 'z', '\u185c' ],
+ [ 'x', '\u1831' ],
+ [ 'c', '\u1852' ],
+ [ 'v', '\u1847' ],
+ [ 'b', '\u184b' ],
+ [ 'n', '\u1828' ],
+ [ 'm', '\u184f' ],
+ [ ',', '\u1802' ],
+ [ '\\.', '\u1803' ],
+ [ '/', '.' ],
+ [ '\\-', '\u202f' ],
+ [ '=', '=' ],
+
+ [ '`', '\u180d' ],
+ [ '~', '~' ],
+ [ '1', '1' ],
+ [ '2', '2' ],
+ [ '3', '3' ],
+ [ '4', '4' ],
+ [ '5', '5' ],
+ [ '6', '6' ],
+ [ '7', '7' ],
+ [ '8', '8' ],
+ [ '9', '9' ],
+ [ '0', '0' ],
+ [ '!', '!' ],
+ [ '@', '\u2048' ],
+ [ '#', '\u2049' ],
+ [ '\\$', '—' ],
+ [ '%', '%' ],
+ [ '\\^', '\u200c' ],
+ [ '&', '\u180a' ],
+ [ '\\*', '\u200d' ],
+ [ '\\(', '(' ],
+ [ '\\)', ')' ]
+ ]
+ };
+
+ $.ime.register( todoMongolian );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-todoali.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-todoali.js
index b16d0f76..024ed506 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-todoali.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-todoali.js
@@ -1,112 +1,112 @@
-( function ( $ ) {
- 'use strict';
-
- var todoMongolianAli = {
- id: 'mn-todoali',
- name: 'Mongolian Todo Ali-gali Scripts',
- description: 'Mongolian Todo Ali-gali Scripts',
- date: '2014-4-22',
- URL: 'http://github.com/wikimedia/jquery.ime',
- author: 'Feilong Huang, <huangfeilong@gmail.com>',
- license: 'GPLv3',
- version: '1.0',
- patterns: [
- ['Q', ''],
- ['W', ''],
- ['E', ''],
- ['R', ''],
- ['T', ''],
- ['Y', ''],
- ['U', ''],
- ['I', ''],
- ['O', ''],
- ['P', ''],
- ['{', '〈'],
- ['}', '〉'],
- ['A', ''],
- ['S', ''],
- ['D', '\u18a9'],
- ['F', ''],
- ['G', ''],
- ['H', ''],
- ['J', ''],
- ['K', ''],
- ['L', ''],
- [':', '\u1804'],
- ['"', '\u180c'],
- ['Z', ''],
- ['X', ''],
- ['C', ''],
- ['V', ''],
- ['B', ''],
- ['N', ''],
- ['M', ''],
- ['<', '《'],
- ['>', '》'],
- ['\\?', '?'],
- ['_', '\u180e'],
- ['\\+', '+'],
-
- ['q', '\u1880'],
- ['w', '\u1881'],
- ['e', '\u1882'],
- ['r', '\u1883'],
- ['t', '\u1884'],
- ['y', '\u1885'],
- ['u', '\u1886'],
- ['i', '\u1887'],
- ['o', '\u1888'],
- ['p', '\u1889'],
- ['\\[', '〔'],
- ['\\]', '〕'],
- ['a', '\u188a'],
- ['s', '\u188b'],
- ['d', '\u188c'],
- ['f', '\u188d'],
- ['g', '\u188e'],
- ['h', '\u188f'],
- ['j', '\u1898'],
- ['k', '\u1891'],
- ['l', '\u1892'],
- [';', '\u1893'],
- ['\'', '\u180b'],
- ['z', '\u1894'],
- ['x', '\u1899'],
- ['c', '\u1896'],
- ['v', '\u1897'],
- ['b', '\u1898'],
- ['n', '\u18a6'],
- ['m', '\u18a7'],
- [',', '\u1802'],
- ['\\.', '\u1803'],
- ['/', '.'],
- ['\\-', '\u202f'],
- ['=', '='],
-
- ['`', '\u180d'],
- ['~', '~'],
- ['1', '\u1811'],
- ['2', '\u1812'],
- ['3', '\u1813'],
- ['4', '\u1814'],
- ['5', '\u1815'],
- ['6', '\u1816'],
- ['7', '\u1817'],
- ['8', '\u1818'],
- ['9', '\u1819'],
- ['0', '\u1810'],
- ['!', '!'],
- ['@', '\u2048'],
- ['#', '\u2049'],
- ['\\$', '—'],
- ['%', '%'],
- ['\\^', '\u200c'],
- ['&', '\u180a'],
- ['\\*', '\u200d'],
- ['\\(', '('],
- ['\\)', ')']
- ]
- };
-
- $.ime.register( todoMongolianAli );
-}( jQuery ) );
+( function ( $ ) {
+ 'use strict';
+
+ var todoMongolianAli = {
+ id: 'mn-todoali',
+ name: 'Mongolian Todo Ali-gali Scripts',
+ description: 'Mongolian Todo Ali-gali Scripts',
+ date: '2014-4-22',
+ URL: 'http://github.com/wikimedia/jquery.ime',
+ author: 'Feilong Huang, <huangfeilong@gmail.com>',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ 'Q', '' ],
+ [ 'W', '' ],
+ [ 'E', '' ],
+ [ 'R', '' ],
+ [ 'T', '' ],
+ [ 'Y', '' ],
+ [ 'U', '' ],
+ [ 'I', '' ],
+ [ 'O', '' ],
+ [ 'P', '' ],
+ [ '{', '〈' ],
+ [ '}', '〉' ],
+ [ 'A', '' ],
+ [ 'S', '' ],
+ [ 'D', '\u18a9' ],
+ [ 'F', '' ],
+ [ 'G', '' ],
+ [ 'H', '' ],
+ [ 'J', '' ],
+ [ 'K', '' ],
+ [ 'L', '' ],
+ [ ':', '\u1804' ],
+ [ '"', '\u180c' ],
+ [ 'Z', '' ],
+ [ 'X', '' ],
+ [ 'C', '' ],
+ [ 'V', '' ],
+ [ 'B', '' ],
+ [ 'N', '' ],
+ [ 'M', '' ],
+ [ '<', '《' ],
+ [ '>', '》' ],
+ [ '\\?', '?' ],
+ [ '_', '\u180e' ],
+ [ '\\+', '+' ],
+
+ [ 'q', '\u1880' ],
+ [ 'w', '\u1881' ],
+ [ 'e', '\u1882' ],
+ [ 'r', '\u1883' ],
+ [ 't', '\u1884' ],
+ [ 'y', '\u1885' ],
+ [ 'u', '\u1886' ],
+ [ 'i', '\u1887' ],
+ [ 'o', '\u1888' ],
+ [ 'p', '\u1889' ],
+ [ '\\[', '〔' ],
+ [ '\\]', '〕' ],
+ [ 'a', '\u188a' ],
+ [ 's', '\u188b' ],
+ [ 'd', '\u188c' ],
+ [ 'f', '\u188d' ],
+ [ 'g', '\u188e' ],
+ [ 'h', '\u188f' ],
+ [ 'j', '\u1898' ],
+ [ 'k', '\u1891' ],
+ [ 'l', '\u1892' ],
+ [ ';', '\u1893' ],
+ [ '\'', '\u180b' ],
+ [ 'z', '\u1894' ],
+ [ 'x', '\u1899' ],
+ [ 'c', '\u1896' ],
+ [ 'v', '\u1897' ],
+ [ 'b', '\u1898' ],
+ [ 'n', '\u18a6' ],
+ [ 'm', '\u18a7' ],
+ [ ',', '\u1802' ],
+ [ '\\.', '\u1803' ],
+ [ '/', '.' ],
+ [ '\\-', '\u202f' ],
+ [ '=', '=' ],
+
+ [ '`', '\u180d' ],
+ [ '~', '~' ],
+ [ '1', '\u1811' ],
+ [ '2', '\u1812' ],
+ [ '3', '\u1813' ],
+ [ '4', '\u1814' ],
+ [ '5', '\u1815' ],
+ [ '6', '\u1816' ],
+ [ '7', '\u1817' ],
+ [ '8', '\u1818' ],
+ [ '9', '\u1819' ],
+ [ '0', '\u1810' ],
+ [ '!', '!' ],
+ [ '@', '\u2048' ],
+ [ '#', '\u2049' ],
+ [ '\\$', '—' ],
+ [ '%', '%' ],
+ [ '\\^', '\u200c' ],
+ [ '&', '\u180a' ],
+ [ '\\*', '\u200d' ],
+ [ '\\(', '(' ],
+ [ '\\)', ')' ]
+ ]
+ };
+
+ $.ime.register( todoMongolianAli );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-trad.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-trad.js
index 5ea79309..a4e21edf 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-trad.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-trad.js
@@ -1,112 +1,112 @@
-( function ( $ ) {
- 'use strict';
-
- var tradMongolian = {
- id: 'mn-trad',
- name: 'Traditional Mongolian Scripts',
- description: 'Traditional Mongolian Scripts',
- date: '2014-4-22',
- URL: 'http://github.com/wikimedia/jquery.ime',
- author: 'Feilong Huang, <huangfeilong@gmail.com>',
- license: 'GPLv3',
- version: '1.0',
- patterns: [
- ['Q', '\u1805'],
- ['W', '\u1838'],
- ['E', '\u1827'],
- ['R', '\u183f'],
- ['T', ''],
- ['Y', ''],
- ['U', ''],
- ['I', ''],
- ['O', ''],
- ['P', ''],
- ['{', '〈'],
- ['}', '〉'],
- ['A', '\u1800'],
- ['S', ''],
- ['D', ''],
- ['F', ''],
- ['G', ''],
- ['H', '\u183e'],
- ['J', ''],
- ['K', '\u183b'],
- ['L', '\u1840'],
- [':', '\u1804'],
- ['"', '\u180c'],
- ['Z', '\u1841'],
- ['X', ''],
- ['C', '\u1842'],
- ['V', ''],
- ['B', ''],
- ['N', '\u1829'],
- ['M', ''],
- ['<', '《'],
- ['>', '》'],
- ['\\?', '?'],
- ['_', '\u180e'],
- ['\\+', '+'],
- ['\\\\', '\u1801'],
- ['q', '\u1834'],
- ['w', '\u1823'],
- ['e', '\u1821'],
- ['r', '\u1837'],
- ['t', '\u1832'],
- ['y', '\u1836'],
- ['u', '\u1826'],
- ['i', '\u1822'],
- ['o', '\u1825'],
- ['p', '\u182b'],
- ['\\[', '〔'],
- ['\\]', '〕'],
- ['a', '\u1820'],
- ['s', '\u1830'],
- ['d', '\u1833'],
- ['f', '\u1839'],
- ['g', '\u182d'],
- ['h', '\u182c'],
- ['j', '\u1835'],
- ['k', '\u183a'],
- ['l', '\u182f'],
- [';', ';'],
- ['\'', '\u180b'],
- ['z', '\u183d'],
- ['x', '\u1831'],
- ['c', '\u183c'],
- ['v', '\u1824'],
- ['b', '\u182a'],
- ['n', '\u1828'],
- ['m', '\u182e'],
- [',', '\u1802'],
- ['\\.', '\u1803'],
- ['/', '.'],
- ['\\-', '\u202f'],
- ['=', '='],
-
- ['`', '\u180d'],
- ['~', '~'],
- ['1', '\u1811'],
- ['2', '\u1812'],
- ['3', '\u1813'],
- ['4', '\u1814'],
- ['5', '\u1815'],
- ['6', '\u1816'],
- ['7', '\u1817'],
- ['8', '\u1818'],
- ['9', '\u1819'],
- ['0', '\u1810'],
- ['!', '!'],
- ['@', '\u2048'],
- ['#', '\u2049'],
- ['\\$', '—'],
- ['%', '%'],
- ['\\^', '\u200c'],
- ['&', '\u180a'],
- ['\\*', '\u200d'],
- ['\\(', '('],
- ['\\)', ')']
- ]
- };
-
- $.ime.register( tradMongolian );
-}( jQuery ) );
+( function ( $ ) {
+ 'use strict';
+
+ var tradMongolian = {
+ id: 'mn-trad',
+ name: 'Traditional Mongolian Scripts',
+ description: 'Traditional Mongolian Scripts',
+ date: '2014-4-22',
+ URL: 'http://github.com/wikimedia/jquery.ime',
+ author: 'Feilong Huang, <huangfeilong@gmail.com>',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ 'Q', '\u1805' ],
+ [ 'W', '\u1838' ],
+ [ 'E', '\u1827' ],
+ [ 'R', '\u183f' ],
+ [ 'T', '' ],
+ [ 'Y', '' ],
+ [ 'U', '' ],
+ [ 'I', '' ],
+ [ 'O', '' ],
+ [ 'P', '' ],
+ [ '{', '〈' ],
+ [ '}', '〉' ],
+ [ 'A', '\u1800' ],
+ [ 'S', '' ],
+ [ 'D', '' ],
+ [ 'F', '' ],
+ [ 'G', '' ],
+ [ 'H', '\u183e' ],
+ [ 'J', '' ],
+ [ 'K', '\u183b' ],
+ [ 'L', '\u1840' ],
+ [ ':', '\u1804' ],
+ [ '"', '\u180c' ],
+ [ 'Z', '\u1841' ],
+ [ 'X', '' ],
+ [ 'C', '\u1842' ],
+ [ 'V', '' ],
+ [ 'B', '' ],
+ [ 'N', '\u1829' ],
+ [ 'M', '' ],
+ [ '<', '《' ],
+ [ '>', '》' ],
+ [ '\\?', '?' ],
+ [ '_', '\u180e' ],
+ [ '\\+', '+' ],
+ [ '\\\\', '\u1801' ],
+ [ 'q', '\u1834' ],
+ [ 'w', '\u1823' ],
+ [ 'e', '\u1821' ],
+ [ 'r', '\u1837' ],
+ [ 't', '\u1832' ],
+ [ 'y', '\u1836' ],
+ [ 'u', '\u1826' ],
+ [ 'i', '\u1822' ],
+ [ 'o', '\u1825' ],
+ [ 'p', '\u182b' ],
+ [ '\\[', '〔' ],
+ [ '\\]', '〕' ],
+ [ 'a', '\u1820' ],
+ [ 's', '\u1830' ],
+ [ 'd', '\u1833' ],
+ [ 'f', '\u1839' ],
+ [ 'g', '\u182d' ],
+ [ 'h', '\u182c' ],
+ [ 'j', '\u1835' ],
+ [ 'k', '\u183a' ],
+ [ 'l', '\u182f' ],
+ [ ';', ';' ],
+ [ '\'', '\u180b' ],
+ [ 'z', '\u183d' ],
+ [ 'x', '\u1831' ],
+ [ 'c', '\u183c' ],
+ [ 'v', '\u1824' ],
+ [ 'b', '\u182a' ],
+ [ 'n', '\u1828' ],
+ [ 'm', '\u182e' ],
+ [ ',', '\u1802' ],
+ [ '\\.', '\u1803' ],
+ [ '/', '.' ],
+ [ '\\-', '\u202f' ],
+ [ '=', '=' ],
+
+ [ '`', '\u180d' ],
+ [ '~', '~' ],
+ [ '1', '\u1811' ],
+ [ '2', '\u1812' ],
+ [ '3', '\u1813' ],
+ [ '4', '\u1814' ],
+ [ '5', '\u1815' ],
+ [ '6', '\u1816' ],
+ [ '7', '\u1817' ],
+ [ '8', '\u1818' ],
+ [ '9', '\u1819' ],
+ [ '0', '\u1810' ],
+ [ '!', '!' ],
+ [ '@', '\u2048' ],
+ [ '#', '\u2049' ],
+ [ '\\$', '—' ],
+ [ '%', '%' ],
+ [ '\\^', '\u200c' ],
+ [ '&', '\u180a' ],
+ [ '\\*', '\u200d' ],
+ [ '\\(', '(' ],
+ [ '\\)', ')' ]
+ ]
+ };
+
+ $.ime.register( tradMongolian );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-tradali.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-tradali.js
index 3aa78da0..77a8174d 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-tradali.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/mn-tradali.js
@@ -1,111 +1,111 @@
-( function ( $ ) {
- 'use strict';
-
- var mongolianAli = {
- id: 'mn-tradali',
- name: 'Traditional Mongolian Ali-gali Scripts',
- description: 'Traditional Mongolian Ali-gali Scripts',
- date: '2014-4-22',
- URL: 'http://github.com/wikimedia/jquery.ime',
- author: 'Feilong Huang, <huangfeilong@gmail.com>',
- license: 'GPLv3',
- version: '1.0',
- patterns: [
- ['Q', ''],
- ['E', ''],
- ['R', ''],
- ['T', ''],
- ['Y', ''],
- ['U', ''],
- ['I', ''],
- ['O', ''],
- ['P', ''],
- ['{', '〈'],
- ['}', '〉'],
- ['A', ''],
- ['S', ''],
- ['D', ''],
- ['F', ''],
- ['G', ''],
- ['H', ''],
- ['J', ''],
- ['K', ''],
- ['L', ''],
- [':', '\u1804'],
- ['"', '\u180c'],
- ['Z', ''],
- ['X', ''],
- ['C', ''],
- ['V', ''],
- ['B', ''],
- ['N', ''],
- ['M', ''],
- ['<', '《'],
- ['>', '》'],
- ['\\?', '?'],
- ['_', '\u180e'],
- ['\\+', '+'],
-
- ['q', '\u1880'],
- ['w', '\u1881'],
- ['e', '\u1882'],
- ['r', '\u1883'],
- ['t', '\u1884'],
- ['y', '\u1885'],
- ['u', '\u1886'],
- ['i', '\u1887'],
- ['o', '\u1888'],
- ['p', '\u1889'],
- ['\\[', '〔'],
- ['\\]', '〕'],
- ['a', '\u188a'],
- ['s', '\u188b'],
- ['d', '\u188c'],
- ['f', '\u188d'],
- ['g', '\u188e'],
- ['h', '\u188f'],
- ['j', '\u1890'],
- ['k', '\u1891'],
- ['l', '\u1892'],
- [';', '\u1893'],
- ['\'', '\u180b'],
- ['z', '\u1894'],
- ['x', '\u1895'],
- ['c', '\u1896'],
- ['v', '\u1897'],
- ['b', '\u18a6'],
- ['n', '\u18a7'],
- ['m', '\u18a9'],
- [',', '᠂'],
- ['\\.', '᠃'],
- ['/', '.'],
- ['\\-', '\u202f'],
- ['=', '='],
-
- ['`', '\u180d'],
- ['~', '~'],
- ['1', '\u1811'],
- ['2', '\u1812'],
- ['3', '\u1813'],
- ['4', '\u1814'],
- ['5', '\u1815'],
- ['6', '\u1816'],
- ['7', '\u1817'],
- ['8', '\u1818'],
- ['9', '\u1819'],
- ['0', '\u1810'],
- ['!', '!'],
- ['@', '\u2048'],
- ['#', '\u2049'],
- ['\\$', '—'],
- ['%', '%'],
- ['\\^', '\u200c'],
- ['&', '\u180a'],
- ['\\*', '\u200d'],
- ['\\(', '('],
- ['\\)', ')']
- ]
- };
-
- $.ime.register( mongolianAli );
-}( jQuery ) );
+( function ( $ ) {
+ 'use strict';
+
+ var mongolianAli = {
+ id: 'mn-tradali',
+ name: 'Traditional Mongolian Ali-gali Scripts',
+ description: 'Traditional Mongolian Ali-gali Scripts',
+ date: '2014-4-22',
+ URL: 'http://github.com/wikimedia/jquery.ime',
+ author: 'Feilong Huang, <huangfeilong@gmail.com>',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ 'Q', '' ],
+ [ 'E', '' ],
+ [ 'R', '' ],
+ [ 'T', '' ],
+ [ 'Y', '' ],
+ [ 'U', '' ],
+ [ 'I', '' ],
+ [ 'O', '' ],
+ [ 'P', '' ],
+ [ '{', '〈' ],
+ [ '}', '〉' ],
+ [ 'A', '' ],
+ [ 'S', '' ],
+ [ 'D', '' ],
+ [ 'F', '' ],
+ [ 'G', '' ],
+ [ 'H', '' ],
+ [ 'J', '' ],
+ [ 'K', '' ],
+ [ 'L', '' ],
+ [ ':', '\u1804' ],
+ [ '"', '\u180c' ],
+ [ 'Z', '' ],
+ [ 'X', '' ],
+ [ 'C', '' ],
+ [ 'V', '' ],
+ [ 'B', '' ],
+ [ 'N', '' ],
+ [ 'M', '' ],
+ [ '<', '《' ],
+ [ '>', '》' ],
+ [ '\\?', '?' ],
+ [ '_', '\u180e' ],
+ [ '\\+', '+' ],
+
+ [ 'q', '\u1880' ],
+ [ 'w', '\u1881' ],
+ [ 'e', '\u1882' ],
+ [ 'r', '\u1883' ],
+ [ 't', '\u1884' ],
+ [ 'y', '\u1885' ],
+ [ 'u', '\u1886' ],
+ [ 'i', '\u1887' ],
+ [ 'o', '\u1888' ],
+ [ 'p', '\u1889' ],
+ [ '\\[', '〔' ],
+ [ '\\]', '〕' ],
+ [ 'a', '\u188a' ],
+ [ 's', '\u188b' ],
+ [ 'd', '\u188c' ],
+ [ 'f', '\u188d' ],
+ [ 'g', '\u188e' ],
+ [ 'h', '\u188f' ],
+ [ 'j', '\u1890' ],
+ [ 'k', '\u1891' ],
+ [ 'l', '\u1892' ],
+ [ ';', '\u1893' ],
+ [ '\'', '\u180b' ],
+ [ 'z', '\u1894' ],
+ [ 'x', '\u1895' ],
+ [ 'c', '\u1896' ],
+ [ 'v', '\u1897' ],
+ [ 'b', '\u18a6' ],
+ [ 'n', '\u18a7' ],
+ [ 'm', '\u18a9' ],
+ [ ',', '᠂' ],
+ [ '\\.', '᠃' ],
+ [ '/', '.' ],
+ [ '\\-', '\u202f' ],
+ [ '=', '=' ],
+
+ [ '`', '\u180d' ],
+ [ '~', '~' ],
+ [ '1', '\u1811' ],
+ [ '2', '\u1812' ],
+ [ '3', '\u1813' ],
+ [ '4', '\u1814' ],
+ [ '5', '\u1815' ],
+ [ '6', '\u1816' ],
+ [ '7', '\u1817' ],
+ [ '8', '\u1818' ],
+ [ '9', '\u1819' ],
+ [ '0', '\u1810' ],
+ [ '!', '!' ],
+ [ '@', '\u2048' ],
+ [ '#', '\u2049' ],
+ [ '\\$', '—' ],
+ [ '%', '%' ],
+ [ '\\^', '\u200c' ],
+ [ '&', '\u180a' ],
+ [ '\\*', '\u200d' ],
+ [ '\\(', '(' ],
+ [ '\\)', ')' ]
+ ]
+ };
+
+ $.ime.register( mongolianAli );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/phagspa.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/phagspa.js
index 1416b73a..14f5d076 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/phagspa.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mn/phagspa.js
@@ -1,112 +1,112 @@
-( function ( $ ) {
- 'use strict';
-
- var phagsPa = {
- id: 'phagspa',
- name: 'PhagsPa Scripts',
- description: 'PhagsPa Scripts',
- date: '2014-4-22',
- URL: 'http://github.com/wikimedia/jquery.ime',
- author: 'Feilong Huang, <huangfeilong@gmail.com>',
- license: 'GPLv3',
- version: '1.0',
- patterns: [
- ['Q', '\ua869'],
- ['W', '\ua867'],
- ['E', '\ua866'],
- ['R', '\ua871'],
- ['T', '\ua849'],
- ['Y', '\ua868'],
- ['U', '\ua86b'],
- ['I', '\ua86d'],
- ['O', ''],
- ['P', '\ua84d'],
- ['{', '〈'],
- ['}', '〉'],
- ['A', '\ua85d'],
- ['S', '\ua85a'],
- ['D', '\ua852'],
- ['F', '\ua870'],
- ['G', '\ua865'],
- ['H', '\ua86f'],
- ['J', '\ua86e'],
- ['K', '\ua841'],
- ['L', '\ua86c'],
- [':', '\u1804'],
- ['"', ''],
- ['Z', '\ua854'],
- ['X', '\ua86a'],
- ['C', '\ua845'],
- ['V', '\ua872'],
- ['B', '\ua873'],
- ['N', '\ua843'],
- ['M', ''],
- ['<', '《'],
- ['>', '》'],
- ['\\?', '?'],
- ['_', '\ua874'],
- ['\\+', '+'],
-
- ['q', '\ua862'],
- ['w', '\ua853'],
- ['e', '\ua860'],
- ['r', '\ua858'],
- ['t', '\ua848'],
- ['y', '\ua857'],
- ['u', '\ua85f'],
- ['i', '\ua85e'],
- ['o', '\ua861'],
- ['p', '\ua84c'],
- ['\\[', '〔'],
- ['\\]', '〕'],
- ['a', '\ua856'],
- ['s', '\ua85b'],
- ['d', '\ua84a'],
- ['f', '\ua864'],
- ['g', '\ua842'],
- ['h', '\ua85c'],
- ['j', '\ua846'],
- ['k', '\ua840'],
- ['l', '\ua859'],
- [';', ';'],
- ['\'', '\ua877'],
- ['z', '\ua855'],
- ['x', '\ua863'],
- ['c', '\ua844'],
- ['v', ''],
- ['b', '\ua84e'],
- ['n', '\ua84b'],
- ['m', '\ua84f'],
- [',', ''],
- ['\\.', ''],
- ['/', '\ua876'],
- ['\\-', '\ua875'],
- ['=', '='],
-
- ['`', '\u180d'],
- ['~', '~'],
- ['1', '\u1811'],
- ['2', '\u1812'],
- ['3', '\u1813'],
- ['4', '\u1814'],
- ['5', '\u1815'],
- ['6', '\u1816'],
- ['7', '\u1817'],
- ['8', '\u1818'],
- ['9', '\u1819'],
- ['0', '\u1810'],
- ['!', '!'],
- ['@', '\ua847'],
- ['#', '\ua850'],
- ['\\$', '\ua851'],
- ['%', '\ua85a'],
- ['\\^', ''],
- ['&', ''],
- ['\\*', ''],
- ['\\(', '('],
- ['\\)', ')']
- ]
- };
-
- $.ime.register( phagsPa );
-}( jQuery ) );
+( function ( $ ) {
+ 'use strict';
+
+ var phagsPa = {
+ id: 'phagspa',
+ name: 'PhagsPa Scripts',
+ description: 'PhagsPa Scripts',
+ date: '2014-4-22',
+ URL: 'http://github.com/wikimedia/jquery.ime',
+ author: 'Feilong Huang, <huangfeilong@gmail.com>',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ 'Q', '\ua869' ],
+ [ 'W', '\ua867' ],
+ [ 'E', '\ua866' ],
+ [ 'R', '\ua871' ],
+ [ 'T', '\ua849' ],
+ [ 'Y', '\ua868' ],
+ [ 'U', '\ua86b' ],
+ [ 'I', '\ua86d' ],
+ [ 'O', '' ],
+ [ 'P', '\ua84d' ],
+ [ '{', '〈' ],
+ [ '}', '〉' ],
+ [ 'A', '\ua85d' ],
+ [ 'S', '\ua85a' ],
+ [ 'D', '\ua852' ],
+ [ 'F', '\ua870' ],
+ [ 'G', '\ua865' ],
+ [ 'H', '\ua86f' ],
+ [ 'J', '\ua86e' ],
+ [ 'K', '\ua841' ],
+ [ 'L', '\ua86c' ],
+ [ ':', '\u1804' ],
+ [ '"', '' ],
+ [ 'Z', '\ua854' ],
+ [ 'X', '\ua86a' ],
+ [ 'C', '\ua845' ],
+ [ 'V', '\ua872' ],
+ [ 'B', '\ua873' ],
+ [ 'N', '\ua843' ],
+ [ 'M', '' ],
+ [ '<', '《' ],
+ [ '>', '》' ],
+ [ '\\?', '?' ],
+ [ '_', '\ua874' ],
+ [ '\\+', '+' ],
+
+ [ 'q', '\ua862' ],
+ [ 'w', '\ua853' ],
+ [ 'e', '\ua860' ],
+ [ 'r', '\ua858' ],
+ [ 't', '\ua848' ],
+ [ 'y', '\ua857' ],
+ [ 'u', '\ua85f' ],
+ [ 'i', '\ua85e' ],
+ [ 'o', '\ua861' ],
+ [ 'p', '\ua84c' ],
+ [ '\\[', '〔' ],
+ [ '\\]', '〕' ],
+ [ 'a', '\ua856' ],
+ [ 's', '\ua85b' ],
+ [ 'd', '\ua84a' ],
+ [ 'f', '\ua864' ],
+ [ 'g', '\ua842' ],
+ [ 'h', '\ua85c' ],
+ [ 'j', '\ua846' ],
+ [ 'k', '\ua840' ],
+ [ 'l', '\ua859' ],
+ [ ';', ';' ],
+ [ '\'', '\ua877' ],
+ [ 'z', '\ua855' ],
+ [ 'x', '\ua863' ],
+ [ 'c', '\ua844' ],
+ [ 'v', '' ],
+ [ 'b', '\ua84e' ],
+ [ 'n', '\ua84b' ],
+ [ 'm', '\ua84f' ],
+ [ ',', '' ],
+ [ '\\.', '' ],
+ [ '/', '\ua876' ],
+ [ '\\-', '\ua875' ],
+ [ '=', '=' ],
+
+ [ '`', '\u180d' ],
+ [ '~', '~' ],
+ [ '1', '\u1811' ],
+ [ '2', '\u1812' ],
+ [ '3', '\u1813' ],
+ [ '4', '\u1814' ],
+ [ '5', '\u1815' ],
+ [ '6', '\u1816' ],
+ [ '7', '\u1817' ],
+ [ '8', '\u1818' ],
+ [ '9', '\u1819' ],
+ [ '0', '\u1810' ],
+ [ '!', '!' ],
+ [ '@', '\ua847' ],
+ [ '#', '\ua850' ],
+ [ '\\$', '\ua851' ],
+ [ '%', '\ua85a' ],
+ [ '\\^', '' ],
+ [ '&', '' ],
+ [ '\\*', '' ],
+ [ '\\(', '(' ],
+ [ '\\)', ')' ]
+ ]
+ };
+
+ $.ime.register( phagsPa );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mnc/mnc-ali.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mnc/mnc-ali.js
index 27810fe7..638f60d6 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mnc/mnc-ali.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mnc/mnc-ali.js
@@ -1,112 +1,112 @@
-( function ( $ ) {
- 'use strict';
-
- var manchuAli = {
- id: 'mnc-ali',
- name: 'Manchu Ali-gali Scripts',
- description: 'Manchu Ali-gali Scripts',
- date: '2014-4-22',
- URL: 'http://github.com/wikimedia/jquery.ime',
- author: 'Feilong Huang, <huangfeilong@gmail.com>',
- license: 'GPLv3',
- version: '1.0',
- patterns: [
- ['Q', '\u189a'],
- ['W', '\u189b'],
- ['E', '\u189c'],
- ['R', '\u189d'],
- ['T', '\u189e'],
- ['Y', '\u189f'],
- ['U', '\u18a0'],
- ['I', '\u18a1'],
- ['O', '\u18a2'],
- ['P', '\u18a3'],
- ['{', '〈'],
- ['}', '〉'],
- ['A', '\u18a4'],
- ['S', '\u18a5'],
- ['D', '\u18a9'],
- ['F', '\u18a8'],
- ['G', '\u18aa'],
- ['H', ''],
- ['J', ''],
- ['K', ''],
- ['L', ''],
- [':', '\u1804'],
- ['"', '\u180c'],
- ['Z', ''],
- ['X', ''],
- ['C', ''],
- ['V', ''],
- ['B', ''],
- ['N', ''],
- ['M', ''],
- ['<', '《'],
- ['>', '》'],
- ['\\?', '?'],
- ['_', '\u180e'],
- ['\\+', '+'],
-
- ['q', '\u1880'],
- ['w', '\u1881'],
- ['e', '\u1882'],
- ['r', '\u1883'],
- ['t', '\u1884'],
- ['y', '\u1885'],
- ['u', '\u1886'],
- ['i', '\u1887'],
- ['o', '\u1888'],
- ['p', '\u1889'],
- ['\\[', '〔'],
- ['\\]', '〕'],
- ['a', '\u188a'],
- ['s', '\u188b'],
- ['d', '\u188c'],
- ['f', '\u188d'],
- ['g', '\u188e'],
- ['h', '\u188f'],
- ['j', '\u1898'],
- ['k', '\u1891'],
- ['l', '\u1892'],
- [';', '\u1893'],
- ['\'', '\u180b'],
- ['z', '\u1894'],
- ['x', '\u1899'],
- ['c', '\u1896'],
- ['v', '\u1897'],
- ['b', '\u1898'],
- ['n', '\u18a6'],
- ['m', '\u18a7'],
- [',', '\u1808'],
- ['\\.', '\u1809'],
- ['/', '.'],
- ['\\-', '\u202f'],
- ['=', '='],
-
- ['`', '\u180d'],
- ['~', '~'],
- ['1', '\u1811'],
- ['2', '\u1812'],
- ['3', '\u1813'],
- ['4', '\u1814'],
- ['5', '\u1815'],
- ['6', '\u1816'],
- ['7', '\u1817'],
- ['8', '\u1818'],
- ['9', '\u1819'],
- ['0', '\u1810'],
- ['!', '!'],
- ['@', '\u2048'],
- ['#', '\u2049'],
- ['\\$', '—'],
- ['%', '%'],
- ['\\^', '\u200c'],
- ['&', '\u180a'],
- ['\\*', '\u200d'],
- ['\\(', '('],
- ['\\)', ')']
- ]
- };
-
- $.ime.register( manchuAli );
-}( jQuery ) );
+( function ( $ ) {
+ 'use strict';
+
+ var manchuAli = {
+ id: 'mnc-ali',
+ name: 'Manchu Ali-gali Scripts',
+ description: 'Manchu Ali-gali Scripts',
+ date: '2014-4-22',
+ URL: 'http://github.com/wikimedia/jquery.ime',
+ author: 'Feilong Huang, <huangfeilong@gmail.com>',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ 'Q', '\u189a' ],
+ [ 'W', '\u189b' ],
+ [ 'E', '\u189c' ],
+ [ 'R', '\u189d' ],
+ [ 'T', '\u189e' ],
+ [ 'Y', '\u189f' ],
+ [ 'U', '\u18a0' ],
+ [ 'I', '\u18a1' ],
+ [ 'O', '\u18a2' ],
+ [ 'P', '\u18a3' ],
+ [ '{', '〈' ],
+ [ '}', '〉' ],
+ [ 'A', '\u18a4' ],
+ [ 'S', '\u18a5' ],
+ [ 'D', '\u18a9' ],
+ [ 'F', '\u18a8' ],
+ [ 'G', '\u18aa' ],
+ [ 'H', '' ],
+ [ 'J', '' ],
+ [ 'K', '' ],
+ [ 'L', '' ],
+ [ ':', '\u1804' ],
+ [ '"', '\u180c' ],
+ [ 'Z', '' ],
+ [ 'X', '' ],
+ [ 'C', '' ],
+ [ 'V', '' ],
+ [ 'B', '' ],
+ [ 'N', '' ],
+ [ 'M', '' ],
+ [ '<', '《' ],
+ [ '>', '》' ],
+ [ '\\?', '?' ],
+ [ '_', '\u180e' ],
+ [ '\\+', '+' ],
+
+ [ 'q', '\u1880' ],
+ [ 'w', '\u1881' ],
+ [ 'e', '\u1882' ],
+ [ 'r', '\u1883' ],
+ [ 't', '\u1884' ],
+ [ 'y', '\u1885' ],
+ [ 'u', '\u1886' ],
+ [ 'i', '\u1887' ],
+ [ 'o', '\u1888' ],
+ [ 'p', '\u1889' ],
+ [ '\\[', '〔' ],
+ [ '\\]', '〕' ],
+ [ 'a', '\u188a' ],
+ [ 's', '\u188b' ],
+ [ 'd', '\u188c' ],
+ [ 'f', '\u188d' ],
+ [ 'g', '\u188e' ],
+ [ 'h', '\u188f' ],
+ [ 'j', '\u1898' ],
+ [ 'k', '\u1891' ],
+ [ 'l', '\u1892' ],
+ [ ';', '\u1893' ],
+ [ '\'', '\u180b' ],
+ [ 'z', '\u1894' ],
+ [ 'x', '\u1899' ],
+ [ 'c', '\u1896' ],
+ [ 'v', '\u1897' ],
+ [ 'b', '\u1898' ],
+ [ 'n', '\u18a6' ],
+ [ 'm', '\u18a7' ],
+ [ ',', '\u1808' ],
+ [ '\\.', '\u1809' ],
+ [ '/', '.' ],
+ [ '\\-', '\u202f' ],
+ [ '=', '=' ],
+
+ [ '`', '\u180d' ],
+ [ '~', '~' ],
+ [ '1', '\u1811' ],
+ [ '2', '\u1812' ],
+ [ '3', '\u1813' ],
+ [ '4', '\u1814' ],
+ [ '5', '\u1815' ],
+ [ '6', '\u1816' ],
+ [ '7', '\u1817' ],
+ [ '8', '\u1818' ],
+ [ '9', '\u1819' ],
+ [ '0', '\u1810' ],
+ [ '!', '!' ],
+ [ '@', '\u2048' ],
+ [ '#', '\u2049' ],
+ [ '\\$', '—' ],
+ [ '%', '%' ],
+ [ '\\^', '\u200c' ],
+ [ '&', '\u180a' ],
+ [ '\\*', '\u200d' ],
+ [ '\\(', '(' ],
+ [ '\\)', ')' ]
+ ]
+ };
+
+ $.ime.register( manchuAli );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mnc/mnc.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mnc/mnc.js
index fb65e096..544deefa 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mnc/mnc.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/mnc/mnc.js
@@ -1,112 +1,112 @@
-( function ( $ ) {
- 'use strict';
-
- var manchu = {
- id: 'mnc',
- name: 'Manchu Scripts',
- description: 'Manchu Scripts',
- date: '2014-4-22',
- URL: 'http://github.com/wikimedia/jquery.ime',
- author: 'Feilong Huang, <huangfeilong@gmail.com>',
- license: 'GPLv3',
- version: '1.0',
- patterns: [
- ['Q', ''],
- ['W', '\u1838'],
- ['E', '\u1827'],
- ['R', '\u1870'],
- ['T', ''],
- ['Y', ''],
- ['U', ''],
- ['I', '\u185f'],
- ['O', ''],
- ['P', ''],
- ['{', '〈'],
- ['}', '〉'],
- ['A', ''],
- ['S', ''],
- ['D', ''],
- ['F', ''],
- ['G', '\u186c'],
- ['H', '\u186d'],
- ['J', ''],
- ['K', '\u183b'],
- ['L', '\u1840'],
- [':', '\u1804'],
- ['"', '\u180c'],
- ['Z', '\u1877'],
- ['X', '\u1871'],
- ['C', '\u1842'],
- ['V', ''],
- ['B', ''],
- ['N', '\u1862'],
- ['M', ''],
- ['<', '《'],
- ['>', '》'],
- ['\\?', '?'],
- ['_', '\u180e'],
- ['\\+', '+'],
-
- ['q', '\u1834'],
- ['w', '\u1823'],
- ['e', '\u185d'],
- ['r', '\u1875'],
- ['t', '\u1868'],
- ['y', '\u1836'],
- ['u', '\u1860'],
- ['i', '\u1873'],
- ['o', '\u1825'],
- ['p', '\u1866'],
- ['\\[', '〔'],
- ['\\]', '〕'],
- ['a', '\u1820'],
- ['s', '\u1830'],
- ['d', '\u1869'],
- ['f', '\u1876'],
- ['g', '\u1864'],
- ['h', '\u1865'],
- ['j', '\u186a'],
- ['k', '\u1874'],
- ['l', '\u182f'],
- [';', ';'],
- ['\'', '\u180b'],
- ['z', '\u186f'],
- ['x', '\u1867'],
- ['c', '\u186e'],
- ['v', '\u1861'],
- ['b', '\u182a'],
- ['n', '\u1828'],
- ['m', '\u182e'],
- [',', '\u1808'],
- ['\\.', '\u1809'],
- ['/', '.'],
- ['\\-', '\u202f'],
- ['=', '='],
-
- ['`', '\u180d'],
- ['~', '~'],
- ['1', '1'],
- ['2', '2'],
- ['3', '3'],
- ['4', '4'],
- ['5', '5'],
- ['6', '6'],
- ['7', '7'],
- ['8', '8'],
- ['9', '9'],
- ['0', '0'],
- ['!', '!'],
- ['@', '\u2048'],
- ['#', '\u2049'],
- ['\\$', '—'],
- ['%', '%'],
- ['\\^', '\u200c'],
- ['&', '\u180a'],
- ['\\*', '\u200d'],
- ['\\(', '('],
- ['\\)', ')']
- ]
- };
-
- $.ime.register( manchu );
-}( jQuery ) );
+( function ( $ ) {
+ 'use strict';
+
+ var manchu = {
+ id: 'mnc',
+ name: 'Manchu Scripts',
+ description: 'Manchu Scripts',
+ date: '2014-4-22',
+ URL: 'http://github.com/wikimedia/jquery.ime',
+ author: 'Feilong Huang, <huangfeilong@gmail.com>',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ 'Q', '' ],
+ [ 'W', '\u1838' ],
+ [ 'E', '\u1827' ],
+ [ 'R', '\u1870' ],
+ [ 'T', '' ],
+ [ 'Y', '' ],
+ [ 'U', '' ],
+ [ 'I', '\u185f' ],
+ [ 'O', '' ],
+ [ 'P', '' ],
+ [ '{', '〈' ],
+ [ '}', '〉' ],
+ [ 'A', '' ],
+ [ 'S', '' ],
+ [ 'D', '' ],
+ [ 'F', '' ],
+ [ 'G', '\u186c' ],
+ [ 'H', '\u186d' ],
+ [ 'J', '' ],
+ [ 'K', '\u183b' ],
+ [ 'L', '\u1840' ],
+ [ ':', '\u1804' ],
+ [ '"', '\u180c' ],
+ [ 'Z', '\u1877' ],
+ [ 'X', '\u1871' ],
+ [ 'C', '\u1842' ],
+ [ 'V', '' ],
+ [ 'B', '' ],
+ [ 'N', '\u1862' ],
+ [ 'M', '' ],
+ [ '<', '《' ],
+ [ '>', '》' ],
+ [ '\\?', '?' ],
+ [ '_', '\u180e' ],
+ [ '\\+', '+' ],
+
+ [ 'q', '\u1834' ],
+ [ 'w', '\u1823' ],
+ [ 'e', '\u185d' ],
+ [ 'r', '\u1875' ],
+ [ 't', '\u1868' ],
+ [ 'y', '\u1836' ],
+ [ 'u', '\u1860' ],
+ [ 'i', '\u1873' ],
+ [ 'o', '\u1825' ],
+ [ 'p', '\u1866' ],
+ [ '\\[', '〔' ],
+ [ '\\]', '〕' ],
+ [ 'a', '\u1820' ],
+ [ 's', '\u1830' ],
+ [ 'd', '\u1869' ],
+ [ 'f', '\u1876' ],
+ [ 'g', '\u1864' ],
+ [ 'h', '\u1865' ],
+ [ 'j', '\u186a' ],
+ [ 'k', '\u1874' ],
+ [ 'l', '\u182f' ],
+ [ ';', ';' ],
+ [ '\'', '\u180b' ],
+ [ 'z', '\u186f' ],
+ [ 'x', '\u1867' ],
+ [ 'c', '\u186e' ],
+ [ 'v', '\u1861' ],
+ [ 'b', '\u182a' ],
+ [ 'n', '\u1828' ],
+ [ 'm', '\u182e' ],
+ [ ',', '\u1808' ],
+ [ '\\.', '\u1809' ],
+ [ '/', '.' ],
+ [ '\\-', '\u202f' ],
+ [ '=', '=' ],
+
+ [ '`', '\u180d' ],
+ [ '~', '~' ],
+ [ '1', '1' ],
+ [ '2', '2' ],
+ [ '3', '3' ],
+ [ '4', '4' ],
+ [ '5', '5' ],
+ [ '6', '6' ],
+ [ '7', '7' ],
+ [ '8', '8' ],
+ [ '9', '9' ],
+ [ '0', '0' ],
+ [ '!', '!' ],
+ [ '@', '\u2048' ],
+ [ '#', '\u2049' ],
+ [ '\\$', '—' ],
+ [ '%', '%' ],
+ [ '\\^', '\u200c' ],
+ [ '&', '\u180a' ],
+ [ '\\*', '\u200d' ],
+ [ '\\(', '(' ],
+ [ '\\)', ')' ]
+ ]
+ };
+
+ $.ime.register( manchu );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/my/my-mm3.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/my/my-mm3.js
index eed5cfe0..4f985258 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/my/my-mm3.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/my/my-mm3.js
@@ -11,143 +11,143 @@
license: 'GPLv3',
version: '1.0',
patterns: [
- ['ေu', 'a', 'ကေ'],
- ['ေc', 'a', 'ခေ'],
- ['ေ:', 'a', 'ဂေ'],
- ['ေC', 'a', 'ဃေ'],
- ['ေi', 'a', 'ငေ'],
- ['ေp', 'a', 'စေ'],
- ['ေq', 'a', 'ဆေ'],
- ['ေZ', 'a', 'ဇေ'],
- ['ေQ', 'a', 'ဈေ'],
- ['ေn', 'a', 'ညေ'],
- ['ေN', 'a', 'ဉေ'],
- ['ေ!', 'a', 'ဍေ'],
- ['ေX', 'a', 'ဌေ'],
- ['ေ#', 'a', 'ဋေ'],
- ['ေ~', 'a', 'ဎေ'],
- ['ေP', 'a', 'ဏေ'],
- ['ေw', 'a', 'တေ'],
- ['ေx', 'a', 'ထေ'],
- ['ေK', 'a', 'ဒေ'],
- ['ေL', 'a', 'ဓေ'],
- ['ေe', 'a', 'နေ'],
- ['ေy', 'a', 'ပေ'],
- ['ေz', 'a', 'ဖေ'],
- ['ေA', 'a', 'ဗေ'],
- ['ေb', 'a', 'ဘေ'],
- ['ေr', 'a', 'မေ'],
- ['ေB', 'a', 'ယေ'],
- ['ေ&', 'a', 'ရေ'],
- ['ေv', 'a', 'လေ'],
- ['ေW', 'a', 'ဝေ'],
- ['ေo', 'a', 'သေ'],
- ['ေ\\[', 'a', 'ဟေ'],
- ['ေV', 'a', 'ဠေ'],
- ['ေt', 'a', 'အေ'],
+ [ 'ေu', 'a', 'ကေ' ],
+ [ 'ေc', 'a', 'ခေ' ],
+ [ 'ေ:', 'a', 'ဂေ' ],
+ [ 'ေC', 'a', 'ဃေ' ],
+ [ 'ေi', 'a', 'ငေ' ],
+ [ 'ေp', 'a', 'စေ' ],
+ [ 'ေq', 'a', 'ဆေ' ],
+ [ 'ေZ', 'a', 'ဇေ' ],
+ [ 'ေQ', 'a', 'ဈေ' ],
+ [ 'ေn', 'a', 'ညေ' ],
+ [ 'ေN', 'a', 'ဉေ' ],
+ [ 'ေ!', 'a', 'ဍေ' ],
+ [ 'ေX', 'a', 'ဌေ' ],
+ [ 'ေ#', 'a', 'ဋေ' ],
+ [ 'ေ~', 'a', 'ဎေ' ],
+ [ 'ေP', 'a', 'ဏေ' ],
+ [ 'ေw', 'a', 'တေ' ],
+ [ 'ေx', 'a', 'ထေ' ],
+ [ 'ေK', 'a', 'ဒေ' ],
+ [ 'ေL', 'a', 'ဓေ' ],
+ [ 'ေe', 'a', 'နေ' ],
+ [ 'ေy', 'a', 'ပေ' ],
+ [ 'ေz', 'a', 'ဖေ' ],
+ [ 'ေA', 'a', 'ဗေ' ],
+ [ 'ေb', 'a', 'ဘေ' ],
+ [ 'ေr', 'a', 'မေ' ],
+ [ 'ေB', 'a', 'ယေ' ],
+ [ 'ေ&', 'a', 'ရေ' ],
+ [ 'ေv', 'a', 'လေ' ],
+ [ 'ေW', 'a', 'ဝေ' ],
+ [ 'ေo', 'a', 'သေ' ],
+ [ 'ေ\\[', 'a', 'ဟေ' ],
+ [ 'ေV', 'a', 'ဠေ' ],
+ [ 'ေt', 'a', 'အေ' ],
- ['ေG', '', 'ွေ'],
- ['ေj', '', 'ြေ'],
- ['ေs', '', 'ျေ'],
- ['ေS', '', 'ှေ'],
- ['ေြG', '', 'ြွေ'],
- ['ေျG', '', 'ျွေ'],
- ['ေြS', '', 'ြှေ'],
- ['ေျS', '', 'ျှေ'],
+ [ 'ေG', '', 'ွေ' ],
+ [ 'ေj', '', 'ြေ' ],
+ [ 'ေs', '', 'ျေ' ],
+ [ 'ေS', '', 'ှေ' ],
+ [ 'ေြG', '', 'ြွေ' ],
+ [ 'ေျG', '', 'ျွေ' ],
+ [ 'ေြS', '', 'ြှေ' ],
+ [ 'ေျS', '', 'ျှေ' ],
- ['စs', '', 'ဈ'],
- ['သj', '', 'ဩ'],
- ['ဥf', '', 'ဉ်'],
- ['ဥD', '', 'ဦ'],
- ['ုd', '', 'ို'],
- ['်h', '', '့်'],
- ['ွs', '', 'ျွ'],
- ['ွj', '', 'ြွ'],
- ['ှG', '', 'ွှ'],
- ['ှs', '', 'ျှ'],
- ['ှj', '', 'ြှ'],
- ['(ှွs)|(ွှs)|(ှျG)|(ျှG)|(ျွS)|(ွျS)', '', 'ျွှ'],
- ['(ှွj)|(ွှj)|(ှြG)|(ြှG)|(ြွS)|(ွြS)', '', 'ြွှ'],
+ [ 'စs', '', 'ဈ' ],
+ [ 'သj', '', 'ဩ' ],
+ [ 'ဥf', '', 'ဉ်' ],
+ [ 'ဥD', '', 'ဦ' ],
+ [ 'ုd', '', 'ို' ],
+ [ '်h', '', '့်' ],
+ [ 'ွs', '', 'ျွ' ],
+ [ 'ွj', '', 'ြွ' ],
+ [ 'ှG', '', 'ွှ' ],
+ [ 'ှs', '', 'ျှ' ],
+ [ 'ှj', '', 'ြှ' ],
+ [ '(ှွs)|(ွှs)|(ှျG)|(ျှG)|(ျွS)|(ွျS)', '', 'ျွှ' ],
+ [ '(ှွj)|(ွှj)|(ှြG)|(ြှG)|(ြွS)|(ွြS)', '', 'ြွှ' ],
- ['u', '', 'က'],
- ['c', '', 'ခ'],
- [':', '', 'ဂ'],
- ['C', '', 'ဃ'],
- ['i', '', 'င'],
- ['p', '', 'စ'],
- ['q', '', 'ဆ'],
- ['Z', '', 'ဇ'],
- ['Q', '', 'ဈ'],
- ['n', '', 'ည'],
- ['N', '', 'ဉ'],
- ['!', '', 'ဍ'],
- ['X', '', 'ဌ'],
- ['#', '', 'ဋ'],
- ['~', '', 'ဎ'],
- ['P', '', 'ဏ'],
- ['w', '', 'တ'],
- ['x', '', 'ထ'],
- ['K', '', 'ဒ'],
- ['L', '', 'ဓ'],
- ['e', '', 'န'],
- ['y', '', 'ပ'],
- ['z', '', 'ဖ'],
- ['A', '', 'ဗ'],
- ['b', '', 'ဘ'],
- ['r', '', 'မ'],
- ['B', '', 'ယ'],
- ['&', '', 'ရ'],
- ['v', '', 'လ'],
- ['W', '', 'ဝ'],
- ['o', '', 'သ'],
- ['\\[', '', 'ဟ'],
- ['V', '', 'ဠ'],
- ['t', '', 'အ'],
+ [ 'u', '', 'က' ],
+ [ 'c', '', 'ခ' ],
+ [ ':', '', 'ဂ' ],
+ [ 'C', '', 'ဃ' ],
+ [ 'i', '', 'င' ],
+ [ 'p', '', 'စ' ],
+ [ 'q', '', 'ဆ' ],
+ [ 'Z', '', 'ဇ' ],
+ [ 'Q', '', 'ဈ' ],
+ [ 'n', '', 'ည' ],
+ [ 'N', '', 'ဉ' ],
+ [ '!', '', 'ဍ' ],
+ [ 'X', '', 'ဌ' ],
+ [ '#', '', 'ဋ' ],
+ [ '~', '', 'ဎ' ],
+ [ 'P', '', 'ဏ' ],
+ [ 'w', '', 'တ' ],
+ [ 'x', '', 'ထ' ],
+ [ 'K', '', 'ဒ' ],
+ [ 'L', '', 'ဓ' ],
+ [ 'e', '', 'န' ],
+ [ 'y', '', 'ပ' ],
+ [ 'z', '', 'ဖ' ],
+ [ 'A', '', 'ဗ' ],
+ [ 'b', '', 'ဘ' ],
+ [ 'r', '', 'မ' ],
+ [ 'B', '', 'ယ' ],
+ [ '&', '', 'ရ' ],
+ [ 'v', '', 'လ' ],
+ [ 'W', '', 'ဝ' ],
+ [ 'o', '', 'သ' ],
+ [ '\\[', '', 'ဟ' ],
+ [ 'V', '', 'ဠ' ],
+ [ 't', '', 'အ' ],
- ['m', '', 'ာ'],
- ['g', '', 'ါ'],
- ['d', '', 'ိ'],
- ['D', '', 'ီ'],
- ['k', '', 'ု'],
- ['l', '', 'ူ'],
- ['a', '', 'ေ'],
- ['J', '', 'ဲ'],
- ['H', '', 'ံ'],
- ['h', '', '့'],
- ['\\;', '', 'း'],
- ['f', '', '်'],
- ['F', '', '္'],
- ['\\>', '', '။'],
- ['\\<', '', '၊'],
+ [ 'm', '', 'ာ' ],
+ [ 'g', '', 'ါ' ],
+ [ 'd', '', 'ိ' ],
+ [ 'D', '', 'ီ' ],
+ [ 'k', '', 'ု' ],
+ [ 'l', '', 'ူ' ],
+ [ 'a', '', 'ေ' ],
+ [ 'J', '', 'ဲ' ],
+ [ 'H', '', 'ံ' ],
+ [ 'h', '', '့' ],
+ [ '\\;', '', 'း' ],
+ [ 'f', '', '်' ],
+ [ 'F', '', '္' ],
+ [ '\\>', '', '။' ],
+ [ '\\<', '', '၊' ],
- ['s', '', 'ျ'],
- ['j', '', 'ြ'],
- ['G', '', 'ွ'],
- ['S', '', 'ှ'],
- ['E', '', 'ဣ'],
- ['R', '', '၎'],
- ['T', '', 'ဤ'],
- ['Y', '', '၌'],
- ['I', '', '၍'],
- ['O', '', 'ဿ'],
- ['\\{', '', 'ဧ'],
- ['\\]', '', 'ဩ'],
- ['\\}', '', 'ဪ'],
- ['\\\\', '', '၏'],
- ['u', '', 'က'],
- ['U', '', 'ဥ'],
- ['M', '', 'ဦ'],
+ [ 's', '', 'ျ' ],
+ [ 'j', '', 'ြ' ],
+ [ 'G', '', 'ွ' ],
+ [ 'S', '', 'ှ' ],
+ [ 'E', '', 'ဣ' ],
+ [ 'R', '', '၎' ],
+ [ 'T', '', 'ဤ' ],
+ [ 'Y', '', '၌' ],
+ [ 'I', '', '၍' ],
+ [ 'O', '', 'ဿ' ],
+ [ '\\{', '', 'ဧ' ],
+ [ '\\]', '', 'ဩ' ],
+ [ '\\}', '', 'ဪ' ],
+ [ '\\\\', '', '၏' ],
+ [ 'u', '', 'က' ],
+ [ 'U', '', 'ဥ' ],
+ [ 'M', '', 'ဦ' ],
- ['0', '', '၀'],
- ['1', '', '၁'],
- ['2', '', '၂'],
- ['3', '', '၃'],
- ['4', '', '၄'],
- ['5', '', '၅'],
- ['6', '', '၆'],
- ['7', '', '၇'],
- ['8', '', '၈'],
- ['9', '', '၉']
+ [ '0', '', '၀' ],
+ [ '1', '', '၁' ],
+ [ '2', '', '၂' ],
+ [ '3', '', '၃' ],
+ [ '4', '', '၄' ],
+ [ '5', '', '၅' ],
+ [ '6', '', '၆' ],
+ [ '7', '', '၇' ],
+ [ '8', '', '၈' ],
+ [ '9', '', '၉' ]
]
};
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/nso/nso-tilde.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/nso/nso-tilde.js
new file mode 100644
index 00000000..7942f4fb
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/nso/nso-tilde.js
@@ -0,0 +1,24 @@
+( function ( $ ) {
+ 'use strict';
+
+ var nsoTilde = {
+ id: 'nso-tilde',
+ name: 'nso-tilde',
+ description: 'Northern Sotho input keyboard',
+ date: '2018-12-02',
+ URL: 'https://github.com/wikimedia/jquery.ime',
+ author: 'Amir E. Aharoni',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ '~S', 'Š' ],
+ [ '~s', 'š' ],
+ [ '~E', 'Ê' ],
+ [ '~e', 'ê' ],
+ [ '~O', 'Ô' ],
+ [ '~o', 'ô' ]
+ ]
+ };
+
+ $.ime.register( nsoTilde );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/or/or-transliteration.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/or/or-transliteration.js
index a41422c9..e99f8f01 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/or/or-transliteration.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/or/or-transliteration.js
@@ -33,7 +33,7 @@
[ '([କ-ହୟୱ\u0B3C])i', '$1ୈ' ],
[ '([କ-ହୟୱ\u0B3C])୍o', '$1ୋ' ],
[ '([କ-ହୟୱ\u0B3C])u', '$1ୌ' ],
- //[ '([କ-ହୟୱ\u0B3C])ୋu', '$1ୌ' ],
+ // [ '([କ-ହୟୱ\u0B3C])ୋu', '$1ୌ' ],
[ '([କ-ହୟୱ\u0B3C])୍E', '$1\u0B48' ],
[ 'ଅa', 'ଆ' ], // a
@@ -57,7 +57,7 @@
[ 'ଟ୍h', 'ଠ୍' ], // halanta
[ 'ଡ୍h', 'ଢ୍' ], // Dh
[ 'ତ୍h', 'ଥ୍' ], // th
- [ 'ଦ୍h', 'ଧ୍' ], // dh
+ [ 'ଦ୍h', 'ଧ୍' ], // dh
[ 'ପ୍h', 'ଫ୍' ], // ph
[ 'ବ୍h', 'ଭ୍' ], // bh
[ 'ସ୍h', 'ଷ୍' ], // sh
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/pms/pms.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/pms/pms.js
index 2f9eef83..c4023574 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/pms/pms.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/pms/pms.js
@@ -13,24 +13,24 @@
contextLength: 1,
maxKeyLength: 1,
patterns: [
- [':e', 'ë'],
- [',o', 'ó'],
- ['\\\\A', 'À'],
- ['\\\\E', 'È'],
- ['\\\\I', 'Ì'],
- ['\\\\O', 'Ò'],
- ['\\\\U', 'Ù'],
- [',E', 'É'],
- [':E', 'Ë'],
- [',O', 'Ó'],
- ['\\^g', 'ĝ'],
- ['\\^l', 'l̂'],
- ['\\^r', 'r̂'],
- [':a', 'ä'],
- ['\\^G', 'Ĝ'],
- ['\\^L', 'L̂'],
- ['\\^R', 'R̂'],
- [':A', 'Ä']
+ [ ':e', 'ë' ],
+ [ ',o', 'ó' ],
+ [ '\\\\A', 'À' ],
+ [ '\\\\E', 'È' ],
+ [ '\\\\I', 'Ì' ],
+ [ '\\\\O', 'Ò' ],
+ [ '\\\\U', 'Ù' ],
+ [ ',E', 'É' ],
+ [ ':E', 'Ë' ],
+ [ ',O', 'Ó' ],
+ [ '\\^g', 'ĝ' ],
+ [ '\\^l', 'l̂' ],
+ [ '\\^r', 'r̂' ],
+ [ ':a', 'ä' ],
+ [ '\\^G', 'Ĝ' ],
+ [ '\\^L', 'L̂' ],
+ [ '\\^R', 'R̂' ],
+ [ ':A', 'Ä' ]
]
};
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/roa-tara/roa-tara.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/roa-tara/roa-tara.js
index 4ec2829f..acfe869f 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/roa-tara/roa-tara.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/roa-tara/roa-tara.js
@@ -13,10 +13,10 @@
contextLength: 0,
maxKeyLength: 2,
patterns: [
- ['a§', 'á'],
- ['o§', 'ó'],
- ['A§', 'Á'],
- ['O§', 'Ó']
+ [ 'a§', 'á' ],
+ [ 'o§', 'ó' ],
+ [ 'A§', 'Á' ],
+ [ 'O§', 'Ó' ]
]
};
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ses/ses-tilde.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ses/ses-tilde.js
new file mode 100644
index 00000000..2e4c608b
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ses/ses-tilde.js
@@ -0,0 +1,40 @@
+( function ( $ ) {
+ 'use strict';
+
+ var sesTilde = {
+ id: 'ses-tilde',
+ name: 'ses-tilde',
+ description: 'Koyraboro Senni Songhay input keyboard - tilde',
+ date: '2019-01-22',
+ URL: 'https://github.com/wikimedia/jquery.ime',
+ author: 'Amir E. Aharoni',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ '~A', 'Ã' ],
+ [ '~a', 'ã' ],
+ [ '~E', 'Ẽ' ],
+ [ '~e', 'ẽ' ],
+ [ '~I', 'Ĩ' ],
+ [ '~i', 'ĩ' ],
+ [ '~O', 'Õ' ],
+ [ '~o', 'õ' ],
+ [ '~U', 'Ũ' ],
+ [ '~u', 'ũ' ],
+ [ '~G', 'Ŋ' ],
+ [ '~g', 'ŋ' ],
+ [ '~Y', 'Ɲ' ],
+ [ '~y', 'ɲ' ],
+ [ '~S', 'Š' ],
+ [ '~s', 'š' ],
+ [ '~Z', 'Ž' ],
+ [ '~z', 'ž' ],
+ [ '~\\\\', '\u0300' ], // Combining grave
+ [ '~/', '\u0301' ], // Combining acute
+ [ '~\\^', '\u0302' ], // Combining circumflex
+ [ '~v', '\u030C' ] // Combining caron
+ ]
+ };
+
+ $.ime.register( sesTilde );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/sg/sg-tilde.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/sg/sg-tilde.js
new file mode 100644
index 00000000..4c130f51
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/sg/sg-tilde.js
@@ -0,0 +1,24 @@
+( function ( $ ) {
+ 'use strict';
+
+ var sgTilde = {
+ id: 'sg-tilde',
+ name: 'sg-tilde',
+ description: 'Sango tilde keyboard',
+ date: '2019-03-28',
+ URL: 'https://github.com/wikimedia/jquery.ime',
+ author: 'Amir E. Aharoni',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ '~\\\\', '\u0300' ], // Combining grave
+ [ '~/', '\u0301' ], // Combining acute
+ [ '~\\^', '\u0302' ], // Combining circumflex
+ [ '~\\-', '\u0304' ], // Combining macron
+ [ '~\\:', '\u0308' ], // Combining diaeresis
+ [ '~v', '\u030C' ] // Combining caron
+ ]
+ };
+
+ $.ime.register( sgTilde );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/si/si-singlish.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/si/si-singlish.js
index 24cf8de4..858306f5 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/si/si-singlish.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/si/si-singlish.js
@@ -13,7 +13,7 @@
contextLength: 5,
maxKeyLength: 5,
patterns: [
- // ['ඬ්හ්a', 'ඳ'], // nndha
+ // ['ඬ්හ්a', 'ඳ'], // nndha
[ 'ඬ්h', 'ඳ්' ], // nndh
[ 'න්න්d', 'ඬ්' ], // nnd
[ 'න්න්g', 'ඟ්' ],// nng
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/sjo/sjo.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/sjo/sjo.js
index e5e9dc51..9d102f60 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/sjo/sjo.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/sjo/sjo.js
@@ -1,112 +1,112 @@
-( function ( $ ) {
- 'use strict';
-
- var sibe = {
- id: 'sjo',
- name: 'Sibe Scripts',
- description: 'Sibe Scripts',
- date: '2014-4-22',
- URL: 'http://github.com/wikimedia/jquery.ime',
- author: 'Feilong Huang, <huangfeilong@gmail.com>',
- license: 'GPLv3',
- version: '1.0',
- patterns: [
- ['Q', ''],
- ['W', '\u1838'],
- ['E', '\u1827'],
- ['R', '\u1870'],
- ['T', ''],
- ['Y', ''],
- ['U', ''],
- ['I', '\u185f'],
- ['O', ''],
- ['P', ''],
- ['{', '〈'],
- ['}', '〉'],
- ['A', ''],
- ['S', ''],
- ['D', ''],
- ['F', ''],
- ['G', '\u186c'],
- ['H', '\u186d'],
- ['J', ''],
- ['K', '\u183b'],
- ['L', '\u1840'],
- [':', '\u1804'],
- ['"', '\u180c'],
- ['Z', '\u1872'],
- ['X', '\u1871'],
- ['C', '\u1842'],
- ['V', ''],
- ['B', ''],
- ['N', '\u1862'],
- ['M', ''],
- ['<', '《'],
- ['>', '》'],
- ['\\?', '?'],
- ['_', '\u180e'],
- ['\\+', '+'],
-
- ['q', '\u1834'],
- ['w', '\u1823'],
- ['e', '\u185d'],
- ['r', '\u1837'],
- ['t', '\u1868'],
- ['y', '\u1836'],
- ['u', '\u1860'],
- ['i', '\u185e'],
- ['o', '\u1825'],
- ['p', '\u1866'],
- ['\\[', '〔'],
- ['\\]', '〕'],
- ['a', '\u1820'],
- ['s', '\u1830'],
- ['d', '\u1869'],
- ['f', '\u186b'],
- ['g', '\u1864'],
- ['h', '\u1865'],
- ['j', '\u186a'],
- ['k', '\u1863'],
- ['l', '\u182f'],
- [';', ';'],
- ['\'', '\u180b'],
- ['z', '\u186f'],
- ['x', '\u1867'],
- ['c', '\u186e'],
- ['v', '\u1861'],
- ['b', '\u182a'],
- ['n', '\u1828'],
- ['m', '\u182e'],
- [',', '\u1808'],
- ['\\.', '\u1809'],
- ['/', '.'],
- ['\\-', '\u202f'],
- ['=', '='],
-
- ['`', '\u180d'],
- ['~', '~'],
- ['1', '1'],
- ['2', '2'],
- ['3', '3'],
- ['4', '4'],
- ['5', '5'],
- ['6', '6'],
- ['7', '7'],
- ['8', '8'],
- ['9', '9'],
- ['0', '0'],
- ['!', '!'],
- ['@', '\u2048'],
- ['#', '\u2049'],
- ['\\$', '—'],
- ['%', '%'],
- ['\\^', '\u200c'],
- ['&', '\u180a'],
- ['\\*', '\u200d'],
- ['\\(', '('],
- ['\\)', ')']
- ]
- };
-
- $.ime.register( sibe );
-}( jQuery ) );
+( function ( $ ) {
+ 'use strict';
+
+ var sibe = {
+ id: 'sjo',
+ name: 'Sibe Scripts',
+ description: 'Sibe Scripts',
+ date: '2014-4-22',
+ URL: 'http://github.com/wikimedia/jquery.ime',
+ author: 'Feilong Huang, <huangfeilong@gmail.com>',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ 'Q', '' ],
+ [ 'W', '\u1838' ],
+ [ 'E', '\u1827' ],
+ [ 'R', '\u1870' ],
+ [ 'T', '' ],
+ [ 'Y', '' ],
+ [ 'U', '' ],
+ [ 'I', '\u185f' ],
+ [ 'O', '' ],
+ [ 'P', '' ],
+ [ '{', '〈' ],
+ [ '}', '〉' ],
+ [ 'A', '' ],
+ [ 'S', '' ],
+ [ 'D', '' ],
+ [ 'F', '' ],
+ [ 'G', '\u186c' ],
+ [ 'H', '\u186d' ],
+ [ 'J', '' ],
+ [ 'K', '\u183b' ],
+ [ 'L', '\u1840' ],
+ [ ':', '\u1804' ],
+ [ '"', '\u180c' ],
+ [ 'Z', '\u1872' ],
+ [ 'X', '\u1871' ],
+ [ 'C', '\u1842' ],
+ [ 'V', '' ],
+ [ 'B', '' ],
+ [ 'N', '\u1862' ],
+ [ 'M', '' ],
+ [ '<', '《' ],
+ [ '>', '》' ],
+ [ '\\?', '?' ],
+ [ '_', '\u180e' ],
+ [ '\\+', '+' ],
+
+ [ 'q', '\u1834' ],
+ [ 'w', '\u1823' ],
+ [ 'e', '\u185d' ],
+ [ 'r', '\u1837' ],
+ [ 't', '\u1868' ],
+ [ 'y', '\u1836' ],
+ [ 'u', '\u1860' ],
+ [ 'i', '\u185e' ],
+ [ 'o', '\u1825' ],
+ [ 'p', '\u1866' ],
+ [ '\\[', '〔' ],
+ [ '\\]', '〕' ],
+ [ 'a', '\u1820' ],
+ [ 's', '\u1830' ],
+ [ 'd', '\u1869' ],
+ [ 'f', '\u186b' ],
+ [ 'g', '\u1864' ],
+ [ 'h', '\u1865' ],
+ [ 'j', '\u186a' ],
+ [ 'k', '\u1863' ],
+ [ 'l', '\u182f' ],
+ [ ';', ';' ],
+ [ '\'', '\u180b' ],
+ [ 'z', '\u186f' ],
+ [ 'x', '\u1867' ],
+ [ 'c', '\u186e' ],
+ [ 'v', '\u1861' ],
+ [ 'b', '\u182a' ],
+ [ 'n', '\u1828' ],
+ [ 'm', '\u182e' ],
+ [ ',', '\u1808' ],
+ [ '\\.', '\u1809' ],
+ [ '/', '.' ],
+ [ '\\-', '\u202f' ],
+ [ '=', '=' ],
+
+ [ '`', '\u180d' ],
+ [ '~', '~' ],
+ [ '1', '1' ],
+ [ '2', '2' ],
+ [ '3', '3' ],
+ [ '4', '4' ],
+ [ '5', '5' ],
+ [ '6', '6' ],
+ [ '7', '7' ],
+ [ '8', '8' ],
+ [ '9', '9' ],
+ [ '0', '0' ],
+ [ '!', '!' ],
+ [ '@', '\u2048' ],
+ [ '#', '\u2049' ],
+ [ '\\$', '—' ],
+ [ '%', '%' ],
+ [ '\\^', '\u200c' ],
+ [ '&', '\u180a' ],
+ [ '\\*', '\u200d' ],
+ [ '\\(', '(' ],
+ [ '\\)', ')' ]
+ ]
+ };
+
+ $.ime.register( sibe );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/st/st-tilde.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/st/st-tilde.js
new file mode 100644
index 00000000..d1dd6e5e
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/st/st-tilde.js
@@ -0,0 +1,22 @@
+( function ( $ ) {
+ 'use strict';
+
+ var stTilde = {
+ id: 'st-tilde',
+ name: 'st-tilde',
+ description: 'Sotho tilde keyboard',
+ date: '2019-03-28',
+ URL: 'https://github.com/wikimedia/jquery.ime',
+ author: 'Amir E. Aharoni',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ '~S', 'Š' ],
+ [ '~s', 'š' ],
+ [ '~\\\\', '\u0300' ], // Combining grave
+ [ '~\\-', '\u0304' ] // Combining macron
+ ]
+ };
+
+ $.ime.register( stTilde );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/te/te-transliteration.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/te/te-transliteration.js
index b632858d..e587e6d1 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/te/te-transliteration.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/te/te-transliteration.js
@@ -95,7 +95,7 @@
[ '([క-హ])u', 'a', '$1ౌ' ],
// TODO: handle back corrections
- /* not working ['([క-హ])u', '$1ు'],
+ /* not working ['([క-హ])u', '$1ు'],
['([క-హ])U', '$1ూ'],
['([క-హ])E', '$1ే'],
*/
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ti/ti-geezim.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ti/ti-geezim.js
index aa9f577d..852333a6 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ti/ti-geezim.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ti/ti-geezim.js
@@ -413,8 +413,7 @@
[ '፺0', '፱፻' ], // 900
[ '፻0', '፲፻' ], // 1000
- [ '፲፻0', '፼' ], // 10,000
-
+ [ '፲፻0', '፼' ] // 10,000
]
};
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/tig/tig-geezim.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/tig/tig-geezim.js
index af45a8b1..6a7a0edc 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/tig/tig-geezim.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/tig/tig-geezim.js
@@ -413,8 +413,7 @@
[ '፺0', '፱፻' ], // 900
[ '፻0', '፲፻' ], // 1000
- [ '፲፻0', '፼' ], // 10,000
-
+ [ '፲፻0', '፼' ] // 10,000
]
};
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ve/ve-tilde.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ve/ve-tilde.js
new file mode 100644
index 00000000..a38980c7
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/ve/ve-tilde.js
@@ -0,0 +1,28 @@
+( function ( $ ) {
+ 'use strict';
+
+ var veTilde = {
+ id: 've-tilde',
+ name: 've-tilde',
+ description: 'Venda input keyboard',
+ date: '2018-12-02',
+ URL: 'https://github.com/wikimedia/jquery.ime',
+ author: 'Amir E. Aharoni',
+ license: 'GPLv3',
+ version: '1.0',
+ patterns: [
+ [ '~D', 'Ḓ' ],
+ [ '~d', 'ḓ' ],
+ [ '~L', 'Ḽ' ],
+ [ '~l', 'ḽ' ],
+ [ '~N', 'Ṋ' ],
+ [ '~n', 'ṋ' ],
+ [ '~T', 'Ṱ' ],
+ [ '~t', 'ṱ' ],
+ [ '`N', 'Ṅ' ],
+ [ '`n', 'ṅ' ]
+ ]
+ };
+
+ $.ime.register( veTilde );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/zh/zh-pinyin-transliteration.js b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/zh/zh-pinyin-transliteration.js
new file mode 100644
index 00000000..9cfe0ae7
--- /dev/null
+++ b/www/wiki/extensions/UniversalLanguageSelector/lib/jquery.ime/rules/zh/zh-pinyin-transliteration.js
@@ -0,0 +1,60 @@
+( function ( $ ) {
+ 'use strict';
+
+ var zhPinyinTransliteration = {
+ id: 'zh-pinyin-transliteration',
+ name: '拼音符号输入法',
+ description: 'Mandarin PinYin Transliteration input method',
+ date: '2018-12-28',
+ URL: 'http://github.com/wikimedia/jquery.ime',
+ author: 'Yuping Zuo',
+ license: 'MIT',
+ version: '1.0',
+ maxKeyLength: 4,
+ patterns: [
+ [ 'iou', 'iu' ],
+ [ 'uei', 'ui' ],
+ [ 'uen', 'un' ],
+ [ '([jqxy])v', '$1u' ],
+ [ 'v', 'ü' ],
+ [ 'a(ng?)?1', 'ā$1' ],
+ [ 'a(ng?)?2', 'á$1' ],
+ [ 'a(ng?)?3', 'ǎ$1' ],
+ [ 'a(ng?)?4', 'à$1' ],
+ [ 'a([io])1', 'ā$1' ],
+ [ 'a([io])2', 'á$1' ],
+ [ 'a([io])3', 'ǎ$1' ],
+ [ 'a([io])4', 'à$1' ],
+ [ 'o(ng)?1', 'ō$1' ],
+ [ 'o(ng)?2', 'ó$1' ],
+ [ 'o(ng)?3', 'ǒ$1' ],
+ [ 'o(ng)?4', 'ò$1' ],
+ [ 'ou1', 'ōu' ],
+ [ 'ou2', 'óu' ],
+ [ 'ou3', 'ǒu' ],
+ [ 'ou4', 'òu' ],
+ [ 'e(ng?)?1', 'ē$1' ],
+ [ 'e(ng?)?2', 'é$1' ],
+ [ 'e(ng?)?3', 'ě$1' ],
+ [ 'e(ng?)?4', 'è$1' ],
+ [ 'ei1', 'ēi' ],
+ [ 'ei2', 'éi' ],
+ [ 'ei3', 'ěi' ],
+ [ 'ei4', 'èi' ],
+ [ 'i(ng?)?1', 'ī$1' ],
+ [ 'i(ng?)?2', 'í$1' ],
+ [ 'i(ng?)?3', 'ǐ$1' ],
+ [ 'i(ng?)?4', 'ì$1' ],
+ [ 'u(n)?1', 'ū$1' ],
+ [ 'u(n)?2', 'ú$1' ],
+ [ 'u(n)?3', 'ǔ$1' ],
+ [ 'u(n)?4', 'ù$1' ],
+ [ 'ü(n)?1', 'ǖ$1' ],
+ [ 'ü(n)?2', 'ǘ$1' ],
+ [ 'ü(n)?3', 'ǚ$1' ],
+ [ 'ü(n)?4', 'ǜ$1' ]
+ ]
+ };
+
+ $.ime.register( zhPinyinTransliteration );
+}( jQuery ) );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/maintenance/ULSCompactLinksDisablePref.php b/www/wiki/extensions/UniversalLanguageSelector/maintenance/ULSCompactLinksDisablePref.php
index 00d4ed48..99a68392 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/maintenance/ULSCompactLinksDisablePref.php
+++ b/www/wiki/extensions/UniversalLanguageSelector/maintenance/ULSCompactLinksDisablePref.php
@@ -117,5 +117,5 @@ class ULSCompactLinksDisablePref extends Maintenance {
}
}
-$maintClass = "ULSCompactLinksDisablePref";
+$maintClass = ULSCompactLinksDisablePref::class;
require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/UniversalLanguageSelector/package.json b/www/wiki/extensions/UniversalLanguageSelector/package.json
index dd6db1ea..0e2c27d9 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/package.json
+++ b/www/wiki/extensions/UniversalLanguageSelector/package.json
@@ -4,9 +4,9 @@
"test": "grunt test"
},
"devDependencies": {
- "eslint-config-wikimedia": "0.9.0",
- "grunt": "1.0.3",
- "grunt-banana-checker": "0.6.0",
+ "eslint-config-wikimedia": "0.11.0",
+ "grunt": "^1.0.4",
+ "grunt-banana-checker": "0.7.0",
"grunt-eslint": "21.0.0",
"grunt-jsonlint": "1.1.0",
"grunt-stylelint": "0.10.1",
diff --git a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.compactlinks.js b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.compactlinks.js
index c2ecfb82..d31b49f5 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.compactlinks.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.compactlinks.js
@@ -317,7 +317,7 @@
// Load the ULS now.
mw.loader.using( 'ext.uls.mediawiki' ).then( function () {
self.createSelector( self.$trigger );
- self.$trigger.click();
+ self.$trigger.trigger( 'click' );
} );
} );
};
diff --git a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.displaysettings.js b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.displaysettings.js
index 7b28c7d7..2b6d5736 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.displaysettings.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.displaysettings.js
@@ -185,7 +185,7 @@
var deferred = new $.Deferred();
$loginCta.html( parsedCta ); // The parsed CTA is HTML
- $loginCta.find( 'a' ).click( function ( event ) {
+ $loginCta.find( 'a' ).on( 'click', function ( event ) {
event.preventDefault();
// Because browsers navigate away when clicking a link,
// we are overriding the normal click behavior to allow
@@ -301,7 +301,7 @@
$back = $( '<div>' )
.addClass( 'uls-icon-back' );
- $back.click( function () {
+ $back.on( 'click', function () {
uls.hide();
displaySettings.$parent.show();
} );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.eventlogger.js b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.eventlogger.js
index 1c94f60c..02cfa88e 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.eventlogger.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.eventlogger.js
@@ -1,6 +1,11 @@
/*!
* ULS Event logger
*
+ * See https://meta.wikimedia.org/wiki/Schema:UniversalLanguageSelector
+ *
+ * @private
+ * @since 2013.08
+ *
* Copyright (C) 2012-2013 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris,
* Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other
* contributors. See CREDITS for a list.
@@ -21,229 +26,202 @@
'use strict';
/**
- * ULS Event logger
- * See https://meta.wikimedia.org/wiki/Schema:UniversalLanguageSelector
+ * Try to emit an EventLogging event with schema 'UniversalLanguageSelector'.
+ *
+ * If EventLogging is not installed, this simply does nothing.
*
- * @since 2013.08
+ * @param {Object} event Event action and optional fields
*/
- function ULSEventLogger() {
- this.eventDefault = {
+ function log( event ) {
+ event = $.extend( {
version: 1,
token: mw.user.id(),
contentLanguage: mw.config.get( 'wgContentLanguage' ),
interfaceLanguage: mw.config.get( 'wgUserLanguage' )
+ }, event );
+
+ mw.track( 'event.UniversalLanguageSelector', event );
+ }
+
+ /**
+ * Log language settings open
+ *
+ * @param {string} context Where it was opened from
+ */
+ function ulsSettingsOpen( context ) {
+ log( {
+ action: 'settings-open',
+ context: context
+ } );
+ }
+
+ /**
+ * Log language revert
+ *
+ * @param {jQuery.Deferred} deferred
+ */
+ function ulsLanguageRevert( deferred ) {
+ log( { action: 'ui-lang-revert' } ).always( deferred.resolve() );
+ }
+
+ /**
+ * Log IME disabling
+ *
+ * @param {string} context Where the setting was changed.
+ */
+ function disableIME( context ) {
+ log( { action: 'ime-disable', context: context } );
+ }
+
+ /**
+ * Log IME enabling
+ *
+ * @param {string} context Where the setting was changed.
+ */
+ function enableIME( context ) {
+ log( { action: 'ime-enable', context: context } );
+ }
+
+ /**
+ * Log IME change
+ *
+ * @param {string} inputMethod
+ */
+ function changeIME( inputMethod ) {
+ log( {
+ action: 'ime-change',
+ inputMethod: inputMethod
+ } );
+ }
+
+ /**
+ * Log login link click in display settings.
+ *
+ * @param {jQuery.Deferred} deferred
+ */
+ function loginClick( deferred ) {
+ log( { action: 'login-click' } );
+ deferred.resolve();
+ }
+
+ /**
+ * Log when "More languages" item in IME menu is clicked.
+ */
+ function imeMoreLanguages() {
+ log( {
+ action: 'more-languages-access',
+ context: 'ime'
+ } );
+ }
+
+ /**
+ * Log interface language change
+ *
+ * @param {string} language language code
+ * @param {jQuery.Deferred} deferred
+ */
+ function interfaceLanguageChange( language, deferred ) {
+ var logParams = {
+ action: 'language-change',
+ context: 'interface',
+ interfaceLanguage: language
};
- this.schemaDefault = 'UniversalLanguageSelector';
- this.listen();
+
+ log( logParams );
+ deferred.resolve();
}
- ULSEventLogger.prototype = {
- /**
- * Local wrapper for 'mw.eventLog.logEvent'
- *
- * @param {Object} event Event action and optional fields
- * @param {string} schema The schema; 'UniversalLanguageSelector' is the default
- * @return {jQuery.Promise} jQuery Promise object for the logging call
- */
- log: function ( event, schema ) {
- // FIXME: We need to create our own deferred for two reasons:
- // - logEvent might not be executed immediately
- // - we cannot reject a promise returned by it
- // So we proxy the original promises status updates.
- var deferred = $.Deferred();
-
- schema = schema || this.schemaDefault;
-
- if ( schema === this.schemaDefault ) {
- event = $.extend( {}, this.eventBase, event );
- }
-
- mw.eventLog.logEvent( schema, event )
- .done( deferred.resolve )
- .fail( deferred.reject );
-
- return deferred.promise();
- },
-
- /**
- * Listen for event logging
- */
- listen: function () {
- // Register handlers for event logging triggers
- mw.hook( 'mw.uls.settings.open' ).add( this.ulsSettingsOpen.bind( this ) );
- mw.hook( 'mw.uls.language.revert' ).add( this.ulsLanguageRevert.bind( this ) );
- mw.hook( 'mw.uls.ime.enable' ).add( this.enableIME.bind( this ) );
- mw.hook( 'mw.uls.ime.disable' ).add( this.disableIME.bind( this ) );
- mw.hook( 'mw.uls.ime.change' ).add( this.changeIME.bind( this ) );
- mw.hook( 'mw.uls.login.click' ).add( this.loginClick.bind( this ) );
- mw.hook( 'mw.uls.ime.morelanguages' ).add( this.imeMoreLanguages.bind( this ) );
- mw.hook( 'mw.uls.interface.morelanguages' ).add( this.interfaceMoreLanguages.bind( this ) );
- mw.hook( 'mw.uls.interface.language.change' ).add( this.interfaceLanguageChange.bind( this ) );
- mw.hook( 'mw.uls.font.change' ).add( this.fontChange.bind( this ) );
- mw.hook( 'mw.uls.webfonts.enable' ).add( this.enableWebfonts.bind( this ) );
- mw.hook( 'mw.uls.webfonts.disable' ).add( this.disableWebfonts.bind( this ) );
-
- $( 'body' ).on( 'noresults.uls', '.uls-menu .uls-languagefilter',
- this.noSearchResults.bind( this )
- );
- },
-
- /**
- * Log language settings open
- *
- * @param {string} context Where it was opened from
- */
- ulsSettingsOpen: function ( context ) {
- this.log( {
- action: 'settings-open',
- context: context
- } );
- },
-
- /**
- * Log language revert
- *
- * @param {jQuery.Deferred} deferred
- */
- ulsLanguageRevert: function ( deferred ) {
- this.log( { action: 'ui-lang-revert' } ).always( deferred.resolve() );
- },
-
- /**
- * Log IME disabling
- *
- * @param {string} context Where the setting was changed.
- */
- disableIME: function ( context ) {
- this.log( { action: 'ime-disable', context: context } );
- },
-
- /**
- * Log IME enabling
- *
- * @param {string} context Where the setting was changed.
- */
- enableIME: function ( context ) {
- this.log( { action: 'ime-enable', context: context } );
- },
-
- /**
- * Log IME change
- *
- * @param {string} inputMethod
- */
- changeIME: function ( inputMethod ) {
- this.log( {
- action: 'ime-change',
- inputMethod: inputMethod
- } );
- },
-
- /**
- * Log login link click in display settings.
- *
- * @param {jQuery.Deferred} deferred
- */
- loginClick: function ( deferred ) {
- this.log( { action: 'login-click' } ).always( deferred.resolve );
- },
-
- /**
- * More languages item in IME menu is clicked
- */
- imeMoreLanguages: function () {
- this.log( {
- action: 'more-languages-access',
- context: 'ime'
- } );
- },
-
- /**
- * Log interface language change
- *
- * @param {string} language language code
- * @param {jQuery.Deferred} deferred
- */
- interfaceLanguageChange: function ( language, deferred ) {
- var logParams = {
- action: 'language-change',
- context: 'interface',
- interfaceLanguage: language
- };
-
- this.log( logParams ).always( deferred.resolve );
- },
-
- /**
- * More languages in display settings is clicked
- */
- interfaceMoreLanguages: function () {
- this.log( {
- action: 'more-languages-access',
- context: 'interface'
- } );
- },
-
- /**
- * Log font preference changes
- *
- * @param {string} context Either 'interface' or 'content'
- * @param {string} language
- * @param {string} font
- */
- fontChange: function ( context, language, font ) {
- var logParams = {
- action: 'font-change',
- context: context
- };
-
- if ( context === 'interface' ) {
- $.extend( logParams, {
- interfaceFont: font,
- // Override in case the user changed the ui language but hasn't applied it yet
- interfaceLanguage: language
- } );
- } else {
- logParams.contentFont = font;
- }
-
- this.log( logParams );
- },
-
- /**
- * Log webfonts disabling
- *
- * @param {string} context Where the setting was changed.
- */
- disableWebfonts: function ( context ) {
- this.log( { action: 'webfonts-disable', context: context } );
- },
-
- /**
- * Log webfonts enabling
- *
- * @param {string} context Where the setting was changed.
- */
- enableWebfonts: function ( context ) {
- this.log( { action: 'webfonts-enable', context: context } );
- },
-
- /**
- * Log search strings which produce no search results.
- *
- * @param {jQuery.event} event The original event
- * @param {Object} data Information about the failed search
- */
- noSearchResults: function ( event, data ) {
- this.log( {
- action: 'no-search-results',
- context: data.query,
- ulsPurpose: data.ulsPurpose,
- title: mw.config.get( 'wgPageName' )
- } );
+ /**
+ * More languages in display settings is clicked
+ */
+ function interfaceMoreLanguages() {
+ log( {
+ action: 'more-languages-access',
+ context: 'interface'
+ } );
+ }
+
+ /**
+ * Log font preference changes
+ *
+ * @param {string} context Either 'interface' or 'content'
+ * @param {string} language
+ * @param {string} font
+ */
+ function fontChange( context, language, font ) {
+ var logParams = {
+ action: 'font-change',
+ context: context
+ };
+
+ if ( context === 'interface' ) {
+ logParams.interfaceFont = font;
+ // Override in case the user changed the ui language but hasn't applied it yet
+ logParams.interfaceLanguage = language;
+ } else {
+ logParams.contentFont = font;
}
- };
- mw.uls = mw.uls || {};
- mw.uls.eventlogger = new ULSEventLogger();
+ log( logParams );
+ }
+
+ /**
+ * Log webfonts disabling
+ *
+ * @param {string} context Where the setting was changed.
+ */
+ function disableWebfonts( context ) {
+ log( { action: 'webfonts-disable', context: context } );
+ }
+
+ /**
+ * Log webfonts enabling
+ *
+ * @param {string} context Where the setting was changed.
+ */
+ function enableWebfonts( context ) {
+ log( { action: 'webfonts-enable', context: context } );
+ }
+
+ /**
+ * Log search strings which produce no search results.
+ *
+ * @param {jQuery.event} event The original event
+ * @param {Object} data Information about the failed search
+ */
+ function noSearchResults( event, data ) {
+ log( {
+ action: 'no-search-results',
+ context: data.query,
+ ulsPurpose: data.ulsPurpose,
+ title: mw.config.get( 'wgPageName' )
+ } );
+ }
+
+ /**
+ * Start listening for event logging
+ */
+ function listen() {
+ // Register handlers for event logging triggers
+ mw.hook( 'mw.uls.settings.open' ).add( ulsSettingsOpen );
+ mw.hook( 'mw.uls.language.revert' ).add( ulsLanguageRevert );
+ mw.hook( 'mw.uls.ime.enable' ).add( enableIME );
+ mw.hook( 'mw.uls.ime.disable' ).add( disableIME );
+ mw.hook( 'mw.uls.ime.change' ).add( changeIME );
+ mw.hook( 'mw.uls.login.click' ).add( loginClick );
+ mw.hook( 'mw.uls.ime.morelanguages' ).add( imeMoreLanguages );
+ mw.hook( 'mw.uls.interface.morelanguages' ).add( interfaceMoreLanguages );
+ mw.hook( 'mw.uls.interface.language.change' ).add( interfaceLanguageChange );
+ mw.hook( 'mw.uls.font.change' ).add( fontChange );
+ mw.hook( 'mw.uls.webfonts.enable' ).add( enableWebfonts );
+ mw.hook( 'mw.uls.webfonts.disable' ).add( disableWebfonts );
+
+ $( 'body' ).on(
+ 'noresults.uls',
+ '.uls-menu .uls-languagefilter',
+ noSearchResults
+ );
+ }
+
+ listen();
}() );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.ime.js b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.ime.js
index 117777c7..653bcf1a 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.ime.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.ime.js
@@ -150,7 +150,7 @@
defaultModule: 'input',
onClose: function () {
// on close of input settings, keep focus in input area.
- imeselector.$element.focus();
+ imeselector.$element.trigger( 'focus' );
},
top: imeselector.$element.offset().top
} );
@@ -291,7 +291,7 @@
$ulsTrigger.uls( {
onSelect: function ( language ) {
$input.data( 'imeselector' ).selectLanguage( language );
- $input.focus();
+ $input.trigger( 'focus' );
},
languages: mw.ime.getLanguagesWithIME(),
ulsPurpose: 'ime-selector',
@@ -308,7 +308,7 @@
title: $.i18n( 'ext-uls-ime-help' )
} )
.addClass( 'ime-perime-help' )
- .click( function ( event ) {
+ .on( 'click', function ( event ) {
event.stopPropagation();
} );
}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.inputsettings.js b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.inputsettings.js
index f3d47733..fe22f9f6 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.inputsettings.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.inputsettings.js
@@ -173,7 +173,8 @@
$imeLabel = $( '<label>' ).attr( 'for', imeId );
- $inputMethodItem = $( '<input type="radio">' ).attr( {
+ $inputMethodItem = $( '<input>' ).attr( {
+ type: 'radio',
name: 'ime',
id: imeId,
value: imeId
@@ -306,7 +307,7 @@
$button.on( 'click', buttonHandler( $button ) );
if ( language === selectedImeLanguage ) {
- $button.click();
+ $button.trigger( 'click' );
}
}
@@ -339,7 +340,7 @@
.i18n()
.text( ' ' );
- $back.click( function () {
+ $back.on( 'click', function () {
uls.hide();
inputSettings.$parent.show();
} );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.interface.js b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.interface.js
index f6043623..89e8fa0a 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.interface.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.interface.js
@@ -79,7 +79,7 @@
};
}
$.extend( displaySettingsOptions, uls.position() );
- $displaySettings.languagesettings( displaySettingsOptions ).click();
+ $displaySettings.languagesettings( displaySettingsOptions ).trigger( 'click' );
} );
}
@@ -104,7 +104,7 @@
},
top: position.top,
left: position.left
- } ).click();
+ } ).trigger( 'click' );
} );
}
@@ -182,7 +182,7 @@
.text( previousAutonym )
.prop( {
href: '',
- 'class': 'uls-prevlang-link',
+ class: 'uls-prevlang-link',
lang: previousLang,
// We could get dir from uls.data,
// but we are trying to avoid loading it
@@ -311,7 +311,7 @@
};
mw.loader.using( mw.uls.languageSettingsModules, function () {
- $ulsTrigger.languagesettings( languageSettingsOptions ).click();
+ $ulsTrigger.languagesettings( languageSettingsOptions ).trigger( 'click' );
} );
e.stopPropagation();
diff --git a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.languagesettings.js b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.languagesettings.js
index 177a40e3..44bdd15f 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.languagesettings.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.languagesettings.js
@@ -81,7 +81,7 @@
this.$window.find( 'button.uls-settings-apply' )
.on( 'click', mw.hook( 'mw.uls.settings.apply' ).fire.bind( this ) );
// Hide the window when clicked outside
- $( 'html' ).click( this.hide.bind( this ) );
+ $( 'html' ).on( 'click', this.hide.bind( this ) );
// ... but when clicked on window do not hide.
this.$window.on( 'click', function ( event ) {
@@ -189,18 +189,18 @@
this.initialized = true;
}
// Close other modal windows which listen to click events outside them
- $( 'html' ).click();
+ $( 'html' ).trigger( 'click' );
this.i18n();
// Every time we show this window, make sure the current
// settings panels is up-to-date. So just click on active menu item.
- this.$window.find( '.settings-menu-items > .active' ).click();
+ this.$window.find( '.settings-menu-items > .active' ).trigger( 'click' );
this.shown = true;
this.$window.show();
this.visible();
this.$window.scrollIntoView();
// For keyboard navigation, put the focus on an element inside the dialog
- this.$window.find( '.menu-section.active' ).focus();
+ this.$window.find( '.menu-section.active' ).trigger( 'focus' );
},
/**
diff --git a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.preferences.js b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.preferences.js
index 0569fab4..8dd2236f 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.preferences.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.preferences.js
@@ -126,7 +126,7 @@
save: function ( callback ) {
var ulsPreferences = this;
- callback = callback || $.noop;
+ callback = callback || function () {};
if ( this.isAnon ) {
// Anonymous user. Save preferences in local storage
preferenceStore().set( this.preferenceName, this.preferences );
diff --git a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.webfonts.repository.js b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.webfonts.repository.js
index a6b50377..d4b78c43 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.webfonts.repository.js
+++ b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.webfonts.repository.js
@@ -78,6 +78,13 @@
"cr": [
"OskiEast"
],
+ "cu": [
+ "system",
+ "Fedorovsk",
+ "Menaion",
+ "Monomakh",
+ "Ponomar"
+ ],
"cy": [
"system",
"ComicNeue",
@@ -467,6 +474,10 @@
"woff": "EstrangeloEdessa/SyrCOMEdessa.woff?c4484",
"woff2": "EstrangeloEdessa/SyrCOMEdessa.woff2?3e525"
},
+ "Fedorovsk": {
+ "woff": "Fedorovsk/FedorovskUnicode.woff?1659d",
+ "woff2": "Fedorovsk/FedorovskUnicode.woff2?245e3"
+ },
"FreeFont-Thaana": {
"woff": "FreeFontThana/FreeFont-Thaana.woff?0f06e",
"woff2": "FreeFontThana/FreeFont-Thaana.woff2?ad021",
@@ -589,10 +600,18 @@
"woff": "LinuxLibertine/LinLibertine_RIah.woff?1c058",
"woff2": "LinuxLibertine/LinLibertine_RIah.woff2?4e887"
},
+ "Menaion": {
+ "woff": "Menaion/MenaionUnicode.woff?50cc6",
+ "woff2": "Menaion/MenaionUnicode.woff2?da37b"
+ },
"Miriam CLM": {
"woff": "MiriamCLM/MiriamCLM-Book.woff?28216",
"woff2": "MiriamCLM/MiriamCLM-Book.woff2?f3942"
},
+ "Monomakh": {
+ "woff": "Monomakh/MonomakhUnicode.woff?0a8b3",
+ "woff2": "Monomakh/MonomakhUnicode.woff2?ee286"
+ },
"Myanmar3": {
"woff": "Myanmar3/Myanmar3.woff?60817",
"woff2": "Myanmar3/Myanmar3.woff2?2b586"
@@ -707,6 +726,10 @@
"woff": "Phetsarath/Phetsarath-Bold.woff?8c43d",
"woff2": "Phetsarath/Phetsarath-Bold.woff2?2d5a1"
},
+ "Ponomar": {
+ "woff": "Ponomar/PonomarUnicode.woff?05ed0",
+ "woff2": "Ponomar/PonomarUnicode.woff2?ea5c5"
+ },
"RailwaySans": {
"woff": "RailwaySans/RailwaySans.woff?fda9a",
"woff2": "RailwaySans/RailwaySans.woff2?a6c17"
diff --git a/www/wiki/extensions/UniversalLanguageSelector/tests/all-fonts.html b/www/wiki/extensions/UniversalLanguageSelector/tests/all-fonts.html
index 4041c85b..c63af0b6 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/tests/all-fonts.html
+++ b/www/wiki/extensions/UniversalLanguageSelector/tests/all-fonts.html
@@ -9,8 +9,7 @@
font-family: 'AbyssinicaSIL';
src:
url('../data/fontrepo/fonts/AbyssinicaSIL/AbyssinicaSIL-R.woff2?361f7') format('woff2'),
- url('../data/fontrepo/fonts/AbyssinicaSIL/AbyssinicaSIL-R.woff?893c7') format('woff'),
- url('../data/fontrepo/fonts/AbyssinicaSIL/AbyssinicaSIL-R.ttf?9e3d4') format('ttf');
+ url('../data/fontrepo/fonts/AbyssinicaSIL/AbyssinicaSIL-R.woff?893c7') format('woff');
}
.font-7483df {
@@ -21,8 +20,7 @@
font-family: 'Akkadian';
src:
url('../data/fontrepo/fonts/Akkadian/Akkadian.woff2?1e0a3') format('woff2'),
- url('../data/fontrepo/fonts/Akkadian/Akkadian.woff?fc09d') format('woff'),
- url('../data/fontrepo/fonts/Akkadian/Akkadian.ttf?39422') format('ttf');
+ url('../data/fontrepo/fonts/Akkadian/Akkadian.woff?fc09d') format('woff');
}
.font-db0be7 {
@@ -33,8 +31,7 @@
font-family: 'Alef';
src:
url('../data/fontrepo/fonts/Alef/Alef-Regular.woff2?a2499') format('woff2'),
- url('../data/fontrepo/fonts/Alef/Alef-Regular.woff?2b430') format('woff'),
- url('../data/fontrepo/fonts/Alef/Alef-Regular.ttf?fce9c') format('ttf');
+ url('../data/fontrepo/fonts/Alef/Alef-Regular.woff?2b430') format('woff');
}
.font-727067 {
@@ -45,8 +42,7 @@
font-family: 'Alef Bold';
src:
url('../data/fontrepo/fonts/Alef/Alef-Bold.woff2?7c873') format('woff2'),
- url('../data/fontrepo/fonts/Alef/Alef-Bold.woff?bd85f') format('woff'),
- url('../data/fontrepo/fonts/Alef/Alef-Bold.ttf?42297') format('ttf');
+ url('../data/fontrepo/fonts/Alef/Alef-Bold.woff?bd85f') format('woff');
}
.font-29cb3c {
@@ -57,8 +53,7 @@
font-family: 'Amiri';
src:
url('../data/fontrepo/fonts/amiri/amiri-regular.woff2?1f55e') format('woff2'),
- url('../data/fontrepo/fonts/amiri/amiri-regular.woff?e8973') format('woff'),
- url('../data/fontrepo/fonts/amiri/amiri-regular.ttf?d51fb') format('ttf');
+ url('../data/fontrepo/fonts/amiri/amiri-regular.woff?e8973') format('woff');
}
.font-a00287 {
@@ -69,8 +64,7 @@
font-family: 'Amiri Bold';
src:
url('../data/fontrepo/fonts/amiri/amiri-bold.woff2?a0e74') format('woff2'),
- url('../data/fontrepo/fonts/amiri/amiri-bold.woff?63eb0') format('woff'),
- url('../data/fontrepo/fonts/amiri/amiri-bold.ttf?6d012') format('ttf');
+ url('../data/fontrepo/fonts/amiri/amiri-bold.woff?63eb0') format('woff');
}
.font-da5d59 {
@@ -81,8 +75,7 @@
font-family: 'Amiri Bold Italic';
src:
url('../data/fontrepo/fonts/amiri/amiri-boldslanted.woff2?b0128') format('woff2'),
- url('../data/fontrepo/fonts/amiri/amiri-boldslanted.woff?44410') format('woff'),
- url('../data/fontrepo/fonts/amiri/amiri-boldslanted.ttf?76aa4') format('ttf');
+ url('../data/fontrepo/fonts/amiri/amiri-boldslanted.woff?44410') format('woff');
}
.font-14cb6c {
@@ -93,8 +86,7 @@
font-family: 'Amiri Italic';
src:
url('../data/fontrepo/fonts/amiri/amiri-slanted.woff2?a90a0') format('woff2'),
- url('../data/fontrepo/fonts/amiri/amiri-slanted.woff?7d658') format('woff'),
- url('../data/fontrepo/fonts/amiri/amiri-slanted.ttf?d166d') format('ttf');
+ url('../data/fontrepo/fonts/amiri/amiri-slanted.woff?7d658') format('woff');
}
.font-cc0e0d {
@@ -102,23 +94,10 @@
}
@font-face {
- font-family: 'AnjaliOldLipi';
- src:
- url('../data/fontrepo/fonts/AnjaliOldLipi/AnjaliOldLipi.woff2?7db63') format('woff2'),
- url('../data/fontrepo/fonts/AnjaliOldLipi/AnjaliOldLipi.woff?1f259') format('woff'),
- url('../data/fontrepo/fonts/AnjaliOldLipi/AnjaliOldLipi.ttf?b47e8') format('ttf');
-}
-
-.font-e5b903 {
- font-family: 'AnjaliOldLipi';
-}
-
-@font-face {
font-family: 'Artaxerxes';
src:
url('../data/fontrepo/fonts/Artaxerxes/Artaxerxes.woff2?7a96e') format('woff2'),
- url('../data/fontrepo/fonts/Artaxerxes/Artaxerxes.woff?c1ed7') format('woff'),
- url('../data/fontrepo/fonts/Artaxerxes/Artaxerxes.ttf?79a74') format('ttf');
+ url('../data/fontrepo/fonts/Artaxerxes/Artaxerxes.woff?c1ed7') format('woff');
}
.font-6ea8cf {
@@ -126,23 +105,10 @@
}
@font-face {
- font-family: 'Autonym';
- src:
- url('../data/fontrepo/fonts/Autonym/Autonym.woff2?280d0') format('woff2'),
- url('../data/fontrepo/fonts/Autonym/Autonym.woff?235d8') format('woff'),
- url('../data/fontrepo/fonts/Autonym/Autonym.ttf?d41f5') format('ttf');
-}
-
-.font-27e569 {
- font-family: 'Autonym';
-}
-
-@font-face {
font-family: 'CharisSIL';
src:
url('../data/fontrepo/fonts/CharisSIL/CharisSIL-R.woff2?b2a18') format('woff2'),
- url('../data/fontrepo/fonts/CharisSIL/CharisSIL-R.woff?3a622') format('woff'),
- url('../data/fontrepo/fonts/CharisSIL/CharisSIL-R.ttf?20bec') format('ttf');
+ url('../data/fontrepo/fonts/CharisSIL/CharisSIL-R.woff?3a622') format('woff');
}
.font-c00ec2 {
@@ -153,8 +119,7 @@
font-family: 'ComicNeue';
src:
url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Regular.woff2?44c5e') format('woff2'),
- url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Regular.woff?ff5e6') format('woff'),
- url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Regular.ttf?51c27') format('ttf');
+ url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Regular.woff?ff5e6') format('woff');
}
.font-6a3dd2 {
@@ -165,8 +130,7 @@
font-family: 'ComicNeue Bold';
src:
url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Bold.woff2?c1376') format('woff2'),
- url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Bold.woff?cc2d9') format('woff'),
- url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Bold.ttf?9969d') format('ttf');
+ url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Bold.woff?cc2d9') format('woff');
}
.font-3edd9d {
@@ -177,8 +141,7 @@
font-family: 'ComicNeue Oblique';
src:
url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Regular-Oblique.woff2?4ddaf') format('woff2'),
- url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Regular-Oblique.woff?45c14') format('woff'),
- url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Regular-Oblique.ttf?aaf71') format('ttf');
+ url('../data/fontrepo/fonts/ComicNeue/ComicNeue-Regular-Oblique.woff?45c14') format('woff');
}
.font-1e83ef {
@@ -189,8 +152,7 @@
font-family: 'Doulos SIL';
src:
url('../data/fontrepo/fonts/DoulosSIL/DoulosSIL-R.woff2?61737') format('woff2'),
- url('../data/fontrepo/fonts/DoulosSIL/DoulosSIL-R.woff?f76f6') format('woff'),
- url('../data/fontrepo/fonts/DoulosSIL/DoulosSIL-R.ttf?bbad3') format('ttf');
+ url('../data/fontrepo/fonts/DoulosSIL/DoulosSIL-R.woff?f76f6') format('woff');
}
.font-8e58af {
@@ -201,8 +163,7 @@
font-family: 'East Syriac Adiabene';
src:
url('../data/fontrepo/fonts/EastSyriacAdiabene/SyrCOMAdiabene.woff2?9ff2e') format('woff2'),
- url('../data/fontrepo/fonts/EastSyriacAdiabene/SyrCOMAdiabene.woff?cfbf0') format('woff'),
- url('../data/fontrepo/fonts/EastSyriacAdiabene/SyrCOMAdiabene.ttf?73604') format('ttf');
+ url('../data/fontrepo/fonts/EastSyriacAdiabene/SyrCOMAdiabene.woff?cfbf0') format('woff');
}
.font-6c252a {
@@ -213,8 +174,7 @@
font-family: 'Estrangelo Edessa';
src:
url('../data/fontrepo/fonts/EstrangeloEdessa/SyrCOMEdessa.woff2?3e525') format('woff2'),
- url('../data/fontrepo/fonts/EstrangeloEdessa/SyrCOMEdessa.woff?c4484') format('woff'),
- url('../data/fontrepo/fonts/EstrangeloEdessa/SyrCOMEdessa.ttf?63083') format('ttf');
+ url('../data/fontrepo/fonts/EstrangeloEdessa/SyrCOMEdessa.woff?c4484') format('woff');
}
.font-e6abf9 {
@@ -222,11 +182,21 @@
}
@font-face {
+ font-family: 'Fedorovsk';
+ src:
+ url('../data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.woff2?245e3') format('woff2'),
+ url('../data/fontrepo/fonts/Fedorovsk/FedorovskUnicode.woff?1659d') format('woff');
+}
+
+.font-dd12c5 {
+ font-family: 'Fedorovsk';
+}
+
+@font-face {
font-family: 'FreeFont-Thaana';
src:
url('../data/fontrepo/fonts/FreeFontThana/FreeFont-Thaana.woff2?ad021') format('woff2'),
- url('../data/fontrepo/fonts/FreeFontThana/FreeFont-Thaana.woff?0f06e') format('woff'),
- url('../data/fontrepo/fonts/FreeFontThana/FreeFont-Thaana.ttf?ccecc') format('ttf');
+ url('../data/fontrepo/fonts/FreeFontThana/FreeFont-Thaana.woff?0f06e') format('woff');
}
.font-0279dc {
@@ -237,8 +207,7 @@
font-family: 'FreeFont-Thaana Bold';
src:
url('../data/fontrepo/fonts/FreeFontThana/FreeFont-Thaana-Bold.woff2?eaf55') format('woff2'),
- url('../data/fontrepo/fonts/FreeFontThana/FreeFont-Thaana-Bold.woff?5eb85') format('woff'),
- url('../data/fontrepo/fonts/FreeFontThana/FreeFont-Thaana-Bold.ttf?26aea') format('ttf');
+ url('../data/fontrepo/fonts/FreeFontThana/FreeFont-Thaana-Bold.woff?5eb85') format('woff');
}
.font-6e7740 {
@@ -249,8 +218,7 @@
font-family: 'GentiumPlus';
src:
url('../data/fontrepo/fonts/GentiumPlus/GentiumPlus-R.woff2?aa576') format('woff2'),
- url('../data/fontrepo/fonts/GentiumPlus/GentiumPlus-R.woff?1abc3') format('woff'),
- url('../data/fontrepo/fonts/GentiumPlus/GentiumPlus-R.ttf?66f17') format('ttf');
+ url('../data/fontrepo/fonts/GentiumPlus/GentiumPlus-R.woff?1abc3') format('woff');
}
.font-17daee {
@@ -261,8 +229,7 @@
font-family: 'GentiumPlus Italic';
src:
url('../data/fontrepo/fonts/GentiumPlus/GentiumPlus-I.woff2?35b11') format('woff2'),
- url('../data/fontrepo/fonts/GentiumPlus/GentiumPlus-I.woff?ab550') format('woff'),
- url('../data/fontrepo/fonts/GentiumPlus/GentiumPlus-I.ttf?23e33') format('ttf');
+ url('../data/fontrepo/fonts/GentiumPlus/GentiumPlus-I.woff?ab550') format('woff');
}
.font-2d6281 {
@@ -270,23 +237,10 @@
}
@font-face {
- font-family: 'Gubbi';
- src:
- url('../data/fontrepo/fonts/Gubbi/Gubbi.woff2?66d38') format('woff2'),
- url('../data/fontrepo/fonts/Gubbi/Gubbi.woff?ce807') format('woff'),
- url('../data/fontrepo/fonts/Gubbi/Gubbi.ttf?75bf7') format('ttf');
-}
-
-.font-360625 {
- font-family: 'Gubbi';
-}
-
-@font-face {
font-family: 'Hanuman';
src:
url('../data/fontrepo/fonts/Hanuman/Hanuman.woff2?0107a') format('woff2'),
- url('../data/fontrepo/fonts/Hanuman/Hanuman.woff?d5078') format('woff'),
- url('../data/fontrepo/fonts/Hanuman/Hanuman.ttf?3e11d') format('ttf');
+ url('../data/fontrepo/fonts/Hanuman/Hanuman.woff?d5078') format('woff');
}
.font-16d364 {
@@ -297,8 +251,7 @@
font-family: 'Hanuman Bold';
src:
url('../data/fontrepo/fonts/Hanuman/Hanumanb.woff2?1b52d') format('woff2'),
- url('../data/fontrepo/fonts/Hanuman/Hanumanb.woff?27aeb') format('woff'),
- url('../data/fontrepo/fonts/Hanuman/Hanumanb.ttf?cdaaf') format('ttf');
+ url('../data/fontrepo/fonts/Hanuman/Hanumanb.woff?27aeb') format('woff');
}
.font-68fdbb {
@@ -309,8 +262,7 @@
font-family: 'Hussaini Nastaleeq';
src:
url('../data/fontrepo/fonts/HussainiNastaleeq/hussaini-nastaleeq.woff2?2b174') format('woff2'),
- url('../data/fontrepo/fonts/HussainiNastaleeq/hussaini-nastaleeq.woff?5c44b') format('woff'),
- url('../data/fontrepo/fonts/HussainiNastaleeq/hussaini-nastaleeq.ttf?7babb') format('ttf');
+ url('../data/fontrepo/fonts/HussainiNastaleeq/hussaini-nastaleeq.woff?5c44b') format('woff');
}
.font-c00f30 {
@@ -321,8 +273,7 @@
font-family: 'Iranian Sans';
src:
url('../data/fontrepo/fonts/IranianSans/irsans.woff2?17429') format('woff2'),
- url('../data/fontrepo/fonts/IranianSans/irsans.woff?ec963') format('woff'),
- url('../data/fontrepo/fonts/IranianSans/irsans.ttf?e2097') format('ttf');
+ url('../data/fontrepo/fonts/IranianSans/irsans.woff?ec963') format('woff');
}
.font-17113a {
@@ -333,8 +284,7 @@
font-family: 'Iranian Sans Bold';
src:
url('../data/fontrepo/fonts/IranianSans/irsansb.woff2?d24da') format('woff2'),
- url('../data/fontrepo/fonts/IranianSans/irsansb.woff?cf164') format('woff'),
- url('../data/fontrepo/fonts/IranianSans/irsansb.ttf?730e5') format('ttf');
+ url('../data/fontrepo/fonts/IranianSans/irsansb.woff?cf164') format('woff');
}
.font-d84f04 {
@@ -345,8 +295,7 @@
font-family: 'Iranian Serif';
src:
url('../data/fontrepo/fonts/IranianSerif/irseri.woff2?2e4dd') format('woff2'),
- url('../data/fontrepo/fonts/IranianSerif/irseri.woff?d153b') format('woff'),
- url('../data/fontrepo/fonts/IranianSerif/irseri.ttf?b9d68') format('ttf');
+ url('../data/fontrepo/fonts/IranianSerif/irseri.woff?d153b') format('woff');
}
.font-5385fd {
@@ -357,8 +306,7 @@
font-family: 'Jomolhari';
src:
url('../data/fontrepo/fonts/Jomolhari/Jomolhari.woff2?f448a') format('woff2'),
- url('../data/fontrepo/fonts/Jomolhari/Jomolhari.woff?3a60b') format('woff'),
- url('../data/fontrepo/fonts/Jomolhari/Jomolhari.ttf?75f85') format('ttf');
+ url('../data/fontrepo/fonts/Jomolhari/Jomolhari.woff?3a60b') format('woff');
}
.font-a57c85 {
@@ -369,8 +317,7 @@
font-family: 'Junicode';
src:
url('../data/fontrepo/fonts/Junicode/Junicode.woff2?7e6d6') format('woff2'),
- url('../data/fontrepo/fonts/Junicode/Junicode.woff?dc7ef') format('woff'),
- url('../data/fontrepo/fonts/Junicode/Junicode.ttf?f1e3e') format('ttf');
+ url('../data/fontrepo/fonts/Junicode/Junicode.woff?dc7ef') format('woff');
}
.font-bcc2a1 {
@@ -381,8 +328,7 @@
font-family: 'Junicode Bold';
src:
url('../data/fontrepo/fonts/Junicode/Junicode-Bold.woff2?d5d04') format('woff2'),
- url('../data/fontrepo/fonts/Junicode/Junicode-Bold.woff?f7ef4') format('woff'),
- url('../data/fontrepo/fonts/Junicode/Junicode-Bold.ttf?65a4f') format('ttf');
+ url('../data/fontrepo/fonts/Junicode/Junicode-Bold.woff?f7ef4') format('woff');
}
.font-245afe {
@@ -393,8 +339,7 @@
font-family: 'Junicode Bold Italic';
src:
url('../data/fontrepo/fonts/Junicode/Junicode-BoldItalic.woff2?80351') format('woff2'),
- url('../data/fontrepo/fonts/Junicode/Junicode-BoldItalic.woff?3cec9') format('woff'),
- url('../data/fontrepo/fonts/Junicode/Junicode-BoldItalic.ttf?89f2f') format('ttf');
+ url('../data/fontrepo/fonts/Junicode/Junicode-BoldItalic.woff?3cec9') format('woff');
}
.font-f8e22b {
@@ -405,8 +350,7 @@
font-family: 'Junicode Italic';
src:
url('../data/fontrepo/fonts/Junicode/Junicode-Italic.woff2?3fe39') format('woff2'),
- url('../data/fontrepo/fonts/Junicode/Junicode-Italic.woff?c458b') format('woff'),
- url('../data/fontrepo/fonts/Junicode/Junicode-Italic.ttf?7f30d') format('ttf');
+ url('../data/fontrepo/fonts/Junicode/Junicode-Italic.woff?c458b') format('woff');
}
.font-eb826b {
@@ -417,8 +361,7 @@
font-family: 'KhmerOS';
src:
url('../data/fontrepo/fonts/KhmerOS/KhmerOS.woff2?34973') format('woff2'),
- url('../data/fontrepo/fonts/KhmerOS/KhmerOS.woff?2ef9e') format('woff'),
- url('../data/fontrepo/fonts/KhmerOS/KhmerOS.ttf?d2771') format('ttf');
+ url('../data/fontrepo/fonts/KhmerOS/KhmerOS.woff?2ef9e') format('woff');
}
.font-94e99d {
@@ -429,8 +372,7 @@
font-family: 'KhmerOSbattambang';
src:
url('../data/fontrepo/fonts/KhmerOSbattambang/KhmerOSbattambang.woff2?da936') format('woff2'),
- url('../data/fontrepo/fonts/KhmerOSbattambang/KhmerOSbattambang.woff?69379') format('woff'),
- url('../data/fontrepo/fonts/KhmerOSbattambang/KhmerOSbattambang.ttf?ae981') format('ttf');
+ url('../data/fontrepo/fonts/KhmerOSbattambang/KhmerOSbattambang.woff?69379') format('woff');
}
.font-806590 {
@@ -441,8 +383,7 @@
font-family: 'Lateef';
src:
url('../data/fontrepo/fonts/Lateef/LateefRegOT.woff2?3ce56') format('woff2'),
- url('../data/fontrepo/fonts/Lateef/LateefRegOT.woff?05c72') format('woff'),
- url('../data/fontrepo/fonts/Lateef/LateefRegOT.ttf?09400') format('ttf');
+ url('../data/fontrepo/fonts/Lateef/LateefRegOT.woff?05c72') format('woff');
}
.font-7f3659 {
@@ -453,8 +394,7 @@
font-family: 'Linux Libertine';
src:
url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_Rah.woff2?4d59a') format('woff2'),
- url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_Rah.woff?c0828') format('woff'),
- url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_Rah.ttf?d772b') format('ttf');
+ url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_Rah.woff?c0828') format('woff');
}
.font-57a08d {
@@ -465,8 +405,7 @@
font-family: 'Linux Libertine Bold';
src:
url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RBah.woff2?fbcf2') format('woff2'),
- url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RBah.woff?50e30') format('woff'),
- url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RBah.ttf?11d4f') format('ttf');
+ url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RBah.woff?50e30') format('woff');
}
.font-0a1264 {
@@ -477,8 +416,7 @@
font-family: 'Linux Libertine Bold Italic';
src:
url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RBIah.woff2?e02db') format('woff2'),
- url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RBIah.woff?8a853') format('woff'),
- url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RBIah.ttf?54922') format('ttf');
+ url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RBIah.woff?8a853') format('woff');
}
.font-5bdb69 {
@@ -489,8 +427,7 @@
font-family: 'Linux Libertine Italic';
src:
url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RIah.woff2?4e887') format('woff2'),
- url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RIah.woff?1c058') format('woff'),
- url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RIah.ttf?70eb1') format('ttf');
+ url('../data/fontrepo/fonts/LinuxLibertine/LinLibertine_RIah.woff?1c058') format('woff');
}
.font-8f3adc {
@@ -498,191 +435,43 @@
}
@font-face {
- font-family: 'Lohit Assamese';
- src:
- url('../data/fontrepo/fonts/LohitAssamese/Lohit-Assamese.woff2?4c37a') format('woff2'),
- url('../data/fontrepo/fonts/LohitAssamese/Lohit-Assamese.woff?6a45f') format('woff'),
- url('../data/fontrepo/fonts/LohitAssamese/Lohit-Assamese.ttf?4f17c') format('ttf');
-}
-
-.font-23cda9 {
- font-family: 'Lohit Assamese';
-}
-
-@font-face {
- font-family: 'Lohit Bengali';
- src:
- url('../data/fontrepo/fonts/LohitBengali/Lohit-Bengali.woff2?1faf1') format('woff2'),
- url('../data/fontrepo/fonts/LohitBengali/Lohit-Bengali.woff?81e9c') format('woff'),
- url('../data/fontrepo/fonts/LohitBengali/Lohit-Bengali.ttf?e9d81') format('ttf');
-}
-
-.font-82db02 {
- font-family: 'Lohit Bengali';
-}
-
-@font-face {
- font-family: 'Lohit Devanagari';
- src:
- url('../data/fontrepo/fonts/LohitDevanagari/Lohit-Devanagari.woff2?9b0dd') format('woff2'),
- url('../data/fontrepo/fonts/LohitDevanagari/Lohit-Devanagari.woff?79da4') format('woff'),
- url('../data/fontrepo/fonts/LohitDevanagari/Lohit-Devanagari.ttf?88cb2') format('ttf');
-}
-
-.font-c51799 {
- font-family: 'Lohit Devanagari';
-}
-
-@font-face {
- font-family: 'Lohit Gujarati';
- src:
- url('../data/fontrepo/fonts/LohitGujarati/Lohit-Gujarati.woff2?0607e') format('woff2'),
- url('../data/fontrepo/fonts/LohitGujarati/Lohit-Gujarati.woff?8280a') format('woff'),
- url('../data/fontrepo/fonts/LohitGujarati/Lohit-Gujarati.ttf?b588d') format('ttf');
-}
-
-.font-8ca02e {
- font-family: 'Lohit Gujarati';
-}
-
-@font-face {
- font-family: 'Lohit Kannada';
- src:
- url('../data/fontrepo/fonts/LohitKannada/Lohit-Kannada.woff2?9f9f6') format('woff2'),
- url('../data/fontrepo/fonts/LohitKannada/Lohit-Kannada.woff?28cd1') format('woff'),
- url('../data/fontrepo/fonts/LohitKannada/Lohit-Kannada.ttf?f15a8') format('ttf');
-}
-
-.font-e184c4 {
- font-family: 'Lohit Kannada';
-}
-
-@font-face {
- font-family: 'Lohit Marathi';
- src:
- url('../data/fontrepo/fonts/LohitMarathi/Lohit-Marathi.woff2?ca64f') format('woff2'),
- url('../data/fontrepo/fonts/LohitMarathi/Lohit-Marathi.woff?c5933') format('woff'),
- url('../data/fontrepo/fonts/LohitMarathi/Lohit-Marathi.ttf?079e3') format('ttf');
-}
-
-.font-8f4bc1 {
- font-family: 'Lohit Marathi';
-}
-
-@font-face {
- font-family: 'Lohit Nepali';
- src:
- url('../data/fontrepo/fonts/LohitNepali/Lohit-Nepali.woff2?8bb98') format('woff2'),
- url('../data/fontrepo/fonts/LohitNepali/Lohit-Nepali.woff?2279b') format('woff'),
- url('../data/fontrepo/fonts/LohitNepali/Lohit-Nepali.ttf?2b9e9') format('ttf');
-}
-
-.font-7c29ed {
- font-family: 'Lohit Nepali';
-}
-
-@font-face {
- font-family: 'Lohit Odia';
- src:
- url('../data/fontrepo/fonts/LohitOdia/Lohit-Odia.woff2?e73ea') format('woff2'),
- url('../data/fontrepo/fonts/LohitOdia/Lohit-Odia.woff?48933') format('woff'),
- url('../data/fontrepo/fonts/LohitOdia/Lohit-Odia.ttf?c89cc') format('ttf');
-}
-
-.font-36b991 {
- font-family: 'Lohit Odia';
-}
-
-@font-face {
- font-family: 'Lohit Punjabi';
- src:
- url('../data/fontrepo/fonts/LohitPunjabi/Lohit-Punjabi.woff2?dfae7') format('woff2'),
- url('../data/fontrepo/fonts/LohitPunjabi/Lohit-Punjabi.woff?35236') format('woff'),
- url('../data/fontrepo/fonts/LohitPunjabi/Lohit-Punjabi.ttf?39e00') format('ttf');
-}
-
-.font-bcdcff {
- font-family: 'Lohit Punjabi';
-}
-
-@font-face {
- font-family: 'Lohit Tamil';
- src:
- url('../data/fontrepo/fonts/LohitTamil/Lohit-Tamil.woff2?1c60e') format('woff2'),
- url('../data/fontrepo/fonts/LohitTamil/Lohit-Tamil.woff?0e291') format('woff'),
- url('../data/fontrepo/fonts/LohitTamil/Lohit-Tamil.ttf?005ab') format('ttf');
-}
-
-.font-c6a428 {
- font-family: 'Lohit Tamil';
-}
-
-@font-face {
- font-family: 'Lohit Tamil Classical';
- src:
- url('../data/fontrepo/fonts/LohitTamilClassical/Lohit-Tamil-Classical.woff2?cc6bb') format('woff2'),
- url('../data/fontrepo/fonts/LohitTamilClassical/Lohit-Tamil-Classical.woff?907ac') format('woff'),
- url('../data/fontrepo/fonts/LohitTamilClassical/Lohit-Tamil-Classical.ttf?6a560') format('ttf');
-}
-
-.font-b38d1e {
- font-family: 'Lohit Tamil Classical';
-}
-
-@font-face {
- font-family: 'Lohit Telugu';
- src:
- url('../data/fontrepo/fonts/LohitTelugu/Lohit-Telugu.woff2?1b0f5') format('woff2'),
- url('../data/fontrepo/fonts/LohitTelugu/Lohit-Telugu.woff?db2d9') format('woff'),
- url('../data/fontrepo/fonts/LohitTelugu/Lohit-Telugu.ttf?e6783') format('ttf');
-}
-
-.font-7dba68 {
- font-family: 'Lohit Telugu';
-}
-
-@font-face {
- font-family: 'Madan';
+ font-family: 'Menaion';
src:
- url('../data/fontrepo/fonts/madan/madan.woff2?81dd1') format('woff2'),
- url('../data/fontrepo/fonts/madan/madan.woff?cee7d') format('woff'),
- url('../data/fontrepo/fonts/madan/madan.ttf?a9297') format('ttf');
+ url('../data/fontrepo/fonts/Menaion/MenaionUnicode.woff2?da37b') format('woff2'),
+ url('../data/fontrepo/fonts/Menaion/MenaionUnicode.woff?50cc6') format('woff');
}
-.font-611a0a {
- font-family: 'Madan';
+.font-e9f3f4 {
+ font-family: 'Menaion';
}
@font-face {
- font-family: 'Meera';
+ font-family: 'Miriam CLM';
src:
- url('../data/fontrepo/fonts/Meera/Meera.woff2?b597d') format('woff2'),
- url('../data/fontrepo/fonts/Meera/Meera.woff?9e162') format('woff'),
- url('../data/fontrepo/fonts/Meera/Meera.ttf?8895f') format('ttf');
+ url('../data/fontrepo/fonts/MiriamCLM/MiriamCLM-Book.woff2?f3942') format('woff2'),
+ url('../data/fontrepo/fonts/MiriamCLM/MiriamCLM-Book.woff?28216') format('woff');
}
-.font-1d9444 {
- font-family: 'Meera';
+.font-c8e324 {
+ font-family: 'Miriam CLM';
}
@font-face {
- font-family: 'Miriam CLM';
+ font-family: 'Monomakh';
src:
- url('../data/fontrepo/fonts/MiriamCLM/MiriamCLM-Book.woff2?f3942') format('woff2'),
- url('../data/fontrepo/fonts/MiriamCLM/MiriamCLM-Book.woff?28216') format('woff'),
- url('../data/fontrepo/fonts/MiriamCLM/MiriamCLM-Book.ttf?a070f') format('ttf');
+ url('../data/fontrepo/fonts/Monomakh/MonomakhUnicode.woff2?ee286') format('woff2'),
+ url('../data/fontrepo/fonts/Monomakh/MonomakhUnicode.woff?0a8b3') format('woff');
}
-.font-c8e324 {
- font-family: 'Miriam CLM';
+.font-5dbb3f {
+ font-family: 'Monomakh';
}
@font-face {
font-family: 'Myanmar3';
src:
url('../data/fontrepo/fonts/Myanmar3/Myanmar3.woff2?2b586') format('woff2'),
- url('../data/fontrepo/fonts/Myanmar3/Myanmar3.woff?60817') format('woff'),
- url('../data/fontrepo/fonts/Myanmar3/Myanmar3.ttf?10d5e') format('ttf');
+ url('../data/fontrepo/fonts/Myanmar3/Myanmar3.woff?60817') format('woff');
}
.font-c9ee06 {
@@ -693,8 +482,7 @@
font-family: 'NafeesWeb';
src:
url('../data/fontrepo/fonts/NafeesWeb/NafeesWeb.woff2?5f501') format('woff2'),
- url('../data/fontrepo/fonts/NafeesWeb/NafeesWeb.woff?809c8') format('woff'),
- url('../data/fontrepo/fonts/NafeesWeb/NafeesWeb.ttf?fc08b') format('ttf');
+ url('../data/fontrepo/fonts/NafeesWeb/NafeesWeb.woff?809c8') format('woff');
}
.font-fd927a {
@@ -705,8 +493,7 @@
font-family: 'Nazli';
src:
url('../data/fontrepo/fonts/Nazli/Nazli.woff2?d54a3') format('woff2'),
- url('../data/fontrepo/fonts/Nazli/Nazli.woff?6eb79') format('woff'),
- url('../data/fontrepo/fonts/Nazli/Nazli.ttf?0d706') format('ttf');
+ url('../data/fontrepo/fonts/Nazli/Nazli.woff?6eb79') format('woff');
}
.font-fe6e18 {
@@ -717,8 +504,7 @@
font-family: 'Nazli Bold';
src:
url('../data/fontrepo/fonts/Nazli/Nazli-bold.woff2?8d27e') format('woff2'),
- url('../data/fontrepo/fonts/Nazli/Nazli-bold.woff?ae0c3') format('woff'),
- url('../data/fontrepo/fonts/Nazli/Nazli-bold.ttf?a0084') format('ttf');
+ url('../data/fontrepo/fonts/Nazli/Nazli-bold.woff?ae0c3') format('woff');
}
.font-a13e46 {
@@ -728,9 +514,8 @@
@font-face {
font-family: 'Nokora Bold';
src:
- url('../data/fontrepo/fonts/Nokora/Nokora-Regular.woff2?66157') format('woff2'),
- url('../data/fontrepo/fonts/Nokora/Nokora-Regular.woff?36345') format('woff'),
- url('../data/fontrepo/fonts/Nokora/Nokora-Regular.ttf?88c35') format('ttf');
+ url('../data/fontrepo/fonts/Nokora/Nokora-Bold.woff2?b50d8') format('woff2'),
+ url('../data/fontrepo/fonts/Nokora/Nokora-Bold.woff?cf0df') format('woff');
}
.font-0c2421 {
@@ -741,8 +526,7 @@
font-family: 'Nokora Regular';
src:
url('../data/fontrepo/fonts/Nokora/Nokora-Regular.woff2?66157') format('woff2'),
- url('../data/fontrepo/fonts/Nokora/Nokora-Regular.woff?36345') format('woff'),
- url('../data/fontrepo/fonts/Nokora/Nokora-Regular.ttf?88c35') format('ttf');
+ url('../data/fontrepo/fonts/Nokora/Nokora-Regular.woff?36345') format('woff');
}
.font-f89895 {
@@ -750,11 +534,21 @@
}
@font-face {
+ font-family: 'NotoSansSundanese Regular';
+ src:
+ url('../data/fontrepo/fonts/NotoSansSundanese/NotoSansSundanese-Regular.woff2?97973') format('woff2'),
+ url('../data/fontrepo/fonts/NotoSansSundanese/NotoSansSundanese-Regular.woff?a8907') format('woff');
+}
+
+.font-d33f6a {
+ font-family: 'NotoSansSundanese Regular';
+}
+
+@font-face {
font-family: 'Nuosu SIL';
src:
url('../data/fontrepo/fonts/NuosuSIL/NuosuSIL.woff2?223bb') format('woff2'),
- url('../data/fontrepo/fonts/NuosuSIL/NuosuSIL.woff?89513') format('woff'),
- url('../data/fontrepo/fonts/NuosuSIL/NuosuSIL.ttf?8f309') format('ttf');
+ url('../data/fontrepo/fonts/NuosuSIL/NuosuSIL.woff?89513') format('woff');
}
.font-78f090 {
@@ -765,8 +559,7 @@
font-family: 'OpenDyslexic';
src:
url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Regular.woff2?104a3') format('woff2'),
- url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Regular.woff?7a21f') format('woff'),
- url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Regular.ttf?3f8ca') format('ttf');
+ url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Regular.woff?7a21f') format('woff');
}
.font-5d2967 {
@@ -777,8 +570,7 @@
font-family: 'OpenDyslexic Bold';
src:
url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Bold.woff2?42307') format('woff2'),
- url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Bold.woff?75b90') format('woff'),
- url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Bold.ttf?63ff4') format('ttf');
+ url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Bold.woff?75b90') format('woff');
}
.font-ba911f {
@@ -789,8 +581,7 @@
font-family: 'OpenDyslexic BoldItalic';
src:
url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-BoldItalic.woff2?12f7e') format('woff2'),
- url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-BoldItalic.woff?570d3') format('woff'),
- url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-BoldItalic.ttf?d9b37') format('ttf');
+ url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-BoldItalic.woff?570d3') format('woff');
}
.font-8468d9 {
@@ -801,8 +592,7 @@
font-family: 'OpenDyslexic Italic';
src:
url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Italic.woff2?14d96') format('woff2'),
- url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Italic.woff?9fa06') format('woff'),
- url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Italic.ttf?9e181') format('ttf');
+ url('../data/fontrepo/fonts/OpenDyslexic/OpenDyslexic-Italic.woff?9fa06') format('woff');
}
.font-4aa325 {
@@ -813,8 +603,7 @@
font-family: 'OskiEast';
src:
url('../data/fontrepo/fonts/OskiEast/oskie.woff2?a87bf') format('woff2'),
- url('../data/fontrepo/fonts/OskiEast/oskie.woff?10d59') format('woff'),
- url('../data/fontrepo/fonts/OskiEast/oskie.ttf?43616') format('ttf');
+ url('../data/fontrepo/fonts/OskiEast/oskie.woff?10d59') format('woff');
}
.font-c82063 {
@@ -825,8 +614,7 @@
font-family: 'OskiEast Bold';
src:
url('../data/fontrepo/fonts/OskiEast/oskiebold.woff2?30d18') format('woff2'),
- url('../data/fontrepo/fonts/OskiEast/oskiebold.woff?d6ae5') format('woff'),
- url('../data/fontrepo/fonts/OskiEast/oskiebold.ttf?5e29e') format('ttf');
+ url('../data/fontrepo/fonts/OskiEast/oskiebold.woff?d6ae5') format('woff');
}
.font-9cc103 {
@@ -837,8 +625,7 @@
font-family: 'OskiEast Bold Italic';
src:
url('../data/fontrepo/fonts/OskiEast/oskiebolditalic.woff2?ae266') format('woff2'),
- url('../data/fontrepo/fonts/OskiEast/oskiebolditalic.woff?fcee2') format('woff'),
- url('../data/fontrepo/fonts/OskiEast/oskiebolditalic.ttf?75e2c') format('ttf');
+ url('../data/fontrepo/fonts/OskiEast/oskiebolditalic.woff?fcee2') format('woff');
}
.font-2ba90f {
@@ -849,8 +636,7 @@
font-family: 'OskiEast Italic';
src:
url('../data/fontrepo/fonts/OskiEast/oskieitalic.woff2?2745f') format('woff2'),
- url('../data/fontrepo/fonts/OskiEast/oskieitalic.woff?ecb14') format('woff'),
- url('../data/fontrepo/fonts/OskiEast/oskieitalic.ttf?a6291') format('ttf');
+ url('../data/fontrepo/fonts/OskiEast/oskieitalic.woff?ecb14') format('woff');
}
.font-70452b {
@@ -860,9 +646,8 @@
@font-face {
font-family: 'Padauk';
src:
- url('../data/fontrepo/fonts/Padauk/Padauk-Regular.woff2?97419') format('woff2'),
- url('../data/fontrepo/fonts/Padauk/Padauk-Regular.woff?544be') format('woff'),
- url('../data/fontrepo/fonts/Padauk/Padauk-Regular.ttf?03503') format('ttf');
+ url('../data/fontrepo/fonts/Padauk/Padauk-Regular.woff2?a9b3f') format('woff2'),
+ url('../data/fontrepo/fonts/Padauk/Padauk-Regular.woff?e67df') format('woff');
}
.font-9bc63b {
@@ -873,8 +658,7 @@
font-family: 'Pagul';
src:
url('../data/fontrepo/fonts/Pagul/Pagul.woff2?2d88b') format('woff2'),
- url('../data/fontrepo/fonts/Pagul/Pagul.woff?4d3bf') format('woff'),
- url('../data/fontrepo/fonts/Pagul/Pagul.ttf?166e1') format('ttf');
+ url('../data/fontrepo/fonts/Pagul/Pagul.woff?4d3bf') format('woff');
}
.font-a07c57 {
@@ -885,8 +669,7 @@
font-family: 'Pangururan';
src:
url('../data/fontrepo/fonts/Pangururan/Pangururan.woff2?5fecd') format('woff2'),
- url('../data/fontrepo/fonts/Pangururan/Pangururan.woff?b079d') format('woff'),
- url('../data/fontrepo/fonts/Pangururan/Pangururan.ttf?6c158') format('ttf');
+ url('../data/fontrepo/fonts/Pangururan/Pangururan.woff?b079d') format('woff');
}
.font-f5f532 {
@@ -897,8 +680,7 @@
font-family: 'Phetsarath';
src:
url('../data/fontrepo/fonts/Phetsarath/Phetsarath-Regular.woff2?b9d92') format('woff2'),
- url('../data/fontrepo/fonts/Phetsarath/Phetsarath-Regular.woff?dee5c') format('woff'),
- url('../data/fontrepo/fonts/Phetsarath/Phetsarath-Regular.ttf?2a838') format('ttf');
+ url('../data/fontrepo/fonts/Phetsarath/Phetsarath-Regular.woff?dee5c') format('woff');
}
.font-07f76a {
@@ -909,8 +691,7 @@
font-family: 'Phetsarath-Bold';
src:
url('../data/fontrepo/fonts/Phetsarath/Phetsarath-Bold.woff2?2d5a1') format('woff2'),
- url('../data/fontrepo/fonts/Phetsarath/Phetsarath-Bold.woff?8c43d') format('woff'),
- url('../data/fontrepo/fonts/Phetsarath/Phetsarath-Bold.ttf?a21f7') format('ttf');
+ url('../data/fontrepo/fonts/Phetsarath/Phetsarath-Bold.woff?8c43d') format('woff');
}
.font-33d665 {
@@ -918,35 +699,32 @@
}
@font-face {
- font-family: 'RailwaySans';
+ font-family: 'Ponomar';
src:
- url('../data/fontrepo/fonts/RailwaySans/RailwaySans.woff2?a6c17') format('woff2'),
- url('../data/fontrepo/fonts/RailwaySans/RailwaySans.woff?fda9a') format('woff'),
- url('../data/fontrepo/fonts/RailwaySans/RailwaySans.ttf?58963') format('ttf');
+ url('../data/fontrepo/fonts/Ponomar/PonomarUnicode.woff2?ea5c5') format('woff2'),
+ url('../data/fontrepo/fonts/Ponomar/PonomarUnicode.woff?05ed0') format('woff');
}
-.font-8b9ec5 {
- font-family: 'RailwaySans';
+.font-0f6621 {
+ font-family: 'Ponomar';
}
@font-face {
- font-family: 'Saab';
+ font-family: 'RailwaySans';
src:
- url('../data/fontrepo/fonts/Saab/Saab.woff2?633bb') format('woff2'),
- url('../data/fontrepo/fonts/Saab/Saab.woff?5c0ec') format('woff'),
- url('../data/fontrepo/fonts/Saab/Saab.ttf?1c75f') format('ttf');
+ url('../data/fontrepo/fonts/RailwaySans/RailwaySans.woff2?a6c17') format('woff2'),
+ url('../data/fontrepo/fonts/RailwaySans/RailwaySans.woff?fda9a') format('woff');
}
-.font-486e96 {
- font-family: 'Saab';
+.font-8b9ec5 {
+ font-family: 'RailwaySans';
}
@font-face {
font-family: 'Saweri';
src:
url('../data/fontrepo/fonts/saweri/saweri.woff2?fe482') format('woff2'),
- url('../data/fontrepo/fonts/saweri/saweri.woff?fe688') format('woff'),
- url('../data/fontrepo/fonts/saweri/saweri.ttf?f6926') format('ttf');
+ url('../data/fontrepo/fonts/saweri/saweri.woff?fe688') format('woff');
}
.font-1b4e52 {
@@ -957,8 +735,7 @@
font-family: 'Scheherazade';
src:
url('../data/fontrepo/fonts/Scheherazade/Scheherazade-R.woff2?b340b') format('woff2'),
- url('../data/fontrepo/fonts/Scheherazade/Scheherazade-R.woff?286b2') format('woff'),
- url('../data/fontrepo/fonts/Scheherazade/Scheherazade-R.ttf?8d8ce') format('ttf');
+ url('../data/fontrepo/fonts/Scheherazade/Scheherazade-R.woff?286b2') format('woff');
}
.font-7b0218 {
@@ -969,8 +746,7 @@
font-family: 'SertoUrhoy';
src:
url('../data/fontrepo/fonts/SertoUrhoy/SyrCOMUrhoy.woff2?845a8') format('woff2'),
- url('../data/fontrepo/fonts/SertoUrhoy/SyrCOMUrhoy.woff?82242') format('woff'),
- url('../data/fontrepo/fonts/SertoUrhoy/SyrCOMUrhoy.ttf?e5196') format('ttf');
+ url('../data/fontrepo/fonts/SertoUrhoy/SyrCOMUrhoy.woff?82242') format('woff');
}
.font-5e3247 {
@@ -981,8 +757,7 @@
font-family: 'Shapour';
src:
url('../data/fontrepo/fonts/Shapour/Shapour.woff2?977a2') format('woff2'),
- url('../data/fontrepo/fonts/Shapour/Shapour.woff?ad380') format('woff'),
- url('../data/fontrepo/fonts/Shapour/Shapour.ttf?1cfce') format('ttf');
+ url('../data/fontrepo/fonts/Shapour/Shapour.woff?ad380') format('woff');
}
.font-dd3007 {
@@ -993,8 +768,7 @@
font-family: 'Siyam Rupali';
src:
url('../data/fontrepo/fonts/SiyamRupali/SiyamRupali.woff2?035b8') format('woff2'),
- url('../data/fontrepo/fonts/SiyamRupali/SiyamRupali.woff?5d2db') format('woff'),
- url('../data/fontrepo/fonts/SiyamRupali/SiyamRupali.ttf?988f3') format('ttf');
+ url('../data/fontrepo/fonts/SiyamRupali/SiyamRupali.woff?5d2db') format('woff');
}
.font-ff275f {
@@ -1005,8 +779,7 @@
font-family: 'Skeirs II';
src:
url('../data/fontrepo/fonts/Skeirs/Skeirs-II.woff2?7d27b') format('woff2'),
- url('../data/fontrepo/fonts/Skeirs/Skeirs-II.woff?a5fc3') format('woff'),
- url('../data/fontrepo/fonts/Skeirs/Skeirs-II.ttf?f2a28') format('ttf');
+ url('../data/fontrepo/fonts/Skeirs/Skeirs-II.woff?a5fc3') format('woff');
}
.font-1e1291 {
@@ -1017,8 +790,7 @@
font-family: 'Suwannaphum';
src:
url('../data/fontrepo/fonts/Suwannaphum/Suwannaphum.woff2?d3394') format('woff2'),
- url('../data/fontrepo/fonts/Suwannaphum/Suwannaphum.woff?d5f25') format('woff'),
- url('../data/fontrepo/fonts/Suwannaphum/Suwannaphum.ttf?4e62d') format('ttf');
+ url('../data/fontrepo/fonts/Suwannaphum/Suwannaphum.woff?d5f25') format('woff');
}
.font-ace4cd {
@@ -1029,8 +801,7 @@
font-family: 'Taamey Frank CLM';
src:
url('../data/fontrepo/fonts/TaameyFrankCLM/TaameyFrankCLM.woff2?23293') format('woff2'),
- url('../data/fontrepo/fonts/TaameyFrankCLM/TaameyFrankCLM.woff?73757') format('woff'),
- url('../data/fontrepo/fonts/TaameyFrankCLM/TaameyFrankCLM.ttf?de274') format('ttf');
+ url('../data/fontrepo/fonts/TaameyFrankCLM/TaameyFrankCLM.woff?73757') format('woff');
}
.font-aa67ea {
@@ -1041,8 +812,7 @@
font-family: 'TharLon';
src:
url('../data/fontrepo/fonts/TharLon/TharLon.woff2?9012f') format('woff2'),
- url('../data/fontrepo/fonts/TharLon/TharLon.woff?0df3e') format('woff'),
- url('../data/fontrepo/fonts/TharLon/TharLon.ttf?91312') format('ttf');
+ url('../data/fontrepo/fonts/TharLon/TharLon.woff?0df3e') format('woff');
}
.font-303234 {
@@ -1050,35 +820,10 @@
}
@font-face {
- font-family: 'Thendral';
- src:
- url('../data/fontrepo/fonts/Thendral/ThendralUni.woff2?0af7d') format('woff2'),
- url('../data/fontrepo/fonts/Thendral/ThendralUni.woff?788be') format('woff'),
- url('../data/fontrepo/fonts/Thendral/ThendralUni.ttf?c4f2d') format('ttf');
-}
-
-.font-110a31 {
- font-family: 'Thendral';
-}
-
-@font-face {
- font-family: 'Thenee';
- src:
- url('../data/fontrepo/fonts/Thenee/TheneeUni.woff2?c24ef') format('woff2'),
- url('../data/fontrepo/fonts/Thenee/TheneeUni.woff?a32ac') format('woff'),
- url('../data/fontrepo/fonts/Thenee/TheneeUni.ttf?f89c7') format('ttf');
-}
-
-.font-af1c14 {
- font-family: 'Thenee';
-}
-
-@font-face {
font-family: 'Tuladha Jejeg';
src:
url('../data/fontrepo/fonts/TuladhaJejeg/TuladhaJejeg_gr.woff2?8d13d') format('woff2'),
- url('../data/fontrepo/fonts/TuladhaJejeg/TuladhaJejeg_gr.woff?7ebe2') format('woff'),
- url('../data/fontrepo/fonts/TuladhaJejeg/TuladhaJejeg_gr.ttf?210ce') format('ttf');
+ url('../data/fontrepo/fonts/TuladhaJejeg/TuladhaJejeg_gr.woff?7ebe2') format('woff');
}
.font-793256 {
@@ -1089,8 +834,7 @@
font-family: 'UnifrakturMaguntia';
src:
url('../data/fontrepo/fonts/UnifrakturMaguntia/UnifrakturMaguntia.woff2?23272') format('woff2'),
- url('../data/fontrepo/fonts/UnifrakturMaguntia/UnifrakturMaguntia.woff?6ad8f') format('woff'),
- url('../data/fontrepo/fonts/UnifrakturMaguntia/UnifrakturMaguntia.ttf?1cf8f') format('ttf');
+ url('../data/fontrepo/fonts/UnifrakturMaguntia/UnifrakturMaguntia.woff?6ad8f') format('woff');
}
.font-c330c4 {
@@ -1098,23 +842,10 @@
}
@font-face {
- font-family: 'Utkal';
- src:
- url('../data/fontrepo/fonts/utkal/utkal.woff2?d550c') format('woff2'),
- url('../data/fontrepo/fonts/utkal/utkal.woff?58d5e') format('woff'),
- url('../data/fontrepo/fonts/utkal/utkal.ttf?0c644') format('ttf');
-}
-
-.font-aef4f3 {
- font-family: 'Utkal';
-}
-
-@font-face {
font-family: 'lklug';
src:
url('../data/fontrepo/fonts/lklug/lklug.woff2?7d2c4') format('woff2'),
- url('../data/fontrepo/fonts/lklug/lklug.woff?57de7') format('woff'),
- url('../data/fontrepo/fonts/lklug/lklug.ttf?96b2f') format('ttf');
+ url('../data/fontrepo/fonts/lklug/lklug.woff?57de7') format('woff');
}
.font-0a2233 {
@@ -1137,7 +868,7 @@ Indien die rekening *nie* aan u behoort nie, volg hierdie skakel om die bevestig
$5
-Die bevestigingskode sal om $4 verval.</div><div class="font-8f4bc1 sax">[ahr/Lohit Marathi] भाषा: $1 भाषा: भाषा: भाषा</div><div class="font-db0be7 sax">[akk/Akkadian] 𒀝𒂵𒌈</div><div class="font-7483df sax">[am/AbyssinicaSIL] MediaWiki የስፓም ማፅዳት በዚሁ ዊኪ መግቢያ ቃል መቀይር አልተቻለም የአባልነት መዝገብ (user log) ይዞታውን ሁሉ (ከነውይይት ገጾች) ለመፈለግ ይህን ገጽ ሰርዝ አዲስ ገጽ የፋይሎች መዝገብ የ1 አባል ማዕረግ ለማስተዳደር የአባል ገጾች የሚቀጥለው ገጽ → የውስጥ ስህተት: የእርስዎን ፋይል ለመላክ ሲሞከር ችግር ተፈጠረ። በመጣጥፎች ይዘት ለመፈልግ... ያው ገጽ አይኖርም ፌብሩ. የዊኪ-ሥርአተ ቋንቋን ቸል ለማድረግ ክፍሉን «$1» ለማስተካከል ፊርማ የታገዱት ተጠቃሚዎች ፎቶው የተነሣበት ከተማ ለMedia ፋይል ስም ፍለጋ፦ የፋይሉ ስም የተፈቀደ አይደለም። ተዛማጅ ስራዎች የየክፍለ ነገሩ ትርጉም ሥርዓቱ እንዲህ ነው፦
+Die bevestigingskode sal om $4 verval.</div><div class="font-db0be7 sax">[akk/Akkadian] 𒀝𒂵𒌈</div><div class="font-7483df sax">[am/AbyssinicaSIL] MediaWiki የስፓም ማፅዳት በዚሁ ዊኪ መግቢያ ቃል መቀይር አልተቻለም የአባልነት መዝገብ (user log) ይዞታውን ሁሉ (ከነውይይት ገጾች) ለመፈለግ ይህን ገጽ ሰርዝ አዲስ ገጽ የፋይሎች መዝገብ የ1 አባል ማዕረግ ለማስተዳደር የአባል ገጾች የሚቀጥለው ገጽ → የውስጥ ስህተት: የእርስዎን ፋይል ለመላክ ሲሞከር ችግር ተፈጠረ። በመጣጥፎች ይዘት ለመፈልግ... ያው ገጽ አይኖርም ፌብሩ. የዊኪ-ሥርአተ ቋንቋን ቸል ለማድረግ ክፍሉን «$1» ለማስተካከል ፊርማ የታገዱት ተጠቃሚዎች ፎቶው የተነሣበት ከተማ ለMedia ፋይል ስም ፍለጋ፦ የፋይሉ ስም የተፈቀደ አይደለም። ተዛማጅ ስራዎች የየክፍለ ነገሩ ትርጉም ሥርዓቱ እንዲህ ነው፦
በ* የሚጀምሩ መስመሮች ብቻ ይቆጠራል። በመስመሩ መጀመርያው መያያዣ የመጥፎ ስዕል መያያዣ መሆን አለበት። ከዚያ ቀጥሎ በዚያው በመስመር መያያዣ ቢገኝ ግን ስዕሉ እንደ ተፈቀደበት ገጽ ይቆጠራል። የኢ-ሜል ማረጋገጫ የመላክ ማስጠንቀቂያ ፋይሉ ለመቆጠብ «$1» የሚባል ፋይል አሁን ይኖራል። ምንም መነሻ አድራሻ የለም ገጾች ሁሉ በሙሉ ኢ-ሜል ተልኳል። ያልገቡት የቁ. አድራሻዎች ብቻ የምከታተላቸው ለውጦች የመጨረሻው ዕትም ቀን ኖቬምበር የጉዳዩ ሥፍራ ከቅርብ አስተያየት ቀጥሎ (ተቀጥሏል) ምሥራቅ ኬንትሮስ ምክንያት: ROLLBACK የመጨረሻውን አዛጋጅ ለውጦች በፍጥነት ይገልበጣል። ሌላ ይህ ገጽ ጠፍቷል። የመጥፋቱ ምክንያት ከዚህ በታች ይታያል። ደግሞ ከጠፋ በፊት ያዘጋጁት ተጠቃሚዎች ይዘረዘራሉ። የተደለዙት ዕትሞች ጽሕፈት ለመጋቢዎች ብቻ ሊታይ ይችላል። ዋናውን ገጽ ተመልከት ኅብረተሠባዊ ጉዳይ መነሻ ጥሩ ($1) ቀጥሎ ገጽ ማውጫ ዝርያ በዚህ የሚዘረዘሩ EXIF መረጃ አይነቶች በፋይል ገጽ ላይ በቀጥታ ይታያሉ። ሌሎቹ 'ተጨማሪ መረጃ ይታይ' ካልተጫነ በቀር ይደበቃሉ።</div><div class="font-bcc2a1 sax">[ang/Junicode] Þīn þafungword sceal wesan ungelīc þīnum brūcendes naman. Nīwe þafungword: Manigfeald sēcung ← Ieldre adihtung [URL is tō lang] Warnung: Se tramet þe þū wilt forlēosan hafaþ stǣr mid $1 {{PLURAL:$1|fadunge|fadunga}}: Cyrillisc Adihtunge wiþdǣd: $1 Mīne trametas Inbringan Nān Eall Gerȳman Sēcan Ūtmeldian Hafast þū reccinge ǣr? $1. Wrītan spearcǣrend þissum brūcende ieldeste Cȳþþu Fruman for $1 sēon Þū scealt $1 to adihtenne trametas. Gewilnode floccas Nāht tō sēonne. Bemetan gecorena ednīwunga Scieppan {{PLURAL:$1|āne adihtunge|$1 adihtunga}} eft (fornōm adihtunge sceortnesse) Īwan gehȳdede floccas $1 fadung of MediaWiki is behēfe Sifan Sēcan {{SITENAME}} Solmōnþes Ūtmǣlan Ōðre syndrige trametas Scieppan þisne tramet {{GENDER:$1|brūcend|brūcicge}} Inweard wōh $1 {{PLURAL:$1|bita|bitena}} Hȳdan þurhfōr Scorte trametas Ne cūðe findan ymelan "$1". Wæccgetæl Ǣrendgewrit: Þīn selfmearc mid tīdmearce Þū hæfst $1 ($2). Gehæftes emnet: Īwan þæt rīm behealdendra brūcenda Spearcǣrenda nama (ungenēdedlic)</div><div class="font-a00287 sax">[ar/Amiri] لا يمكن إجراء هذا الفعل على هذه الصفحة. غير متأثر بحدود المعدل تدوير الصورة {{PLURAL:$1||درجة واحدة|درجتان|$1 درجات|$1 درجة}} باتجاه عقارب الساعة صفحات تصنيف «$1» مضمن الأولوية محددة من قبل المستخدم ($1) تحكم أعلى منخفض أكثر الملفات ارتباطا تصحيح GPS التفاضلي محددات التصغير غير صحيحة إنشاء «$1» ميدياويكي برنامج حر، يحق لك توزيعه و/أو تعديله وفقاً لبنود رخصة غنو العمومية كما نشرتها مؤسسة البرمجيات الحرة، الإصدار الثاني أو (وفقا لاختيارك أنت) أي إصدار لاحق.
@@ -1149,17 +880,7 @@ Die bevestigingskode sal om $4 verval.</div><div class="font-8f4bc1 sax">[ahr/Lo
ܒܒܥܘ ܡܢܟ ܕܬܢܣܐ ܙܒܢ ܐܚܪܝܢ. ܡܢܝܢܐ ܕܪ̈ܗܝܐ ܡܠܬܐ ܕܥܠܠܐ ܕܐܥܠܬ ܣܦܝܩܬܐ ܐܝܬܝܗ.
ܒܒܥܘ ܡܢܟ ܕܬܢܣܐ ܙܒܢ ܐܚܪܝܢ. $1 ܐܣܘܪ̈ܐ ܡܢ: ܠܝܬ ܦܐܬܬ̈ܐ ܠܡܥܠܢܘܬܐ. ܛܪ ܠܗܕܐ ܦܐܬܐ [[$1]] ܐܬܫܢܝܬ ܠ [[$2]] ܟܠ ܡܕܡ ܠܝܬܝܟ ܥܠܝܠܐ ܒܛܘܠ ܫܘܪܪܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ {{PLURAL:$1|ܫܘܬܦܢܐ ܚܕܬܐ|ܫܘܬܦܢ̈ܐ ܚܕ̈ܬܐ}} ܚܘܝ ܡܦܠܚܢ̈ܐ ܕܫܪܝܢ ܒ: ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܡܦܐܬ ܬܫܥܝܬܐ ܡܠܬܐ ܕܥܠܠܐ ܚܕܬܐ: ܫܪܪ ܢܘܛܪܐ ܫܡܐ ܕܡܦܠܚܢܐ:</div><div class="font-5e3247 sax">[arc/SertoUrhoy] ܚܪܘܡ ܡܦܠܚܢܐ ܗܢܐ ܫܢܝܬܐ ܕܗܢܐ ܠܦܦܐ ܛܪ ܠܗܕܐ ܦܐܬܐ ܙܠ $1 {{PLURAL:$1|ܒܐܝܛ|ܒܐܝܛ̈ܐ}} ܐܣܘܪ̈ܐ ܐܚܪ̈ܢܐ {{GENDER:$1|ܡܦܠܚܢܐ ܡܫܪܪܐ ܝܬܐܝܬ|ܡܦܠܚܢܬܐ ܡܫܪܪܬܐ ܝܬܐܝܬ}} ܠܝܬܝܟ ܥܠܝܠܐ ܒܨܝ ܒܚܩܠܬ̈ܐ: ܪܟܝܟܐ ܚܒܝܫܬ̈ܐ ܗܘ̈ܝ: '$1' ܡܢܘ {{SITENAME}} ܫܘܡܗܐ ܕܠܦܦܐ "$1" ܛܥܝܡܘܬܐ ܕܐܛܘܡ ܫܘܚܠܦܐ ܗܢܐ ܠܐ ܗܘ ܟܪܝܟܐ ܠܗܫܐ "ܠܐ ܐܝܬܝܟ ܥܠܝܠܐ. ܠܒܟܬܐ ܕܦܐܬܐ ܢܬܟܬܒ ܐܝ ܦܝ (IP) ܕܝܠܟ ܒܬܫܥܝܬܐ ܕܫܘܚܠܦܐ ܕܦܐܬܐ." ܢܩܕܘܬܐ ܐܘܦܩܝܬܐ ܒܪܝ ܚܘܫܒܢ̈ܐ ܕܡܦܠܚܢܐ ܚܕܬܐ ܐܝ ܦܝ (IP) ܐܘ ܫܡܐ ܕܡܦܠܚܢܐ: ܕܠܐ ܢܘܦܐ ܣܪܛܐ $1: ܥܠܬܐ: ܦܚܘܡ ܒܝܢܝ ܦܐܬܬ̈ܐ ܬܫܥܝܬܐ ܫܝܦܬܐ ܚܒܝܫܘܬ ܡܢܝܢܐ ܐܚܪܢܐ ܡܦܐܬ ܨܚܚ̈ܐ ܦܘܕܐ ܒܫܟܚܐ ܕURL: $1 {{PLURAL:$1|$1 ܝܘܡܐ|$1 ܝܘܡܬ̈ܐ}} ܚܪܘܡ ܡܦܠܚܢܐ ܚܘܝ ܣܕܪ̈ܐ ܕܫܪܝܢ ܒ: ܟܠ ܦܐܬܬ̈ܐ ܢܛܪ "[[$1]]" ܚܙܝ ܦܐܬܐ ܕܣܕܪܐ ܚܙܝ ܡܒܘܥܐ ܟܘܢܝܐ ܠܐ ܛܒܐ ܡܠܬܐ ܕܥܠܠܐ ܠܐ ܬܪܝܨܬܐ ܐܥܠܬ.
ܒܒܥܘ ܡܢܟ ܕܬܢܣܐ ܙܒܢ ܐܚܪܝܢ. ܡܢܝܢܐ ܕܪ̈ܗܝܐ ܡܠܬܐ ܕܥܠܠܐ ܕܐܥܠܬ ܣܦܝܩܬܐ ܐܝܬܝܗ.
-ܒܒܥܘ ܡܢܟ ܕܬܢܣܐ ܙܒܢ ܐܚܪܝܢ. $1 ܐܣܘܪ̈ܐ ܡܢ: ܠܝܬ ܦܐܬܬ̈ܐ ܠܡܥܠܢܘܬܐ. ܛܪ ܠܗܕܐ ܦܐܬܐ [[$1]] ܐܬܫܢܝܬ ܠ [[$2]] ܟܠ ܡܕܡ ܠܝܬܝܟ ܥܠܝܠܐ ܒܛܘܠ ܫܘܪܪܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ {{PLURAL:$1|ܫܘܬܦܢܐ ܚܕܬܐ|ܫܘܬܦܢ̈ܐ ܚܕ̈ܬܐ}} ܚܘܝ ܡܦܠܚܢ̈ܐ ܕܫܪܝܢ ܒ: ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܡܦܐܬ ܬܫܥܝܬܐ ܡܠܬܐ ܕܥܠܠܐ ܚܕܬܐ: ܫܪܪ ܢܘܛܪܐ ܫܡܐ ܕܡܦܠܚܢܐ:</div><div class="font-23cda9 sax">[as/Lohit Assamese] শুদ্ধ শিৰোনাম প্ৰদৰ্শন কৰক কিটিপ: টেব্‌ তালিকাত থকা টেবসমূহৰ মাজত বিচৰণ কৰিবলৈ সোঁ আৰু বাঁও কাঁড়চিনৰ কী টিপিব পাৰে। হয়, পৃষ্ঠাটো বিলোপ কৰক এই সদস্যনাম আৰু গুপ্তশব্দৰ ব্যৱহাৰ নিষিদ্ধ কৰা হৈছে । $3: $4 -ত {{PLURAL:$5|এটা লগ ঘটনা|$5 লগ ঘটনাসমূহ}} -ৰ $1 পৰিৱৰ্তন কৰা দৃশ্যমানতা $1 (পৃষ্ঠাটো নাই) বৰ্তমানৰ ম্যাদ উকলা সময়: $3, $2 এই পৃষ্ঠাত নিৰ্বাচিত দুটা সংশোধনৰ মাজত পাৰ্থক্য দেখুৱাওক $1 ফাইলটো সৃষ্টি কৰিব পৰা নগ'ল কিয়নো ইয়াৰ আকাৰ {{PLURAL:$2|এক বাইটতকৈ|$2 বাইটতকৈ}} বেছি। পুনঃনিৰ্দেশ কৰা হৈছে: ৯০° CCW ঘুৰিলে আৰু উলম্ভভাৱে লুটি খালে ব্যৱহাৰ কৰাৰ চৰ্ত্ত প্ৰতি পৃষ্ঠাত $1 টা বিষয়বস্তু দেখুৱাওক উপসৰ্গ ($1 namespace) -ৰ সৈতে সকলো পৃষ্ঠা প্ৰৱেশ বাৰণ কৰা সফল হ'ল স্পাম সা-সঁজুলি আপুনি কৰিব বিচৰা পৰিৱৰ্তনটো এটা এক্সটেনচন হুকৰ দ্বাৰা বাতিল কৰা হৈছে । অবিচল '''সতৰ্কবাণী: এই পৃষ্ঠা বন্ধ ৰখা হৈছে; কেৱল প্ৰশাসকৰৰ মৰ্যদাৰ সদস্যইহে সম্পাদনা কৰিব পাৰিব ।'''
-আপোনাৰ সুবিধাৰ বাবে পৃষ্ঠাৰ সাম্প্ৰতিক ল'গ সংৰক্ষণ তলত দিয়া হ'ল । এই ৱিকি '''[https://www.mediawiki.org/ মিডিয়াৱিকিৰ]''' দ্বাৰা প্ৰচলিত , কপিৰাইট © ২০০১-$1 $2.</div><div class="font-f5f532 sax">[bbc/Pangururan] </div><div class="font-c51799 sax">[bh/Lohit Devanagari] </div><div class="font-c51799 sax">[bho/Lohit Devanagari] बहुत ढेर खर्चीला पार्सर फंक्शन काल वाला पन्ना सभ क्षमा करीं, ई समय सर्वर पर बहुत ज्यादा लोड बढ़ गईल बा।
-ई पन्ना के बहुते प्रयोगकर्ता लोग देखे के कोशिश कर रहल बानी।
-ई पन्ना के फिर से देखे से पहिले कृपया कुछ देर तक इन्तजार करीं।
-
-$1 श्रेणी: हटावल लॉग घटना सब लॉग की इतिहास में जरूर लउकी बाकी उन्हन के सामग्री जनता खातिर पहुँच से बाहर रही। सदस्य लोग जे पछिला {{PLURAL:$1|दिन|$1 दिन}} में कौनों काम कइले बाटे खाता में प्रवेश नइखे पन्ना देखाई जे शुरू होत बा: २ घंटे:2 hours,१ दिन:1 day,३ दिन:3 days,१ हफ्ता:1 week,२ हफ्ते:2 weeks,१ महिना:1 month,३ महिने:3 months,६ महिने:6 months,१ साल:1 year,हमेशा खातिर:infinite प्रबंधक निरस्त श्रेणी चाहत बा रउआँ एह पन्ना के स्रोत देख सकत बानी आ एकर नकल उतार सकत बानी: याद रहे की आप अपनी सदस्य CSS के खाली नमूना भर देखत बानी।
-ई अबहिन ले सहेजल ना गइल बाटे। बुधवार अगर पन्ना मौजूद होखे त ठीक एही नाँव की पन्ना पर जाईं याद रहे की आप ए जावास्क्रिप्ट कोड क खाली नमूना देखत बानी।
-ई अबहिन ले सहेजल ना गइल बा! सभसे ढेर ट्रांसक्लूजन वाला पन्ना ए फाइल में एक्स्ट्रा जानकारी उपलब्ध बा, हो सकत बा कि ई डिजिटल कैमरा या स्कैनर से लेवल गइल होखे। अगर ई वर्तमान फाइल एकरी ओरिजनल फाइल से सुधार के बनल बा त हो सकेला कुछ जानकारी ना लउके।</div><div class="font-5d2967 sax">[bk/OpenDyslexic] </div><div class="font-ff275f sax">[bn/Siyam Rupali] রোলব্যাকের পরে পার্থক্য দেখিও না মেয়াদোত্তীর্ণ সময় অবৈধ। দল যা আপনি পরিবর্তন করতে পারেন আসল নাম (ঐচ্ছিক) এটি যাচাইকৃত রিভিশনের তালিকা। GPS গ্রাহকের দ্রুতি মঙ্গলবার এই পাতার বিষয়বস্তুর মডেল পরিবর্তন করা যাবে না। অ্যাকাউন্ট তৈরি করুন ফাইলের বর্ণনা পাতা এখনো বিদ্যমান নয় প্রথম সম্পাদনার ক্ষেত্রে প্রাকদর্শন দেখানো হোক সাধারণ প্রোগ্রাম পাতার ইতিহাসগুলি একত্র করা হোক আপনার জমাকৃত ফাইলটি অনেক বড়। {{SITENAME}} আপনার মত লোকের দ্বারাই তৈরি। ছাকনী $1 {{PLURAL:$4|ফাইল ধরনটি অনুমোদিত নয়|ফাইল ধরনগুলো অনুমোদিত নয়}}। অনুমোদিত {{PLURAL:$3|ফাইলের ধরন|ফাইলের ধরনগুলো}} হল $2। বিষয়বস্তুর অবস্থান বাতির উৎস অনুমতি ত্রুটিসমূহ ফরম্যাটটি এরকম:
-
-কেবল তালিকা আইটেমগুলি (* দিয়ে শুরু হওয়া লাইনগুলি) গণ্য করা হবে। কোন লাইনের প্রথম সংযোগটিকে অবশ্যই কোন অচল ফাইলের প্রতি সংযোগ হতে হবে।
-একই লাইনের পরবর্তী সমস্ত সংযোগ ব্যতিক্রম হিসেবে গণ্য করা হবে, অর্থাৎ যেসমস্ত পাতায় ফাইলটি ইনলাইন হিসেবে বিদ্যমান। '''এই উইকিতে "[[:$1]]" নামে একটি পাতা রয়েছে''' আদর্শ আলো C সক্রিয় ব্যবহারকারী তালিকা ইমেইল করো অন্য উইকি থেকে পাতা আমদানী করো</div><div class="font-82db02 sax">[bn/Lohit Bengali] রোলব্যাকের পরে পার্থক্য দেখিও না মেয়াদোত্তীর্ণ সময় অবৈধ। দল যা আপনি পরিবর্তন করতে পারেন আসল নাম (ঐচ্ছিক) এটি যাচাইকৃত রিভিশনের তালিকা। GPS গ্রাহকের দ্রুতি মঙ্গলবার এই পাতার বিষয়বস্তুর মডেল পরিবর্তন করা যাবে না। অ্যাকাউন্ট তৈরি করুন ফাইলের বর্ণনা পাতা এখনো বিদ্যমান নয় প্রথম সম্পাদনার ক্ষেত্রে প্রাকদর্শন দেখানো হোক সাধারণ প্রোগ্রাম পাতার ইতিহাসগুলি একত্র করা হোক আপনার জমাকৃত ফাইলটি অনেক বড়। {{SITENAME}} আপনার মত লোকের দ্বারাই তৈরি। ছাকনী $1 {{PLURAL:$4|ফাইল ধরনটি অনুমোদিত নয়|ফাইল ধরনগুলো অনুমোদিত নয়}}। অনুমোদিত {{PLURAL:$3|ফাইলের ধরন|ফাইলের ধরনগুলো}} হল $2। বিষয়বস্তুর অবস্থান বাতির উৎস অনুমতি ত্রুটিসমূহ ফরম্যাটটি এরকম:
+ܒܒܥܘ ܡܢܟ ܕܬܢܣܐ ܙܒܢ ܐܚܪܝܢ. $1 ܐܣܘܪ̈ܐ ܡܢ: ܠܝܬ ܦܐܬܬ̈ܐ ܠܡܥܠܢܘܬܐ. ܛܪ ܠܗܕܐ ܦܐܬܐ [[$1]] ܐܬܫܢܝܬ ܠ [[$2]] ܟܠ ܡܕܡ ܠܝܬܝܟ ܥܠܝܠܐ ܒܛܘܠ ܫܘܪܪܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ {{PLURAL:$1|ܫܘܬܦܢܐ ܚܕܬܐ|ܫܘܬܦܢ̈ܐ ܚܕ̈ܬܐ}} ܚܘܝ ܡܦܠܚܢ̈ܐ ܕܫܪܝܢ ܒ: ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܡܦܐܬ ܬܫܥܝܬܐ ܡܠܬܐ ܕܥܠܠܐ ܚܕܬܐ: ܫܪܪ ܢܘܛܪܐ ܫܡܐ ܕܡܦܠܚܢܐ:</div><div class="font-f5f532 sax">[bbc/Pangururan] </div><div class="font-5d2967 sax">[bk/OpenDyslexic] </div><div class="font-ff275f sax">[bn/Siyam Rupali] রোলব্যাকের পরে পার্থক্য দেখিও না মেয়াদোত্তীর্ণ সময় অবৈধ। দল যা আপনি পরিবর্তন করতে পারেন আসল নাম (ঐচ্ছিক) এটি যাচাইকৃত রিভিশনের তালিকা। GPS গ্রাহকের দ্রুতি মঙ্গলবার এই পাতার বিষয়বস্তুর মডেল পরিবর্তন করা যাবে না। অ্যাকাউন্ট তৈরি করুন ফাইলের বর্ণনা পাতা এখনো বিদ্যমান নয় প্রথম সম্পাদনার ক্ষেত্রে প্রাকদর্শন দেখানো হোক সাধারণ প্রোগ্রাম পাতার ইতিহাসগুলি একত্র করা হোক আপনার জমাকৃত ফাইলটি অনেক বড়। {{SITENAME}} আপনার মত লোকের দ্বারাই তৈরি। ছাকনী $1 {{PLURAL:$4|ফাইল ধরনটি অনুমোদিত নয়|ফাইল ধরনগুলো অনুমোদিত নয়}}। অনুমোদিত {{PLURAL:$3|ফাইলের ধরন|ফাইলের ধরনগুলো}} হল $2। বিষয়বস্তুর অবস্থান বাতির উৎস অনুমতি ত্রুটিসমূহ ফরম্যাটটি এরকম:
কেবল তালিকা আইটেমগুলি (* দিয়ে শুরু হওয়া লাইনগুলি) গণ্য করা হবে। কোন লাইনের প্রথম সংযোগটিকে অবশ্যই কোন অচল ফাইলের প্রতি সংযোগ হতে হবে।
একই লাইনের পরবর্তী সমস্ত সংযোগ ব্যতিক্রম হিসেবে গণ্য করা হবে, অর্থাৎ যেসমস্ত পাতায় ফাইলটি ইনলাইন হিসেবে বিদ্যমান। '''এই উইকিতে "[[:$1]]" নামে একটি পাতা রয়েছে''' আদর্শ আলো C সক্রিয় ব্যবহারকারী তালিকা ইমেইল করো অন্য উইকি থেকে পাতা আমদানী করো</div><div class="font-a57c85 sax">[bo/Jomolhari] $1 རང་འགུལ་འཕྲུལ་ཆས། ཡིག་ཆ་ཡར་འཇུག་ལས་ནང་འདྲེན་བྱེད་པའི་ཤོག་ངོས། "$1" ཤོག་ངོས་འདིར་བསྐྱར་བཅོས་གསར་སྐྲུན་བྱེད་ཐུབ་མ་སོང། ཤོག་ངོས་ཚང་མ་བལྟས་ཟིན་དུ་རྟགས་རྒྱོབ། མཐའ་མ། གནས་སྐབས་ལམ་ཡིག ངོས་མ་ཟིན་པའི་དྲ་འབུ། ཁྱེད་ལ་འཕྲིན་གསར་$1($2)ཡོད། ཤོག་ངོས་འདི་མི་སུབ་རོགས། མེད། ཟླ་བ་བརྒྱད་པ། $1 མཉམ་འཇོག་ཐོར་ལྟ་བ་དང་བསྒྱུར་བཅོས་བྱེད་པ། ངོས་མ་ཟིན་པའི་ནོར་འཁྲུལ། {{SITENAME}}ཡི་སྐོར། མ་བལྟས་ཤོག་ངོས་ཀྱི་ཐོ་ལ་ལྟ་བ། $1 ཁ་ཕྱོགས་བསྐྱར་སྟོན། སྔོན་མ་{{PLURAL:$1|$1}} མིང་མེད་སྤྱོད་མི $1 ལོ་རྒྱུས། འདི་ནི་རྩོམ་སྒྲིག་ཕལ་བ་ཞིག་ཡིན། རྩོམ་སྒྲིག གཤམ་གྱི་{{PLURAL:$1|ཡིག་ཆ་འདི་|$1ཡིག་ཆ་རྣམས་}}ད་གནས་སྡེ་ཚན་འདི་ནང་ཡོད། དཔེ་པང་ཤོག་ངོས་ལ་ལྟ་བ། འཚོལ་འདྲི། $1 བཀོལ་སྤྱོད་མཁན་ལ་ནོར་འཁྲུལ། $1 དགོངས་པ་མ་ཚོམས་རོགས། སྤྱོད་མི་མང་དག་ཞིག་གི་ཤོག་ངོས་འདིར་གཟིགས་ཞིང་འདུག་པས། གནས་སྐབས་རིང་ཞབས་ཞུ་འཕྲུལ་ཆས་ཐེག་བརྒལ་བྱས་འདུག།
@@ -1173,16 +894,6 @@ $1 श्रेणी: हटावल लॉग घटना सब लॉग
* থেপকরানি মনাসিলাতা: $7
তি $1 নাইলেউ [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকর]] মা যে কোন আগর লগে বিষয় এহান্ন য়্যারি পরি দে পারর। বিশেষ মাতিলতাঃ তর ই-মেইল ঠিকানাহান যদি [[Special:Preferences|তর পছন তালিকাত]] বরিয়া নাথার, অতা ইলে তি উইকিপিডিয়াত হের আতাকুরারে ই-মেইল করানি নুৱারবে। তর আইপি ঠিকানাহান ইলতাই $3 বারো থেপকরিসি আইপিগ ইলতাই #$5।
-কৃপা করিয়া যে কোন যোগাযোগর সময়ত এরে আইপি ঠিকানাহানি যেসাদেউ বরিস। পাতাহান থেইকর কোন কারণ দেনা নাইসে আরাক পতাহাত পুসিসি মডেলর জর থা পরসেগা পছন করাতা নেই থাম্বনেইল হংকরানিত লেইলেক অসে: $1 তরতা $2 -ত য়্যাথাং নেই, অহানর {{PLURAL:$1|কারণ|কারণহানি}}:</div><div class="font-82db02 sax">[bpy/Lohit Bengali] আটলান্টিক মহাসাগর ফাইল আপলোড কর আগস্ট বারোইতুকর একাউন্টহান হঙকরানি ইল [[User:$1|$1]]-রে এরে চিঙনাঙর পাতা হঙকরানিত্ত থেত করিয়া থনা ইসে। কারণ: $2। ইরে তরতা একাউন্টহান নেই থাং? $1 পতানি নাউচা... থেপকরানির log শিংলুপ অক্টো শিংহলী পাতাএহান লুকর ফাইলগ খিয়ালে থ '''তর আতাকুরা নাঙহান নাইলেউ আইপি ঠিকানাহানরে থেপকরানি অসে।'''
-
-থেপকরিসেতাই: $1
-এহানর কারণহান অসেতাইঃ: ''$2''
-
-* থেপকরানি অকরিসিতা: $8
-* থেপকরানিহান লমিতইতা: $6
-* থেপকরানি মনাসিলাতা: $7
-
-তি $1 নাইলেউ [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকর]] মা যে কোন আগর লগে বিষয় এহান্ন য়্যারি পরি দে পারর। বিশেষ মাতিলতাঃ তর ই-মেইল ঠিকানাহান যদি [[Special:Preferences|তর পছন তালিকাত]] বরিয়া নাথার, অতা ইলে তি উইকিপিডিয়াত হের আতাকুরারে ই-মেইল করানি নুৱারবে। তর আইপি ঠিকানাহান ইলতাই $3 বারো থেপকরিসি আইপিগ ইলতাই #$5।
কৃপা করিয়া যে কোন যোগাযোগর সময়ত এরে আইপি ঠিকানাহানি যেসাদেউ বরিস। পাতাহান থেইকর কোন কারণ দেনা নাইসে আরাক পতাহাত পুসিসি মডেলর জর থা পরসেগা পছন করাতা নেই থাম্বনেইল হংকরানিত লেইলেক অসে: $1 তরতা $2 -ত য়্যাথাং নেই, অহানর {{PLURAL:$1|কারণ|কারণহানি}}:</div><div class="font-f5f532 sax">[btk/Pangururan] </div><div class="font-1b4e52 sax">[bug/Saweri] Leppa Indoë Mapadécéŋ $1 Leppa papaké Link risaliweŋ (jangan lupa awalan http:// ) Kamisi' Accalinruŋi Judul dek essa (sininna) Pranala permanen pakitaï/tapo' Ita leppa panginriŋ Ita leppa proyék Leppa média Leppa séuwani Désémber Sappa Désémber séuwani Log maessu Fébruari Berowoso Misc E-mail Méi Lao ri Leppa Indoë Maré' E-mail: File-file nalise menré Tenriampi Puŋgawa Paŋinriŋ (Riredirect polé $1) Iyé', peddé iyaro leppa Maré' Mapeddé berkas Paŋinriŋ mapadécéŋ Éro internal Lao ri leppa aseŋna pappada iyyé rekko eŋkaï Jum Padécéŋ kajuru: $1 Asenéŋ Lontara Januari (kapa) Luppe lao: Assapparaŋ Antivirus dé' riisseŋ: Rapang Pasewodo matoa: Teks totok Ita lontara Rusa Déppa log attama Masappa Oktober Lao ri leppa $1 Polé {{SITENAME}} [[$1]] ésuk ri [[$2]] Salasa Aseŋ papaké: Log Papaké sibawa hak-hak Project:FAQ Tool sialé-alé Leppa kosoŋë Juni Leppa baru ←Revisi riolo Lao September September Leppana iya' Paleccé Leppa béla ida pile ni ujuk, a dek essa.
Silakan pile aseng laing. $1 bot Ita pribiu</div><div class="font-5d2967 sax">[ca/OpenDyslexic] La base de dades està temporalment bloquejada a noves entrades i altres tasques de manteniment, segurament per tasques rutinàries de manteniment, després de les quals es tornarà a la normalitat.
@@ -1211,7 +922,7 @@ Per més detalls, l'última entrada del registre es mostra a continuació: Text
بۆ هەناردە کردنی پەڕەکان، سەرناوەکانیان لە چوارچێوەی خوارەوەدا بنووسە، هەر سەرناوێک لە هێڵێکدا. و هەڵبژێرە کە پێداچوونەوەی ئێستا و ھەموو پێداچوونەوە کۆنەکانت دەوێت یان تەنھا پێداچوونەوەی ئێستا و زانیاریی سەبارەت بە دوایین دەستکاری.
-ئەگەر تەنھا پێداچوونەوەی ئێستات دەوێت، دەتوانیت بەستەرێکیش بە کار بھێنیت، بۆ نموونە [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] بۆ پەڕەی «[[{{MediaWiki:Mainpage}}]]». ئەمە لۆگێکی دروستکردنی بەکارھێنەرە. ئەم پەڕەیە لە لیستی چاودێریت لاببە بۆشاییی ناوی پەیوەندیدار نیشان بدە/بشارەوە $1 پەڕەی $3 {{GENDER:$2|بەرگری کرد}}. بچیتە ژوورەوە نیشانکردنی دەستکاریەکانی کەسانی تر وەک پاس دراو لاپەڕەی DjVu لەدەرۆی ڕیز ئەم ماڵپەڕە ناتوانێ ئیمەیل بنێرێ. ئایا دڵنیایت دەتەوێ پێداچوونەوەی سڕاوەی پەڕگەی "$1" لە $2، لە $3دا ببیینی؟</div><div class="font-c82063 sax">[cr/OskiEast] ᓃᔥᑕᒻᐹᔅᑌᒋᓂᑲᓐ ᓃᔥᑕᒻᐹᔅᑌᒋᓂᑲᓐ</div><div class="font-6a3dd2 sax">[cy/ComicNeue] Dyma'r tocyn cudd i borthiant gwe eich rhestr wylio.
+ئەگەر تەنھا پێداچوونەوەی ئێستات دەوێت، دەتوانیت بەستەرێکیش بە کار بھێنیت، بۆ نموونە [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] بۆ پەڕەی «[[{{MediaWiki:Mainpage}}]]». ئەمە لۆگێکی دروستکردنی بەکارھێنەرە. ئەم پەڕەیە لە لیستی چاودێریت لاببە بۆشاییی ناوی پەیوەندیدار نیشان بدە/بشارەوە $1 پەڕەی $3 {{GENDER:$2|بەرگری کرد}}. بچیتە ژوورەوە نیشانکردنی دەستکاریەکانی کەسانی تر وەک پاس دراو لاپەڕەی DjVu لەدەرۆی ڕیز ئەم ماڵپەڕە ناتوانێ ئیمەیل بنێرێ. ئایا دڵنیایت دەتەوێ پێداچوونەوەی سڕاوەی پەڕگەی "$1" لە $2، لە $3دا ببیینی؟</div><div class="font-c82063 sax">[cr/OskiEast] ᓃᔥᑕᒻᐹᔅᑌᒋᓂᑲᓐ ᓃᔥᑕᒻᐹᔅᑌᒋᓂᑲᓐ</div><div class="font-dd12c5 sax">[cu/Fedorovsk] Хрⷭ҇то́съ воскре́се и҆з̾ ме́ртвыхъ, сме́ртїю сме́рть попра́въ, и҆ сꙋ́щымъ во гробѣ́хъ живо́тъ дарова́въ.</div><div class="font-e9f3f4 sax">[cu/Menaion] Хрⷭ҇то́съ воскре́се и҆з̾ ме́ртвыхъ, сме́ртїю сме́рть попра́въ, и҆ сꙋ́щымъ во гробѣ́хъ живо́тъ дарова́въ.</div><div class="font-5dbb3f sax">[cu/Monomakh] Хрⷭ҇то́съ воскре́се и҆з̾ ме́ртвыхъ, сме́ртїю сме́рть попра́въ, и҆ сꙋ́щымъ во гробѣ́хъ живо́тъ дарова́въ.</div><div class="font-0f6621 sax">[cu/Ponomar] Хрⷭ҇то́съ воскре́се и҆з̾ ме́ртвыхъ, сме́ртїю сме́рть попра́въ, и҆ сꙋ́щымъ во гробѣ́хъ живо́тъ дарова́въ.</div><div class="font-6a3dd2 sax">[cy/ComicNeue] Dyma'r tocyn cudd i borthiant gwe eich rhestr wylio.
Bydd unrhyw un sy'n gwybod hwn yn gallu darllen eich rhestr wylio, felly peidiwch a'i roi i neb.
[[Special:ResetTokens|Cliciwch fan hyn os oes angen ailosod y tocyn]]. gweld/adfer Tudalen defnyddiwr $1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}} Rydych wedi ceisio golygu adran nad ydy'n bod.
Efallai bod yr adran wedi cael ei symud neu ei dileu ers i chi agor y dudalen. Rhagolwg pwnc: Cyfeiriad IP neu enw defnyddiwr: Cyfraniadau hyd at y flwyddyn (ac yn gynharach): Categori '$1' Erthyglau yn nhrefn nifer eu categorïau Gwall gweld hanes dilëedig y dudalen hon Ydw, rydw i wir am ddatgloi'r gronfa ddata. Ni ellir symud ffeil i barth arall {{PLURAL:$1||$1 diwrnod|$1 ddiwrnod|$1 diwrnod|$1 diwrnod|$1 diwrnod}} Mae cyfrinair newydd wedi'i ddanfon at gyfeiriad e-bost cofrestredig "$1". Mewngofnodwch eto ar ôl i chi dderbyn y cyfrinair, os gwelwch yn dda. '''Cofiwch taw rhagolwg yw hwn.''' Nid yw eich gwaith wedi ei roi ar gadw eto!</div><div class="font-5d2967 sax">[cy/OpenDyslexic] Dyma'r tocyn cudd i borthiant gwe eich rhestr wylio.
@@ -1257,7 +968,7 @@ $2 Oanbied-warskôging $1 tekstwizigings feroarje nivo fan skoatteljen Oaren {{P
{{PLURAL:$3|Oanwiisd triem-type is|Oanwiisde triem-typen binne}} $2. De ferzje fan '''[[Media:$1|$1]]''' fan $2, $3 is fuorthelle. Gau de lêste bewurking(s) fan in brûker fan in side tebekdraaie Opmerkings E-mailadres ynfiere blokkade feroarje Dy meidoggersnamme wurdt al brûkt.
Besykje in oarenien. Gjin brûker fûn. Side skoattelje Klik op in tiid om de ferzje fan de triem op dat stuit te sjen. Tichtby</div><div class="font-5d2967 sax">[ga/OpenDyslexic] Tharlaigh earráid leis an seoladh: $1 Cuir na leagain roghnaithe i gcomparáid {{GENDER:|Do}} chuid sainroghanna Féach ar fhoinse Focal faire reatha: Deimhniú do ríomhsheoladh ar an {{SITENAME}} Leagain stairiúla den leathanach seo. Comhadainm Dréachtaí úsáideora scriosta Iompaigh rogha bunoscionn athúsáid Iúil Cló iodálach {{PLURAL:$1|Teimpléad|Teimpléid}} a úsáidtear sa réamhamharc seo: Liosta is ea seo thíos de leathanaigh athainmnithe. Ag athrú $1 (mir) Sábháil comhad Glasáil Folaigh athruithe de chuid róbat ón liosta faire Ainm comhaid: Sábháil do chuid athruithe Cuir cóip chugam de gach teactaireacht r-phoist a chuirim chuig úsáideoirí eile Gach leathanach '''Aire''': scriosadh an leathanach seo nuair a bhí tu ag athrú é! Fáth: Tá comhad eile leis an ainm seo ann fós, agus ní féidie é a forscríobh.
Má theastáilann uait do chomhad a uaslódáil fós, téigh ar ais agus úsáid ainm nua, le do thoil. [[File:$1|thumb|center|$1]] Teanga: $1 Bánchothromaíocht uathoibríoch Theip ar an cuntas a chruthú: $1</div><div class="font-5d2967 sax">[gd/OpenDyslexic] A làimh Dìon na duilleige ID fa leth na sgrìobhainn tùsail Cliù airson na duilleige Dh'fhàillig leis an iarrtas HTTP ri linn mearachd neo-aithnichte. Cead càch a bhacadh o dheasachadh Chaidh an cleachdaiche seo a chasgadh. Chan eil logadh a-steach ceadaichte dhaibh. Chaidh $1 {{PLURAL:$1|mhùthadh|mùthadh|mùthaidhean|mùthadh}} ion-phortachadh $1 gus an seòladh puist-d agad a dhearbhadh. Tùs $1 {{PLURAL:$1|roinn-seòrsa|roinn-seòrsa|roinnean-seòrsa|roinn-seòrsa}} Cuir post-d gu cleachdaiche dhen t-Samhain Dèan ceangal buan gu mùthadh seo na duilleige Obair air a sguabadh às Chaidh $1 a bhacadh mar-thà. A bheil thu airson na roghainnean atharrachadh? Seall is deasaich mo chlàr-faire Iuch Modh portraid (airson dealbhan faisg gun fhòcas air a' chùlaibh) Log a-steach Cuir am fiosrachadh a bharrachd am falach Faidhlichean a thathar 'gan iarraidh Seo liosta nam faidhlichean 's an tionndadh as ùire dhiubh 'na dhùblachadh aig an tionndadh as ùire de dh'fhaidhle air choireigin eile. Chan fhaic thu ach faidhlichean ionadail.</div><div class="font-7483df sax">[gez/AbyssinicaSIL] </div><div class="font-5d2967 sax">[gl/OpenDyslexic] Buscar un usuario bloqueado Debe [[Special:UserLogin|acceder ao sistema]] e ter rexistrado un enderezo de correo electrónico válido nas súas [[Special:Preferences|preferencias]] para enviar correos electrónicos a outros usuarios. contribucións Rexeitado Novo título: "[[:$1]]" xa existe nun repositorio compartido. Ao mover un ficheiro a este título sobrescribirase o ficheiro compartido. Altitude Utilizar unha conexión segura sempre que acceda ao sistema Non especificou a páxina ou o usuario no cal levar a cabo esta función. Non existe ningún ficheiro con este nome, pero pode [$1 cargalo]. O nome do ficheiro que está cargando comeza con '''"$1"''', que é un típico nome non descritivo asignado automaticamente polas cámaras dixitais.
-Por favor, escolla un nome máis descritivo para o seu ficheiro. Ningunha páxina para importar! Redirección aleatoria Non hai ningunha descrición dispoñible. {{PLURAL:$1|anterior|$1 anteriores}} Non ten os permisos necesarios para desbloquearse a si mesmo Os grupos que pode cambiar</div><div class="font-a57c85 sax">[goe/Jomolhari] </div><div class="font-c51799 sax">[gom/Lohit Devanagari] Tujea fatle bhette san bodol'lean tim panam '''datt''' dakhoileant. Panachi mahiti Sod</div><div class="font-1e1291 sax">[got/Skeirs II] 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍅𐌰𐌿𐍂𐌳𐌰 l 𐍆𐌴𐌹𐌻𐌰 Habiþ þu niutandis? '''$1''' 𐌻𐌰𐌿𐍆𐍃 𐍃𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳 "$1" 𐌽𐌹𐍃𐍄. 𐍆𐍂𐌰𐌼 𐌾𐌴𐍂𐌰 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰): 𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐍆𐌹𐌽𐌸𐌰𐌽 Sokeiþ 𐌽𐌿 𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉 [[Special:Tags|𐍄𐌰𐌹𐌺𐌽𐍉𐍃]] 𐍆𐌹𐌻𐌷𐌰 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌰𐌽𐌰𐍃𐌹𐌿𐌽𐌼𐌰𐌷𐍄𐌴𐌹𐌲𐍃 𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰 𐍅𐌹𐌸𐍂𐌰 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌼𐌰𐌹𐌳𐌾𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉 Melja 𐌰𐍆𐌰𐍂𐍃𐌰𐌱𐌱𐌰𐍄𐍉 $1 {{PLURAL:$1|máidein|máideins}} 𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽 $1 lietila máideins 𐍃𐍉𐌺𐌴𐌹 𐍅𐌹𐍄𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐍃𐌺𐌰𐍀𐌴𐌹 𐌽𐌹𐌿𐌾𐌰𐍄𐌰 𐍃𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳 𐌲𐍂𐌰 𐌽𐌿 Sinteino 𐌳𐍂𐌹𐌿𐍃𐍉 𐌱𐍉𐌺𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃 𐍅𐌰𐌹𐍂𐌸𐌰𐌹𐍃 𐍃𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳 "$1" 𐌲𐌰𐌵𐌹𐌿𐌾𐌰𐌽. 𐌾𐌰 Sokeiþ 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃 𐍄𐌰𐌹𐍂𐌰𐌽 {{ns:project}}:𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃 𐍄𐌰𐌹𐌺𐌽𐌹𐌳𐌰 𐌸𐌿: $1 Gaírnedum seidam 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃 𐌹𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}} (halb-gabaírgjan) 𐍃𐌰 𐌳𐌰𐍄𐌰𐌱𐌿𐍃 𐌽𐌹 𐌲𐌰𐌽𐌰𐌼 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽 𐌴𐌹 𐌹𐍄𐌰 𐍃𐌺𐌰𐌻 𐌱𐌹𐌲𐌹𐍄𐌰𐌽: "$1" $2
+Por favor, escolla un nome máis descritivo para o seu ficheiro. Ningunha páxina para importar! Redirección aleatoria Non hai ningunha descrición dispoñible. {{PLURAL:$1|anterior|$1 anteriores}} Non ten os permisos necesarios para desbloquearse a si mesmo Os grupos que pode cambiar</div><div class="font-a57c85 sax">[goe/Jomolhari] </div><div class="font-1e1291 sax">[got/Skeirs II] 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍅𐌰𐌿𐍂𐌳𐌰 l 𐍆𐌴𐌹𐌻𐌰 Habiþ þu niutandis? '''$1''' 𐌻𐌰𐌿𐍆𐍃 𐍃𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳 "$1" 𐌽𐌹𐍃𐍄. 𐍆𐍂𐌰𐌼 𐌾𐌴𐍂𐌰 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰): 𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐍆𐌹𐌽𐌸𐌰𐌽 Sokeiþ 𐌽𐌿 𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉 [[Special:Tags|𐍄𐌰𐌹𐌺𐌽𐍉𐍃]] 𐍆𐌹𐌻𐌷𐌰 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌰𐌽𐌰𐍃𐌹𐌿𐌽𐌼𐌰𐌷𐍄𐌴𐌹𐌲𐍃 𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰 𐍅𐌹𐌸𐍂𐌰 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌼𐌰𐌹𐌳𐌾𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉 Melja 𐌰𐍆𐌰𐍂𐍃𐌰𐌱𐌱𐌰𐍄𐍉 $1 {{PLURAL:$1|máidein|máideins}} 𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽 $1 lietila máideins 𐍃𐍉𐌺𐌴𐌹 𐍅𐌹𐍄𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐍃𐌺𐌰𐍀𐌴𐌹 𐌽𐌹𐌿𐌾𐌰𐍄𐌰 𐍃𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳 𐌲𐍂𐌰 𐌽𐌿 Sinteino 𐌳𐍂𐌹𐌿𐍃𐍉 𐌱𐍉𐌺𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃 𐍅𐌰𐌹𐍂𐌸𐌰𐌹𐍃 𐍃𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳 "$1" 𐌲𐌰𐌵𐌹𐌿𐌾𐌰𐌽. 𐌾𐌰 Sokeiþ 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃 𐍄𐌰𐌹𐍂𐌰𐌽 {{ns:project}}:𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃 𐍄𐌰𐌹𐌺𐌽𐌹𐌳𐌰 𐌸𐌿: $1 Gaírnedum seidam 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃 𐌹𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}} (halb-gabaírgjan) 𐍃𐌰 𐌳𐌰𐍄𐌰𐌱𐌿𐍃 𐌽𐌹 𐌲𐌰𐌽𐌰𐌼 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽 𐌴𐌹 𐌹𐍄𐌰 𐍃𐌺𐌰𐌻 𐌱𐌹𐌲𐌹𐍄𐌰𐌽: "$1" $2
(The data base did not find the text of a page that it should have found, named "$1" $2.
@@ -1266,14 +977,10 @@ This is usually caused by following an outdated diff or history link to a page t
If this is not the case, you may have found a bug in the software.
Please report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.)</div><div class="font-17daee sax">[grc/GentiumPlus] Βεβασισμένον τῷ ἔργῳ τοῦ/τῶν $1. Κατάστασις φωτομέτρου Κανονική Πείρασον ἀναμένειν ὀλίγα λεπτὰ τῆς ὥρας καὶ ὕστερον ἐπιφόρτισον πάλιν. Οὐδεμία δέλτος ἐν {{PLURAL:$2|τῷ ὀνοματείῳ|τοῖς ὀνοματείοις}} "$1". Στόχος Οὐδὲν ἐν τῇδε τῇ δέλτῳ γεγραμμένον.
Ἔξεστί σοι [[Special:Search/{{PAGENAME}}|δέλτον τινὰ οὕτως ὀνόματι ζητήσειν]] ἐν ἔτερες δέλτους, ἤ [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ζητήσειν τα συγγενή αρχεία καταγραφών],
-ὄμως οὔ δύνασαι τήνδε τὴν δέλτον δημιουργήσειν. Ἐκκινεῖν ἐπιφόρτωσιν Χρῆμα: Δε Δεῖ σε ἐπιλέξειν σύνθημα δίαφορον τοῦ σοῦ ὀνόματος χρωμένου. Ἐπιλογαὶ ἠλ-ταχυδρομείου Κατάλογος τῶν ἐνθάδε ἀγόντων Αἱ τῆς δέλτου πρότεραι Στοιχεῖα χρωμένου μὴ δυναμένη ἡ μεταγραφή τῆς δέλτου σου ἐστίν Ἀγνοεῖν βικι-μορφοποιίαν Κατάλογοι δέλτων Βέβαιος εἶ περὶ τῆς προβολῆς διαγεγραμμένης ἀναθεωρήσεως τινὸς τοῦ ἀρχείου "$1" ἐκ τῆς $2 ἐν τῇ $3; Οὐκ ἔστι καταγεγραμμένη ἔκδοσις τοῦ '''$1''' μετὰ τῶν καθωρισμένων χαρακτηριστικῶν. Διεύθυνσις ἠλ-ταχυδρομείου προαπαιτεῖται. Αὐξάνειν Οὐκ ἔξεστί σοι μετακινήσειν δέλτον τινὰ πρὸς δέλτον χρωμένου (πλὴν μόνον πρὸς ὑποδέλτον χρωμένου).</div><div class="font-8ca02e sax">[gu/Lohit Gujarati] ઈ-મેલ મોકલો ગુપ્તસંજ્ઞા બદલો "$1" અજ્ઞાત ક્રિયા. તમે દર્શાવેલ સમય વખતની મૂળ ફાઇલ સ્થાનિક સ્વરુપે પ્રાપ્ય નથી. હા, આ પાનું હટાવો આપેલ ISBN વૈધ નથી લાગતો; મૂળ સ્રોતને ચકાસી, ભૂલ શોધી, ખરી માહિતી આપો. જમા કરો સાયન્સ અને ટેકનોલોજી $1 {{PLURAL:$1|ફેરફાર|ફેરફારો}} માહિતી સંબંધી ચેતવણી ઉલટાવવું નિષ્ફળ પુષ્ટિકરણ ન થયેલ પાનાની સાઇટ સંબંધી માહિતી મીટાવો. ISO સ્ટુડીયો ટંગસ્ટન /* $1 */ નવો વિભાગ સમુદ્ર સપાટી ઉપર $1 {{PLURAL:$1|મીટર|મીટર}} બધાં પાનાઓ નિકાસ કરો/પાના અન્યત્ર મોકલો આ પાનું ફરી પુનર્જીવીત કરો અન્ય મારા ઈ-મેલની પ્રત મને મોકલો પૂર્વાવલોકન સમાપ્તિ શુક્ર [$1 માટે ઢાંચો ખેંચી લાવવામાં અસફળ ] સરખાવો છુપાવો આપ આ પાનું તેના ઇતિહાસ (બધાજ પૂર્વ ફેરફારો) સાથે હટાવી રહ્યાં છો.
-કૃપા કરી ખાત્રી કરો કે આપ આમ કરવા ઇચ્છો છો, આપ આના સારા-નરસા પરિણામોથી વાકેફ છો, અને આપ આ કાર્ય [[{{MediaWiki:Policy-url}}|નીતિ]]ને અનુરૂપ જ કરી રહ્યાં છો. ઓગસ્ટ આ પાનાં પર દિશાનિર્દેશનોની સંખ્યા આ શબ્દ ધરાવતા... ઢાંચો સંરક્ષિત પાનું સર્વર પર હંગામી ફાઇલ રચતા કોઇ આંતરીક ત્રુટિ નિર્માણ થઇ.
-કૃપયા [[Special:ListUsers/sysop|administrator]]નો સંપર્ક કરો.</div><div class="font-aa67ea sax">[hbo/Taamey Frank CLM] </div><div class="font-727067 sax">[hbo/Alef] </div><div class="font-727067 sax">[he/Alef] קישור בינוויקי שגוי ההרשאה או ההרשאות המאפשרות למשתמשים לערוך גרסה שנמחקה מהדף $1 (מ־$5, $4) מאת $3: התוכן בדף [[:$1]] אינו יכול להיות מומר לסוג של $2. עריכת התגיות של רשומות היומן שנבחרו {{ns:project}}:זכויות יוצרים גרסה $1 סיווג דפים לקטגוריות משתמשים אנונימיים בלבד '''".$1"''' הוא סוג קובץ בלתי מומלץ.
+ὄμως οὔ δύνασαι τήνδε τὴν δέλτον δημιουργήσειν. Ἐκκινεῖν ἐπιφόρτωσιν Χρῆμα: Δε Δεῖ σε ἐπιλέξειν σύνθημα δίαφορον τοῦ σοῦ ὀνόματος χρωμένου. Ἐπιλογαὶ ἠλ-ταχυδρομείου Κατάλογος τῶν ἐνθάδε ἀγόντων Αἱ τῆς δέλτου πρότεραι Στοιχεῖα χρωμένου μὴ δυναμένη ἡ μεταγραφή τῆς δέλτου σου ἐστίν Ἀγνοεῖν βικι-μορφοποιίαν Κατάλογοι δέλτων Βέβαιος εἶ περὶ τῆς προβολῆς διαγεγραμμένης ἀναθεωρήσεως τινὸς τοῦ ἀρχείου "$1" ἐκ τῆς $2 ἐν τῇ $3; Οὐκ ἔστι καταγεγραμμένη ἔκδοσις τοῦ '''$1''' μετὰ τῶν καθωρισμένων χαρακτηριστικῶν. Διεύθυνσις ἠλ-ταχυδρομείου προαπαιτεῖται. Αὐξάνειν Οὐκ ἔξεστί σοι μετακινήσειν δέλτον τινὰ πρὸς δέλτον χρωμένου (πλὴν μόνον πρὸς ὑποδέλτον χρωμένου).</div><div class="font-aa67ea sax">[hbo/Taamey Frank CLM] </div><div class="font-727067 sax">[hbo/Alef] </div><div class="font-727067 sax">[he/Alef] קישור בינוויקי שגוי ההרשאה או ההרשאות המאפשרות למשתמשים לערוך גרסה שנמחקה מהדף $1 (מ־$5, $4) מאת $3: התוכן בדף [[:$1]] אינו יכול להיות מומר לסוג של $2. עריכת התגיות של רשומות היומן שנבחרו {{ns:project}}:זכויות יוצרים גרסה $1 סיווג דפים לקטגוריות משתמשים אנונימיים בלבד '''".$1"''' הוא סוג קובץ בלתי מומלץ.
{{PLURAL:$3|סוג הקובץ המומלץ הוא|סוגי הקבצים המומלצים הם}} $2. השחזור לא יבוצע אם הגרסה הנוכחית של הדף מחוקה בחלקה. במקרה כזה, עליכם לבטל את ההסתרה של הגרסאות המחוקות החדשות ביותר. קובץ שמע מקושר (הפניה $1) עריכת סיבות המחיקה בפברואר עריכת התיאור המקומי שם עקיפת הגבלת קצב העריכות המבוססת על כתובת IP סימון כל פעולת עריכה כמשנית כברירת מחדל בשימוש {{PLURAL:$1|בדף אחד|ב־$1 דפים}} לא ניתן להוסיף את התגית "$1" ידנית. '''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של הקובץ הזה לא תהיינה מונפשות.''' קוד אימות דוא"ל כבר נשלח אליכם; אם יצרתם את החשבון לאחרונה, ייתכן שתרצו לחכות מספר דקות עד שיגיע לפני שתנסו לבקש קוד חדש. הזמן ביום שהמדיה מיועדת אליו כתובת האתר עבור רישיון זכויות יוצרים סיומת הקובץ החדשה אינה מתאימה לסוג הקובץ</div><div class="font-c8e324 sax">[he/Miriam CLM] קישור בינוויקי שגוי ההרשאה או ההרשאות המאפשרות למשתמשים לערוך גרסה שנמחקה מהדף $1 (מ־$5, $4) מאת $3: התוכן בדף [[:$1]] אינו יכול להיות מומר לסוג של $2. עריכת התגיות של רשומות היומן שנבחרו {{ns:project}}:זכויות יוצרים גרסה $1 סיווג דפים לקטגוריות משתמשים אנונימיים בלבד '''".$1"''' הוא סוג קובץ בלתי מומלץ.
{{PLURAL:$3|סוג הקובץ המומלץ הוא|סוגי הקבצים המומלצים הם}} $2. השחזור לא יבוצע אם הגרסה הנוכחית של הדף מחוקה בחלקה. במקרה כזה, עליכם לבטל את ההסתרה של הגרסאות המחוקות החדשות ביותר. קובץ שמע מקושר (הפניה $1) עריכת סיבות המחיקה בפברואר עריכת התיאור המקומי שם עקיפת הגבלת קצב העריכות המבוססת על כתובת IP סימון כל פעולת עריכה כמשנית כברירת מחדל בשימוש {{PLURAL:$1|בדף אחד|ב־$1 דפים}} לא ניתן להוסיף את התגית "$1" ידנית. '''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של הקובץ הזה לא תהיינה מונפשות.''' קוד אימות דוא"ל כבר נשלח אליכם; אם יצרתם את החשבון לאחרונה, ייתכן שתרצו לחכות מספר דקות עד שיגיע לפני שתנסו לבקש קוד חדש. הזמן ביום שהמדיה מיועדת אליו כתובת האתר עבור רישיון זכויות יוצרים סיומת הקובץ החדשה אינה מתאימה לסוג הקובץ</div><div class="font-aa67ea sax">[he/Taamey Frank CLM] קישור בינוויקי שגוי ההרשאה או ההרשאות המאפשרות למשתמשים לערוך גרסה שנמחקה מהדף $1 (מ־$5, $4) מאת $3: התוכן בדף [[:$1]] אינו יכול להיות מומר לסוג של $2. עריכת התגיות של רשומות היומן שנבחרו {{ns:project}}:זכויות יוצרים גרסה $1 סיווג דפים לקטגוריות משתמשים אנונימיים בלבד '''".$1"''' הוא סוג קובץ בלתי מומלץ.
-{{PLURAL:$3|סוג הקובץ המומלץ הוא|סוגי הקבצים המומלצים הם}} $2. השחזור לא יבוצע אם הגרסה הנוכחית של הדף מחוקה בחלקה. במקרה כזה, עליכם לבטל את ההסתרה של הגרסאות המחוקות החדשות ביותר. קובץ שמע מקושר (הפניה $1) עריכת סיבות המחיקה בפברואר עריכת התיאור המקומי שם עקיפת הגבלת קצב העריכות המבוססת על כתובת IP סימון כל פעולת עריכה כמשנית כברירת מחדל בשימוש {{PLURAL:$1|בדף אחד|ב־$1 דפים}} לא ניתן להוסיף את התגית "$1" ידנית. '''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של הקובץ הזה לא תהיינה מונפשות.''' קוד אימות דוא"ל כבר נשלח אליכם; אם יצרתם את החשבון לאחרונה, ייתכן שתרצו לחכות מספר דקות עד שיגיע לפני שתנסו לבקש קוד חדש. הזמן ביום שהמדיה מיועדת אליו כתובת האתר עבור רישיון זכויות יוצרים סיומת הקובץ החדשה אינה מתאימה לסוג הקובץ</div><div class="font-c51799 sax">[hi/Lohit Devanagari] फ़ाइल विवरण अन्य सदस्यों के जावास्क्रिप्ट पृष्ठ सम्पादित करें उप पृष्ठ भी ले जाएँ ($1 तक) आप बाधित होने की स्थिति में सुरक्षा स्थर में परिवर्तन नहीं कर सकते।
-पृष्ठ '''$1''' की वर्तमान स्थिति यह है: इस समय इन नियमों द्वारा कोई पृष्ठ सुरक्षित नहीं हैं। सद्य जब मैं किसी सम्पादन पृष्ठ को बिना सहेजे बदलावों के साथ छोड़ूँ तो मुझे सूचित करें। फ़ाइल पुनर्स्थापन में त्रुटि: $1 श्रम ...से युक्त $1 पृष्ठ $2 नाम पर स्थानांतरित कर दिया गया है। ध्यानसूची सब्जेक्टका स्थान अपरिवर्तनीय रूप से इस टैग को हटाएँ लॉग इन $1 के फ़ाइल के हटाये गये अवतरण को पुनर्स्थापित नहीं किया जा सकता: फ़ाइल का नाम मेल नहीं खाता पृष्ठ हटाएँ कस्टम इमेज प्रोसेसिंग सपोर्टेड फ्लॅशपीक्स अवतरण विकि प्रारूपण नज़रंदाज़ करें खोजें ध्यानसूची यू॰आर॰एल से इस फ़ाइल को चढ़ाने $1 ने $3 पृष्ठ $4 पर {{GENDER:$2|स्थानांतरित}} किया एक पुनर्निर्देशन भी निर्मित किया गया है। भाषा चुनें श्रेणी $1 पर आपके लिए नया संदेश है छोटे परिवर्तनों के लिए भी मुझे ईमेल भेजें "$1" नाम का कोई सदस्य नहीं है।
-कृपया अपनी दी हुई वर्तनी जाँचें। टिप्पणी हटायें मार्च दो घंटे:2 hours,एक दिन:1 day,तीन दिन:3 days,एक सप्ताह:1 week,दो सप्ताह:2 weeks,एक महीना:1 month,तीन महीने:3 months,छः महीने:6 months,एक साल:1 year,हमेशा के लिये:infinite</div><div class="font-5d2967 sax">[hu/OpenDyslexic] talpatlan (sans-serif) betűtípus A fájlban történő mentés felkínálása Lap figyelése Színkép érzékenysége Az összes sablon hozzáadása Telugu Megjelenítési beállítások A(z) „$1” kategóriába tartozó lapok Expozíciós program Aláírás: Fióklétrehozási hiba hét Be kell jelentkezned a fájl feltöltéséhez. Szélességi fok Nem változtathatod meg a védelmi szinteket, amíg blokkolnak. Itt vannak a(z)
+{{PLURAL:$3|סוג הקובץ המומלץ הוא|סוגי הקבצים המומלצים הם}} $2. השחזור לא יבוצע אם הגרסה הנוכחית של הדף מחוקה בחלקה. במקרה כזה, עליכם לבטל את ההסתרה של הגרסאות המחוקות החדשות ביותר. קובץ שמע מקושר (הפניה $1) עריכת סיבות המחיקה בפברואר עריכת התיאור המקומי שם עקיפת הגבלת קצב העריכות המבוססת על כתובת IP סימון כל פעולת עריכה כמשנית כברירת מחדל בשימוש {{PLURAL:$1|בדף אחד|ב־$1 דפים}} לא ניתן להוסיף את התגית "$1" ידנית. '''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של הקובץ הזה לא תהיינה מונפשות.''' קוד אימות דוא"ל כבר נשלח אליכם; אם יצרתם את החשבון לאחרונה, ייתכן שתרצו לחכות מספר דקות עד שיגיע לפני שתנסו לבקש קוד חדש. הזמן ביום שהמדיה מיועדת אליו כתובת האתר עבור רישיון זכויות יוצרים סיומת הקובץ החדשה אינה מתאימה לסוג הקובץ</div><div class="font-5d2967 sax">[hu/OpenDyslexic] talpatlan (sans-serif) betűtípus A fájlban történő mentés felkínálása Lap figyelése Színkép érzékenysége Az összes sablon hozzáadása Telugu Megjelenítési beállítások A(z) „$1” kategóriába tartozó lapok Expozíciós program Aláírás: Fióklétrehozási hiba hét Be kell jelentkezned a fájl feltöltéséhez. Szélességi fok Nem változtathatod meg a védelmi szinteket, amíg blokkolnak. Itt vannak a(z)
'''$1''' lap jelenlegi beállításai: Ábrázolt helyszín Az ideiglenes kóddal jelentkeztél be. A bejelentkezés befejezéséhez meg kell adnod egy új jelszót: A megadott jelszavak nem egyeznek. a lap utolsó szerkesztésének gyors visszaállítása Pipáld ki a dobozt, ha el szeretnéd rejteni a kiválasztott névterekben található hivatkozásokat. Botok elrejtése CCITT Group 3 1 dimenziós módosított Huffman kódolás Védett lap Valaki (vélhetően te, a(z) $1 IP-címről) új jelszót kért a(z)
{{SITENAME}} wikis ($4) felhasználói fiókjához.
"$2" számára most egy ideiglenes jelszót készítettünk: "$3".
@@ -1395,42 +1102,16 @@ Informasi iki bakal kabuka kanggo publik. $1 {{GENDER:$2|mindhahaké}} kaca $3 n
អាសយដ្ឋានIPបច្ចុប្បន្នរបស់លោកអ្នកគឺ $3 និងអត្តលេខហាមឃាត់គឺ #$5 ។
-សូមបញ្ចូលព័ត៌មានលំអិតទាំងអស់ខាងលើនេះ ក្នុងអ៊ីមែលទាក់ទងនឹងបញ្ហានេះ។ ដាក់ស្នើ ស្វែងរកក្នុងប្រវត្តិ ផ្ញើអ៊ីមែល​មកខ្ញុំ​កាលបើ​មានបន្លាស់ប្ដូរ​នៅ​ក្នុងទំព័រពិភាក្សា​របស់ខ្ញុំ '''គន្លឹះ ៖ ''' សូមប្រើប្រាស់ប៊ូតុង"{{int:showpreview}}"ដើម្បី​ធ្វើតេស្ត​សន្លឹក CSS ថ្មីរបស់អ្នក​មុននឹង​រក្សាទុកវា ។ អក្សរឡាវ គណនីរបស់លោកអ្នកត្រូវបានបង្កើតហើយ</div><div class="font-e184c4 sax">[kn/Lohit Kannada] $1{{PLURAL:$1|ಸಂಪಾದನೆ|ಸಂಪಾದನೆಗಳು}} ಕಾರ್ಯ: $1 ಕೇವಲ ಇತ್ತೀಚಿನ ಪರಿಷ್ಕರಣೆಗೆ ಸಂಬಂಧಿಸಿದ ಸಂಪಾದನೆಗಳನ್ನು ಮಾತ್ರ ತೋರಿಸು ಸಿಂಧುವಲ್ಲದ ಪ್ರಕಾರದ ಫೀಡು. ಇತರ ವಿಶೇಷ ಪುಟಗಳು [[$1]] - [[$2]] ಪುಟಕ್ಕೆ ಸ್ಥಳಾಂತರಿಸಲಾಗಿದೆ "[[$1]]" ಸಂರಕ್ಷಿಸಲಾಗಿದೆ. ಇದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ವಿವರವಾದ ನೋಟ ಇಲ್ಲ. ಬೇರೆ ಸದಸ್ಯರಿಂದ ಈ-ಮೈಲ್‍ಗಳನ್ನು ಸ್ವೀಕರಿಸು ಹಳೆಯ "ವಜಾ ಮಾಡಿ" ಈ ಸಂಪಾದನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯ ಗೊಳಿಸಿ ಸಂಪಾದನಾ ಪುಟವನ್ನು ಮುನ್ನೋಟದೊಂದಿಗೆ ತೆರೆಯುತ್ತದೆ.
-ಇಲ್ಲಿ ಸಾರಾಂಶದಲ್ಲಿ ಕಾರಣವನ್ನು ಸೇರಿಸುವ ಅನುಮತಿ ಇದೆ. ಮುಕ್ತಾಯ ಎಲ್ಲವನ್ನೂ ಅಳಿಸು ದ್ವಿಪ್ರತಿ ಫೈಲುಗಳಿಗೆ ಹುಡುಕು ಪ್ರವೇಶಪದವನ್ನು ಮತ್ತೊಮ್ಮೆ ನಮೂದಿಸಿ ಖಾಲಿ ಪುಟ (ವಿಭಾಗ $1) {{PLURAL:$1|೧ ಶೀರ್ಷಿಕೆಯನ್ನು|$1 ಶೀರ್ಷಿಕೆಗಳನ್ನು}} ಸೇರಿಸಲಾಯಿತು: ಬೇರೆ ಭಾಷೆಗಳಿಗೆ ಸಂಪರ್ಕ ಹೊಂದಿರದ ಪುಟಗಳು $1 (ಹೊಸ ವಿಭಾಗ) ಸಂಪಾದಿಸಲಾಗುತ್ತಿದೆ [[:$1]] ಪುಟದ ಈ ಕೆಳಗಿನ ಬದಲಾವಣೆಗಳನ್ನು [[:$2]] ಒಳಗೆ ಸೇರ್ಪಡೆ ಮಾಡಬಹುದು.
-ರೇಡಿಯೊ ಗುಂಡಿಗಳ ಸಾಲನ್ನು ಉಪಯೋಗಿಸಿ ತೋರಿಸಲಾಗಿರುವ ಕಾಲದ ಮುಂಚಿನ ಬದಲಾವಣೆಗಳನ್ನು ಮಾತ್ರ ಸೇರ್ಪಡೆ ಮಾಡಿ.
-ಗಮನಿಸಿ: ಸಂಚರಣೆ ಕೊಂಡಿಗಳನ್ನು ಉಪಯೋಗಿಸಿದಲ್ಲಿ ಈ ಸಾಲು ವಸ್ತುಸ್ಥಿತಿಗೆ ಹಿಂತಿರುಗುತ್ತದೆ. $1 ({{PLURAL:$2|೧ ಪದ|$2 ಪದಗಳು}}) ಚಿತ್ರಬಿಂದು ರಚನೆ ಸಂರಕ್ಷಿಸು ಹುಡುಕು ಮರೆ ಮಾಡಿ ಬದಲಾಯಿಸಿ ಕೊಕ್ಕೆ ಸ್ಥಗಿತಗೊಳಿಸಲಾಗಿದೆ ಸಂಪಾದಿಸಿ .
-ಇದು ಯಾವುದೇ ವಿವರಣೆ ನೀಡಿದರು .</div><div class="font-360625 sax">[kn/Gubbi] $1{{PLURAL:$1|ಸಂಪಾದನೆ|ಸಂಪಾದನೆಗಳು}} ಕಾರ್ಯ: $1 ಕೇವಲ ಇತ್ತೀಚಿನ ಪರಿಷ್ಕರಣೆಗೆ ಸಂಬಂಧಿಸಿದ ಸಂಪಾದನೆಗಳನ್ನು ಮಾತ್ರ ತೋರಿಸು ಸಿಂಧುವಲ್ಲದ ಪ್ರಕಾರದ ಫೀಡು. ಇತರ ವಿಶೇಷ ಪುಟಗಳು [[$1]] - [[$2]] ಪುಟಕ್ಕೆ ಸ್ಥಳಾಂತರಿಸಲಾಗಿದೆ "[[$1]]" ಸಂರಕ್ಷಿಸಲಾಗಿದೆ. ಇದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ವಿವರವಾದ ನೋಟ ಇಲ್ಲ. ಬೇರೆ ಸದಸ್ಯರಿಂದ ಈ-ಮೈಲ್‍ಗಳನ್ನು ಸ್ವೀಕರಿಸು ಹಳೆಯ "ವಜಾ ಮಾಡಿ" ಈ ಸಂಪಾದನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯ ಗೊಳಿಸಿ ಸಂಪಾದನಾ ಪುಟವನ್ನು ಮುನ್ನೋಟದೊಂದಿಗೆ ತೆರೆಯುತ್ತದೆ.
-ಇಲ್ಲಿ ಸಾರಾಂಶದಲ್ಲಿ ಕಾರಣವನ್ನು ಸೇರಿಸುವ ಅನುಮತಿ ಇದೆ. ಮುಕ್ತಾಯ ಎಲ್ಲವನ್ನೂ ಅಳಿಸು ದ್ವಿಪ್ರತಿ ಫೈಲುಗಳಿಗೆ ಹುಡುಕು ಪ್ರವೇಶಪದವನ್ನು ಮತ್ತೊಮ್ಮೆ ನಮೂದಿಸಿ ಖಾಲಿ ಪುಟ (ವಿಭಾಗ $1) {{PLURAL:$1|೧ ಶೀರ್ಷಿಕೆಯನ್ನು|$1 ಶೀರ್ಷಿಕೆಗಳನ್ನು}} ಸೇರಿಸಲಾಯಿತು: ಬೇರೆ ಭಾಷೆಗಳಿಗೆ ಸಂಪರ್ಕ ಹೊಂದಿರದ ಪುಟಗಳು $1 (ಹೊಸ ವಿಭಾಗ) ಸಂಪಾದಿಸಲಾಗುತ್ತಿದೆ [[:$1]] ಪುಟದ ಈ ಕೆಳಗಿನ ಬದಲಾವಣೆಗಳನ್ನು [[:$2]] ಒಳಗೆ ಸೇರ್ಪಡೆ ಮಾಡಬಹುದು.
-ರೇಡಿಯೊ ಗುಂಡಿಗಳ ಸಾಲನ್ನು ಉಪಯೋಗಿಸಿ ತೋರಿಸಲಾಗಿರುವ ಕಾಲದ ಮುಂಚಿನ ಬದಲಾವಣೆಗಳನ್ನು ಮಾತ್ರ ಸೇರ್ಪಡೆ ಮಾಡಿ.
-ಗಮನಿಸಿ: ಸಂಚರಣೆ ಕೊಂಡಿಗಳನ್ನು ಉಪಯೋಗಿಸಿದಲ್ಲಿ ಈ ಸಾಲು ವಸ್ತುಸ್ಥಿತಿಗೆ ಹಿಂತಿರುಗುತ್ತದೆ. $1 ({{PLURAL:$2|೧ ಪದ|$2 ಪದಗಳು}}) ಚಿತ್ರಬಿಂದು ರಚನೆ ಸಂರಕ್ಷಿಸು ಹುಡುಕು ಮರೆ ಮಾಡಿ ಬದಲಾಯಿಸಿ ಕೊಕ್ಕೆ ಸ್ಥಗಿತಗೊಳಿಸಲಾಗಿದೆ ಸಂಪಾದಿಸಿ .
-ಇದು ಯಾವುದೇ ವಿವರಣೆ ನೀಡಿದರು .</div><div class="font-c51799 sax">[kok/Lohit Devanagari] </div><div class="font-a57c85 sax">[kte/Jomolhari] </div><div class="font-5d2967 sax">[lb/OpenDyslexic] Lëscht vun {{GENDER:|Äre}} Kontributiounen Benotzer Dës Ännerung gouf vun engem Bot gemaacht Son De Fichier $1 konnt net op $2 geréckelt ginn. Aloggen Jul. Iwwerwaachungslëscht eidelmaachen De Fichier $1 konnt net op $2 kopéiert ginn. Säiten, op denen d'maximal Gréist vun agebonnene Schablounen iwwerschratt ass Dir gesitt eng Versioun vun dëser Säit aus dem Tëschespäicher (cache), déi eventuell net méi aktuell ass. Sichen däerf seng Diskussiounssäiten net änneren Extern sichen D'Markéierung (tag) ''$1'' gëtt et schonn. D'URL muss mat http:// oder ftp:// ufänken. Verhënneren datt ageloggte Benotzer vun dëser IP-Adress aus Ännerunge maache kënnen Member vun: Geläscht Versioun vu(n) $1 (Versioun vum $4 um $5 Auer) vum $3: Skin E Fichier mam Numm "$1" gëtt et schonn am gedeelte Repertoire an e kann net iwwerschriwwe ginn. Benotzernumm op Lëschten a bei Ännerunge verstoppen Dir hutt rezent zevill dacks versicht Iech anzeloggen.
+សូមបញ្ចូលព័ត៌មានលំអិតទាំងអស់ខាងលើនេះ ក្នុងអ៊ីមែលទាក់ទងនឹងបញ្ហានេះ។ ដាក់ស្នើ ស្វែងរកក្នុងប្រវត្តិ ផ្ញើអ៊ីមែល​មកខ្ញុំ​កាលបើ​មានបន្លាស់ប្ដូរ​នៅ​ក្នុងទំព័រពិភាក្សា​របស់ខ្ញុំ '''គន្លឹះ ៖ ''' សូមប្រើប្រាស់ប៊ូតុង"{{int:showpreview}}"ដើម្បី​ធ្វើតេស្ត​សន្លឹក CSS ថ្មីរបស់អ្នក​មុននឹង​រក្សាទុកវា ។ អក្សរឡាវ គណនីរបស់លោកអ្នកត្រូវបានបង្កើតហើយ</div><div class="font-a57c85 sax">[kte/Jomolhari] </div><div class="font-5d2967 sax">[lb/OpenDyslexic] Lëscht vun {{GENDER:|Äre}} Kontributiounen Benotzer Dës Ännerung gouf vun engem Bot gemaacht Son De Fichier $1 konnt net op $2 geréckelt ginn. Aloggen Jul. Iwwerwaachungslëscht eidelmaachen De Fichier $1 konnt net op $2 kopéiert ginn. Säiten, op denen d'maximal Gréist vun agebonnene Schablounen iwwerschratt ass Dir gesitt eng Versioun vun dëser Säit aus dem Tëschespäicher (cache), déi eventuell net méi aktuell ass. Sichen däerf seng Diskussiounssäiten net änneren Extern sichen D'Markéierung (tag) ''$1'' gëtt et schonn. D'URL muss mat http:// oder ftp:// ufänken. Verhënneren datt ageloggte Benotzer vun dëser IP-Adress aus Ännerunge maache kënnen Member vun: Geläscht Versioun vu(n) $1 (Versioun vum $4 um $5 Auer) vum $3: Skin E Fichier mam Numm "$1" gëtt et schonn am gedeelte Repertoire an e kann net iwwerschriwwe ginn. Benotzernumm op Lëschten a bei Ännerunge verstoppen Dir hutt rezent zevill dacks versicht Iech anzeloggen.
Waart w.e.g. $1 ier Dir et nach eng Kéier probéiert. Feeler beim Schécke vun der E-Mail: $1</div><div class="font-a57c85 sax">[lbj/Jomolhari] </div><div class="font-a57c85 sax">[lhm/Jomolhari] </div><div class="font-5d2967 sax">[li/OpenDyslexic] Zwaal 's óchtes es 's aoves Wit fluorescerend (WW 3200 - 3700K) Botbewirkinge op mien volglies verberge Jao [URL is te lank] Wèt se zeker det se 'n gewösjdje versie ven 't bestandj "$1" ven $2 óm $3 wils bekieke? d'r is geine vörge lokale versie van dit bestand mit 't opgegaeve tiejdstip. Doorverwiezinge opsjone Gank Datum en momènt van digitizing Wachwaord opnuuj intype De bewerking kon neet ongedaan gemaak waere, omdat die neet besteet of is verwijderd. Betrach pazjena's mit 't veurvoogsel: Veurvoegsel Hulp bie bewirke Spórt Blokkeerlogbook Kan gebroekers oet deze {{PLURAL:$2|groep|groepe}} wisse: $1 Biedraag ven nuuj gebroekers Tusseköpske (hoogste niveau) Kopië oplajen is neet besjikbaar in dit domein. Ruumdjelik of temporeel scoop vanne media D'r sjtit niks op dien volglies. Aan volglies toeveuge Hieonger staon de $1 {{PLURAL:$1|resultaat|resultaat}}, vanaaf #$2. Sjuunsen tèks {{PLURAL:$1|Sjabloon|Sjablone}} gebroek in dees veurvertuining: Reeje veur beveiliging bewèrke blokkaasj verangere</div><div class="font-07f76a sax">[lo/Phetsarath] ລາຍການໜ້າທີ່ທ່ານຕິດຕາມການປ່ຽນແປງ ມັງກອນ ໂອນໜ້າ 2 ຄັ້ງ ສະແດງ ໜ້າ ຂຶ້ນຕົ້ນດ້ວຍ: ຕຸລາ $1 Atom ຟີດ (ເປີດເປັນ ປ່ອງຢ້ຽມ(ວິນໂດ)ໃໝ່ ) ໜ້ານີ້ຖືກປົກປ້ອງ. ທ່ານສາມາດເບິ່ງຊອສ. ໄຟລ໌ $1 × $2 ປິກເຊລ, ຂະໜາດໄຟລ໌: $3, MIME type: $4 ດັດແກ້ ໝົດອາຍຸ $1 (UTC) ທ່ານມີຂໍ້ຄວາມໃໝ່ ຢູ່ $1 ແມ່ແບບ ມີ ບັນຊີແລ້ວບໍ? '''$1'''. ສະແດງ ຜົນການດັດແກ້ ໃນ ເວລາດັດແກ້ເທື່ອທຳອິດ ສ້າງໜ້ານີ້ ທ່ານ ບໍ່ໄດ້ຮັບອະນຸຍາດ ໃຫ້ປະຕິບັດການ ທີ່ ທ່ານ ສັ່ງ. ຄວາມສູງ ເບິ່ງຊອສ໌ ເຊື່ອງ ການດັດແກ້ໂດຍຂ້ອຍ ໃນ ລາຍການຕິດຕາມຂອງຂ້ອຍ ສິງຫາ ເຊົາຕິດຕາມ ເຊື່ອງ ການລາດຕະເວນດັດແກ້ ໃນ ການດັດແກ້ຫຼ້າສຸດ ກ່ຽວຂ້ອງ ປະຫວັດ ຄຳອະທິບາຍໂດຍຫຍໍ້: ສະຫຼຸບ {{PLURAL:$2|ໝວດນີ້ມີໜ້າຢູ່ພຽງໜ້າດຽວ|ມີ {{PLURAL:$1|ໜ້າດຽວ|$1 ໜ້າ}} ໃນໝວດນີ້ ເຕັມ $2}} ຢືນຢັນ ທີ່ຢູ່ ອີເມລ ຂອງ ທ່ານ {{PLURAL:$1|$1}} ຕໍ່ໄປ ດັດແກ້ ພາກ: $1 ການສ້າງບັນຊີ ຈາກ IP ນີ້ ($1) ໄດ້ຖືກຫ້າມ ໂດຍ [[User:$3|$3]].
-ເຫດຜົນ ໃຫ້ໄວ້ ໂດຍ $3 ແມ່ນ ''$2'' ບໍ່ຂີດ ໜ້າບໍ່ມີໜ້າໃດເຊື່ອມຕໍ່ຫາ ບັນທຶກ ການລຶບ ນີ້ແມ່ນ ບັນທຶກການສ້າງ ບັນຊີຜູ້ໃຊ້ໃໝ່ ການດັດແກ້ ໝ້າພິເສດ ພວມດັດແກ້ $1 ໜ້ານີ້ ບໍ່ສາມາດສ້າງ ບັນຊີ ໄດ້ ເນື້ອໃນ ບໍ່ສະແດງເນື້ອໃນຂອງບົດຄວາມ ຢູ່ທາງລຸ່ມ ສ່ວນຕ່າງ</div><div class="font-a57c85 sax">[loy/Jomolhari] </div><div class="font-a57c85 sax">[luk/Jomolhari] </div><div class="font-a57c85 sax">[lya/Jomolhari] </div><div class="font-c51799 sax">[mai/Lohit Devanagari] कोनो और विकि सँ आयात करी {{जालस्थल}} ई-पत्र संकेत सत्यापन नवीनतम सम्पादन तिथि दुखी छी, वितरक सभ एखन व्यस्त अछि।
-बड्ड बेशी लोक ऐ पन्नाकेँ देखबामे लागल छथि।
-ऐ पन्नाकेँ फेरसँ देखबा लेल कनी बिलमू।
-$1 दोसर कारण दोसर कारण कोनो पुरान संशोधन नै भेटल। प्रयोक्तानाम इ ट्यागसभ हटाबी: "$1" केँ नै ब्याकअप क सकल। रद्द करु विषयमे निकालू {{PLURAL:$2|वर्ग|वर्ग}}: $1 अस्वीकृत ई-पत्र दोसर प्रयोक्ता लोकनिकेँ पठाउ '''टिप्पणी:''' संरक्षणक बाद, अहाँकेँ परिवर्तन देखबा लेल अपन गवेषकक उपस्मृतिकेँ हटबए पड़त।
-''' मोजिल्ला/ फायरफॉक्स/ सफारी:''' दाबि कऽ राखू ''शिफ्ट'' केँ ''पुनर्भारित'' क्लिक करबाक समए, वा दाबू चाहे ''Ctrl-F5'' वा ''Ctrl-R'' (''Command-R'' मैकिनटोशपर);
-'''कन्करर: ''' क्लिक करू ''पुनर्भारित करू'' वा दाबू''F5'';
-'''ओपेरा:''' उपस्मृति खतम करू ''Tools → Preferences'';
-'''इन्टरनेट एक्सप्लोरर:''' दाबि कऽ राखू ''Ctrl'' क्लिक करबा काल ''नवीकरण,'' वा दाबू ''Ctrl-F5'' । $1 {{GENDER:$2|आयात केल गेल}} $3 कोनो और विकि सँ $1 {{PLURAL:$1|खाका |खाका सभ }} एकटा अबूझ भ्रम आएल मदति हटाउ सभसँ बेसी लागिबला पन्ना सभ दिसंबर</div><div class="font-1b4e52 sax">[mak/Saweri] </div><div class="font-5d2967 sax">[mi/OpenDyslexic] Mo {{SITENAME}} hunaia Whārangi motuhake Rāhina Ngā hononga mai Huringa pūtahi Whakaaturia Rāapa Mahuru Hōngongoi Poutū-te-rangi Hau Kāinga Paenga-whāwhā Tiro rerekētanga Here-turi-kōkā Kōrerohia Rārangi kōrero Haratua Haere Tipihaere Pānui pūnaha Whakakore Haere papa tauira Hunaia Tomokanga hapori Project:Kōrero Kōrero nehe Kawepūrongo Wāhanga Pipiri Tāia Rāmere Hononga toitū Kōrerorero Hui-tanguru Kōwhiringa Huarahi Whakamārama Rārangi mātaki Kohi-tātea Rārangi mātaki Project:Tikanga tūmataiti Reo kē Huringa pūtahi - pouaka utauta Whiringa-ā-nuku Āwhina Hakihea Rātū Rāpare Project:Tomokanga hapori Huringa hou Tuku atu Rātapu kāti te mātaki Whiringa-ā-rangi whakakite Tiaki Whakatika tangohia Nekehia Hau Kāinga Ka whakaaturia i raro iho nei ngā '''huringa hou''' o tēnei Wiki. Rerekētanga pū tahi Whakarere Mātaki tuhi pānui Ngā whārangi katoa Tuhinga/kaituhi Tikanga tūmataiti Rāhoroi Whakangungua Rapua</div><div class="font-e5b903 sax">[ml/AnjaliOldLipi] കാണുക ഈ താൾ നേരിട്ടു കാണുന്നതിന് താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കണം. '''മുന്നറിയിപ്പ്:''' ഈ താളിൽ വളരെക്കൂടുതൽ പാഴ്സർ ഫങ്ഷനുകൾ വിളിച്ചിരിക്കുന്നു.
-
-{{PLURAL:$2|ഒരു വിളി|$2 വിളികൾ}} മാത്രമുണ്ടാകേണ്ടയിടത്ത്, ഇപ്പോൾ {{PLURAL:$1|ഒരു വിളി|$1 വിളികൾ}} ഉണ്ട്. പ്രമാണത്തിന്റെ പേര്: ഈ താളിന്റെ പതിപ്പുകൾ '''മായ്ച്ചിരിക്കുന്നു'''.
-
-താങ്കൾക്ക് അവ കാണാവുന്നതാണ്; കൂടുതൽ വിവരങ്ങൾ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} മായ്ക്കൽ രേഖയിൽ] ഉണ്ട്. പുറകോട്ട് കൊളുത്തുകൾ ഒരു അനുബന്ധം നിർവ്വചിച്ചിരിക്കുന്നത് പ്രകാരം കളർ സ്പേസ് ഈ താളിന്റെ നാൾവഴി ലയിപ്പിക്കുക പ്രമാണത്തിന്റെ പേര് വർഗ്ഗത്തിൽ നിന്ന് ക്രമരഹിതമായി എടുക്കുന്ന താൾ തിരുത്ത് മുമ്പേ തന്നെ ഒഴിവാക്കിയതായി കാണുന്നു. താളുകൾ സം‌യോജിപ്പിച്ചതിന്റെ രേഖകൾ തന്നിരിക്കുന്ന സമയത്തിനുള്ളിൽ ഇതുമായി പൊരുത്തപ്പെടുന്ന മാറ്റങ്ങൾ ഒന്നുമില്ല. പകർപ്പവകാശത്തിന്റെ സ്ഥിതി: അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ. ഔട്ട്പുട്ട് ആന്തരിക പിഴവ്: അപ്‌ലോഡ് ഘടകം സജ്ജമാക്കിയിട്ടില്ല. താളിന്റെ ഉള്ളടക്കത്തിന്റെ ഭാഷ പ്രവേശിച്ചിരിക്കുമ്പോൾ എപ്പോഴും സുരക്ഷിതമായ കണൿഷൻ ഉപയോഗിക്കുക മറയ്ക്കപ്പെട്ട ഉപയോക്താവ് നടത്തിയ തിരുത്തലുകൾ {{GENDER:$1|[[User:$1|$1]]}} സൃഷ്ടിച്ച അവസാന പതിപ്പിലേയ്ക്ക് മുൻപ്രാപനം ചെയ്തിരിക്കുന്നു</div><div class="font-1d9444 sax">[ml/Meera] കാണുക ഈ താൾ നേരിട്ടു കാണുന്നതിന് താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കണം. '''മുന്നറിയിപ്പ്:''' ഈ താളിൽ വളരെക്കൂടുതൽ പാഴ്സർ ഫങ്ഷനുകൾ വിളിച്ചിരിക്കുന്നു.
-
-{{PLURAL:$2|ഒരു വിളി|$2 വിളികൾ}} മാത്രമുണ്ടാകേണ്ടയിടത്ത്, ഇപ്പോൾ {{PLURAL:$1|ഒരു വിളി|$1 വിളികൾ}} ഉണ്ട്. പ്രമാണത്തിന്റെ പേര്: ഈ താളിന്റെ പതിപ്പുകൾ '''മായ്ച്ചിരിക്കുന്നു'''.
-
-താങ്കൾക്ക് അവ കാണാവുന്നതാണ്; കൂടുതൽ വിവരങ്ങൾ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} മായ്ക്കൽ രേഖയിൽ] ഉണ്ട്. പുറകോട്ട് കൊളുത്തുകൾ ഒരു അനുബന്ധം നിർവ്വചിച്ചിരിക്കുന്നത് പ്രകാരം കളർ സ്പേസ് ഈ താളിന്റെ നാൾവഴി ലയിപ്പിക്കുക പ്രമാണത്തിന്റെ പേര് വർഗ്ഗത്തിൽ നിന്ന് ക്രമരഹിതമായി എടുക്കുന്ന താൾ തിരുത്ത് മുമ്പേ തന്നെ ഒഴിവാക്കിയതായി കാണുന്നു. താളുകൾ സം‌യോജിപ്പിച്ചതിന്റെ രേഖകൾ തന്നിരിക്കുന്ന സമയത്തിനുള്ളിൽ ഇതുമായി പൊരുത്തപ്പെടുന്ന മാറ്റങ്ങൾ ഒന്നുമില്ല. പകർപ്പവകാശത്തിന്റെ സ്ഥിതി: അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ. ഔട്ട്പുട്ട് ആന്തരിക പിഴവ്: അപ്‌ലോഡ് ഘടകം സജ്ജമാക്കിയിട്ടില്ല. താളിന്റെ ഉള്ളടക്കത്തിന്റെ ഭാഷ പ്രവേശിച്ചിരിക്കുമ്പോൾ എപ്പോഴും സുരക്ഷിതമായ കണൿഷൻ ഉപയോഗിക്കുക മറയ്ക്കപ്പെട്ട ഉപയോക്താവ് നടത്തിയ തിരുത്തലുകൾ {{GENDER:$1|[[User:$1|$1]]}} സൃഷ്ടിച്ച അവസാന പതിപ്പിലേയ്ക്ക് മുൻപ്രാപനം ചെയ്തിരിക്കുന്നു</div><div class="font-8f4bc1 sax">[mr/Lohit Marathi] वैयक्तिक साधने प्रकल्प पान पहा माफ करा,हे पान अलीकडेच (मागील २४ तासात) वगळल्या गेले आहे.हा पानाच्या वगळण्याचा व हलविण्याचा लॉग संदर्भासाठी खाली दिला आहे. तुम्ही या पानाची सुरक्षा पातळी बदलू शकत नाही कारण तुम्हाला तसे करण्याची परवानगी नाही. अज्ञात झलक प्रगत पर्याय विपत्र अवरूद्ध केले ({{GENDER:$1|$1}} द्वारे $2 ला $3 वाजता) मापन अचूकता सुस्पष्ट लेखकांची सध्या असलेली संख्या {{PLURAL:$1|एक वगळलेले संपादन|$1 वगळलेली संपादने}} पहा. "$1" ला मोकळे करता आले नाही;ते कुलूपबंद नाही. एकूण संपादने सनोंद-प्रवेश करा जा एकही सदस्य सापडला नाही. {{SITENAME}} वरील अनामी {{PLURAL:$2|सदस्य|सदस्य}} $1 विशेष पृष्ठ चित्राचे / फोटोचे सामान्य नाव बदल सुचीवर कसे दिसेल रूपरेषा खालीलप्रमाणे आहे:
-
-फक्त सूचीमधील संचिका (ज्यांच्यापुढे * हे चिन्ह आहे, अशा ओळी) लक्षात घेतल्या आहेत. ओळीवरील पहिला दुवा हा चुकीच्या संचिकेचा असल्याची खात्री करा.
-त्याच ओळीवरील पुढील दुवे हे अपवाद मानावेत, अर्थात ती अशी पाने आहेत, ज्यांत ही संचिका मिळू शकते. वाईट ($1) वगळण्याची क्रिया रद्द करा प्रकाश दर्जा A वगळलेला इतिहास प्रत्येक पानासाठी योगदात्यांच्या पूर्ण सूचीचा(यादीचा) समावेश करावा</div><div class="font-6a3dd2 sax">[ms/ComicNeue] Dibalikkan secara menegak Project:Hal semasa Semakan semasa Lain-lain (nyatakan imbangan) '''Ingat bahawa anda hanya menguji/melihat pralihat JavaScript anda, ia belum lagi disimpan!''' Fail import tidak dapat dimuat naik kerana melebihi had muat naik yang dibenarkan. $1 hari E-mel: Nisbah zum digital Sekatan julat yang lebih luas daripada /$1 adalah tidak dibenarkan. Fungsi img_auth.php ialah mengoutput fail-fail daripada wiki peribadi.
+ເຫດຜົນ ໃຫ້ໄວ້ ໂດຍ $3 ແມ່ນ ''$2'' ບໍ່ຂີດ ໜ້າບໍ່ມີໜ້າໃດເຊື່ອມຕໍ່ຫາ ບັນທຶກ ການລຶບ ນີ້ແມ່ນ ບັນທຶກການສ້າງ ບັນຊີຜູ້ໃຊ້ໃໝ່ ການດັດແກ້ ໝ້າພິເສດ ພວມດັດແກ້ $1 ໜ້ານີ້ ບໍ່ສາມາດສ້າງ ບັນຊີ ໄດ້ ເນື້ອໃນ ບໍ່ສະແດງເນື້ອໃນຂອງບົດຄວາມ ຢູ່ທາງລຸ່ມ ສ່ວນຕ່າງ</div><div class="font-a57c85 sax">[loy/Jomolhari] </div><div class="font-a57c85 sax">[luk/Jomolhari] </div><div class="font-a57c85 sax">[lya/Jomolhari] </div><div class="font-1b4e52 sax">[mak/Saweri] </div><div class="font-5d2967 sax">[mi/OpenDyslexic] Mo {{SITENAME}} hunaia Whārangi motuhake Rāhina Ngā hononga mai Huringa pūtahi Whakaaturia Rāapa Mahuru Hōngongoi Poutū-te-rangi Hau Kāinga Paenga-whāwhā Tiro rerekētanga Here-turi-kōkā Kōrerohia Rārangi kōrero Haratua Haere Tipihaere Pānui pūnaha Whakakore Haere papa tauira Hunaia Tomokanga hapori Project:Kōrero Kōrero nehe Kawepūrongo Wāhanga Pipiri Tāia Rāmere Hononga toitū Kōrerorero Hui-tanguru Kōwhiringa Huarahi Whakamārama Rārangi mātaki Kohi-tātea Rārangi mātaki Project:Tikanga tūmataiti Reo kē Huringa pūtahi - pouaka utauta Whiringa-ā-nuku Āwhina Hakihea Rātū Rāpare Project:Tomokanga hapori Huringa hou Tuku atu Rātapu kāti te mātaki Whiringa-ā-rangi whakakite Tiaki Whakatika tangohia Nekehia Hau Kāinga Ka whakaaturia i raro iho nei ngā '''huringa hou''' o tēnei Wiki. Rerekētanga pū tahi Whakarere Mātaki tuhi pānui Ngā whārangi katoa Tuhinga/kaituhi Tikanga tūmataiti Rāhoroi Whakangungua Rapua</div><div class="font-6a3dd2 sax">[ms/ComicNeue] Dibalikkan secara menegak Project:Hal semasa Semakan semasa Lain-lain (nyatakan imbangan) '''Ingat bahawa anda hanya menguji/melihat pralihat JavaScript anda, ia belum lagi disimpan!''' Fail import tidak dapat dimuat naik kerana melebihi had muat naik yang dibenarkan. $1 hari E-mel: Nisbah zum digital Sekatan julat yang lebih luas daripada /$1 adalah tidak dibenarkan. Fungsi img_auth.php ialah mengoutput fail-fail daripada wiki peribadi.
Wiki ini telah dikonfigurasikan sebagai wiki awam.
Untuk keselamatan optimum, img_auth.php telah dilumpuhkan. Lihat laman pengguna Ralat log masuk Dihapuskan untuk membuka laluan untuk pemindahan dari "[[$1]]" mencari laman-laman yang telah dihapuskan Birokrat $1 telah {{GENDER:$2|menyekat}} {{GENDER:$4|$3}} selama $5 $6 Tajuk ringkas Nyahsekat pengguna Ralat pertanyaan pangkalan data telah terjadi. Terdapat beberapa masalah dengan input anda "$1" sedang disalurkan. Tarikh dan waktu pendigitan Maaf, laman ini baru-baru sahaja dihapuskan (dalam 24 jam yang lepas).
Log penghapusan dan pemindahan untuk laman ini dinyatakan di bawah sebagai rujukan.</div><div class="font-5d2967 sax">[ms/OpenDyslexic] Dibalikkan secara menegak Project:Hal semasa Semakan semasa Lain-lain (nyatakan imbangan) '''Ingat bahawa anda hanya menguji/melihat pralihat JavaScript anda, ia belum lagi disimpan!''' Fail import tidak dapat dimuat naik kerana melebihi had muat naik yang dibenarkan. $1 hari E-mel: Nisbah zum digital Sekatan julat yang lebih luas daripada /$1 adalah tidak dibenarkan. Fungsi img_auth.php ialah mengoutput fail-fail daripada wiki peribadi.
Wiki ini telah dikonfigurasikan sebagai wiki awam.
Untuk keselamatan optimum, img_auth.php telah dilumpuhkan. Lihat laman pengguna Ralat log masuk Dihapuskan untuk membuka laluan untuk pemindahan dari "[[$1]]" mencari laman-laman yang telah dihapuskan Birokrat $1 telah {{GENDER:$2|menyekat}} {{GENDER:$4|$3}} selama $5 $6 Tajuk ringkas Nyahsekat pengguna Ralat pertanyaan pangkalan data telah terjadi. Terdapat beberapa masalah dengan input anda "$1" sedang disalurkan. Tarikh dan waktu pendigitan Maaf, laman ini baru-baru sahaja dihapuskan (dalam 24 jam yang lepas).
-Log penghapusan dan pemindahan untuk laman ini dinyatakan di bawah sebagai rujukan.</div><div class="font-a57c85 sax">[muk/Jomolhari] </div><div class="font-27e569 sax">[mul/Autonym] </div><div class="font-303234 sax">[my/TharLon] စာမျက်နှာ "$1" နှင့် "$2" အကြား ကွဲပြားမှု ဤအမည်ဖြင့် မည်သည့်ဖိုင်မှ မရှိပါ။ သိုရာတွင် ယင်းကို [$1 upload တင်]နိုင်သည်။ မူပိုင်ခွင့် အခြေအနေ - စီမံခန့်ခွဲသူများသာ {{GENDER:|သင်၏ အသုံးပြုသူ}} စာမျက်နှာ ဖိုင်စာမျက်နှာကိုကြည့်ရန် ဤစာမျက်နှာတွင် ဝီကီ၏ လတ်တလောပြောင်းလဲမှုများကို နောက်ကြောင်းခံလိုက်ရန် ဗားရှင်း နေ ခေါင်းစဉ်များအား အလိုအလျောက် နံပါတ်စဉ်ရန် $3 $2 မှစသော အပြောင်းအလဲအသစ်များကို ပြရန် ပရင့်ထုတ်ရန် အလိုရှိသော ဖိုင်များ နိုဝင်ဘာ စာမျက်နှာများကို တည်းဖြတ်ရန် စောင့်ကြည့်ခြင်းကို ရပ်တန့်ရန် စာမျက်နှာအားလုံး ဤသည်မှာ နောက်ဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}အတွင်း တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူများ စာရင်း ဖြစ်သည်။ ($1 မှ ပြန်ညွှန်းထားသည်) အောက်တိုဘာ ဤစာမျက်နှာကို မဖျက်တော့ရန် မသတ်မှတ်ထားသော ဤကဏ္ဍသည် လက်ရှိတွင် စာမျက်နှာများ သို့မဟုတ် မီဒီယာများ မရှိပါ။ အကူအညီ စာမျက်နှာ အနောက်လောင်ဂျီကျု ဘာသာ - Log in ဝင်ရန်/ အကောင့် ဖန်တီးရန် အသုံးပြုထားသော ဆော့ဝဲ ဖိုင်​တင်​ရန်​ စကားဝှက်ကို သတ်မှတ်ပြီးနောက် Log in ဝင်ရန် လက်မှတ် ဝမ်းနည်းပါသည်။ ဤဆိုက်သည် နည်းပညာပိုင်းဆိုင်ရာ အခက်အခဲများ ကြုံတွေ့နေရပါသည်။ ← ပြီးခဲ့သော စာမျက်နှာ</div><div class="font-c9ee06 sax">[my/Myanmar3] စာမျက်နှာ "$1" နှင့် "$2" အကြား ကွဲပြားမှု ဤအမည်ဖြင့် မည်သည့်ဖိုင်မှ မရှိပါ။ သိုရာတွင် ယင်းကို [$1 upload တင်]နိုင်သည်။ မူပိုင်ခွင့် အခြေအနေ - စီမံခန့်ခွဲသူများသာ {{GENDER:|သင်၏ အသုံးပြုသူ}} စာမျက်နှာ ဖိုင်စာမျက်နှာကိုကြည့်ရန် ဤစာမျက်နှာတွင် ဝီကီ၏ လတ်တလောပြောင်းလဲမှုများကို နောက်ကြောင်းခံလိုက်ရန် ဗားရှင်း နေ ခေါင်းစဉ်များအား အလိုအလျောက် နံပါတ်စဉ်ရန် $3 $2 မှစသော အပြောင်းအလဲအသစ်များကို ပြရန် ပရင့်ထုတ်ရန် အလိုရှိသော ဖိုင်များ နိုဝင်ဘာ စာမျက်နှာများကို တည်းဖြတ်ရန် စောင့်ကြည့်ခြင်းကို ရပ်တန့်ရန် စာမျက်နှာအားလုံး ဤသည်မှာ နောက်ဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}အတွင်း တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူများ စာရင်း ဖြစ်သည်။ ($1 မှ ပြန်ညွှန်းထားသည်) အောက်တိုဘာ ဤစာမျက်နှာကို မဖျက်တော့ရန် မသတ်မှတ်ထားသော ဤကဏ္ဍသည် လက်ရှိတွင် စာမျက်နှာများ သို့မဟုတ် မီဒီယာများ မရှိပါ။ အကူအညီ စာမျက်နှာ အနောက်လောင်ဂျီကျု ဘာသာ - Log in ဝင်ရန်/ အကောင့် ဖန်တီးရန် အသုံးပြုထားသော ဆော့ဝဲ ဖိုင်​တင်​ရန်​ စကားဝှက်ကို သတ်မှတ်ပြီးနောက် Log in ဝင်ရန် လက်မှတ် ဝမ်းနည်းပါသည်။ ဤဆိုက်သည် နည်းပညာပိုင်းဆိုင်ရာ အခက်အခဲများ ကြုံတွေ့နေရပါသည်။ ← ပြီးခဲ့သော စာမျက်နှာ</div><div class="font-9bc63b sax">[my/Padauk] စာမျက်နှာ "$1" နှင့် "$2" အကြား ကွဲပြားမှု ဤအမည်ဖြင့် မည်သည့်ဖိုင်မှ မရှိပါ။ သိုရာတွင် ယင်းကို [$1 upload တင်]နိုင်သည်။ မူပိုင်ခွင့် အခြေအနေ - စီမံခန့်ခွဲသူများသာ {{GENDER:|သင်၏ အသုံးပြုသူ}} စာမျက်နှာ ဖိုင်စာမျက်နှာကိုကြည့်ရန် ဤစာမျက်နှာတွင် ဝီကီ၏ လတ်တလောပြောင်းလဲမှုများကို နောက်ကြောင်းခံလိုက်ရန် ဗားရှင်း နေ ခေါင်းစဉ်များအား အလိုအလျောက် နံပါတ်စဉ်ရန် $3 $2 မှစသော အပြောင်းအလဲအသစ်များကို ပြရန် ပရင့်ထုတ်ရန် အလိုရှိသော ဖိုင်များ နိုဝင်ဘာ စာမျက်နှာများကို တည်းဖြတ်ရန် စောင့်ကြည့်ခြင်းကို ရပ်တန့်ရန် စာမျက်နှာအားလုံး ဤသည်မှာ နောက်ဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}အတွင်း တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူများ စာရင်း ဖြစ်သည်။ ($1 မှ ပြန်ညွှန်းထားသည်) အောက်တိုဘာ ဤစာမျက်နှာကို မဖျက်တော့ရန် မသတ်မှတ်ထားသော ဤကဏ္ဍသည် လက်ရှိတွင် စာမျက်နှာများ သို့မဟုတ် မီဒီယာများ မရှိပါ။ အကူအညီ စာမျက်နှာ အနောက်လောင်ဂျီကျု ဘာသာ - Log in ဝင်ရန်/ အကောင့် ဖန်တီးရန် အသုံးပြုထားသော ဆော့ဝဲ ဖိုင်​တင်​ရန်​ စကားဝှက်ကို သတ်မှတ်ပြီးနောက် Log in ဝင်ရန် လက်မှတ် ဝမ်းနည်းပါသည်။ ဤဆိုက်သည် နည်းပညာပိုင်းဆိုင်ရာ အခက်အခဲများ ကြုံတွေ့နေရပါသည်။ ← ပြီးခဲ့သော စာမျက်နှာ</div><div class="font-c00ec2 sax">[nan/CharisSIL] Khoàⁿ chit ia̍h ê logs Tī chit--ê wiki, lí boē-tàng kái bi̍t-bé. Só͘-ū gōa-phôe kong-ke ê CSS/JavaScript Hó ah Ko·-ia̍h kàm-sī 記錄 Kā goá pian-chi̍p kòe ê ia̍h kah tóng-àn ka-ji̍p kàm-sī-toaⁿ lāi-té Ia̍h le̍k-sú 無提供系統服務總數的統計。 Tó-ūi liân kàu chia Chit ia̍h tī $1, $2 ū kái--koè 名空間編號 $1(毋知名)的"$2"文字標題袂使用。 {{PLURAL:$1|chêng|chêng $1 ê}} Iáⁿ-siōng ê miâ í-keng kái chò "$1". Í-keng uì lí ê kám-sī-toaⁿ soá {{PLURAL:$1|ia̍h}} cháu: Siu-kái chit ia̍h Choán-ia̍h Khoàⁿ ($1 {{int:pipe-separator}} $2) ($3) 這个編輯抑無巡視過 Teng-ji̍p / khui sin kháu-chō Lí-iû: ''Chit-má chit ê lūi-pia̍t bô ia̍h ia̍h-sī mûi-thé.'' Tò-tńg khì $1. Chhú-siau Kî-thaⁿ--ê {{PLURAL:$2|kái-sek-tō͘ }}: $1. It Lí-iû: Ká bē tńg khì Iōng-chiá thóng-kè sò·-ba̍k Chit ia̍h hông só tiâu leh, bē pian-chi̍p tit, mā bē-tàng chò kî-thaⁿ oa̍h-tāng. {{PLURAL:$1|āu|āu $1 ê}} Sì Khu̍t-thâu-ia̍h Só·-ū ê ia̍h ($1 miâ-khong-kan) Bô chit-khoán tōng-chok Khoàⁿ lōe-iông sī: '$1' Teng-chhut kái pó-hō· Se̍h chām 開另外一个口座 Hit ê URL só͘ chí-tēng ê tōng-chok bô-hāu.
+Log penghapusan dan pemindahan untuk laman ini dinyatakan di bawah sebagai rujukan.</div><div class="font-a57c85 sax">[muk/Jomolhari] </div><div class="font-303234 sax">[my/TharLon] စာမျက်နှာ "$1" နှင့် "$2" အကြား ကွဲပြားမှု ဤအမည်ဖြင့် မည်သည့်ဖိုင်မှ မရှိပါ။ သိုရာတွင် ယင်းကို [$1 upload တင်]နိုင်သည်။ မူပိုင်ခွင့် အခြေအနေ - စီမံခန့်ခွဲသူများသာ {{GENDER:|သင်၏ အသုံးပြုသူ}} စာမျက်နှာ ဖိုင်စာမျက်နှာကိုကြည့်ရန် ဤစာမျက်နှာတွင် ဝီကီ၏ လတ်တလောပြောင်းလဲမှုများကို နောက်ကြောင်းခံလိုက်ရန် ဗားရှင်း နေ ခေါင်းစဉ်များအား အလိုအလျောက် နံပါတ်စဉ်ရန် $3 $2 မှစသော အပြောင်းအလဲအသစ်များကို ပြရန် ပရင့်ထုတ်ရန် အလိုရှိသော ဖိုင်များ နိုဝင်ဘာ စာမျက်နှာများကို တည်းဖြတ်ရန် စောင့်ကြည့်ခြင်းကို ရပ်တန့်ရန် စာမျက်နှာအားလုံး ဤသည်မှာ နောက်ဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}အတွင်း တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူများ စာရင်း ဖြစ်သည်။ ($1 မှ ပြန်ညွှန်းထားသည်) အောက်တိုဘာ ဤစာမျက်နှာကို မဖျက်တော့ရန် မသတ်မှတ်ထားသော ဤကဏ္ဍသည် လက်ရှိတွင် စာမျက်နှာများ သို့မဟုတ် မီဒီယာများ မရှိပါ။ အကူအညီ စာမျက်နှာ အနောက်လောင်ဂျီကျု ဘာသာ - Log in ဝင်ရန်/ အကောင့် ဖန်တီးရန် အသုံးပြုထားသော ဆော့ဝဲ ဖိုင်​တင်​ရန်​ စကားဝှက်ကို သတ်မှတ်ပြီးနောက် Log in ဝင်ရန် လက်မှတ် ဝမ်းနည်းပါသည်။ ဤဆိုက်သည် နည်းပညာပိုင်းဆိုင်ရာ အခက်အခဲများ ကြုံတွေ့နေရပါသည်။ ← ပြီးခဲ့သော စာမျက်နှာ</div><div class="font-c9ee06 sax">[my/Myanmar3] စာမျက်နှာ "$1" နှင့် "$2" အကြား ကွဲပြားမှု ဤအမည်ဖြင့် မည်သည့်ဖိုင်မှ မရှိပါ။ သိုရာတွင် ယင်းကို [$1 upload တင်]နိုင်သည်။ မူပိုင်ခွင့် အခြေအနေ - စီမံခန့်ခွဲသူများသာ {{GENDER:|သင်၏ အသုံးပြုသူ}} စာမျက်နှာ ဖိုင်စာမျက်နှာကိုကြည့်ရန် ဤစာမျက်နှာတွင် ဝီကီ၏ လတ်တလောပြောင်းလဲမှုများကို နောက်ကြောင်းခံလိုက်ရန် ဗားရှင်း နေ ခေါင်းစဉ်များအား အလိုအလျောက် နံပါတ်စဉ်ရန် $3 $2 မှစသော အပြောင်းအလဲအသစ်များကို ပြရန် ပရင့်ထုတ်ရန် အလိုရှိသော ဖိုင်များ နိုဝင်ဘာ စာမျက်နှာများကို တည်းဖြတ်ရန် စောင့်ကြည့်ခြင်းကို ရပ်တန့်ရန် စာမျက်နှာအားလုံး ဤသည်မှာ နောက်ဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}အတွင်း တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူများ စာရင်း ဖြစ်သည်။ ($1 မှ ပြန်ညွှန်းထားသည်) အောက်တိုဘာ ဤစာမျက်နှာကို မဖျက်တော့ရန် မသတ်မှတ်ထားသော ဤကဏ္ဍသည် လက်ရှိတွင် စာမျက်နှာများ သို့မဟုတ် မီဒီယာများ မရှိပါ။ အကူအညီ စာမျက်နှာ အနောက်လောင်ဂျီကျု ဘာသာ - Log in ဝင်ရန်/ အကောင့် ဖန်တီးရန် အသုံးပြုထားသော ဆော့ဝဲ ဖိုင်​တင်​ရန်​ စကားဝှက်ကို သတ်မှတ်ပြီးနောက် Log in ဝင်ရန် လက်မှတ် ဝမ်းနည်းပါသည်။ ဤဆိုက်သည် နည်းပညာပိုင်းဆိုင်ရာ အခက်အခဲများ ကြုံတွေ့နေရပါသည်။ ← ပြီးခဲ့သော စာမျက်နှာ</div><div class="font-9bc63b sax">[my/Padauk] စာမျက်နှာ "$1" နှင့် "$2" အကြား ကွဲပြားမှု ဤအမည်ဖြင့် မည်သည့်ဖိုင်မှ မရှိပါ။ သိုရာတွင် ယင်းကို [$1 upload တင်]နိုင်သည်။ မူပိုင်ခွင့် အခြေအနေ - စီမံခန့်ခွဲသူများသာ {{GENDER:|သင်၏ အသုံးပြုသူ}} စာမျက်နှာ ဖိုင်စာမျက်နှာကိုကြည့်ရန် ဤစာမျက်နှာတွင် ဝီကီ၏ လတ်တလောပြောင်းလဲမှုများကို နောက်ကြောင်းခံလိုက်ရန် ဗားရှင်း နေ ခေါင်းစဉ်များအား အလိုအလျောက် နံပါတ်စဉ်ရန် $3 $2 မှစသော အပြောင်းအလဲအသစ်များကို ပြရန် ပရင့်ထုတ်ရန် အလိုရှိသော ဖိုင်များ နိုဝင်ဘာ စာမျက်နှာများကို တည်းဖြတ်ရန် စောင့်ကြည့်ခြင်းကို ရပ်တန့်ရန် စာမျက်နှာအားလုံး ဤသည်မှာ နောက်ဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}အတွင်း တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူများ စာရင်း ဖြစ်သည်။ ($1 မှ ပြန်ညွှန်းထားသည်) အောက်တိုဘာ ဤစာမျက်နှာကို မဖျက်တော့ရန် မသတ်မှတ်ထားသော ဤကဏ္ဍသည် လက်ရှိတွင် စာမျက်နှာများ သို့မဟုတ် မီဒီယာများ မရှိပါ။ အကူအညီ စာမျက်နှာ အနောက်လောင်ဂျီကျု ဘာသာ - Log in ဝင်ရန်/ အကောင့် ဖန်တီးရန် အသုံးပြုထားသော ဆော့ဝဲ ဖိုင်​တင်​ရန်​ စကားဝှက်ကို သတ်မှတ်ပြီးနောက် Log in ဝင်ရန် လက်မှတ် ဝမ်းနည်းပါသည်။ ဤဆိုက်သည် နည်းပညာပိုင်းဆိုင်ရာ အခက်အခဲများ ကြုံတွေ့နေရပါသည်။ ← ပြီးခဲ့သော စာမျက်နှာ</div><div class="font-c00ec2 sax">[nan/CharisSIL] Khoàⁿ chit ia̍h ê logs Tī chit--ê wiki, lí boē-tàng kái bi̍t-bé. Só͘-ū gōa-phôe kong-ke ê CSS/JavaScript Hó ah Ko·-ia̍h kàm-sī 記錄 Kā goá pian-chi̍p kòe ê ia̍h kah tóng-àn ka-ji̍p kàm-sī-toaⁿ lāi-té Ia̍h le̍k-sú 無提供系統服務總數的統計。 Tó-ūi liân kàu chia Chit ia̍h tī $1, $2 ū kái--koè 名空間編號 $1(毋知名)的"$2"文字標題袂使用。 {{PLURAL:$1|chêng|chêng $1 ê}} Iáⁿ-siōng ê miâ í-keng kái chò "$1". Í-keng uì lí ê kám-sī-toaⁿ soá {{PLURAL:$1|ia̍h}} cháu: Siu-kái chit ia̍h Choán-ia̍h Khoàⁿ ($1 {{int:pipe-separator}} $2) ($3) 這个編輯抑無巡視過 Teng-ji̍p / khui sin kháu-chō Lí-iû: ''Chit-má chit ê lūi-pia̍t bô ia̍h ia̍h-sī mûi-thé.'' Tò-tńg khì $1. Chhú-siau Kî-thaⁿ--ê {{PLURAL:$2|kái-sek-tō͘ }}: $1. It Lí-iû: Ká bē tńg khì Iōng-chiá thóng-kè sò·-ba̍k Chit ia̍h hông só tiâu leh, bē pian-chi̍p tit, mā bē-tàng chò kî-thaⁿ oa̍h-tāng. {{PLURAL:$1|āu|āu $1 ê}} Sì Khu̍t-thâu-ia̍h Só·-ū ê ia̍h ($1 miâ-khong-kan) Bô chit-khoán tōng-chok Khoàⁿ lōe-iông sī: '$1' Teng-chhut kái pó-hō· Se̍h chām 開另外一个口座 Hit ê URL só͘ chí-tēng ê tōng-chok bô-hāu.
Lí khó-lêng phah m̄-tio̍h URL, ia̍h sī ji̍h tio̍h chhò-ngō͘ ê liân-kiat.
Che mā khó-lêng sī {{SITENAME}} só͘ sú-iōng ê nńg-thé chhut būn-tê.</div><div class="font-8e58af sax">[nan/Doulos SIL] Khoàⁿ chit ia̍h ê logs Tī chit--ê wiki, lí boē-tàng kái bi̍t-bé. Só͘-ū gōa-phôe kong-ke ê CSS/JavaScript Hó ah Ko·-ia̍h kàm-sī 記錄 Kā goá pian-chi̍p kòe ê ia̍h kah tóng-àn ka-ji̍p kàm-sī-toaⁿ lāi-té Ia̍h le̍k-sú 無提供系統服務總數的統計。 Tó-ūi liân kàu chia Chit ia̍h tī $1, $2 ū kái--koè 名空間編號 $1(毋知名)的"$2"文字標題袂使用。 {{PLURAL:$1|chêng|chêng $1 ê}} Iáⁿ-siōng ê miâ í-keng kái chò "$1". Í-keng uì lí ê kám-sī-toaⁿ soá {{PLURAL:$1|ia̍h}} cháu: Siu-kái chit ia̍h Choán-ia̍h Khoàⁿ ($1 {{int:pipe-separator}} $2) ($3) 這个編輯抑無巡視過 Teng-ji̍p / khui sin kháu-chō Lí-iû: ''Chit-má chit ê lūi-pia̍t bô ia̍h ia̍h-sī mûi-thé.'' Tò-tńg khì $1. Chhú-siau Kî-thaⁿ--ê {{PLURAL:$2|kái-sek-tō͘ }}: $1. It Lí-iû: Ká bē tńg khì Iōng-chiá thóng-kè sò·-ba̍k Chit ia̍h hông só tiâu leh, bē pian-chi̍p tit, mā bē-tàng chò kî-thaⁿ oa̍h-tāng. {{PLURAL:$1|āu|āu $1 ê}} Sì Khu̍t-thâu-ia̍h Só·-ū ê ia̍h ($1 miâ-khong-kan) Bô chit-khoán tōng-chok Khoàⁿ lōe-iông sī: '$1' Teng-chhut kái pó-hō· Se̍h chām 開另外一个口座 Hit ê URL só͘ chí-tēng ê tōng-chok bô-hāu.
Lí khó-lêng phah m̄-tio̍h URL, ia̍h sī ji̍h tio̍h chhò-ngō͘ ê liân-kiat.
@@ -1438,23 +1119,11 @@ Che mā khó-lêng sī {{SITENAME}} só͘ sú-iōng ê nńg-thé chhut būn-tê.
kan redigere sider, endre sine innstillinger, redigere sin
overvåkningsliste, og andre ting som krever endringer i databasen.
Bekreft at du har til hensikt å gjøre dette. merke andre brukeres redigeringer som patruljert Legg denne siden til overvåkningslisten din Se [[Special:Log/delete|slettingsloggen]] for nylig slettede sider. Antall underkategorier Slett denne taggen '''Husk at du bare forhåndsviser denne JavaScript-koden.'''
-'''Den har ikke blitt lagret ennå!''' Logg inn for å kunne se siden eller utføre denne handlingen. Fjerner fra overvåkningsliste… Databasen er nå låst Aktiver taggen Avkjenningsmetode Tegninger (vektor-bilder) Tilpasset bildebehandling Tilfeldig side innenfor kategorien Oppgi en e-postadresse for at disse funksjonene skal fungere. Vis nye filer fra og med $2 $1 Denne lista er ufullstendig. Fjern redigeringer Underkategorier Kunne ikke hente filnumre for sammenligning. En ukjent feil har oppstått Fjerne blokkering av seg selv</div><div class="font-7c29ed sax">[ne/Lohit Nepali] "[[$2]]" बाट "[[$1]]"मा सुरक्षा व्यवस्था सारियो एक्सएमएल पार्स रूख देखाउने $1 ले ट्याग $4 {{GENDER:$2|तयार गरेको छ}} $1 पंक्ति $2 , हरफ $3 (बाइट $4): $5 मिडिया तथ्याङ्कहरू यो पृष्ठ ती पृष्ठहरूको सूची दिन्छ जुन अन्य पुनर्निर्देशित पृष्ठहरू तिर पुनर्निर्देशित छ। प्रत्येक पङ्क्तिमा पहिलो र दोश्रो पुनर्निर्देशनको लिङ्कहरू, तथा दोश्रो पुनर्निर्देशनको लक्ष्य पनि छ, सामान्यत यहि "वास्तविक" लक्ष्यित पृष्ठ हुनेछ, र पहिलो पुनर्देशन वास्तवमा यसैको लक्षित हुनु पर्नेछ। काटिएको प्रविष्टिहरू समाधान गरिएको छ। प्रयोगकर्ता श्रृजना लग प्रवेश विन्दु युआरयलहरू योगदानकर्ताहरु त्यस गन्तव्य शिर्षकमा सार्न सकिन्न। {{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरू}} र {{PLURAL:$2|एउटा फाइल|$2 फाइलहरू}} पुनर्स्थापित गरियो सबैभन्दा बढि ट्रान्सक्ल्युडेड पृष्ठहरू देखाई रहेको छ{{PLURAL:$1|1 result|$1 परिणाम}} सम्म पहुँच #$2 देखि #$3 मा। उदाहरण अमान्य सामग्री डेटा डाउनलोड स्वत: स्वेत वचत *सामान्य सुरक्षाका कारणहरु
-** अत्यधिक बर्बरता
-** अत्यधिक अचाहिंदा सन्देश
-** जवाबी सम्पादन-झगडा
-** अधिकतम खोलिने पृष्ठ तपाईंलाई अन्य विकिमा प्रयोगकर्ता अधिकार सम्पादन गर्ने अनुमति छैन।</div><div class="font-611a0a sax">[ne/Madan] "[[$2]]" बाट "[[$1]]"मा सुरक्षा व्यवस्था सारियो एक्सएमएल पार्स रूख देखाउने $1 ले ट्याग $4 {{GENDER:$2|तयार गरेको छ}} $1 पंक्ति $2 , हरफ $3 (बाइट $4): $5 मिडिया तथ्याङ्कहरू यो पृष्ठ ती पृष्ठहरूको सूची दिन्छ जुन अन्य पुनर्निर्देशित पृष्ठहरू तिर पुनर्निर्देशित छ। प्रत्येक पङ्क्तिमा पहिलो र दोश्रो पुनर्निर्देशनको लिङ्कहरू, तथा दोश्रो पुनर्निर्देशनको लक्ष्य पनि छ, सामान्यत यहि "वास्तविक" लक्ष्यित पृष्ठ हुनेछ, र पहिलो पुनर्देशन वास्तवमा यसैको लक्षित हुनु पर्नेछ। काटिएको प्रविष्टिहरू समाधान गरिएको छ। प्रयोगकर्ता श्रृजना लग प्रवेश विन्दु युआरयलहरू योगदानकर्ताहरु त्यस गन्तव्य शिर्षकमा सार्न सकिन्न। {{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरू}} र {{PLURAL:$2|एउटा फाइल|$2 फाइलहरू}} पुनर्स्थापित गरियो सबैभन्दा बढि ट्रान्सक्ल्युडेड पृष्ठहरू देखाई रहेको छ{{PLURAL:$1|1 result|$1 परिणाम}} सम्म पहुँच #$2 देखि #$3 मा। उदाहरण अमान्य सामग्री डेटा डाउनलोड स्वत: स्वेत वचत *सामान्य सुरक्षाका कारणहरु
-** अत्यधिक बर्बरता
-** अत्यधिक अचाहिंदा सन्देश
-** जवाबी सम्पादन-झगडा
-** अधिकतम खोलिने पृष्ठ तपाईंलाई अन्य विकिमा प्रयोगकर्ता अधिकार सम्पादन गर्ने अनुमति छैन।</div><div class="font-6a3dd2 sax">[nl/ComicNeue] Er is een fout opgetreden bij het verbergen van het object van $1 om $2 uur: dit is de huidige versie.
+'''Den har ikke blitt lagret ennå!''' Logg inn for å kunne se siden eller utføre denne handlingen. Fjerner fra overvåkningsliste… Databasen er nå låst Aktiver taggen Avkjenningsmetode Tegninger (vektor-bilder) Tilpasset bildebehandling Tilfeldig side innenfor kategorien Oppgi en e-postadresse for at disse funksjonene skal fungere. Vis nye filer fra og med $2 $1 Denne lista er ufullstendig. Fjern redigeringer Underkategorier Kunne ikke hente filnumre for sammenligning. En ukjent feil har oppstått Fjerne blokkering av seg selv</div><div class="font-6a3dd2 sax">[nl/ComicNeue] Er is een fout opgetreden bij het verbergen van het object van $1 om $2 uur: dit is de huidige versie.
Deze versie kan niet verborgen worden. U hebt geen rechten om bestanden te hernoemen. Cyrillisch U kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''. De verschillen tussen de geselecteerde versies van deze pagina bekijken. U hebt geen rechten om een pagina naar een gebruikerspagina te hernoemen. Hernoemen naar een subpagina is wel mogelijk. Nadat u begonnen bent met uw wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina {{GENDER:$1|verwijderd}}. Bevestig dat u de pagina opnieuw wilt aanmaken. Bronnen en gegevens over een boek zoeken Ongeldige titel met naamruimte "$2" en tekst "$3" Versie door {{GENDER:$6|$2}} op $4 om $5$7 '''Let op: u test nu uw persoonlijke JavaScript.'''
'''De pagina is niet opgeslagen!''' Tokens opnieuw instellen De pagina "$1" is aan uw volglijst toegevoegd. Gebeurtenissen rond het inhoudsmodel van een pagina Doel (paginanaam of {{ns:user}}:gebruikersnaam voor gebruiker):</div><div class="font-5d2967 sax">[nl/OpenDyslexic] Er is een fout opgetreden bij het verbergen van het object van $1 om $2 uur: dit is de huidige versie.
Deze versie kan niet verborgen worden. U hebt geen rechten om bestanden te hernoemen. Cyrillisch U kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''. De verschillen tussen de geselecteerde versies van deze pagina bekijken. U hebt geen rechten om een pagina naar een gebruikerspagina te hernoemen. Hernoemen naar een subpagina is wel mogelijk. Nadat u begonnen bent met uw wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina {{GENDER:$1|verwijderd}}. Bevestig dat u de pagina opnieuw wilt aanmaken. Bronnen en gegevens over een boek zoeken Ongeldige titel met naamruimte "$2" en tekst "$3" Versie door {{GENDER:$6|$2}} op $4 om $5$7 '''Let op: u test nu uw persoonlijke JavaScript.'''
-'''De pagina is niet opgeslagen!''' Tokens opnieuw instellen De pagina "$1" is aan uw volglijst toegevoegd. Gebeurtenissen rond het inhoudsmodel van een pagina Doel (paginanaam of {{ns:user}}:gebruikersnaam voor gebruiker):</div><div class="font-5d2967 sax">[oc/OpenDyslexic] Connexion Dimg $1 jorn{{PLURAL:$1||s}} Afichar Precision de la mesura Edicion dels istorics fusionables (void) Confirmacion de l’adreça de corrièr electronic anullada Africa tornar nomenar las paginas de l’utilizaire de banca. Valor imprevista : « $1 » = « $2 ». indefinit I a pas d’entresenhas d’atribucion disponiblas per aquesta pagina. Pòt levar $2 {{PLURAL:$2|gropa|gropes}} : $1 Tornar nomenar las sospaginas (fins a $1 paginas) Programa normal Opcions de telecargament {{PLURAL:$1|Lo fichièr seguent es un duplicata|Los fichièrs seguents son de duplicatas}} d'aqueste fichièr ([[Special:FileDuplicateSearch/$2|mai de detalhs]]): Còde del luòc representat &amp;#32;e Nombre de foncions d’analisi costosas Tipe de flux invalid. pagina seguenta → Setembre Error : la modificacion a fracassat actu Apondre las paginas e los fichièrs que tòrni nomenar a ma lista de seguiment Importar un fichièr dempuèi una adreça URL Picatz un senhal Adreça de corrièr electronic : Gujarati La modificacion qu'avètz ensajat de realizar es estada anullada per una extension.</div><div class="font-a57c85 sax">[ola/Jomolhari] </div><div class="font-36b991 sax">[or/Lohit Odia] ଇଣ୍ଟରଉଇକି ଲିଙ୍କ ପୃଷ୍ଠା ଘୁଞ୍ଚାଇବା ନିମନ୍ତେ ଏକ ବୈଧ ଲକ୍ଷସ୍ଥଳ ନୁହେଁ । ସଙ୍କଳନସବୁକୁ ମିଶାଇଦେବେ $1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}} ଆଗରୁ ମାନକ ଆଲୁଅ A {{SITENAME}} ସହିତ ଯୋଡ଼ା ମିଳୁଥିବା ଲଗସବୁ ।
-ଆପଣ ଲଗର ପ୍ରକାର ଅନୁସାରେ ବି ସେସବୁକୁ ବାଛି ପାରିବେ । ଇଉଜରନାଆଁଟି ଛୋଟ ଓ ବଡ଼ ଅକ୍ଷର ଅନୁସାରେ ଅଲଗା ହୋଇଥାଏ, ପୃଷ୍ଠାର ନାଆଁ ସବୁ ବି ଛୋଟ ଓ ବଡ଼ ଇଂରାଜି ଅକ୍ଷର ଅନୁସାରେ ଅଲଗା ହୋଇଥାଏ । '''ଜାଣିବା କଥା:''' ଆପଣା ନୂଆ ଜାଭାସ୍କ୍ରିପ୍ଟ (JavaScript) ସାଇତିବା ଆଗରୁ "{{int:showpreview}}" ବ୍ୟବହାର କରି ପରଖି ନିଅନ୍ତୁ । ନିଜର ପସନ୍ଦ ସମ୍ପାଦନା କରନ୍ତୁ '''ଚେତାବନୀ:''' ଆପଣ ସଫ୍ଟୱେରର ଇଣ୍ଟରଫେସ ଲେଖା ଯୋଗାଇବା ନିମନ୍ତେ ବ୍ୟବହାର କରାଯାଉଥିବା ଏକ ପୃଷ୍ଠାର ସମ୍ପାଦନା କରୁଅଛନ୍ତି ।
-ଏହି ଉଇକିପୃଷ୍ଠାର କିଛି ବି ବଦଳ ବାକି ସଭ୍ୟମାନଙ୍କ ଇଣ୍ଟରଫେସର ଦେଖଣାକୁ ପ୍ରଭାବିତ କରିବ । $1 ଗୋପନ ଭାବେ $3 ପୃଷ୍ଠାରେ {{PLURAL:$5|ସଂସ୍କରଣଟିଏର|$5 ଗୋଟି ସଂସ୍କରଣର}} ଦେଖଣା {{GENDER:$2|ବଦଳାଇଦେଲେ}}: $4 ଏହି ପୃଷ୍ଠାଟି କିଛି ଜଟିଳ ପାର୍ସ ଫଙ୍କସନ ବ୍ୟବହାର କରେ (ଯଥା #ifexist) । [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] ଦେଖନ୍ତୁ । ଭିତରର ଭୁଲ "$1" ପ୍ରକାରର ତ୍ରୁଟି ।</div><div class="font-aef4f3 sax">[or/Utkal] ଇଣ୍ଟରଉଇକି ଲିଙ୍କ ପୃଷ୍ଠା ଘୁଞ୍ଚାଇବା ନିମନ୍ତେ ଏକ ବୈଧ ଲକ୍ଷସ୍ଥଳ ନୁହେଁ । ସଙ୍କଳନସବୁକୁ ମିଶାଇଦେବେ $1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}} ଆଗରୁ ମାନକ ଆଲୁଅ A {{SITENAME}} ସହିତ ଯୋଡ଼ା ମିଳୁଥିବା ଲଗସବୁ ।
-ଆପଣ ଲଗର ପ୍ରକାର ଅନୁସାରେ ବି ସେସବୁକୁ ବାଛି ପାରିବେ । ଇଉଜରନାଆଁଟି ଛୋଟ ଓ ବଡ଼ ଅକ୍ଷର ଅନୁସାରେ ଅଲଗା ହୋଇଥାଏ, ପୃଷ୍ଠାର ନାଆଁ ସବୁ ବି ଛୋଟ ଓ ବଡ଼ ଇଂରାଜି ଅକ୍ଷର ଅନୁସାରେ ଅଲଗା ହୋଇଥାଏ । '''ଜାଣିବା କଥା:''' ଆପଣା ନୂଆ ଜାଭାସ୍କ୍ରିପ୍ଟ (JavaScript) ସାଇତିବା ଆଗରୁ "{{int:showpreview}}" ବ୍ୟବହାର କରି ପରଖି ନିଅନ୍ତୁ । ନିଜର ପସନ୍ଦ ସମ୍ପାଦନା କରନ୍ତୁ '''ଚେତାବନୀ:''' ଆପଣ ସଫ୍ଟୱେରର ଇଣ୍ଟରଫେସ ଲେଖା ଯୋଗାଇବା ନିମନ୍ତେ ବ୍ୟବହାର କରାଯାଉଥିବା ଏକ ପୃଷ୍ଠାର ସମ୍ପାଦନା କରୁଅଛନ୍ତି ।
-ଏହି ଉଇକିପୃଷ୍ଠାର କିଛି ବି ବଦଳ ବାକି ସଭ୍ୟମାନଙ୍କ ଇଣ୍ଟରଫେସର ଦେଖଣାକୁ ପ୍ରଭାବିତ କରିବ । $1 ଗୋପନ ଭାବେ $3 ପୃଷ୍ଠାରେ {{PLURAL:$5|ସଂସ୍କରଣଟିଏର|$5 ଗୋଟି ସଂସ୍କରଣର}} ଦେଖଣା {{GENDER:$2|ବଦଳାଇଦେଲେ}}: $4 ଏହି ପୃଷ୍ଠାଟି କିଛି ଜଟିଳ ପାର୍ସ ଫଙ୍କସନ ବ୍ୟବହାର କରେ (ଯଥା #ifexist) । [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] ଦେଖନ୍ତୁ । ଭିତରର ଭୁଲ "$1" ପ୍ରକାରର ତ୍ରୁଟି ।</div><div class="font-a57c85 sax">[otb/Jomolhari] </div><div class="font-bcdcff sax">[pa/Lohit Punjabi] ਬਾਹਰੀ ਲਿੰਕ ਖੋਜ ਹੋਰ {{PLURAL:$2|ਰੈਜ਼ੋਲਿਊਸ਼ਨ|ਰੈਜ਼ੋਲਿਊਸ਼ਨਜ਼}}: $1. ਵੇਖੋ/ਮੁੜ ਬਹਾਲ ਕਰੋ ਫ਼ਾਈਲ ਮੰਗਾਈ ਨਾ ਜਾ ਸਕੀ ਇਸ ਵਿਕੀ ’ਤੇ ਹਾਲ ‘ਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਫ਼ੀਡ ’ਚ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ। ਆਪਣੀ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਵੇਖੋ $1 ’ਤੇ ਵਾਪਸ ਜਾਓ। ਸਭ ਤੋਂ ਵੱਧ ਕੈਟੇਗਰੀਆਂ ਵਾਲ਼ੇ ਸਫ਼ੇ ਫ਼ਾਈਲ ਦਾ ਨਾਂ: ਤੁਹਾਡੀਆਂ ਤਬਦੀਲੀਆਂ ਦੀ ਝਲਕ ਵਿਖਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਵਿੱਚ ਗ਼ਲਤੀ ਆ ਗਈ। ਹੋਰ ਸਮਾਂ ਨਵੀਂ ਤਬਦੀਲੀ → ਇਹਦਾ ਇਤਬਾਰੀ ਮੈਂਬਰ: ਆਪਣੀ ਤਬਦੀਲੀ ਦੀ ਝਲਕ ਵੇਖੋ, ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਵਰਤੋਂ! ਆਪਣਾ ਪਾਸਵਰਡ ਦਿਉ ਠੀਕ-ਠਾਕ ($1) ਸੋਧਾਂ ਵਾਪਸ ਮੋੜੋ ਇਸ ਬਾਰੇ translatewiki.net ਅਨੁਵਾਦਕ ਤੁਹਾਡਾ ਡੋਮੇਨ: ਨਵਾਂ ਸਿਰਲੇਖ: ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ ਸੀ: $1 ਮਿਤੀ ਨਾਲ ਇਸ (ਅਤੇ ਪਿਛਲੇ) ਮਹੀਨੇ ਤੋਂ : ਚਾਹੀਦੀਆਂ ਕੈਟੇਗਰੀਆਂ ਅਣਜਾਣ ਨਾਂ-ਸਥਾਨ ਗਿਣਤੀ $1 ਅਤੇ ਲਿਖਤ $2 ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ ਲਾਤੀਨੀ ਬੋਲੀ (ਦੋ ਸਫ਼ਿਆਂ ਵਿਚਕਾਰ ਫ਼ਰਕ) ਵਰਜਨ {{PLURAL:$1|ਹਟਾਈ ਸੋਧ|$1 ਹਟਾਈਆਂ ਸੋਧਾਂ}} ਵੇਖੋ ਝਲਕ ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਸੋਧੋ। ਧਿਆਨ ਦਿਓ ਕਿ ਕੁਝ ਸਫ਼ੇ ਇਸ ਹੱਕ ਤੋਂ ਬਿਨਾਂ ਵੀ ਜੁੜਨਗੇ। ਖੋਜ ਮੁੱਖ ਸਫ਼ੇ ’ਤੇ ਜਾਓ ਲੁਕਵਾਂ ਫ਼ਾਈਲ ਦਾ ਸਰੋਤ ਅਗਲਾ ਸਫ਼ਾ → ਅਣਉਮੀਦਿਆ ਮੁੱਲ: "$1"="$2"। ਬਣਾਓ ਜਦੋਂ ਮੈਂ ਅਣ-ਸਾਂਭੀਆਂ ਸੋਧਾਂ ਵਾਲਾ ਸਫ਼ਾ ਛੱਡਾਂ ਤਾਂ ਮੈਨੂੰ ਖ਼ਬਰ ਦਿਉ ਵਿਕੀ ਮੂਲ ($1) ਵਰਤੋ ਕਿਰਪਾ ਕਰਕੇ ਹੇਠ ਦਿੱਤਾ ਫ਼ਾਈਲ ਵੇਰਵਾ ਬਦਲੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</div><div class="font-486e96 sax">[pa/Saab] ਬਾਹਰੀ ਲਿੰਕ ਖੋਜ ਹੋਰ {{PLURAL:$2|ਰੈਜ਼ੋਲਿਊਸ਼ਨ|ਰੈਜ਼ੋਲਿਊਸ਼ਨਜ਼}}: $1. ਵੇਖੋ/ਮੁੜ ਬਹਾਲ ਕਰੋ ਫ਼ਾਈਲ ਮੰਗਾਈ ਨਾ ਜਾ ਸਕੀ ਇਸ ਵਿਕੀ ’ਤੇ ਹਾਲ ‘ਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਫ਼ੀਡ ’ਚ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ। ਆਪਣੀ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਵੇਖੋ $1 ’ਤੇ ਵਾਪਸ ਜਾਓ। ਸਭ ਤੋਂ ਵੱਧ ਕੈਟੇਗਰੀਆਂ ਵਾਲ਼ੇ ਸਫ਼ੇ ਫ਼ਾਈਲ ਦਾ ਨਾਂ: ਤੁਹਾਡੀਆਂ ਤਬਦੀਲੀਆਂ ਦੀ ਝਲਕ ਵਿਖਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਵਿੱਚ ਗ਼ਲਤੀ ਆ ਗਈ। ਹੋਰ ਸਮਾਂ ਨਵੀਂ ਤਬਦੀਲੀ → ਇਹਦਾ ਇਤਬਾਰੀ ਮੈਂਬਰ: ਆਪਣੀ ਤਬਦੀਲੀ ਦੀ ਝਲਕ ਵੇਖੋ, ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਵਰਤੋਂ! ਆਪਣਾ ਪਾਸਵਰਡ ਦਿਉ ਠੀਕ-ਠਾਕ ($1) ਸੋਧਾਂ ਵਾਪਸ ਮੋੜੋ ਇਸ ਬਾਰੇ translatewiki.net ਅਨੁਵਾਦਕ ਤੁਹਾਡਾ ਡੋਮੇਨ: ਨਵਾਂ ਸਿਰਲੇਖ: ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ ਸੀ: $1 ਮਿਤੀ ਨਾਲ ਇਸ (ਅਤੇ ਪਿਛਲੇ) ਮਹੀਨੇ ਤੋਂ : ਚਾਹੀਦੀਆਂ ਕੈਟੇਗਰੀਆਂ ਅਣਜਾਣ ਨਾਂ-ਸਥਾਨ ਗਿਣਤੀ $1 ਅਤੇ ਲਿਖਤ $2 ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ ਲਾਤੀਨੀ ਬੋਲੀ (ਦੋ ਸਫ਼ਿਆਂ ਵਿਚਕਾਰ ਫ਼ਰਕ) ਵਰਜਨ {{PLURAL:$1|ਹਟਾਈ ਸੋਧ|$1 ਹਟਾਈਆਂ ਸੋਧਾਂ}} ਵੇਖੋ ਝਲਕ ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਸੋਧੋ। ਧਿਆਨ ਦਿਓ ਕਿ ਕੁਝ ਸਫ਼ੇ ਇਸ ਹੱਕ ਤੋਂ ਬਿਨਾਂ ਵੀ ਜੁੜਨਗੇ। ਖੋਜ ਮੁੱਖ ਸਫ਼ੇ ’ਤੇ ਜਾਓ ਲੁਕਵਾਂ ਫ਼ਾਈਲ ਦਾ ਸਰੋਤ ਅਗਲਾ ਸਫ਼ਾ → ਅਣਉਮੀਦਿਆ ਮੁੱਲ: "$1"="$2"। ਬਣਾਓ ਜਦੋਂ ਮੈਂ ਅਣ-ਸਾਂਭੀਆਂ ਸੋਧਾਂ ਵਾਲਾ ਸਫ਼ਾ ਛੱਡਾਂ ਤਾਂ ਮੈਨੂੰ ਖ਼ਬਰ ਦਿਉ ਵਿਕੀ ਮੂਲ ($1) ਵਰਤੋ ਕਿਰਪਾ ਕਰਕੇ ਹੇਠ ਦਿੱਤਾ ਫ਼ਾਈਲ ਵੇਰਵਾ ਬਦਲੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</div><div class="font-dd3007 sax">[pal/Shapour] </div><div class="font-6ea8cf sax">[peo/Artaxerxes] </div><div class="font-5d2967 sax">[pl/OpenDyslexic] Strony bez linków wewnętrznych Uwaga: Strona, którą chcesz usunąć, ma {{PLURAL:$1|jedną starszą wersję|$1 starsze wersje|$1 starszych wersji}}: Ktoś zmienił treść strony w trakcie Twojej edycji.
+'''De pagina is niet opgeslagen!''' Tokens opnieuw instellen De pagina "$1" is aan uw volglijst toegevoegd. Gebeurtenissen rond het inhoudsmodel van een pagina Doel (paginanaam of {{ns:user}}:gebruikersnaam voor gebruiker):</div><div class="font-5d2967 sax">[oc/OpenDyslexic] Connexion Dimg $1 jorn{{PLURAL:$1||s}} Afichar Precision de la mesura Edicion dels istorics fusionables (void) Confirmacion de l’adreça de corrièr electronic anullada Africa tornar nomenar las paginas de l’utilizaire de banca. Valor imprevista : « $1 » = « $2 ». indefinit I a pas d’entresenhas d’atribucion disponiblas per aquesta pagina. Pòt levar $2 {{PLURAL:$2|gropa|gropes}} : $1 Tornar nomenar las sospaginas (fins a $1 paginas) Programa normal Opcions de telecargament {{PLURAL:$1|Lo fichièr seguent es un duplicata|Los fichièrs seguents son de duplicatas}} d'aqueste fichièr ([[Special:FileDuplicateSearch/$2|mai de detalhs]]): Còde del luòc representat &amp;#32;e Nombre de foncions d’analisi costosas Tipe de flux invalid. pagina seguenta → Setembre Error : la modificacion a fracassat actu Apondre las paginas e los fichièrs que tòrni nomenar a ma lista de seguiment Importar un fichièr dempuèi una adreça URL Picatz un senhal Adreça de corrièr electronic : Gujarati La modificacion qu'avètz ensajat de realizar es estada anullada per una extension.</div><div class="font-a57c85 sax">[ola/Jomolhari] </div><div class="font-a57c85 sax">[otb/Jomolhari] </div><div class="font-dd3007 sax">[pal/Shapour] </div><div class="font-6ea8cf sax">[peo/Artaxerxes] </div><div class="font-5d2967 sax">[pl/OpenDyslexic] Strony bez linków wewnętrznych Uwaga: Strona, którą chcesz usunąć, ma {{PLURAL:$1|jedną starszą wersję|$1 starsze wersje|$1 starszych wersji}}: Ktoś zmienił treść strony w trakcie Twojej edycji.
Górne pole zawiera tekst strony aktualnie zapisany w bazie danych.
Twoje zmiany znajdują się w dolnym polu.
By wprowadzić swoje zmiany, musisz zmodyfikować tekst z górnego pola.
@@ -1462,10 +1131,8 @@ By wprowadzić swoje zmiany, musisz zmodyfikować tekst z górnego pola.
Sprawdź inne linki do szablonów, zanim usuniesz tę stronę. Ten plik znajduje się w $1 i może być używany w innych projektach.
Poniżej znajdują się informacje ze [$2 strony opisu] tego pliku. Nazwa właściwości: marca Uwaga: Nie jesteś zalogowany. Jeśli wykonasz jakąkolwiek zmianę, Twój adres IP będzie widoczny publicznie. Jeśli [$1 zalogujesz się] lub [$2 utworzysz konto], Twoje zmiany zostaną przypisane do konta, wraz z innymi korzyściami.</div><div class="font-5d2967 sax">[pt/OpenDyslexic] Alterações relacionadas com "$1" Não está autorizado a marcar as suas próprias edições como edições patrulhadas. Já foi enviada um email de recuperação de palavra-passe {{PLURAL:$1|na última hora|nas últimas $1 horas}}.
Para prevenir abusos, só um email de recuperação de palavra-passe pode ser enviado a cada {{PLURAL:$1|hora|$1 horas}}. Não foi possível restaurar a versão do ficheiro de $1: já não existia antes da eliminação. Créditos de autoria da extensão $1 Adicionar as páginas e ficheiros que eu editar às minhas páginas vigiadas Versão de Flashpix suportada Ficheiro em falta: $1 A conta de utilizador "$1" não está registada. Está a ver uma versão desta página guardada na cache há pelo menos $1. $1 (página não existe) Erro desconhecido Bom ($1) Bem-vindo, $1! Informações da página Mostrar Palavra-passe anterior: Dados do utilizador Se está pronto para descrever um problema técnico em detalhe, por favor, [$1 comunique o defeito].
-Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário será adicionado à página "[$3 $2]", junto com o seu nome de utilizador e o navegador que está a usar.</div><div class="font-c51799 sax">[sa/Lohit Devanagari] संस्करणानि विलीनीकरोतु । मुख्यपृष्ठं गम्यताम् विशिष्टपृष्ठम् स्वस्य व्यक्तिगसूचना दृश्यताम् स्वसदस्यता प्राप्यताम् निम्नोल्लिखित{{PLURAL:$1|पृष्ठं|$1 पृष्ठानि}} वर्गेऽस्मिन् {{PLURAL:$1|अस्ति|$1 सन्ति}} "$1" इत्यस्माद् पुनः प्राप्तिः विभागशीर्षकाणामुपरि दक्षिणक्लिक्-करणेन विभागः सम्पाद्यताम् । तन्त्रांशः अनुस्थापितः । अयं प्रयोक्ता सम्प्रति अवरुद्धः वर्तते।
-नूतनतमा अवरोधाभिलेख-प्रविष्टिः सन्दर्भार्थम् अधस्तात् प्रदत्ताऽस्ति: फरवरी $1 आधेयपुटानि । योजकाभिज्ञापकम् अपर्यापानुमतिकारणेन अथवा निदेशिकायाः /आधानस्य अभावात् "$1" सञ्चिकां लेखितुं न शक्यते । भागशः । $1 इति स्रोतपृष्ठं न विद्यते । अस्य पुटस्य अपमर्जितेतिहासम् अवलोकयतु । अयोग्यलक्ष्यस्य संस्करणम् प्रदत्तांशस्य (metadata) स्वरूपं यदा लघु भविष्यति, तदा एतस्मिन् सन्देशे आवलिकृतस्य EXIA प्रदत्तांशस्य (metadata) सूचनाः चित्रप्रदर्शनेन सह द्रष्टुं शक्यन्ते ।
-यदभावे अन्याः सूचनाः निगूढाः भविष्यन्ति ।</div><div class="font-a07c57 sax">[saz/Pagul] ꢮꢾꢒ꣄ꢒꢶ ꢔꢸꢪ꣄ꢦꢸ ꢞꢶꢱ ꢙꢹꢭꣀ ꢓꣁꢨ꣄ꢨꢶꢪ꣄-ꢓꢵꢭꢸꢔꢶꢡꣁ ꢮꢮ꣄ꢬꢸꢥꢵꢬ꣄ ꢙꢹꢥ꣄ ꢲꢾꢣꢶ ꢡꢵꢫ꣄ ꢂꢱ꣄ꢒꢶ ꢨꢾꢱ꣄ꢡꢵꢬ꣄ꢣꢶ ꢂꢒ꣄ꢜꣁꢨꢬ꣄ ꢙꢥꢮꢬꢶ ꢱꢾꢥ꣄ꢪꢵꢬ꣄ꢣꢶ ꢂꢣ꣄ꢣꢶꢥ꣄ꢥꢵꢥ꣄ ꢮꢮ꣄ꢬꢸꢥꢵꢬ꣄ ꢥꢵꢮ꣄ ꢮꢮ꣄ꢬꢸꢥꢵꢬ꣄ ꢥꢵꢮ꣄ ꢭꢶꢒ꣄ꢒꢶꢥꢶ ꢂꢱ꣄ꢒꢶ ꢪꢵꢬ꣄ ꢱꣁ ꢩꢵꢰꣁ: ꢱꢾ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢨꢸ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢱꢾꢦ꣄ꢜꢪ꣄ꢨꢬ꣄ ꢪꢿ ꢂꢱ꣄ꢒꢶ ꢦꣁꢜ꣄ꢜꢵꢥ꣄ ꢨꢸꢣꢶꢫꢵꢬ꣄ꢣꢶ ꢚꢵꢫꢶ ꢩꢵꢰꣁ: $1 ꢨꢾ ꢍꢦ꣄ ꢎꢡꢵꢬ꣄ꢣꢶ ꢪꣁꢥ꣄ꢔꢸꢭꢵꢬ꣄ꢣꢶ ꢱꢸ ꢥꢶꢪ꣄ꢦꢶ ꢪꢴꢣꣁ ꢃꢔꢱ꣄ꢜꢸ ꢭꢾꢔꢸꢡ꣄ꢡꢵꢪ꣄ ꢪꢬ꣄ꢗꢾꢫꣁ ꢥꢮ ꢲꢸꢣꣁꢕꢵꢭ꣄ ꢏꢬ꣄ꢱꢸ ꢍꢦ꣄ꢬꢭ꣄ ꢙꢹꢥ꣄ ꢂꢒ꣄ ꢥꢵꢮꢸ ꢢꢵꢪ꣄ ꢱꣁꢪꢵꢬ꣄ꢣꢶ ꢓꢵꢭꢸꢔꢶꢡꣁ-ꢓꣁꢨ꣄ꢨꢶꢪ꣄ ꢥꣁꢒ꣄ꢒꣁ ꢪꢿ ꢥꣁꢮꣁ ꢦꣁꢜ꣄ꢜꣁ ꢮꢿꢫ꣄ ꢞꢶꢱꢪ꣄ꢨꢬ꣄ ꢣꢾꢒ꣄ꢒꢵꢞꢶ/ꢚꢵꢫꢶ ꢪꢵꢬ꣄ꢗꢸ ꢱꢾꢦ꣄ ꢲꢵꢡꢒ꣄ꢰꢬ꣄ ꢪꣁ ꢪꢬ꣄ꢗꢶ ꢲꢿꢡꢸ ꢣꢾꢒ꣄ꢒꢶꢬꢶꢫꣁ ꢙꢹꢭꣀ ꢧꢶꢨ꣄ꢬꢮꢬꢶ ꢲꢶꢖ꣄ꢔꢵꢞ꣄ ꢥꢴꢥ꣄ꢥꢶ ꢚꢵꢫ꣄ ꢎ "$1" ꢬꢴꢷ ꢓꢳ꣄ꢳꢶ ꢃꢮ꣄ ꢂꢱ꣄ꢒꢶ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢥꢮꢪ꣄ꢨꢬ꣄ ꢱꢵ ꢃꢔ ꢣꢾꢒ꣄ꢒꢞ꣄ꢥꢒꣁ ꢮꢾꢒ꣄ꢒꢶ ꢙꢥ ꢧꢶꢦ꣄ ꢥꣁꢮꣁ ꢭꢶꢒ꣄ꢒꢶꢥꢶ ꢲꢿꢜ꣄ ꢱꢸꢒ꣄ꢬꢵꢬ꣄ꢣꢶ ꢚꢵꢫꢶ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢭꢶꢒ꣄ꢒꢶꢥꢶ ꢱꢿꢡ꣄ꢡꢾ ꢦꣁꢜ꣄ꢜꣁ ꢓꢵꢭꢸ ꢔꢶꢡꣁ</div><div class="font-0a2233 sax">[si/lklug] පිටුව: සැම විටම ඇතුළු වීමේදී ආරක්ෂාකාරී ජාලයක් භාවිතා කරන්න යටපත් කිරීම ගොනු ඉතිහාසය "$1" පරිශීලක ගිණුම ලියාපදිංචි කර නොමැත. පුරුෂ සංස්කරණයන් සිදුකර ඇති පරිශීලකයන් පමණක් පෙන්වන්න අයැද ඇති පිටු ශීර්ෂය වලංගු නොවන UTF-8 වෙත අනුක්රමය අඩංගු වේ. විස්තීරණය කරන ලද විස්තර පෙන්වන්න උදවු පිටුව නැවත සකස් කිරීමට කිසිදු ටෝකන් පත් වේ. පරිශීලක නාමය හෝ IP ලිපිනය: අනෙකුන්ගෙන් මෙන්ම පරිපාලකයන්ගෙන්ද දත්ත යටපත් කරන්න අනෙකුත් හේතුව සටහන: හේතුවෙන් තාක්ෂණික සීමාවන් නිසා, මෙවැනි එකක් ලෙස ඉහළ විභේදනයක් GIF ගොණු රූප සිඟිති සජීවිකරණ නොවේ කිරීම . විද්‍යුත්-තැපෑල වාරණය කෙරිණි {{GENDER:$1|රොබෝවරයා}} පෙර අවවාදය නොසලකා හැර කෙසේ හෝ ගොනුව සුරකින්න මෙම පිටුව කියවන්න හඳුනා නොගත් දෝෂයක් ඇතිවිය. සබැඳි ශීර්ෂය අනන්‍යාංක $1 දරණ අයිතමය වෙනස් කිරීමෙහිදී දෝෂයක් ඇතිවී ඇත: එය දත්ත ගබඩාවෙන් අස්ථානගතවී ඇත! අනෙකුත් පරිශීලකයන්ගෙන් විද්‍යුත්-තැපෑල ලැබීම සක්‍රීය කරන්න ආරෝහණ සංශෝධනයන් ප්‍රතිෂ්ඨාපනය කරන්න වෙනස් කරන ලද ගොනු විස්තරය ඉදිරිපත් කරන්න ජූනි ප්‍රාදේශීය වේලාව: මුර-නොකෙරෙන පිටු ලැයිස්තුව නරඹන්න තහවුරුකිරීමකින් තොරව, පිටුවක් සඳහා අඩවි පූර්වාපේක්‍ෂි සංචිතය (කෑෂය) විමෝචනය කරන්න</div><div class="font-5d2967 sax">[sq/OpenDyslexic] Kjo faqe speciale tregon skedat e ngarkuara së fundmi. Stampa të papërdorura Burimi i medias Gjuha $1 përfshirjet Flashi nuk u ndez redakto Një kod vërtetimi ju është dërguar më parë. Nëse sapo hapët llogarinë tuaj prisni disa minuta deri sa t'iu arrijë mesazhi përpara se të kërkoni një kod të ri. Titull i pavlefshëm në vendosjen e rezultateve: $1 Kjo adresë IP është e bllokuar aktualisht.
-Bllokimi i funditë është më poshtë për referencë: Ju nuk keni leje për të redaktuar këtë faqe JavaScript, sepse ai përmban cilësimet personale tjetër user's. Mundeni gjithashtu të zgjidhni të kontaktoheni nga të tjerët përmes faqeve tuaja të diskutimit ose përdoruesit pa e treguar identitetin. kohë tjetër Shënoje këtë redaktim të vogël Kjo faqe është shikuar {{PLURAL:$1|një|$1 herë}} . Jeni i/e sigurt se dëshironi të shikoni një version të grisur të skedës "$1" nga $2 tek $3? Zona e sensorit two-chip kolor $1 pa mbështetje të kërkimit me teskt të plotë Burimi i skedës Kodi për shtetin ku është marrë fotografia</div><div class="font-db0be7 sax">[sux/Akkadian] </div><div class="font-5d2967 sax">[sv/OpenDyslexic] Version {{GENDER:$1|bekräftad användare}} Icke-kalibrerad {{GENDER:$1|byråkrat}} Skicka modifierad filbeskrivning Det är inte tillåtet att skriva över en befintlig fil. Nya sidor $1 {{PLURAL:$1|ändring|ändringar}} Ett nytt lösenord har skickats till den e-postadress som användaren "$1" har registrerat. När du får meddelandet, var god logga in igen. Upplösning i fokalplan x *Vanliga motiv till blockering
+Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário será adicionado à página "[$3 $2]", junto com o seu nome de utilizador e o navegador que está a usar.</div><div class="font-a07c57 sax">[saz/Pagul] ꢮꢾꢒ꣄ꢒꢶ ꢔꢸꢪ꣄ꢦꢸ ꢞꢶꢱ ꢙꢹꢭꣀ ꢓꣁꢨ꣄ꢨꢶꢪ꣄-ꢓꢵꢭꢸꢔꢶꢡꣁ ꢮꢮ꣄ꢬꢸꢥꢵꢬ꣄ ꢙꢹꢥ꣄ ꢲꢾꢣꢶ ꢡꢵꢫ꣄ ꢂꢱ꣄ꢒꢶ ꢨꢾꢱ꣄ꢡꢵꢬ꣄ꢣꢶ ꢂꢒ꣄ꢜꣁꢨꢬ꣄ ꢙꢥꢮꢬꢶ ꢱꢾꢥ꣄ꢪꢵꢬ꣄ꢣꢶ ꢂꢣ꣄ꢣꢶꢥ꣄ꢥꢵꢥ꣄ ꢮꢮ꣄ꢬꢸꢥꢵꢬ꣄ ꢥꢵꢮ꣄ ꢮꢮ꣄ꢬꢸꢥꢵꢬ꣄ ꢥꢵꢮ꣄ ꢭꢶꢒ꣄ꢒꢶꢥꢶ ꢂꢱ꣄ꢒꢶ ꢪꢵꢬ꣄ ꢱꣁ ꢩꢵꢰꣁ: ꢱꢾ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢨꢸ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢱꢾꢦ꣄ꢜꢪ꣄ꢨꢬ꣄ ꢪꢿ ꢂꢱ꣄ꢒꢶ ꢦꣁꢜ꣄ꢜꢵꢥ꣄ ꢨꢸꢣꢶꢫꢵꢬ꣄ꢣꢶ ꢚꢵꢫꢶ ꢩꢵꢰꣁ: $1 ꢨꢾ ꢍꢦ꣄ ꢎꢡꢵꢬ꣄ꢣꢶ ꢪꣁꢥ꣄ꢔꢸꢭꢵꢬ꣄ꢣꢶ ꢱꢸ ꢥꢶꢪ꣄ꢦꢶ ꢪꢴꢣꣁ ꢃꢔꢱ꣄ꢜꢸ ꢭꢾꢔꢸꢡ꣄ꢡꢵꢪ꣄ ꢪꢬ꣄ꢗꢾꢫꣁ ꢥꢮ ꢲꢸꢣꣁꢕꢵꢭ꣄ ꢏꢬ꣄ꢱꢸ ꢍꢦ꣄ꢬꢭ꣄ ꢙꢹꢥ꣄ ꢂꢒ꣄ ꢥꢵꢮꢸ ꢢꢵꢪ꣄ ꢱꣁꢪꢵꢬ꣄ꢣꢶ ꢓꢵꢭꢸꢔꢶꢡꣁ-ꢓꣁꢨ꣄ꢨꢶꢪ꣄ ꢥꣁꢒ꣄ꢒꣁ ꢪꢿ ꢥꣁꢮꣁ ꢦꣁꢜ꣄ꢜꣁ ꢮꢿꢫ꣄ ꢞꢶꢱꢪ꣄ꢨꢬ꣄ ꢣꢾꢒ꣄ꢒꢵꢞꢶ/ꢚꢵꢫꢶ ꢪꢵꢬ꣄ꢗꢸ ꢱꢾꢦ꣄ ꢲꢵꢡꢒ꣄ꢰꢬ꣄ ꢪꣁ ꢪꢬ꣄ꢗꢶ ꢲꢿꢡꢸ ꢣꢾꢒ꣄ꢒꢶꢬꢶꢫꣁ ꢙꢹꢭꣀ ꢧꢶꢨ꣄ꢬꢮꢬꢶ ꢲꢶꢖ꣄ꢔꢵꢞ꣄ ꢥꢴꢥ꣄ꢥꢶ ꢚꢵꢫ꣄ ꢎ "$1" ꢬꢴꢷ ꢓꢳ꣄ꢳꢶ ꢃꢮ꣄ ꢂꢱ꣄ꢒꢶ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢥꢮꢪ꣄ꢨꢬ꣄ ꢱꢵ ꢃꢔ ꢣꢾꢒ꣄ꢒꢞ꣄ꢥꢒꣁ ꢮꢾꢒ꣄ꢒꢶ ꢙꢥ ꢧꢶꢦ꣄ ꢥꣁꢮꣁ ꢭꢶꢒ꣄ꢒꢶꢥꢶ ꢲꢿꢜ꣄ ꢱꢸꢒ꣄ꢬꢵꢬ꣄ꢣꢶ ꢚꢵꢫꢶ ꢣꢾꢒ꣄ꢒꢵꢞꢶ ꢭꢶꢒ꣄ꢒꢶꢥꢶ ꢱꢿꢡ꣄ꢡꢾ ꢦꣁꢜ꣄ꢜꣁ ꢓꢵꢭꢸ ꢔꢶꢡꣁ</div><div class="font-0a2233 sax">[si/lklug] පිටුව: සැම විටම ඇතුළු වීමේදී ආරක්ෂාකාරී ජාලයක් භාවිතා කරන්න යටපත් කිරීම ගොනු ඉතිහාසය "$1" පරිශීලක ගිණුම ලියාපදිංචි කර නොමැත. පුරුෂ සංස්කරණයන් සිදුකර ඇති පරිශීලකයන් පමණක් පෙන්වන්න අයැද ඇති පිටු ශීර්ෂය වලංගු නොවන UTF-8 වෙත අනුක්රමය අඩංගු වේ. විස්තීරණය කරන ලද විස්තර පෙන්වන්න උදවු පිටුව නැවත සකස් කිරීමට කිසිදු ටෝකන් පත් වේ. පරිශීලක නාමය හෝ IP ලිපිනය: අනෙකුන්ගෙන් මෙන්ම පරිපාලකයන්ගෙන්ද දත්ත යටපත් කරන්න අනෙකුත් හේතුව සටහන: හේතුවෙන් තාක්ෂණික සීමාවන් නිසා, මෙවැනි එකක් ලෙස ඉහළ විභේදනයක් GIF ගොණු රූප සිඟිති සජීවිකරණ නොවේ කිරීම . විද්‍යුත්-තැපෑල වාරණය කෙරිණි {{GENDER:$1|රොබෝවරයා}} පෙර අවවාදය නොසලකා හැර කෙසේ හෝ ගොනුව සුරකින්න මෙම පිටුව කියවන්න හඳුනා නොගත් දෝෂයක් ඇතිවිය. සබැඳි ශීර්ෂය අනන්‍යාංක $1 දරණ අයිතමය වෙනස් කිරීමෙහිදී දෝෂයක් ඇතිවී ඇත: එය දත්ත ගබඩාවෙන් අස්ථානගතවී ඇත! අනෙකුත් පරිශීලකයන්ගෙන් විද්‍යුත්-තැපෑල ලැබීම සක්‍රීය කරන්න ආරෝහණ සංශෝධනයන් ප්‍රතිෂ්ඨාපනය කරන්න වෙනස් කරන ලද ගොනු විස්තරය ඉදිරිපත් කරන්න ජූනි ප්‍රාදේශීය වේලාව: මුර-නොකෙරෙන පිටු ලැයිස්තුව නරඹන්න තහවුරුකිරීමකින් තොරව, පිටුවක් සඳහා අඩවි පූර්වාපේක්‍ෂි සංචිතය (කෑෂය) විමෝචනය කරන්න</div><div class="font-5d2967 sax">[sq/OpenDyslexic] Kjo faqe speciale tregon skedat e ngarkuara së fundmi. Stampa të papërdorura Burimi i medias Gjuha $1 përfshirjet Flashi nuk u ndez redakto Një kod vërtetimi ju është dërguar më parë. Nëse sapo hapët llogarinë tuaj prisni disa minuta deri sa t'iu arrijë mesazhi përpara se të kërkoni një kod të ri. Titull i pavlefshëm në vendosjen e rezultateve: $1 Kjo adresë IP është e bllokuar aktualisht.
+Bllokimi i funditë është më poshtë për referencë: Ju nuk keni leje për të redaktuar këtë faqe JavaScript, sepse ai përmban cilësimet personale tjetër user's. Mundeni gjithashtu të zgjidhni të kontaktoheni nga të tjerët përmes faqeve tuaja të diskutimit ose përdoruesit pa e treguar identitetin. kohë tjetër Shënoje këtë redaktim të vogël Kjo faqe është shikuar {{PLURAL:$1|një|$1 herë}} . Jeni i/e sigurt se dëshironi të shikoni një version të grisur të skedës "$1" nga $2 tek $3? Zona e sensorit two-chip kolor $1 pa mbështetje të kërkimit me teskt të plotë Burimi i skedës Kodi për shtetin ku është marrë fotografia</div><div class="font-d33f6a sax">[su/NotoSansSundanese Regular] Hobbes mangaruhan sakabéh widang pangajaran moral di Inggris sarta falsafah pulitik, utamana liwat bukuna anu miboga judul "Leviathan".</div><div class="font-db0be7 sax">[sux/Akkadian] </div><div class="font-5d2967 sax">[sv/OpenDyslexic] Version {{GENDER:$1|bekräftad användare}} Icke-kalibrerad {{GENDER:$1|byråkrat}} Skicka modifierad filbeskrivning Det är inte tillåtet att skriva över en befintlig fil. Nya sidor $1 {{PLURAL:$1|ändring|ändringar}} Ett nytt lösenord har skickats till den e-postadress som användaren "$1" har registrerat. När du får meddelandet, var god logga in igen. Upplösning i fokalplan x *Vanliga motiv till blockering
** Infogar falsk information
** Tar bort sidinnehåll
** Länkspam till externa sajter
@@ -1487,52 +1154,7 @@ Inabidi uingie na kisha ubadilishe neno la siri lako sasa.
Unaweza kupuuza ujumbe huu, endapo akaunti hii ilianzishwa kimakosa. Mwanzo Vichwa vya habari vijipange namba-vyenyewe hariri Jamii {{PLURAL:$1|inayofuata ina|zinazofuata zina}} kurasa au mafaili ya picha au sauti.
[[Special:UnusedCategories|Jamii zisizotumiwa]] hazitandazwi hapa.
-Tazama pia [[Special:WantedCategories|jamii zinazohitajika]]. ukubwa wa faili: $1, aina ya MIME: $2 Jamii zinazoungwa kuliko zote Mada ya ukurasa ulioombwa unaashiria ukurasa wa mazungumzi ambao hauko.</div><div class="font-e6abf9 sax">[syc/Estrangelo Edessa] </div><div class="font-6c252a sax">[syc/East Syriac Adiabene] </div><div class="font-5e3247 sax">[syc/SertoUrhoy] </div><div class="font-c6a428 sax">[ta/Lohit Tamil] புகுபதிகை அளவு IPTC காட்சியின் குறியீடு தாங்கள் குறிப்பிட்ட கோப்புக்கள் இங்கில்லை. பலநோக்கு இணைய அஞ்சல் நீட்சி வகை: பிளாஷ் பளிச்சிட்டது. பல்புள்ளி முன்நிலையாக்கு ஆம் படிம அடையாள எண் காப்பை உறுதிப்படுத்து இலக்கு ஏதேனும் ஓர் பெயர்வெளிக்கு இறக்குமதி செய்யவும்: $1 $3-ஐ வேறு விக்கியிலிருந்து {{GENDER:$2|இறக்குமதி செய்தார்}} மாற்றுக்கள்
-
-மாற்றுருவங்கள் '''நீங்கள் மட்டுமே இந்த CSS. இன் முன் தோற்றத்தை காண்கிறீர்கள் என்பதை நினைவில் கொள்ளவும்.'''
-'''இது இன்னமும் சேமிக்கப்படவில்லை!''' அறியப்படாதது பேச்சுப் பக்கங்களை தனியே கணக்கிடுவதைத் தவிர்த்து, உங்கள் கவனிப்புப் பட்டியலில் {{PLURAL:$1|$1 பக்கம் உள்ளது.|$1 பக்கங்கள் உள்ளன.}} நீங்கள் உங்கள் விருப்பத்தேர்வுகளில் செய்த மாற்றங்கள் சேமிக்கப்படவில்லை. நீங்கள் $1 இதனை அழுத்தாமல் இப்பக்கத்தை விட்டுச் சென்றால் உங்கள் விருப்பத் தேர்வுகள் புதுப்பிக்கப்படாது. அடுத்த பக்கம் தவறு: தடை இலக்கம் $1 காணப்படவில்லை. இதற்கான தடை ஏற்கனவே நீக்கப்பட்டிருக்கலாம். இக்காரணிகளுடன் காக்கப்பட்டப் தலைப்புகள் எதுவும் கிடையாது. உங்களுக்கு $1 {{PLURAL:$3|வேறொரு பயனரிடம்|$3 பயனர்களிடம்}} இருந்து உள்ளது ($2).</div><div class="font-b38d1e sax">[ta/Lohit Tamil Classical] புகுபதிகை அளவு IPTC காட்சியின் குறியீடு தாங்கள் குறிப்பிட்ட கோப்புக்கள் இங்கில்லை. பலநோக்கு இணைய அஞ்சல் நீட்சி வகை: பிளாஷ் பளிச்சிட்டது. பல்புள்ளி முன்நிலையாக்கு ஆம் படிம அடையாள எண் காப்பை உறுதிப்படுத்து இலக்கு ஏதேனும் ஓர் பெயர்வெளிக்கு இறக்குமதி செய்யவும்: $1 $3-ஐ வேறு விக்கியிலிருந்து {{GENDER:$2|இறக்குமதி செய்தார்}} மாற்றுக்கள்
-
-மாற்றுருவங்கள் '''நீங்கள் மட்டுமே இந்த CSS. இன் முன் தோற்றத்தை காண்கிறீர்கள் என்பதை நினைவில் கொள்ளவும்.'''
-'''இது இன்னமும் சேமிக்கப்படவில்லை!''' அறியப்படாதது பேச்சுப் பக்கங்களை தனியே கணக்கிடுவதைத் தவிர்த்து, உங்கள் கவனிப்புப் பட்டியலில் {{PLURAL:$1|$1 பக்கம் உள்ளது.|$1 பக்கங்கள் உள்ளன.}} நீங்கள் உங்கள் விருப்பத்தேர்வுகளில் செய்த மாற்றங்கள் சேமிக்கப்படவில்லை. நீங்கள் $1 இதனை அழுத்தாமல் இப்பக்கத்தை விட்டுச் சென்றால் உங்கள் விருப்பத் தேர்வுகள் புதுப்பிக்கப்படாது. அடுத்த பக்கம் தவறு: தடை இலக்கம் $1 காணப்படவில்லை. இதற்கான தடை ஏற்கனவே நீக்கப்பட்டிருக்கலாம். இக்காரணிகளுடன் காக்கப்பட்டப் தலைப்புகள் எதுவும் கிடையாது. உங்களுக்கு $1 {{PLURAL:$3|வேறொரு பயனரிடம்|$3 பயனர்களிடம்}} இருந்து உள்ளது ($2).</div><div class="font-110a31 sax">[ta/Thendral] புகுபதிகை அளவு IPTC காட்சியின் குறியீடு தாங்கள் குறிப்பிட்ட கோப்புக்கள் இங்கில்லை. பலநோக்கு இணைய அஞ்சல் நீட்சி வகை: பிளாஷ் பளிச்சிட்டது. பல்புள்ளி முன்நிலையாக்கு ஆம் படிம அடையாள எண் காப்பை உறுதிப்படுத்து இலக்கு ஏதேனும் ஓர் பெயர்வெளிக்கு இறக்குமதி செய்யவும்: $1 $3-ஐ வேறு விக்கியிலிருந்து {{GENDER:$2|இறக்குமதி செய்தார்}} மாற்றுக்கள்
-
-மாற்றுருவங்கள் '''நீங்கள் மட்டுமே இந்த CSS. இன் முன் தோற்றத்தை காண்கிறீர்கள் என்பதை நினைவில் கொள்ளவும்.'''
-'''இது இன்னமும் சேமிக்கப்படவில்லை!''' அறியப்படாதது பேச்சுப் பக்கங்களை தனியே கணக்கிடுவதைத் தவிர்த்து, உங்கள் கவனிப்புப் பட்டியலில் {{PLURAL:$1|$1 பக்கம் உள்ளது.|$1 பக்கங்கள் உள்ளன.}} நீங்கள் உங்கள் விருப்பத்தேர்வுகளில் செய்த மாற்றங்கள் சேமிக்கப்படவில்லை. நீங்கள் $1 இதனை அழுத்தாமல் இப்பக்கத்தை விட்டுச் சென்றால் உங்கள் விருப்பத் தேர்வுகள் புதுப்பிக்கப்படாது. அடுத்த பக்கம் தவறு: தடை இலக்கம் $1 காணப்படவில்லை. இதற்கான தடை ஏற்கனவே நீக்கப்பட்டிருக்கலாம். இக்காரணிகளுடன் காக்கப்பட்டப் தலைப்புகள் எதுவும் கிடையாது. உங்களுக்கு $1 {{PLURAL:$3|வேறொரு பயனரிடம்|$3 பயனர்களிடம்}} இருந்து உள்ளது ($2).</div><div class="font-af1c14 sax">[ta/Thenee] புகுபதிகை அளவு IPTC காட்சியின் குறியீடு தாங்கள் குறிப்பிட்ட கோப்புக்கள் இங்கில்லை. பலநோக்கு இணைய அஞ்சல் நீட்சி வகை: பிளாஷ் பளிச்சிட்டது. பல்புள்ளி முன்நிலையாக்கு ஆம் படிம அடையாள எண் காப்பை உறுதிப்படுத்து இலக்கு ஏதேனும் ஓர் பெயர்வெளிக்கு இறக்குமதி செய்யவும்: $1 $3-ஐ வேறு விக்கியிலிருந்து {{GENDER:$2|இறக்குமதி செய்தார்}} மாற்றுக்கள்
-
-மாற்றுருவங்கள் '''நீங்கள் மட்டுமே இந்த CSS. இன் முன் தோற்றத்தை காண்கிறீர்கள் என்பதை நினைவில் கொள்ளவும்.'''
-'''இது இன்னமும் சேமிக்கப்படவில்லை!''' அறியப்படாதது பேச்சுப் பக்கங்களை தனியே கணக்கிடுவதைத் தவிர்த்து, உங்கள் கவனிப்புப் பட்டியலில் {{PLURAL:$1|$1 பக்கம் உள்ளது.|$1 பக்கங்கள் உள்ளன.}} நீங்கள் உங்கள் விருப்பத்தேர்வுகளில் செய்த மாற்றங்கள் சேமிக்கப்படவில்லை. நீங்கள் $1 இதனை அழுத்தாமல் இப்பக்கத்தை விட்டுச் சென்றால் உங்கள் விருப்பத் தேர்வுகள் புதுப்பிக்கப்படாது. அடுத்த பக்கம் தவறு: தடை இலக்கம் $1 காணப்படவில்லை. இதற்கான தடை ஏற்கனவே நீக்கப்பட்டிருக்கலாம். இக்காரணிகளுடன் காக்கப்பட்டப் தலைப்புகள் எதுவும் கிடையாது. உங்களுக்கு $1 {{PLURAL:$3|வேறொரு பயனரிடம்|$3 பயனர்களிடம்}} இருந்து உள்ளது ($2).</div><div class="font-a57c85 sax">[tcn/Jomolhari] </div><div class="font-e184c4 sax">[tcy/Lohit Kannada] ಡೇಟಬೇಸ್ ಮುಚ್ಚುನ ಕಾರಣೊನು ಬೊಕ್ಕೊ ನಾನೊರೊ ಅಯಿನ್ ದೆಪ್ಪುನ ಅಂದಾಜಿದ ಪೊರ್ತುನು ತೆರಿಪಾಲೆ $1 (ಈ ಪುಟೊ ನನಲ ಅಸ್ತಿತ್ವೊಡ್ ಇದ್ದಿ) ಸಹಾಯೊ ಸಮುದಾಯೊ ಪುಟೊ ಮಾಹಿತಿ ಪುಟೊ ಉಂದು ಎಲ್ಯ ಬದಲಾವಣೆ "$1" ವರ್ಗಡುಪ್ಪುನಂಚಿನ ಲೇಕನೊಲು ಪೆಬ್ರವರಿ ಅಡೆಂಗಾವು ಯಾಂಟಿ-ಸ್ಪಾಮ್ ಚೆಕ್.
-ಮುಲ್ಪ ದಿಂಜಾವೊಡ್ಚಿ ಲಾಗಿನ್ ಆಲೆ ಪುಟೊಲೆನ್ ಕಡಪುಡ್ಲೆ ಮಾಹಿತಿ ಸ್ರಿಸ್ಟಿಸಯಿನ ದಿನೊ ಬೊಕ್ಕ ಪೊರ್ತು $1 {{GENDER:$2|ಅಪ್ಲೋಡ್ ಮಲ್ತ್‌ದೆರ್}} $3 ಪೊಸ ಖಾತೆ ಸುರು ಮಲ್ಪುಲೆ "$1" ಫೈಲ್ ನ್ "$2"ಗ್ ಪುನರ್ನಾಮಕರಣ ಮಲ್ಪೆರೆ ಆಯಿಜಿ. ಏರಿಕೆ ಕ್ರಮೊಟ್ಟು ಜೋಡಿಸಾಲ ಫೈಲ್ ಈ ಪುಟೊಟ್ ಉಪಯೋಗ ಮಲ್ತಿನ {{PLURAL:$1|ಟೆಂಪ್ಲೇಟು|ಟೆಂಪ್ಲೇಟುಗಳು}}: ಈ ಸಂದೇಸೊಡು ಪಟ್ಟಿ ಮಲ್ತಿನಂಚಿನ EXIF ಮಿತ್ತ ದರ್ಜೆದ ಮಾಹಿತಿನ್ ಚಿತ್ರೊ ಪುಟೊಕು ಸೇರ್ಪಾಯೆರೆ ಆವೊಂದುಂಡು. ಪುಟೊಟು ಮಿತ್ತ ದರ್ಜೆ ಮಾಹಿತಿದ ಪಟ್ಟಿನ್ ದೆಪ್ಪುನಗ ಉಂದು ತೋಜುಂಡು.
-ಒರಿದನವು ಮೂಲೊ ಸ್ಥಿತಿಟ್ ಅಡೆಂಗ್‍ದುಂಡು.
-*ಮಲ್ಪುಲೆ
-*ಮಾದರಿ
-*ದಿನೊ ಪೊರ್ತು ಮೂಲೊ
-*ಮಾನಾದಿಗೆದ ಸಮಯೊ
-*ಫ್‍ಸಂಖ್ಯೆ
-*ಐಎಸ್ಒ ವೇಗೊದ ರೇಟಿಂಗ್
-*ತೂಪಿನ ಜಾಗೆದ ದೂರ
-*ಕಲಾವಿದೆ
-*ಕೃತಿಸ್ವಾಮ್ಯೊ
-*ಚಿತ್ರೊ ವಿವರಣೆ
-*ಜಿಪಿಎಸ್ ಅಕ್ಷಾಂಸೊ
-*ಜಿಪಿಎಸ್ ರೇಖಾಂಸೊ
-*ಜಿಪಿಎಸ್ ಎತ್ತರೊ ಆಫ್ರಿಕ ಕಡೆತ ವಜಾ ಮಲ್ಪುಲೆ ಮಾತ ಮಾಹಿತಿಲೆನ್ ನಾಡ್‍ಲೆ (ಪಾತೆರದ ಪುಟೊಲ ಸೇರ್ದ್) ಪುಟೊಕುಲೆನ್ ಮಾಜಾಲೆ $1 ನ್ ತೂವೊಡೆ? ಫೈಲ್ ಅಪ್ಲೋಡ್ ಲಾಗಿನ್ ದೋಷ</div><div class="font-360625 sax">[tcy/Gubbi] ಡೇಟಬೇಸ್ ಮುಚ್ಚುನ ಕಾರಣೊನು ಬೊಕ್ಕೊ ನಾನೊರೊ ಅಯಿನ್ ದೆಪ್ಪುನ ಅಂದಾಜಿದ ಪೊರ್ತುನು ತೆರಿಪಾಲೆ $1 (ಈ ಪುಟೊ ನನಲ ಅಸ್ತಿತ್ವೊಡ್ ಇದ್ದಿ) ಸಹಾಯೊ ಸಮುದಾಯೊ ಪುಟೊ ಮಾಹಿತಿ ಪುಟೊ ಉಂದು ಎಲ್ಯ ಬದಲಾವಣೆ "$1" ವರ್ಗಡುಪ್ಪುನಂಚಿನ ಲೇಕನೊಲು ಪೆಬ್ರವರಿ ಅಡೆಂಗಾವು ಯಾಂಟಿ-ಸ್ಪಾಮ್ ಚೆಕ್.
-ಮುಲ್ಪ ದಿಂಜಾವೊಡ್ಚಿ ಲಾಗಿನ್ ಆಲೆ ಪುಟೊಲೆನ್ ಕಡಪುಡ್ಲೆ ಮಾಹಿತಿ ಸ್ರಿಸ್ಟಿಸಯಿನ ದಿನೊ ಬೊಕ್ಕ ಪೊರ್ತು $1 {{GENDER:$2|ಅಪ್ಲೋಡ್ ಮಲ್ತ್‌ದೆರ್}} $3 ಪೊಸ ಖಾತೆ ಸುರು ಮಲ್ಪುಲೆ "$1" ಫೈಲ್ ನ್ "$2"ಗ್ ಪುನರ್ನಾಮಕರಣ ಮಲ್ಪೆರೆ ಆಯಿಜಿ. ಏರಿಕೆ ಕ್ರಮೊಟ್ಟು ಜೋಡಿಸಾಲ ಫೈಲ್ ಈ ಪುಟೊಟ್ ಉಪಯೋಗ ಮಲ್ತಿನ {{PLURAL:$1|ಟೆಂಪ್ಲೇಟು|ಟೆಂಪ್ಲೇಟುಗಳು}}: ಈ ಸಂದೇಸೊಡು ಪಟ್ಟಿ ಮಲ್ತಿನಂಚಿನ EXIF ಮಿತ್ತ ದರ್ಜೆದ ಮಾಹಿತಿನ್ ಚಿತ್ರೊ ಪುಟೊಕು ಸೇರ್ಪಾಯೆರೆ ಆವೊಂದುಂಡು. ಪುಟೊಟು ಮಿತ್ತ ದರ್ಜೆ ಮಾಹಿತಿದ ಪಟ್ಟಿನ್ ದೆಪ್ಪುನಗ ಉಂದು ತೋಜುಂಡು.
-ಒರಿದನವು ಮೂಲೊ ಸ್ಥಿತಿಟ್ ಅಡೆಂಗ್‍ದುಂಡು.
-*ಮಲ್ಪುಲೆ
-*ಮಾದರಿ
-*ದಿನೊ ಪೊರ್ತು ಮೂಲೊ
-*ಮಾನಾದಿಗೆದ ಸಮಯೊ
-*ಫ್‍ಸಂಖ್ಯೆ
-*ಐಎಸ್ಒ ವೇಗೊದ ರೇಟಿಂಗ್
-*ತೂಪಿನ ಜಾಗೆದ ದೂರ
-*ಕಲಾವಿದೆ
-*ಕೃತಿಸ್ವಾಮ್ಯೊ
-*ಚಿತ್ರೊ ವಿವರಣೆ
-*ಜಿಪಿಎಸ್ ಅಕ್ಷಾಂಸೊ
-*ಜಿಪಿಎಸ್ ರೇಖಾಂಸೊ
-*ಜಿಪಿಎಸ್ ಎತ್ತರೊ ಆಫ್ರಿಕ ಕಡೆತ ವಜಾ ಮಲ್ಪುಲೆ ಮಾತ ಮಾಹಿತಿಲೆನ್ ನಾಡ್‍ಲೆ (ಪಾತೆರದ ಪುಟೊಲ ಸೇರ್ದ್) ಪುಟೊಕುಲೆನ್ ಮಾಜಾಲೆ $1 ನ್ ತೂವೊಡೆ? ಫೈಲ್ ಅಪ್ಲೋಡ್ ಲಾಗಿನ್ ದೋಷ</div><div class="font-7dba68 sax">[te/Lohit Telugu] మీకు ఖాతా లేదా? (కొనసాగింపు) ఈ-మెయిలు చిరునామా: అంతర్గత లింకు తాత్కాలిక సంకేతపదం: ఇంకా చేర్చు $1, పేజీ $3 ను $4 కు దారిమార్పు ద్వారా దారిమార్పును ఉంచకుండా {{GENDER:$2|తరలించారు}} ఇతర {{PLURAL:$1|నిరోధం|నిరోధాలు}} నిరవధికం అనుమతిని నిరాకరించారు ఇతర (భేదాన్ని ఇవ్వండి) జాబితాలో ఆదిపదాన్ని తీసివేయి సూర్యకాంతి ఇతర కారణం ఎక్కింపు డైరెక్టరీ ($1), వెబ్‌సర్వరు రాసేందుకు అనుకూలంగా లేదు. {{PLURAL:$2|గుంపుని|గుంపులను}} చేర్చగలరు: $1 మీ ఖాతాకు అనుబంధంగా ఉన్న గోపనీయ డేటాను చూపించే టోకెన్లను మీరు ఇక్కడ రీసెట్ చెయ్యవచ్చు.
-
-మీరా టోకెన్లను పొరపాటున ఎవరికైనా ఇచ్చి ఉన్నా, లేక మీ ఖాతా వివరాలు మరెవరికైనా తెలిసిపోయినా మీరీ పని చెయ్యాలి. ప్రస్తుత పాఠ్యం ఈ క్రింది దస్త్రాలను వాడారు కానీ అవి లేనే లేవు. ఫైలుపేరులో ఓ ఎక్స్టెన్షను లేదు. సరే {{SITENAME}} $1 పేజీని $PAGEEDITDATE న $2 {{GENDER:$2|సృష్టించారు}}, ప్రస్తుత కూర్పు కోసం $3 చూడండి. ఆసియా '''[[Media:$1|$1]]''' యొక్క $3, $2 నాటి కూర్పును తొలగించాం. ప్రస్తుతం ఈ పేజీకి తాజాకరణలని అచేతనం చేసారు.
-ఇక్కడున్న డేటా కూడా ప్రస్తుతం తాజాకరించబడదు. $2 పాఠ్యపు మోడల్, పాఠ్యపు ఆకృతి $1 కి మద్దతు ఇవ్వదు</div><div class="font-a57c85 sax">[thw/Jomolhari] </div><div class="font-7483df sax">[ti/AbyssinicaSIL] ረብዓ ሽም ቀዳም ምስሊ ኣቐምጥ ድሉይ ድሉይ ጁን ናይ ፅሑፍ ፕሮጀክት ሰንበት ጃንዩ ናይ ኣባል ሽም: ምስሊ ሽም ኣይትግበሩ ድሉይ ድሉይ ምስሊ ጥራይ ጥቅምቲ ግንቦት ሰሉስ ድሉይ ኣማረጽቲ ትሪ ፅሑፋተይ ሜታዳታ ነሓሰ ናይ ፅሑፍ ኣባል ነዋሕቲ ፅሑፋት ኪድ ቀዳም ሚያዝያ ናይ ኣባል ሽም: ኢ-መይል: $1 {{PLURAL:$1|ባይት|ባይታት}} ዝቕጽል ፅሑፍ → (ባይታት) ታሪኽ ሲሶፓት ኣባላት ረቡዕ መጋቢት ብዛዕባ ብጠቅላላ (ሓዳስ) ሜይ ፍንጪ ሓደሽቲ ዛዕባታት ኃሙስ ናይ ፅሑፍ ታሪኽ ሓዳስ ፅሑፍ ምስሊ ኅዳር ኣቐምጥ ቋንቋ: ብሓበር: ዝቕጽል ታኅሣሥ ለካቲት ሰኑይ ሰንበ ሰኑይ ሠሉስ ታሪኽ ድሉይ ቋንቋ: $1 ናይ ቀደም ፅሑፍ ($1) ኵሎም ፅሑፋት መበገሲ ገጽ ዝቕጽል ፅሑፍ ዘቕረብኩሞ መርኣይ ብትክክል ተቀሚጡ ኣሎ። ዝቕጽል {{PLURAL:$1|$1}} ኤፕረ ፅሑፍ ኣቐምጥ ምስልታት ማርች ድሉይ ኣባል መበገሲ ገጽ ሓምለ መስከረም ምስልታት ኪድ ናይ ቀደም {{PLURAL:$1|$1}} ዓርቢ ($1 {{PLURAL:$1|ባይታት|ባይታት}}) ብዛዕባ ዊኪፒዲያ ብጠቅላላ ሓ ፌብሩ ሰነ ናይ ቀደም ፅሑፍ ዓርቢ ኢ-መይል ፅሑፍዚ ዝቕጽል ፅሑፍ ($1) ፅሑፍ ኃሙስ ድሉይ ← ናይ ቀደም ፅሑፍ</div><div class="font-7483df sax">[tig/AbyssinicaSIL] </div><div class="font-6a3dd2 sax">[tl/ComicNeue] Mga midya sa kategoryang "$1" Hindi matatanggap ang direksiyong e-liham na ito dahil tila mayroon itong maling anyo.
+Tazama pia [[Special:WantedCategories|jamii zinazohitajika]]. ukubwa wa faili: $1, aina ya MIME: $2 Jamii zinazoungwa kuliko zote Mada ya ukurasa ulioombwa unaashiria ukurasa wa mazungumzi ambao hauko.</div><div class="font-e6abf9 sax">[syc/Estrangelo Edessa] </div><div class="font-6c252a sax">[syc/East Syriac Adiabene] </div><div class="font-5e3247 sax">[syc/SertoUrhoy] </div><div class="font-a57c85 sax">[tcn/Jomolhari] </div><div class="font-a57c85 sax">[thw/Jomolhari] </div><div class="font-7483df sax">[ti/AbyssinicaSIL] ረብዓ ሽም ቀዳም ምስሊ ኣቐምጥ ድሉይ ድሉይ ጁን ናይ ፅሑፍ ፕሮጀክት ሰንበት ጃንዩ ናይ ኣባል ሽም: ምስሊ ሽም ኣይትግበሩ ድሉይ ድሉይ ምስሊ ጥራይ ጥቅምቲ ግንቦት ሰሉስ ድሉይ ኣማረጽቲ ትሪ ፅሑፋተይ ሜታዳታ ነሓሰ ናይ ፅሑፍ ኣባል ነዋሕቲ ፅሑፋት ኪድ ቀዳም ሚያዝያ ናይ ኣባል ሽም: ኢ-መይል: $1 {{PLURAL:$1|ባይት|ባይታት}} ዝቕጽል ፅሑፍ → (ባይታት) ታሪኽ ሲሶፓት ኣባላት ረቡዕ መጋቢት ብዛዕባ ብጠቅላላ (ሓዳስ) ሜይ ፍንጪ ሓደሽቲ ዛዕባታት ኃሙስ ናይ ፅሑፍ ታሪኽ ሓዳስ ፅሑፍ ምስሊ ኅዳር ኣቐምጥ ቋንቋ: ብሓበር: ዝቕጽል ታኅሣሥ ለካቲት ሰኑይ ሰንበ ሰኑይ ሠሉስ ታሪኽ ድሉይ ቋንቋ: $1 ናይ ቀደም ፅሑፍ ($1) ኵሎም ፅሑፋት መበገሲ ገጽ ዝቕጽል ፅሑፍ ዘቕረብኩሞ መርኣይ ብትክክል ተቀሚጡ ኣሎ። ዝቕጽል {{PLURAL:$1|$1}} ኤፕረ ፅሑፍ ኣቐምጥ ምስልታት ማርች ድሉይ ኣባል መበገሲ ገጽ ሓምለ መስከረም ምስልታት ኪድ ናይ ቀደም {{PLURAL:$1|$1}} ዓርቢ ($1 {{PLURAL:$1|ባይታት|ባይታት}}) ብዛዕባ ዊኪፒዲያ ብጠቅላላ ሓ ፌብሩ ሰነ ናይ ቀደም ፅሑፍ ዓርቢ ኢ-መይል ፅሑፍዚ ዝቕጽል ፅሑፍ ($1) ፅሑፍ ኃሙስ ድሉይ ← ናይ ቀደም ፅሑፍ</div><div class="font-7483df sax">[tig/AbyssinicaSIL] </div><div class="font-6a3dd2 sax">[tl/ComicNeue] Mga midya sa kategoryang "$1" Hindi matatanggap ang direksiyong e-liham na ito dahil tila mayroon itong maling anyo.
Pakipasok ang isang may mahusay na anyong adres o paki-iwang walang laman na lang ang lagayan. Isinapanahon ang iyong talaan ng mga binabantayan. Ang hiniling na pamagat ng pahina ay hindi katanggap-tanggap, wala, o isang may-maling kawing na pamagat na pangugnayang-wika (interwika) o pangugnayang wiki (interwiki).
Maaaring naglalaman ito ng isa o higit pang mga panitik (karakter) na hindi maaaring gamitin para sa mga pamagat. Walang pagbabagong nakita sa binigay na kondisyon. Mga karaniwang itinatanong (''FAQ'') Rebisyon 2 Baguhin ang password Komento iba pa Palagiang kawing Itago ang isahang mga paghadlang sa IP Petsa at oras ng paglikha ng mga dato Nag-iiwan ng mensaheng pangsistema. Paumanhin! Dumaranas ng mga kahirapang teknikal ang sityong ito. Wala sa {{SITENAME}} ang espasyo ng pangalang "$1". Bagong pahina Hindi isang nilalamang pahina $1 ang mga pagbabago ko patungan itong pahinang umiiral</div><div class="font-5d2967 sax">[tl/OpenDyslexic] Mga midya sa kategoryang "$1" Hindi matatanggap ang direksiyong e-liham na ito dahil tila mayroon itong maling anyo.
Pakipasok ang isang may mahusay na anyong adres o paki-iwang walang laman na lang ang lagayan. Isinapanahon ang iyong talaan ng mga binabantayan. Ang hiniling na pamagat ng pahina ay hindi katanggap-tanggap, wala, o isang may-maling kawing na pamagat na pangugnayang-wika (interwika) o pangugnayang wiki (interwiki).
@@ -1542,4 +1164,4 @@ Maaaring naglalaman ito ng isa o higit pang mga panitik (karakter) na hindi maaa
جب دوسرے صارفین آپ سے رابطہ کرتے ہیں تو آپ کا برقی ڈاک کا پتہ افشا نہیں کیا جاتا۔ سانچہ دیکھئے نظرثانیاں ضم کرو عارضی پارلفظ: اس آئی پی پتہ کا تبادلۂ خیال صارف برقی پتہ غیر فعال ہے نوشتۂ محفوظ شدگی یہ دیکھنے کیلئے کہ کسی خاص وقت پر ملف کس طرح ظاہر ہوتا تھا اُس تاریخ یا وقت پر طق کیجئے۔ سادہ متن اجازہ کاری حذف شدہ صفحات میں ایسا کوئی صفحہ نہیں ملا پچھلے $1 {{PLURAL:$1|نتیجہ|نتائج}} جون آپ کا کھاتا بنائیں دو صفحات کی نظرثانیوں کا انضمام: اِس پیش منظر میں مستعمل {{PLURAL:$1|سانچہ|سانچے}}: مطالعہ رجوع مکرر تخلیق کر دیا گیا۔ صفیں: آپ کی تحریر گمنام صارفین حالیہ {{PLURAL:$1|شرکت کرنے والا|شرکت کرنے والے}} خارج ہوجائیں {{PLURAL:$1|$1ہفتہ| $1 ہفتے}} خودساختہ JS صفحہ میرے ترمیم شدہ صفحات اور فائلوں کو میری زیر نظر فہرست میں شامل کریں تخلیق کم نظرِ ثانی شدہ مضامین حذف نوشتۂ منتقلی کوئی بھی منتخب وجہ فنکشن: $ 1 صفحہ: جمعہ {{SITENAME}} آپ جیسے لوگوں کی طرف سے بنایا گیا ہے ۔ پوشیدہ زمرہ جات</div><div class="font-5d2967 sax">[wa/OpenDyslexic] Bloker on no d' uzeu, tot catchant s' no ås ôtes [[$1]] displaecî viè [[$2]] Tecse di tite Sorlon l' betchete: Mi copinaedje djanvî djournås Catchî Sourdant nén cnoxhou pol ristitchaedje Vos avoz des noveas messaedjes so $1 Voste adresse emile a stî acertinêye. Ene råjhon diferinne ou di pus: Prévey l' årtike å dzeu del boesse d' aspougnaedje on depot pårtaedjî Disfacer ôtes loyéns Rivni al pådje d' eberwetaedje. Mimbe implicite di: Èn nén mostrer les categorijhaedjes des pådjes Shuvoz chal les dierins candjmints k' i gn a yeu dsu {{SITENAME}}. Sitatistikes des uzeus Marké come ricoridjî Asteme: I s' pout ki l' pådje n' åye nén co les dierins candjmints. dif. Mimbe di: S' i vs plait ricopyîz l' fitchî foû do sourdant wiki avou l' [[Special:Export|usteye di rcopiaedje foû]].
Et s' el schaper so voste éndjole, et poy li ristitchî droci. Imådjete Cisse modêye ci del pådje a stî '''disfacêye'''.
Vos ploz vey les ca et les ma sol [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} djournå des disfaçaedjes].</div><div class="font-a57c85 sax">[xct/Jomolhari] </div><div class="font-727067 sax">[yi/Alef] הייך אינערלעכער פעלער $1 {{PLURAL:$1|סעקונדע|סעקונדעס}} אויסגעשטעלטע ארגאניזאציע דער געזוכטער IP אַדרעס אָדער באַניצער נאמען איז ניט פֿאַרשפאַרט. GPS דאטע אימפארטירן בלעטער פֿון אַן אַנדער וויקי באהאלטן ציל און פאראמעטערס זײַט מבטל ווערסיע $1 פון א באהאלטענעם באניצער דער געזוכטער בלאט־קעפל אנטהאלט אומגילטיקע צייכענען: "$1". אוועקגענומען באגרעניצונגען פאר סיסאפן אַנולירן ספעם באשיצונג פילטער עס זענען פֿאַראַן פּראָבלעמען מיט א טייל פון ​​אייער אַרייַנוואַרג בלאט גרייס געענדערט מיט דער צאל בייטן הייך צופֿעליגער אַרטיקל ספעציעלע בלעטער אנדער אורזאך ענדיגן אויפֿפאַסן בלאט אינהאלט שפראך רעדאַקטירן ארײַנלאגירן / שאַפֿן קאנטע מען טאָר נישט איבערשרײַבן אַן עקזיסטירנדע טעקע. דער טיפ טעקע איז געאַסרט בלאט נומער א באשטעטיגונג ע-בריוו איז געשיקט געווארן צו דעם באשטימטן ע-פאסט אדרעס. איידער סיי וועלכע אנדערע ע-פאסט וועט ווערן געשיקט צו דער קאנטע, וועט איר דארפן פאלגן די אנווייזונגען אין דער מעלדונג כדי צו זיין זיכער אז די קאנטע איז טאקע אייערס. (באשיצט) באַהאַלטן מינערדיקע רעדאַקטירונגען אין לעצטע ענדערונגען</div><div class="font-a57c85 sax">[zau/Jomolhari] </div>
-</body>
+</body> \ No newline at end of file
diff --git a/www/wiki/extensions/UniversalLanguageSelector/tests/phpunit/LanguageSearchTest.php b/www/wiki/extensions/UniversalLanguageSelector/tests/phpunit/LanguageSearchTest.php
index 1eca09bd..ce6a614d 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/tests/phpunit/LanguageSearchTest.php
+++ b/www/wiki/extensions/UniversalLanguageSelector/tests/phpunit/LanguageSearchTest.php
@@ -67,7 +67,7 @@ class LanguageSearchTest extends PHPUnit\Framework\TestCase {
]
],
[ 'punja', [
- 'pa' => class_exists( 'LanguageNames' ) ? 'punjabi' : 'punjaabi sennii',
+ 'pa' => class_exists( LanguageNames::class ) ? 'punjabi' : 'punjaabi sennii',
'pnb' => 'punjabi western',
]
],
diff --git a/www/wiki/extensions/UniversalLanguageSelector/tests/phpunit/ULSJsonMessageLoaderTest.php b/www/wiki/extensions/UniversalLanguageSelector/tests/phpunit/ULSJsonMessageLoaderTest.php
index 817f2500..9cec98ae 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/tests/phpunit/ULSJsonMessageLoaderTest.php
+++ b/www/wiki/extensions/UniversalLanguageSelector/tests/phpunit/ULSJsonMessageLoaderTest.php
@@ -16,14 +16,14 @@ class ULSJsonMessageLoaderTest extends \PHPUnit\Framework\TestCase {
public function testGetFilenamesWithBadInput() {
$instance = new ULSJsonMessageLoader();
- $this->setExpectedException( \MWException::class );
+ $this->setExpectedException( \Exception::class );
$instance->getFilenames( null );
}
public function testGetMessagesWithBadInput() {
$instance = new ULSJsonMessageLoader();
- $this->setExpectedException( \MWException::class );
+ $this->setExpectedException( \Exception::class );
$instance->getMessages( null );
}
diff --git a/www/wiki/extensions/UniversalLanguageSelector/tests/webfonts.html b/www/wiki/extensions/UniversalLanguageSelector/tests/webfonts.html
index fbee034d..750b1cd1 100644
--- a/www/wiki/extensions/UniversalLanguageSelector/tests/webfonts.html
+++ b/www/wiki/extensions/UniversalLanguageSelector/tests/webfonts.html
@@ -91,7 +91,11 @@
select {
width: 200px;
- height: 25px;
+ height: 2.5em;
+ }
+
+ button {
+ height: 2.5em;
}
.langselector,